操作系統
操作系統知識模塊主要分為:操作系統概述、進程管理、內存管理、文件管理、輸入/輸出(I/O)管理。
1.操作系統概述
操作系統(Operating System,OS)是指控制和管理整個計算機系統的硬件和軟件資源,並合理地組織調度計算機的工作和資源分配,以提供給用戶和其他軟件方便的接口和環境的程序集合。
操作系統的基本特征包括:並發、共享、虛擬和異步。
-
並發是指兩個或多個事件在同一時間間隔內發生。
-
虛擬是指把一個物理上的實體變為若干個邏輯上的對應物。操作系統的虛擬技術可歸納為:時分復用技術,如處理器的分時共享;空分復用技術,如虛擬存儲器。
-
異步是指在多道程序環境下,允許多個程序並發執行,但由於自由有限,進程的執行不是一貫到底,而是走走停停,以不可知的速度向前推進,這就是進程的異步性。
2.進程管理
進程:
目的:更好地描述和控制程序並發執行;
定義:進程是進程實體的一次運行,是系統進行資源分配和調度的一個獨立單位;
組成:
- PCB:保存進程運行期間相關的數據,是進程存在的唯一標志
- 程序段:能被進程調度程序調度到CPU運行的程序代碼段
- 數據段:存儲程序運行期間的相關數據,可以是原始數據也可以是相關結果
進程狀態:
-
狀態種類:
- 運行狀態:進程正在處理機上運行
- 就緒狀態:進程已獲得除處理機之外的一切所需資源
- 阻塞狀態:進程正在等待某一事件而暫停運行
- 創建狀態:進程正在被創建,尚未轉到就緒狀態
- 創建完成后轉到就緒狀態
- 結束狀態:進程正從系統中消失,分為正常結束和異常退出
-
狀態變化:
- 就緒->運行:經過處理機調度,就緒進程得到處理機資源
- 運行->就緒:時間片用完或在可剝奪系統中有更高優先級進程進入
- 運行->阻塞:進行需要的某一資源還沒准備好
- 阻塞->就緒:進程需要的資源已准備好
進程控制:
- 創建:終端用戶登錄系統、作業調度、系統提供服務、用戶程序的應用請求等;
- 終止:正常結束、發生異常、外界干預
- 阻塞:等待資源
- 喚醒:資源到達
- 切換:時間片用完、主動放棄處理機、被更高優先級的進程剝奪處理機
進程通信:
- 共享存儲:
- 低級方式:基於數據結構的共享
- 高級方式:基於存儲區的共享
- 消息傳遞:
- 直接通信方式:直接把消息掛到接收進程的消息隊列
- 間接通信方式:掛到某個中間實體,接收進程找實體接收消息,類似電子郵件
- 管道通信:利用一種特殊的pipe文件連接兩個進程
代價:
- 時間代價:進行進程間的切換、同步及通信等所付出的時間開銷
- 空間代價:進程控制塊及協調各運行機構所占用的內存空間開銷
線程:
- 引入目的:為了更好的使多道程序並發執行,以提高資源利用率和系統吞吐量,增加並發程序
- 特點:是程序執行的最小單元,基本不擁有任何系統資源
- 實現方式:用戶級線程、系統線程
調度:
調度層次:
- 作業調度(高級調度):選擇處於后備狀態的作業分配資源,發送頻率低
- 內存調度(中級調度):選擇暫時不能允許的進程調出內存,發送頻率中等
- 進程調度(低級調度):選擇就緒隊列中合適的進程分配處理機,發生頻率高
進程調度原因:合理的處理計算機軟硬件資源
進程調度方式:
- 剝奪式:有更為重要或緊迫的進程需要使用處理機,立即分配
- 非剝奪式:有更為重要或緊迫的進程需要使用處理機,仍讓當前進程繼續執行
典型調度算法:
- 先來先服務:選擇最先進入隊列的
- 不可剝奪
- 短作業優先:選擇完成時間最短的
- 優先級調度:選擇優先級最高的
- 高響應比優先:選擇響應比最高的
- 響應比Rp = (等待時間+要求服務時間) / 要求服務時間
- 時間片輪轉:總數選擇就緒隊列中的第一個進程,但僅能運行一個時間片
- 絕對可搶占
- 多級反饋隊列:時間片輪轉調度算法和優先級調度算法的綜合和發展
進程同步:
引入原因:協調進程之間的相互制約關系
制約關系:
- 同步:需要在某些位置上協調進程之間的工作次序而等待、傳遞信息所產生的制約關系
- 互斥:當一個進程進入臨界區使用臨界資源時,其他要求進入臨界區的進程必須等待
臨界資源:多個進程可以共享系統中的資源,一次僅允許一個進程使用的資源叫臨界資源;
臨界區互斥:訪問臨界資源的那段代碼稱為臨界區
- 原則:空閑讓進、忙則等待、有限等待、讓權等待
- 基本方法:
- 軟件實現:
- 單標志法:違背”空閑讓進“原則
- 雙標志法先檢查:違背”忙則等待“原則
- 雙標志法后檢查:會導致”飢餓“現象
- 皮特森算法:單標志法和雙標志法后檢查的結合
- 硬件實現:
- 中斷屏蔽法:進區關中斷,出區開中斷
- 硬件指令法:設立原子操作指令
- 信號量:利用PV操作實現互斥
- P操作即wait(S)
- V操作即signal(S)
- 軟件實現:
管程:
- 定義:由一組數據以及定義在這組數據上的對這組數據的操作組成的軟件模塊
- 組成:
- 局部於管程的共享結構數據(變量)說明
- 對該數據結構進行操作的一組過程
- 對局部於管程的共享數據設置初始值的語句,此外還需要為管程賦予一個名字
- 引入管程的目的:解決臨界區分散所帶來的管理和控制問題。在沒有管程之前,對臨界區的訪問分散在各個進程之中,不易發現和糾正分散在用戶程序中的不正地使用P、V操作等問題。管程將這些分散在各進程中的臨界區集中起來,並加以控制和管理,管程一次只允許一個進程進入管程,從而便於系統管理共享資源,又能保證互斥。
死鎖:
產生原因:非剝奪資源的競爭和進程的不恰當推進順序
定義:多個進程因競爭資源而造成的一種僵局(互相等待),若無外力作用,這些進程都將無法向前推進
解決方案:
-
預防死鎖:
- 破壞互斥條件:
- 破壞不可剝奪條件:
- 破壞請求和保持條件:
- 破壞循環等待條件:
-
避免死鎖:
- 安全狀態:能找到一個分配資源的序列能讓所有進程都順利完成
- 銀行家算法:采用預分配策略檢查分配完成時系統是否處於安全狀態
-
檢測死鎖:利用死鎖定理化簡資源分配圖以檢測死鎖的存在
- 資源分配圖:
- 圓圈代表進程;
- 框中的一個點代表一類資源中的一個資源;
- 進程到資源的有向邊叫請求邊;
- 資源到進程的邊叫分配邊;

- 資源分配圖:
-
解除死鎖:
- 資源剝奪法:掛起某些死鎖進程並搶奪它的資源,以便讓其他進程繼續推進
- 撤銷進程法:強制撤銷部分、甚至全部死鎖進程並剝奪這些進程的資源
- 進程回退法:讓進程回退到足以回避死鎖的地步
算法:
- 銀行家算法為死鎖避免算法;
- 死鎖檢查算法和資源分配圖化簡法為死鎖檢測;
- 資源有序分配算法為死鎖預防策略;
所謂CPU繁忙型的作業,是指該類作業需要大量的CPU時間進行計算,而很少請求I/O操作。I/O繁忙型的作業是指CPU處理時,需頻繁的請求I/O操作。
周轉時間 = 作業完成時間 - 作業提交時間;
平均周轉時間 = (作業1的周轉時間 + ... + 作業n的周轉時間)/ n ;
帶權周轉時間 = 作業周轉時間 / 作業實際運行時間;
平均帶權周轉時間 = (作業1的帶權周轉時間 + ... + 作業n的帶權周轉時間)/ n;
響應比Rp = (等待時間 + 要求服務時間) /要求服務時間;
3.內存管理
內存管理:
引入目的:更好的支持多道程序並發執行,提升系統性能
程序的編譯:由編譯程序將用戶源代碼編譯成若干個目標模塊;
程序的鏈接:由鏈接程序將編譯后形成的一組目標模塊,以及所需庫函數鏈接在一起,形成一個完整的裝入模塊;
- 靜態鏈接:在程序運行之前鏈接
- 裝入時動態鏈接:在裝入內存時,采用邊裝入邊鏈接的鏈接方式
- 運行時動態鏈接:在程序執行中需要該目標模塊時,才對它進行鏈接
程序的裝入:由裝入程序將裝入模塊裝入內存運行;
-
絕對裝入:適合單道程序環境
-
靜態重定位:適合裝入之后不再移動的情況
-
動態重定位:適合裝入之后還會移動的情況
地址空間:
- 邏輯地址空間:是指一個源程序在編譯或者鏈接裝配后指令和數據所用的所有相對地址的空間;
- 物理地址空間:內存中物理單元的集合;
地址重定位:通過地址轉換將邏輯地址轉換為物理地址。
內存保護:
- 上、下限寄存器:分別與上、下限寄存器比較
- 基址、限長寄存器:與限長寄存器比較,與基址寄存器相加
管理方式:
- 連續分配:產生內部碎片;用戶進程(或作業)在主存中都是連續存放的
- 單一連續分配:分配到內存固定區域,只適合單任務系統;
- 固定分區分配:分配到內存中不同的固定區域,分區可以相等也可以不等;
- 產生內部碎片
- 動態分區分配:
- 產生外部碎片
- 基本概念:按照程序的需要進行動態的划分
- 分配算法:
- 首次適應:空閑區按地址從小到大為序,分配第一個符合條件的分區;
- 最佳適應:空閑區按空間大小從小到大排序,分配第一個符合條件的分區;
- 最壞適應:空閑區按空間從大到小排序,分配第一個符合條件的分區;
- 鄰近適應:空閑區按地址地址遞增的次序排列,分配內存時從上次查找結束的位置開始繼續查找;
- 非連續分配:允許一個程序分散地裝入到不相鄰的內存分區中,需要額外的空間去存儲分散區域的索引
- 基本分頁:內存分為固定的塊,按物理結構划分,會有內部碎片;
- 主存、進程都划分為大小固定的塊,進程在執行時,以塊為單位申請主存中的塊空間;
- 進程中的塊為頁,內存中的塊為頁框。系統為每個進程建立一張頁表,頁表記錄頁面在內存中對應的物理塊號,實現從頁號到物理塊號的地址映射;
- 頁式管理中地址空間是一維的;
- 基本分段:內存塊的大小不固定,按邏輯結構划分,會有外部碎片;
- 段式管理方式按照用戶進程中的自然段划分邏輯空間。段內要求連續,段間不要求連續。段號和段內偏移量必須由用戶顯示提供。
- 方便編程、共享、保護、動態鏈接和增長。
- 段頁式:基本分段和基本分頁的結合,會有內部碎片;
- 作業的邏輯地址分為:段號、頁號和頁內偏移量;采用分段方法來分配和管理用戶地址空間,采用分頁方法來管理物理存儲空間;開銷大。
- 請求分頁存儲管理:采用虛擬技術,開始運行時不必將作業全部一次性裝入內存;
- 多級頁表:將頁表的10頁空間也進行地址映射,建立上一級頁表,用於存儲頁表的映射關系;
- 基本分頁:內存分為固定的塊,按物理結構划分,會有內部碎片;
多道程序下的內存擴充:
- 覆蓋:預先設定覆蓋段,覆蓋掉暫時不用的內容,通常在同一個程序之中進行;
- 交換:把處於等待的程序暫時移到外存,通常在不同程序之間進行;
- 虛擬內存:只能基於非連續分配技術。
- 引入原因:在邏輯上擴充內存
- 時間局部性:程序中存在着大量的循環操作;
- 空間局部性:程序在一段時間內所訪問的地址,可能集中在一定的范圍內;
- 組成部分:
- 頁表機制:通過查表獲取相關信息;
- 中斷機制:要訪問頁不在內存時產生缺頁中斷
- 地址變換機構:把邏輯地址變換成物理地址
- 內存和外存:需要一定容量的內存和外存支持
- 置換算法:
- 最佳置換算法(OPT):選擇以后不用的頁面
- 先進先出(FIFO):選擇最先裝入的頁面
- 最近最久未使用(LRU):選擇最近最近未使用的頁面
- 時鍾置換算法(最近未用算法):選擇最近未用的頁面
- 改進型CLOCK:考慮頁面修改問題
- 地址翻譯:TLB->頁表(TLB不命中)->Cache->主存->外存
頁面分配策略:
- 固定分配局置換:每個進程分配一定數目的物理塊,在整個運行期間不變,缺頁時只在該進程在內存中的頁面中進行置換;
- 可變分配全局置換:為每個進程分配一定數目的物理塊,操作系統自身也保持一個空閑物理塊隊列;
- 可變分配局部置換:若進程在運行中頻繁地缺頁,系統再為該進程分配若干物理塊;
抖動(顛簸):
- 剛換出的頁面馬上又要換入內存;剛換入的頁面馬上就要換出內存;
工作集(駐留級):
- 指在某段時間間隔內,進程要訪問的頁面集合。
虛擬內存空間大小:
- <=內存容量和外存容量之和
- <=計算機的地址位數能容納的最大容量
虛擬存儲的頁表項:
- 頁號
- 物理塊號
- 狀態位P:用於指示該頁是否已調入內存,供程序訪問參考;
- 訪問字段A:用於記錄本頁在一段時間內被訪問的次數,或記錄本頁最近已有多長時間未被訪問,供置換算法換出頁面時參考;
- 修改位M:標識該頁在調入內存后是否被修改過;
- 外存地址
Belady現象:進程的缺頁次數隨着分配給進程的頁框個數的增加而增加,只有FIFO隊列式頁面置換算法才有。

快表(聯想寄存器TLB):用來存放當前訪問的若干頁表項,以加速地址變換的過程,若所需訪問頁號在快表中則可減少一次內存訪問。
4.文件管理
文件控制塊(FCB),類似進程管理的PCB,存放控制文件需要的各種信息的數據結構。
- 基本信息:包括文件物理位置
- 存取控制信息
- 使用信息
- 索引結點
一個文件對應一個FCB,而一個文件目錄項就是一個FCB。
打開文件操作是講該文件的FCB存入內存的活躍文件目錄表,而不是將文件內容負責到主存,找到指定文件目錄是打開文件之前的操作。
文件系統基礎:
邏輯結構:
- 無結構文件(流式文件):將數據按順序組織成記錄並積累保存,(流式文件)則被看成是一個字符流,以字節(Byte)為單位;
- 有結構文件:
- 順序文件:
- 串結構:記錄之間的順序與關鍵字無關
- 順序結構:記錄之間的順序與關鍵字有關
- 索引文件:為變長文件建立索引表,提高查找速度
- 索引順序文件:順序文件和索引文件的結合,將順序文件中的所有記錄分為若干組,為順序文件建立一張索引表,在索引中為每組的第一個記錄建立一個索引項,其中含有該記錄的關鍵字值和指向該記錄的指針
- 直接文件(查找文件)Hash File:通過哈希函數直接決定記錄地址
- 順序文件:
目錄結構:
- 單級:全部文件都放在一個目錄下
- 兩級:在目錄下分出用戶目錄
- 多級:將兩級結構加以推廣,采用樹形結構
- 無環圖:在樹形結構上加入一些有向邊,便於共享
文件共享:
- 基於索引結點(硬鏈接):共享文件指向同一個索引節點;鏈接計數count;
- 基於符號鏈(軟鏈接):有文件擁有者才擁有指向其索引結點的指針,共享該文件的其他用戶則只有該文件的路徑;
文件保護:
- 口令保護:通過口令訪問文件
- 加密保護:對文件進行加密處理
- 訪問控制:根據訪問者的身份進行限制
文件系統實現:
目錄實現:
- 線性列表:
- 無序:查找文件較慢,新建文件較快
- 有序:查找文件較快,新建文件較慢
- 哈希表:查找、新建文件都較快,要處理沖突
文件實現:
-
連續分配:在磁盤上連續存放文件
-
鏈接分配:
- 隱式:采用類似鏈表的結構
- 顯示:把隱式文件中的指針單獨抽離出來
-
索引分配:每個文件所有的盤塊號都集中存放,建立索引表
存儲空間管理:
- 空閑表:把所有空閑塊組織成表
- 空閑鏈表法:把所有空閑塊組織成鏈表
- 位示圖:利用二進制的每位記錄空閑塊
- 成組鏈接:空閑表和空閑鏈表的結合,適合大的文件系統
磁盤管理:
磁盤地址結構:柱面號、盤面號、扇區號
讀寫時間:
- 尋道時間:將磁頭移動到指定磁道所需要的時間
- 延遲時間:磁頭定位到某一磁道的扇區所需要的時間
- 傳輸時間:從磁盤讀出或向磁盤寫入數據所經歷的時間
- 啟動時間(一般忽略):控制器的啟動時間
調度算法:
- 先來先服務(FCFS):根據進程請求訪問磁盤的先后順序進行調度
- 最短尋找時間優先(SSTF):選擇當前磁頭所在的磁道距離最近的磁道
- 掃描(SCAN)算法(電梯算法):在磁頭當前移動方向上選擇與當前磁頭所在磁道距離最近的請求
- 循環掃描(C-SCAN):在掃描算法的基礎上規定磁頭單向移動來提供服務
磁盤管理:
- 初始化:對磁盤進行低級格式化和邏輯化
- 引導塊:存放自舉程序
- 壞塊:對於損壞扇區的處理
5.I/O管理
I/O管理概述:狀態跟蹤、設備存取、設備分配、設備控制
設備分類:
- 按傳輸速率分:
- 低速:如磁盤、鼠標
- 中速:如行式打印機、激光打印機
- 高速:如磁帶機、磁盤機、光盤機
- 按信息交換單位分:
- 塊設備:如磁盤
- 字符設備:如鍵盤、打印機
控制方式:
- 程序直接控制:程序直接對設備特環測試
- 中斷驅動:引入中斷機制,當設備准備完成時發生中斷
- DMA:在I/O設備與主存之間開辟直接數據通路,徹底“解放”CPU。
- 基本數據單位是塊;
- 傳送的數據從設備直接送入內存(或相反)
- 僅在傳送一個或多個數據塊的開始和結束時,才需要CPU干預,整塊數據的傳送是在DMA控制器的控制下完成的;
- 包含的四類控制器:
- 命令/狀態寄存器(CR)
- 內存地址寄存器(MAR)
- 數據寄存器(DR)
- 數據計數器(DC)
- 通道控制:引入專門的I/O處理機進行管理
I/O子系統層次:
- 用戶層I/O軟件:實現與用戶交互的接口
- 設備獨立性軟件:實現用戶程序與設備驅動器的統一接口、設備命令、設備保護以及設備分配與釋放
- 設備驅動程序:與硬件直接相關,負責具體實現系統對設備發出的操作指令
- 中斷處理程序:用於處理中斷相關事項
- 硬件設備:包括一個機械部件(設備本身)和一個電子郵件(控制器)
I/O核心子系統:
I/O調度:確定一個好的順序來執行這些I/O請求
磁盤高速緩存:指利用內存中的存儲空間來暫存從磁盤上讀出的一系列盤塊中的信息;邏輯上屬於磁盤,物理上屬於內存;
- 1:在內存中開辟一個單獨的存儲空間作為磁盤高速緩存,大小固定
- 2:把未利用的內存空間作為一個緩沖池,供請求分頁系統和磁盤時I/O共享
緩沖區:位於內存區域
-
特點:當緩沖區的數據非空的時候,不能往緩沖區沖入數據,只能從緩沖區把數據傳出;為空時,可以沖入數據,但必須充滿遺憾才能再傳出。
-
引入緩沖區的目的:
- 緩和CPU與I/O設備間速度不匹配的矛盾
- 減少對CPU的中斷頻率,放寬對CUP中斷響應時間的限制
- 解決基本數據單元大小不匹配的問題
- 提高CPU和I/O設備之間的並行性
-
單緩沖
-
雙緩沖
-
循環緩沖
-
緩沖池
| 高度緩存 | 緩沖區 | |
|---|---|---|
| 存放數據 | 存放的是低速設備上的某些數據的復制數據 | 存放的是低速設備傳遞給高速設備的數據(或相反) |
| 目的 | 高速緩存存放的是高速設備經常要訪問的數據 | 高速設備和低速設備的通信都要經過緩沖區,高速設備永遠不會直接去訪問低速設備 |
| 相同點 | 都是介於高速設備和低速設備之間 |
設備的分配與回收:
-
分類:
- 獨點式使用設備:設備被使用時不再允許其他進程使用設備
- 分時共享式使用設備:設備沒有獨占使用的要求時,可以通過分時共享使用
- SPOOLing技術:將獨占設備改造成共享設備,實現了虛擬設備的功能;以空間換時間,必須先有獨占設備
-
設備分配的數據結構:
- 設備控制表(DCT):每個設備配置一張DCT,以記錄本設備的情況;
- 控制器控制表(COCT):每個控制器有一張COCT;
- 通道控制表(CHCT):每個通道配置一張CHCT;
- 系統設備表(SDT)整個系統只有一張SDT,記錄已連接到系統中的所有物理設備的情況;
- SDT中有一個DCT指針,DCT中有一個COCT指針,COCT中有一個CHCT指針,CHCT中有一個COCT指針。
-
分配原則:
- 即要求充分發揮設備的使用效率,又要避免造成進程死鎖,還要將用戶程序和具體設備隔離開
-
分配方式:
- 靜態分配:在用戶作業開始執行前,由系統一次性分配該作業所要求的全部設備
- 動態分配:在進程執行過程中根據執行需要進行分配
-
設備分配的安全性:
- 安全分配方式:每當進程發出I/O請求后便進入阻塞狀態,直到其I/O操作完成時才被喚醒。
- 不安全分配方式:進程發出多個I/O請求並繼續運行,僅當進程所請求的設備已被另一進程占用時,才進入阻塞狀態。
-
設備獨立性是指應用程序獨立於具體使用的物理設備
SPOOLing技術:主要包括輸入井、輸出井、輸入緩沖區和輸出緩沖區以及輸入進程和輸出進程。
- 輸入井和輸出井是在磁盤上開辟的兩大存儲空間;
- 輸入井是模擬脫機輸入時的磁盤設備,用於暫存I/O設備輸入的數據
- 輸出井是模擬脫機輸出時的磁盤,用於暫存用戶程序的輸出數據
