计算机操作系统还能这样玩?这一篇计算机操作系统的总结为你保驾护航(零风险、高质量、万字长文、建议收藏)
操作系統目錄
- 1、什么是操作系統
- 2、計算機操作系統的基本特征
- 2.1、并發
- 2.2、共享
- 2.3、虛擬
- 2.4、異步
- 3、操作系統的發展
- 4、OS的運行機制和體系結構
- 4.1、運行機制
- 4.1.1、兩種指令
- 4.1.2、兩種狀態
- 4.1.3、兩種程序
- 4.2、體系結構
- 5、中斷和異常
- 5.1、中斷機制的由來
- 5.2、中斷機制的流程
- 5.3、中斷機制的重點
- 5.4、中斷的分類
- 6、系統調用
- 7、進程
- 7.1、進程的定義和組成
- 7.2、進程的組織方式
- 7.3、進程的特征
- 7.4、進程的狀態
- 7.5、進程狀態的切換
- 7.6、進程的控制
- 8、線程
- 8.1、線程的簡介和引入后發生的變化
- 8.2、線程的屬性
- 8.3、線程的實現方式和多線程模型
- 9、處理機調度
- 9.1、進程調度方式
- 9.2、進程調度時機
- 9.3、調度算法的評價指標
- 9.4、調度算法
- 9.4.1、先來先服務
- 9.4.2、短作業優先
- 9.4.3、高響應比優先
- 9.4.4、時間片輪轉調度算法
- 9.4.5、優先級調度算法
- 9.4.6、多級反饋調度算法
- 9.4、進程同步和進程異步
- 9.4.1、進程同步
- 9.4.2、進程互斥
- 9.5、進程互斥的軟件實現方式
- 9.6、進程互斥的硬件實現方式
- 10、信號量
- 10.1、信號量機制
- 10.1.1、整型信號量
- 10.1.2、記錄型信號量
- 10.1.3、信號量機制實現進程互斥
- 10.1.3、信號量機制實現進程同步
- 10.2、生產者消費者問題
- 11、死鎖
- 11.1、產生死鎖的原因和必要條件
- 12、存儲器管理
- 12.1、多級存儲器結構
- 12.2、程序的裝入和鏈接
- 12.2.1、程序的裝入
- 12.2.2、程序的鏈接
- 12.3、連續分配方式
- 12.3.1、單一連續分配
- 12.3.2、固定分區分配
- 12.3.3、動態分區分配
1、什么是操作系統
計算機操作系統是管理計算機硬件與軟件資源的計算機程序
????????????????????????????????????????????????
2、計算機操作系統的基本特征
2.1、并發
容易混淆的概念:并發和并行
并發:多個任務在同一時間間隔內發生,注意在宏觀上是同時發生,但在微觀上實際是交替發生的
并行:多個任務在同一時刻同時發生
2.2、共享
系統中的資源可以被多個并發執行的進程一起使用
互斥共享方式:某一個時間段內,只允許一個進程對該資源進行訪問(例如攝像頭)
同時共享方式:某一個時間段內,允許多個進程對該資源進行訪問(例如磁盤)
注意“同時”其實本質上是在該時間段內,多個進程對資源交替訪問(即分時共享)
2.3、虛擬
什么是虛擬:虛擬就是將一個物理實體變為若干個邏輯上的對應物
怎么理解呢?
虛擬存儲器技術:虛擬存儲器技術用來解決內存不夠的問題(空分復用技術)
比如我電腦上一共4GB的運行內存,IDEA占用了2個G、py占用2個G…且不說系統占用的內存,加起來肯定超過了4個G;所以這就用到了虛擬存儲器技術(此處不做過多深入了解)
虛擬處理器技術:CPU的虛擬化技術可以使單CPU模擬多CPU并行(時分復用技術)
微觀上是處理機在各個微小的時間內交替的為各個程序服務(時間的微化處理);比如我能夠同時打開idea、chrome、vx等等
如果丟失了并發,那么虛擬就無任何意義(因為如果沒有并發,沒次只運行一個程序即可)
2.4、異步
在多道程序的環境下,系統是允許多個程序并發執行的,由于資源的有限性,不可能所有的程序都能一貫到底的
比如進程A和進程B都要使用打印機,當進程A先獲得打印機的使用權時,那么進程B只能等待;只有當進程A歸還打印機,進程B才能繼續執行。就像這樣程序中間可能有間斷,受到其他程序的影響,不知道何時執行結束,這就是程序的異步性。
????????????????????????????????????????????????
3、操作系統的發展
1、手工操作階段
人機速度不匹配,資源利用極低
2、批道處理階段
Ⅰ、單批道處理系統:
引入脫機輸入\輸出技術(磁帶完成),緩解人機速度不匹配問題,提高了資源的利用率;但只允許一個程序運行,cpu大部分時間仍在等待IO,資源利用率依舊很低
Ⅱ、多批道處理系統:
每次向內存中輸入多道程序,并發執行
提高了資源利用率,但無人機交互功能)
3、分時操作系統
增加了人家交互功能,以時間片為單位為各個人作業服務
缺點是不能及時處理緊急任務
4、實時操作系統
能夠優先響應一些緊急任務,不需要時間片排隊
硬實時操作系統:必須在嚴格的時間內完成處理(防空系統)
軟實時操作系統:可以偶爾違反時間規定
5、網絡操作系統
6、分布式操作系統
7、個人操作系統
????????????????????????????????????????????????
4、OS的運行機制和體系結構
4.1、運行機制
4.1.1、兩種指令
指令就是cpu能夠執行的最基本的單位,一行代碼可能轉換多條指令
那么cpu是怎么判斷執行哪條指令呢?請看4.1.2
4.1.2、兩種狀態
處于用戶態時,cpu只能執行非特權指令
處于和心態時,cpu可以執行特權指令和非特權指令
使用程序狀態寄存器來標識當前處理器處于什么狀態
4.1.3、兩種程序
4.2、體系結構
大內核:將系統的主要功能作為內核,運行在核心態
優點:高性能
缺點:代碼里龐大、結構混亂、難以維護
微內核:只把最基本的留在內核
優點:代碼量小、結構清晰、容易維護
缺點:需要在用戶態和核心態之間來回切換,性能低
????????????????????????????????????????????????
5、中斷和異常
5.1、中斷機制的由來
由于串行效率極低,所有引入了中斷機制,從而實現了并發執行
一旦發送中斷,就意味著需要操作系統的介入;因為用戶程序是不允許直接執行特權指令的。
5.2、中斷機制的流程
我們知道在并發執行的過程中,是以時間片輪轉法來實現的
比如2個程序一同執行
1、當程序1在用戶態執行完一個時間片時,cpu就會收到計時器發出的中斷信號,然后cpu就會切換到核心態將cpu的使用權限交給操作系統管理
2、此時操作系統內核開始對中斷信號進行處理,發現是過了一個時間片,然后操作系統會把cpu的使用權交還給用戶進程,然后程序2就會在用戶態下執行
3、程序2執行過程序可能需要進程輸出操作,但是輸入\輸出屬于特權指令,程序是沒法進行直接使用的;所以需要通過內中斷的方式請求操作系統完成輸出工作;此時和第一步一樣-》cpu切換到和心態-》將使用權交給操作系統
5.3、中斷機制的重點
1、當中斷發生時,cpu立即進入核心態
2、當中斷機制發生后,當前進程會進入暫停狀態,交由操作系統內核對中斷信號進行處理
3、不同的中斷信號,會進行不同的中斷處理
發生了中斷,意味著需要操作系統的介入管理;而管理工作一般要包含輸入輸出、進程切換等特權指令;因此cpu需要從用戶態切換為核心態,使得操作系統獲得了計算機的控制權,有了中斷機制才能實現程序的并發執行
用戶態-》核心態 :中斷是唯一途徑
核心態-》用戶態:只需通過一個設置程序特權字的標識為用戶態即可
5.4、中斷的分類
(軟件中斷就是比如1/0,外設就是比如IO完成就會發送中斷信號)
核心:內中斷和外中斷怎么進行區分
內中斷是發生在cpu內部,是當前執行的指令有關
外中斷是發生在cpu外部,與當前執行的指令無關
外中斷的處理流程
1、執行完每個指令之后,cpu都會檢查是否有外中斷信號
2、如何有則保護中斷進程的環境(程序狀態字、寄存器、計數器等)
3、根據中斷信號轉入執行相應的中斷處理程序
4、恢復原進程的環境
????????????????????????????????????????????????
6、系統調用
什么是系統調用?
系統調用是操作系統提供給應用程序的接口
系統調用的作用是什么?
系統中的各種共享資源由操作系統統一掌管,所以在應用程序當中,所有與資源相關的操作都必須以系統調用的方式請求操作系統進行處理;這樣可以保證系統的安全性和穩定性。
由于需要一些特權指令,所以系統調用是在核心態下完成的
比如我們高級語言里面的Read(“a.txt”)函數,這個Read底層封裝了系統調用復雜的實現細節
????????????????????????????????????????????????
7、進程
7.1、進程的定義和組成
1.為什么會產生進程?
1.1.最初的計算機每次只能執行一個指令,這樣的效率非常低下
1.2.后來出現了批處理系統,程序員可以將一串指令一次性交給計算機,這樣雖然相比最初的計算機提高了效率,但是內存中始終只允許一個程序;
1.3.所以進程的概念就誕生了
2.進程是什么?
進程是應用程序在內存中分配的空間,各個進程互不干擾,每個進程保持著程序每一時刻的運行狀態
特點:此時cpu采用時間片輪轉的方式運行進程
操作系統在每一個程序運行之前,都會在內存中為程序配置一個數據結構,稱之為進程控制塊(PCB),用來描述進程的各種信息
另外進程實體(進程映像)包含數據段、程序段、PCB組成。(操作系統相關的數據都存放在PCB中,程序運行的代碼存放在程序段中,程序運行所需的相關數據存放在數據段中)
7.2、進程的組織方式
鏈接方式和索引方式很類似,只不過索引方式是使用了一個中間表來實現;而鏈接方式就相當于鏈表中的頭節點
7.3、進程的特征
7.4、進程的狀態
在計算機運行的過程中,可能有多個進程運行;此時有的進程或許正在被cpu運行,有的或許在等待;所以說進程可能處于不同的狀態。
注意
在單核處理機中,每一個時刻最多有一個進程正在運行;在多核處理機中,每一個時刻可以有多個進程正在運行。
其實還有另外兩種狀態
7.5、進程狀態的切換
7.6、進程的控制
進程控制簡單了說就是完成進程狀態之間的轉換
使用原語完成進程控制,(原語就是必須一氣呵成,中間不允許進行中斷;比如如果進程在轉換過程中由于中斷沒有進入其他相應的隊列就會造成難以想象的后果)
原語采用“開中斷”和“關中斷”兩個指令完成進程控制
進程狀態轉換過程中,首先會執行關中斷,如果在途中遇到中斷指令,則會被忽略;直到遇到開中斷結束。
????????????????????????????????????????????????
8、線程
8.1、線程的簡介和引入后發生的變化
概述
線程是輕量級的進程,是cpu資源調度的基本單位
引入線程前后的變化
資源分配、調度:引入線程前,進程是資源分配、調度的基本單位;引入線程后,進程是資源分配的基本單位,線程是調度的基本單位
并發性:引入線程前,只能在進程間并發;引入線程后,線程間也能進行并發
系統開銷:引入線程前,進程之間的切換開銷大;引入線程后線程在進程內部進行切換的開銷小
8.2、線程的屬性
線程是cpu調度的基本單位
多核計算機中,各個線程可以占用不同的cpu
每個線程都有一個線程ID、線程控制塊(TCB)
線程也有就緒、運行、阻塞三種基本狀態
線程幾乎不擁有系統資源
同一進程的不同線程共享進程資源
8.3、線程的實現方式和多線程模型
實現方式
在用戶級線程和內核級線程中,可以采用組合的方式,將n個用戶級線程映射到m個內核級線程(n>=m)
注意:內核級線程才是處理機分配的基本單位
多線程模型
多對一
一對一
多對多
????????????????????????????????????????????????
9、處理機調度
簡介:從就緒隊列中按照一定的算法選擇一個進程并將處理機分配給它運行,以實現進程的并發執行
9.1、進程調度方式
三種調度方式高級調度按一定的原則從外存上處于后備隊列的作業中挑選一個作業,給他們分配資源,建立相應的進程,使得它們獲得處理機的權限中級調度利用虛擬存儲器技術,將暫時不能運行的進程調到外存準備。等它具備了運行條件且內存空閑時,再重新調入內存,外存到內存(創建態-》就緒態暫時調到外存的進程狀態處于掛起狀態。PCB不會被調入外存,PCB記錄了進程數據在外存中存放的位置等信息。被掛起的進程的PCB被放到掛起隊列中,從外存到內存(掛起態-》阻塞態)低級調度按照某種策略從就緒隊列種選取一個進程,將處理機分配給它,從內存到cpu9.2、進程調度時機
臨界區是?訪問臨界資源的那段代碼
臨界資源是?一段時間內只允許一個進程訪問,各進程互斥訪問
當進程訪問普通臨界資源時是可以進行調度與切換的
9.3、調度算法的評價指標
1、cpu利用率:作業在外存后備隊列的時間(高級調度)
2、系統吞吐量:進程在就緒隊列的時間(低級調度)
3、周轉時間:進程執行的時間、等待IO的時間
4、等待時間:
公式:帶權周轉時間=作業周轉時間/作業實際的運行的時間 =(作業完成時間-作業提交時間)/作業實際運行的時間
9.4、調度算法
9.4.1、先來先服務
算法思想:從公屏上的角度考慮
算法規則:按照作業/進程先到達的先后順序進行服務
作業/進程調度:用于作業調度時,先考慮哪個作業進入后備隊列;用于進程調度時,先考慮哪個進程先到達就緒隊列
是否可搶占:非搶占式算法
優點:公平
缺點:對短作業不利
模擬FCFS調度算法(先來先服務)沒錯,是篇好文章!:https://blog.csdn.net/Kevinnsm/article/details/115013353
9.4.2、短作業優先
算法思想:追求最少的平均等待時間
算法規則:最短的作業/進程優先得到服務(前提的進程已經到達)
作業/進程調度:都可以
是否可搶占:SJF和SPF是非搶占式算法(SRTN為搶占式算法-時間最短)
優點:最短的平均等待時間
缺點:對長作業不利
如果是一直有短作業,就會造成長作業一直等待
短作業最短時間優先原則(SRTN)為搶占式的,平均等待時間最短
9.4.3、高響應比優先
算法思想:綜合考慮作業/進程的等待時間和要求服務的時間
算法規則:每次調度前計算每個作業的響應比,選擇響應比最高的作業服務
是否搶占:否(只有當前作業主動放棄處理機才會進行調度)
優點:綜合比較好
高響應比=(等待時間+服務時間)/服務時間
9.4.4、時間片輪轉調度算法
1、算法思想:處理機輪流的為每個進程服務,每個進程在一定時間內都可以得到響應
2、算法規則:按照各個進程到達就緒隊列的順序,輪流讓每個進程執行一個時間片(如100ms),如果說某個進程在這個時間內沒有執行完,則會被剝奪處理機,放到就緒隊列進行等待
3、是否用于作業/進程調度:用于進程調度,因為只有當作業放到內存建立了相應的進程才能被分配時間片
4、是否搶占:屬于搶占式算法,當進程沒執行完也會被剝奪處理機(由時鐘裝置發出時鐘中斷通知時間已到)
5、優點:公平、響應快,適用于分時操作系統
6、缺點:進程頻繁切換需要一定的開銷,另外不能區分任務的緊急程度
7、是否會導致饑餓:不會導致饑餓
注意事項(時間片過大或過小會有什么影響?)
如果時間片過大,每個進程都有可能在一個時間片內執行完畢,那么該算法就會退回到先來先服務算法,會增大系統響應時間,所以時間片不能過大
如果時間片過小,進程之間就會頻繁的進行切換,浪費大量的時間,進程處理的時間比例就會下降,所以時間片不能過小
9.4.5、優先級調度算法
1、算法思想:根據任務的緊急程序來決定處理順序(用于實時操作系統)
2、算法規則:每個作業/進程都有優先級,調度時選擇優先級高的作業/進程
3、用于作業/進程調度:既可用于進程調度,又可以用于作業調度
4、是否搶占式:既有搶占式又有非搶占式
5、優點:區分任務緊急程度,常用于實時操作系統;可以動態的調整對各個作業/進程的偏好程度
6、缺點:若有源源不斷地優先級進程進來,有可能會導致優先級較低地進程饑餓
7、是否導致饑餓:有可能導致饑餓
9.4.6、多級反饋調度算法
1、算法思想:對上面的五種調度算法進行折中
2、算法規則:設置多級就緒隊列,各級隊列優先級從高到低,時間片從小到大
3、用于作業/進程調度:用于進程調度
4、是否搶占式:搶占式算法
5、優點:對各個進程公平(FCFS),每個新到達的進程都能被很快響應(RR),短進程只需要很少的時間就能夠完成(SPF),可靈活調整各個對進程的偏好程度
6、是否導致饑餓:會
9.4、進程同步和進程異步
9.4.1、進程同步
進程具有異步性的特征,并發的進程總是以各自獨立、不可預知的速度向前推進。
比如管道通信:寫的一端向管道寫入數據,讀的一段從管道讀取數據。因此寫進程必須在讀進程之前執行,否者就會造成阻塞(因此推進順序必須是寫順序->讀順序)
9.4.2、進程互斥
進程在并發執行的過程中,不可避免的需要共享一些資源(比如攝像頭、打印機)
在某一個時間段內,只允許一個進程進行訪問的資源稱為臨界資源
實現進程互斥需要遵循以下幾個條件
1、空閑讓進
2、忙則等待
3、有限等待
4、讓權等待
9.5、進程互斥的軟件實現方式
1、單標志法
2、雙標志位先檢查法
3、雙標志位后檢查法
4、perterson算法
9.6、進程互斥的硬件實現方式
1、中斷屏蔽:利用開中斷/關中斷指令完成(一旦某個進程執行了關中斷后就不允許其他進程進行中斷,也就不可能會發生進程切換;然后就可以獨自的訪問臨界區,直到執行開中斷之后。其他進程才能訪問臨界資源)
…
關中斷
臨界資源
開中斷
…
優點:簡單、高效
缺點:不適用于多處理機,因為有可能多個處理機上的某個進程都要訪問臨界資源,那么由于每個處理機都可以執行中斷,所以會出現多個進程同時訪問臨界資源的情況;然后開中斷/關中斷屬于特殊指令,一般用于內核級進程
2、TS指令:TSL指令是用硬件實現的,不允許被中斷
3、swap指令
10、信號量
10.1、信號量機制
10.1.1、整型信號量
可以使用信號量來表示系統中某個資源的數量,通常使用原語中的wait和signal來實現
#如何使用信號量來定義系統中的資源呢?
1.初始化
2.P操作
3.V操作
初始化:
int S = 1 //(假設初始化打印機的數量為1)P操作:
void wait(S) {while(S<=0);S=S-1; }V操作
void signal(S){S=S+1 }…
P操作
使用臨界資源
V操作
…
由于while(S<=0)循環,如果一旦資源不夠用,那么將要使用該資源的進程就會一直處于忙等的狀態
10.1.2、記錄型信號量
typedef struct {int value; //記錄資源的數據struct process *L; //等待隊列 }node; void wait(node s){s.value--;if(s.value < 0) { //如果系統資源數據不夠,則將進程由運行態切換到阻塞態,并將其掛載到隊列中等待block(s.L)} } void signal(node s) {s.value++;if(s.value <= 0) {wakeUp(s.L) //如果某個進程釋放資源后,發現還有等待的進程,則使用wakeUp原語從隊列中喚醒一個進程} }一旦判斷系統資源數量為0,當前進程就會使用block原語將自己從運行態切換到阻塞態,主動放棄處理機,將自己掛到隊列中去;所以不會進程不會出現忙等的狀態(一直占用cpu,卻沒做任何事情)
10.1.3、信號量機制實現進程互斥
1、設置互斥信號量(mutex =1)
2、執行P(mutext)操作
3、訪問臨界資源
4、執行V(mutext)操作
10.1.3、信號量機制實現進程同步
:TODO
10.2、生產者消費者問題
生產者每次生成生產一個產品放入緩沖區,消費者每次從緩沖區消費一個產品。
相關問題
1、緩沖滿時,生產者不能放入產品
2、緩沖區空時,消費者不能消費產品
3、當生產者并發執行時,有可能向緩沖區的同一個空間放入產品,就會造成覆蓋的狀況,所以必須互斥地訪問緩沖區
11、死鎖
11.1、產生死鎖的原因和必要條件
所謂死鎖就是多個進程同時競爭同一種資源而陷入僵局
1、產生死鎖的原因:
1.競爭資源
2.進程的推進順序非法
詳細分析
Ⅰ、競爭資源
系統中的資源分為兩類:可剝奪性資源,非剝奪性資源;
1.可剝奪性資源,當進程獲得可剝奪性資源時,可以被優先級較高的進程搶占;另外存儲管理程序可以將一個進程從內存調到外存上;由此可以得出CPU和主存輸入可剝奪性資源
2.不可剝奪性資源:這一類資源只能由進程使用完后自行釋放,所以像打印機、磁帶機屬于不可剝奪性資源
從上面的兩種資源我們就可以得出,當不可剝奪性資源數量不多時,如果多個進程同時競爭,則可能發生死鎖,因為這種資源進程不能被搶占
Ⅱ、進程推進順序不當
進程在運行中具有異步的特征
2、產生死鎖的必要條件
1、互斥條件:資源必須是互斥訪問的(在同一段時間內只能由一個進程訪問)
2、請求和保持條件:即進程已經占有了至少一個資源,然后又去請求另外一個資源,而另外一個資源剛好被占用;此時請求陷入阻塞,然后該進程又不放棄自己占有的資源
3、不剝奪條件:即該進程獲得的資源,在進程主動釋放前不能被搶占(可以理解為上面的不可剝奪性資源)
4、環路等待條件:進程發生死鎖時形成了一個環形阻塞(p0等p1,p1等p2,p2等p0)
3、處理死鎖的基本方法
1、預防死鎖
2、避免死鎖
3、檢測死鎖
4、解除死鎖
4、
Ⅰ、預防死鎖
摒棄請求和保持條件:這種方式直接在所有進程運行之前,一次性的將資源分配給進程,此后不再進行申請資源。這種方法缺點是極大的浪費了系統資源,還有可能需求資源被其他進程一直占用,遲遲不能執行。
摒棄不剝奪條件:這種方式是當進程正在使用某個資源時,如果其他進程請求該資源,則占用該資源的線程立即釋放當前資源。這種方式的缺點也很明顯,比如不可剝奪性資源打印機,如果某個進程正在使用,如果中斷一次,那么兩次打印的信息可能不會連續。反復的申請和釋放資源,進程運行時間比例被大大縮小。
摒棄環形等待:這種方式是將資源類型進行線性排隊,給每個資源進行編號。這個缺點是每個資源的使用順序可能不一樣
Ⅱ、避免死鎖
這種方式通過將系統始終處于安全狀態,這種方式可以獲得令人滿意的性能
這種方式主要考慮資源的分配順序,因為資源數量不一致嘛
重點:銀行家算法避免死鎖
Ⅲ、檢測死鎖
通過用例分配圖檢測死鎖
Ⅳ、解除死鎖
通過剝奪資源和撤銷進程來實現
(注意這個剝奪資源是從其他進程剝奪其資源給死鎖進程)
12、存儲器管理
12.1、多級存儲器結構
cpu寄存器:寄存器
主存:高速緩存、主存、磁盤緩存
輔存:磁盤、可移動存儲介質
12.2、程序的裝入和鏈接
程序如果想要運行,必須創建進程,而創建進程第一件事情肯定是將程序和數據加載到內存中。而如何將一個程序變成一個可以在內存中可執行的程序,通常需要完成三部:編譯、鏈接、裝入
12.2.1、程序的裝入
1.絕對裝入方式:這種方式邏輯地址和實際內存地址相同,故不需要對數據進行更改
2.可重定位裝入方式:最后需要修改指令和數據
3.動態運行時裝入方式:可以任意改變在內存中的位置
12.2.2、程序的鏈接
程序編譯之后形成了一系列的模塊,需要利用鏈接程序將目標塊鏈接。形成裝入模塊
1.靜態鏈接:在程序運行之前,將其鏈接成一個完整的模塊,以后不再分開
2.裝入時動態鏈接:在目標模塊裝入內存時,采用邊裝入邊鏈接的方式
3.運行時動態鏈接:在程序運行過程中,需要某個模塊時,才對對其進行鏈接
12.3、連續分配方式
12.3.1、單一連續分配
這種存儲管理方式,把內存分為系統區和用戶區;系統區處于內存的地址部分,其余的是用戶區,提供給用戶使用
12.3.2、固定分區分配
將內存分位幾個固定大小的空間,劃分位幾個分區,就允許幾個作業并發運行。當某個作業運行結束時,便可以從外存的后備隊列中選擇一個適當大小的作業裝入該分區
缺乏靈活性、容易造成資源浪費
12.3.3、動態分區分配
根據實際的需要,動態的分配空間;所以這涉及到三個問題;數據結構、分區分配算法、分區的分配和回收操作
1.數據結構
空閑分區表:該表記錄空閑分區中的一些數據(分區始址和分區大小等)
空閑分區鏈:將所有空閑分區通過前后指針鏈接起來
2、分區分配算法
Ⅰ.首次適應算法,該算法要去分區鏈以地址遞增的順序鏈接;分配內存時從鏈首開始尋找,直到找到一個符合要求得分區,選擇合適的大小,余下的仍留在空閑鏈中。這種算法優先利用低地址部分的空間,將高地址的大空間留給后續大作業,但是會在低地址部分留下很多小的空閑分區,然后分區時又是從低地址開始的,查詢開銷無疑增大
…飛速總結中 ?? ??
總結
以上是生活随笔為你收集整理的计算机操作系统还能这样玩?这一篇计算机操作系统的总结为你保驾护航(零风险、高质量、万字长文、建议收藏)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 那些年,我的数据结构课设,现在满满的回忆
- 下一篇: 阿里云视频点播-视频上传失败(一直显示上