計算機操作系統
原博客地址:【讀書筆記】計算機操作系統 - 不忘初心 - CSDN
進程
基本概念
進程的狀態
- 就緒(ready/waiting):進程已經獲得除CPU外所有必要資源。多個“就緒進程”組成“就緒隊列”。
- 執行(running):進程已獲得CPU。
- 阻塞(blocked):正在執行的進程由於發生某事件(請求I/O,申請緩衝空間等)無法繼續運行,放棄處理機處於暫停狀態。
- 掛起(suspended):進程被換到“交換區”,包括“suspended and waiting”、“suspended and blocked”。
進程同步
在多道程序環境下,當程序併發執行時,由於資源共享和進程合作,使同處於一個系統中的諸進程之間存在制約關係。進程同步的主要任務,是對多個相關進程在執行次序上進行協調,以使併發執行的諸進程之間能有效的共享資源和相互合作,從而使程序的執行具有可再現性。
進程同步與進程互斥:
進程同步是指生產者進程不能往一個滿的資源池中添加資源,消費者進程不能從一個空的資源池中取資源,通過資源信號量實現。
進程互斥是指生產者進程之間,或消費者進程之間,應該互斥的訪問臨界資源,通過互斥信號量實現。
整型信號量:不滿足“讓權等待”
記錄型信號量(增加阻塞隊列):共享多個資源時導致死鎖
AND型信號量(一次獲取全部資源):一次只能獲得或釋放一個單位的臨界資源
信號量集(對信號量實現加減n的操作):每個要訪問臨界資源的進程都必須自備同步操作wait(S)和signal(S)
管程:代表共享資源的數據結構,以及由對該共享數據結構實施操作的一組過程所組成的資源管理程序,共同構成一個操作系統的資源管理模塊,我們稱之爲管程。管程被請求和釋放資源的進程所調用。
管程由四部分組成:
① 管程的名稱;
② 局部於管程內部的共享數據結構說明;
③ 對該數據結構進行操作的一組過程;
④ 對局部於管程內部的共享數據設置初始值的語句。
利用管程實現進程同步:
① 必須設置同步工具,如兩個同步操作源於wait和signal
② 還需設置多個條件變量
進程通信
- 進程通信方式
- 消息傳遞
- 消息緩衝隊列通信機制
線程
- 進程是資源分配的基本單位,線程是任務調度的基本單位。引入進程是爲了使多道程序有條不紊的併發執行,提高資源利用率和系統吞吐量;引入進程是爲了減少程序在併發執行時所付出的時空開銷。
- 線程間的同步和通信
互斥鎖:共享多個資源時導致死鎖
互斥鎖+條件變量:解決共享一個臨界資源時的死鎖問題。
信號量:
① 私用信號量:存放於應用程序的地址空間中,OS並不知道其存在,用於同一進程中各線程之間的同步;
② 公用信號量:存放於受保護的系統存儲區中,由OS爲它分配空間並進行管理,用於不同進程間或不同進程的線程之間的同步。
- 線程的實現方式
- 內核支持線程(KST):無論是用戶進程中的線程,還是系統進程中的線程,他們的創建、撤消、切換以及要求由系統設備完成的I/O操作,都是在內核空間中實現的。
- 用戶級線程(ULT):創建、撤消、切換以及同步和通信,都無需內核的支持。內核完全不知道用戶級線程的存在。
- KST/ULT組合方式。
- 線程的實現
- 內核支持線程的實現:系統在創建一個新進程時,便爲它分配一個任務數據區PDTA,其中包含若干個線程控制塊TCB空間。在每一個TCB中可保存線程標識符、優先級、線程運行的CPU狀態信息等。雖然這些信息與用戶級線程TCB中的信息相同,但現在卻是被保存在內核空間中。
- 用戶級線程的實現:採用中間系統①運行時系統;② 內核支持線程(如下圖)
處理機調度
調度層次
調度隊列模型
- 僅具有進程調度的調度隊列模型
具有高、低兩級調度的調度隊列模型
調度方式和調度算法的準則
面向用戶的準則
① 週轉時間短;
② 相應時間快;
③ 截止時間的保證;
④ 優先權準則;
面向系統的準則
① 系統吞吐量高;
② 處理機利用率好;
③ 各類資源的平衡利用;
調度算法
調度算法
- 多級反饋隊列調度算法
存儲器管理
存儲層次
程序的裝入和鏈接
- 程序的鏈接
靜態鏈接——> 空間浪費,更新困難
① 鏈接時需要修改被調用模塊內部的相對地址;
② 鏈接時還需要變換被調用模塊的外部調用符號;
裝入時動態鏈接:邊裝入邊鏈接 ——> 便於修改和更新,便於實現對目標模塊的共享。最常用。
運行時動態鏈接:將對某些模塊的鏈接推遲到程序執行時才進行鏈接 ——> 影響應用程序性能,很少使用。
- 程序的裝入
一定要注意編譯時產生的目標程序,地址都是邏輯地址,起始地址都爲0!
絕對裝入方式——> 單道程序環境
① 編譯時產生絕對地址的目標代碼;
② 邏輯地址與物理地址完全相同;
可重定位裝入方式——> 多道程序環境,不允許程序在運行時在內存中移動
① 編譯產生的目標模塊起始邏輯地址爲0,其他地址相對於起始地址計算;
② 絕對物理地址=起始物理地址+相對地址(有效地址/相對邏輯地址);
③ 指令和數據地址的修改在裝入時完成(靜態重定位);
動態運行時裝入方式:裝入模塊裝入內存後,並不立即把裝入模塊中的相對地址轉換爲絕對地址,而是把這種地址轉換推遲到程序真正要執行時才進行,因此裝入內存後的所有地址都仍是相對地址。爲使地址轉換不影響指令的執行速度,這種方法需要一個重定位寄存器的支持。
內存分配
- 連續分配
- 交換
頁式管理
分頁系統的地址變換機構:完成邏輯地址頁號到物理地址塊號的映射
頁內地址:0~11,4KB
頁號:12~31,1M個
頁表大多數駐留在內存中。平時,進程未執行時,頁表的始址和頁表的長度存放在本進程的PCB中。當調度程序調度到某進程時,纔將這兩個數據裝入頁表寄存器中。
- 具有快表的地址變換機構
除頁表寄存器(存放頁表地址信息)外,增設高速緩衝寄存器/聯想寄存器/快表(存放當前訪問的那些頁表項,存放約16~512個頁表項,每個頁表項佔用1個字節)。
- 兩級和多級頁表
如果進程有1M個頁表項,則該進程頁表(含1M個頁表項,每個頁表項佔1個字節)就要佔用1MB的連續內存空間。解決辦法:
① 採用離散分配方式——>增加外層頁表及外層頁表寄存器,實現兩級和多級頁表;
② 將當前需要的部分頁表項調入內存,其餘的頁表項仍駐留在磁盤上,需要時再調入;
段式管理
分段的好處:
① 方便編程,將進程按照邏輯關係劃分爲若干個段;
② 信息共享,“頁”只是存放信息的物理單位(塊),並無完整的意義,“段”是信息的邏輯單位;
③ 信息保護;
④ 動態增長,有些段(尤其是數據段)在使用過程中會不斷增長;
⑤ 動態鏈接,運行時先將目標程序裝入內存並啓動運行,當運行過程中又需要調用某段時,纔將該段調入內存並進行鏈接。(如果是運行時動態鏈接,就很少使用;如果引入虛擬存儲器技術,則是裝入時動態鏈接)。
分頁和分段的主要區別
1、頁是信息的物理單位,段是信息的邏輯單位;
2、頁的大小固定且由系統決定,由系統把邏輯地址劃分爲頁號和頁內地址兩部分,是由機器硬件實現的,因而在系統中只能有一種大小的頁面;而段的長度卻不固定,決定於用戶所編寫的程序,通常由編譯程序在對源程序進行編譯時,根據信息的性質來劃分。
3、分頁的作業地址空間是一維的,即單一的線性地址空間,程序員只需利用一個記憶符,即可表示一個地址;而分段的作業地址空間則是二維的,程序員在標識一個地址時,既需給出段名,又需給出段內地址。(分頁之所以是一維的,原因在於分頁的大小是固定的,且頁碼之間是連續的,操作的時候只需給出一個地址,就能夠根據所給地址的大小與頁面大小計算出在頁碼和頁內地址,粗略舉例,比如頁面大小是4KB,給一個地址爲5000,可以算出所在頁碼是1,頁內地址是5000-4096=904,即在第二頁的第904個位置。而分段的因爲每段的長度不一樣,必須給出段碼和段內地址。)
段頁式管理
- 地址結構:段號+段內頁號+頁內地址
- 地址變換過程:
虛擬存儲器
指具有請求調入功能和置換功能,能從邏輯上對內存容量加以擴充的一種存儲器系統。
實現:
1、分頁請求系統
1)硬件支持:
① 請求分頁的頁表機制;
② 缺頁中斷機構;
③ 地址變換機構;
2)軟件支持:用於實現請求調頁的軟件和實現頁面置換的軟件;
2、分段請求系統(軟硬件要求類似)
設備管理
I/O設備
- 分類
- 設備控制器
- I/O通道
- I/O控制方式
DMA
緩衝管理
- 單緩衝
- 雙緩衝
- 循環緩衝
可能出現的問題(瓶頸)
Nexti 指針追趕上Nextg 指針,這種情況被稱爲系統受計算限制。(很少)
Nextg 指針追趕上Nexti 指針,這種情況被稱爲系統受I/O 限制。(常見)
- 公用緩衝池
① 組成:三種緩衝隊列+四種緩衝區
三種緩衝隊列:
空緩衝隊列emq;
輸入隊列inq;
輸出隊列outq;
四種緩衝區
用於收容輸入數據的工作緩衝區hin;
用於提取輸入數據的工作緩衝區sin;
用於收容輸出數據的工作緩衝區hout;
用於提取輸出數據的工作緩衝區sout;
② 操作方法:爲使諸進程能互斥地訪問緩衝池隊列,可爲每一隊列設置一個互斥信號量MS(type)。此外,爲了保證諸進程同步地使用緩衝區,又爲每個緩衝隊列設置了一個資源信號量RS(type)。
③ 工作方式
I/O軟件
分層
中斷處理程序
處理過程:
- 喚醒被阻塞的驅動進程
- 保護被中斷進程的CPU環境
通常由硬件自動將處理機狀態字PSW 和程序計數器(PC)中的內容,保存在中斷保留區(棧)中,然後把被中斷進程的CPU現場信息(即包括所有的CPU寄存器,如通用寄存器、段寄存器等內容)都壓入中斷棧中,因爲在中斷處理時可能會用到這些寄存器。
- 轉入相應的設備處理程序
- 中斷處理
- 恢復被中斷進程的現場
設備驅動程序
處理過程:
不同類型的設備應有不同的設備驅動程序,但大體上它們都可以分成兩部分,其中,
除了要有能夠驅動I/O 設備工作的驅動程序外,
還需要有設備中斷處理程序,以處理I/O 完成後的工作。
1) 將抽象要求轉換爲具體要求
2) 檢查I/O 請求的合法性
3) 讀出和檢查設備的狀態
4) 傳送必要的參數
5) 工作方式的設置
6) 啓動I/O 設備
設備獨立性軟件
單用戶系統中的LUT:由於系統中所有進程的設備分配情況都記錄在同一張LUT中,因而不允許在LUT中具有相同的邏輯設備名,這就要求所有用戶都不使用相同的邏輯設備名。
多用戶系統中的LUT:爲每個用戶設置一張LUT。每當用戶登錄時,便爲該用戶建立一個進程,同時也爲之建立一張LUT,並將該表放入進程的PCB 中。
設備分配
涉及的數據結構
設備控制表
控制器控制表
通道控制表
系統設備表
設備分配步驟
- 根據邏輯設備名查找SDT,找出該設備的DCT,分配設備
- 根據DCT找出COCT,分配設備控制器
- 根據COCT找出CHCT,分配通道
SPOOLing技術
(1) 輸入井和輸出井。這是在磁盤上開闢的兩個大存儲空間。輸入井是模擬脫機輸入時的磁盤設備,用於暫存I/O 設備輸入的數據;輸出井是模擬脫機輸出時的磁盤,用於暫存用
戶程序的輸出數據。
(2) 輸入緩衝區和輸出緩衝區。爲了緩和CPU 和磁盤之間速度不匹配的矛盾,在內存中要開闢兩個緩衝區:輸入緩衝區和輸出緩衝區。輸入緩衝區用於暫存由輸入設備送來的數據,以後再傳送到輸入井。輸出緩衝區用於暫存從輸出井送來的數據,以後再傳送給輸出設備。
(3) 輸入進程SPi和輸出進程SPo。這裏利用兩個進程來模擬脫機I/O 時的外圍控制機。其中,進程SPi模擬脫機輸入時的外圍控制機,將用戶要求的數據從輸入機通過輸入緩衝區
再送到輸入井,當CPU 需要輸入數據時,直接從輸入井讀入內存;進程SPo模擬脫機輸出時的外圍控制機,把用戶要求輸出的數據先從內存送到輸出井,待輸出設備空閒時,再將輸出井中的數據經過輸出緩衝區送到輸出設備上。
文件管理
文件和文件系統
文件系統的結構:是由文件管理部分和操作系統I/O部分組成的。
文件管理部分:操作系統內存中的文件對象,並按文件的邏輯格式將對文件對象的操作轉化成對文件塊的操作。
操作系統I/O部分:負責內存中的物理塊與物理磁盤中的數據交換。
文件分類
通常,文件是由一系列的記錄組成的。文件系統設計的關鍵要素,是指將這些記錄構成一個文件的方法,以及將一個文件存儲到外存上的方法。
文件的邏輯結構
這是從用戶觀點出發所觀察到的文件組織形式,是用戶可以直接處理的數據及其結構,它獨立於文件的物理特性,又稱爲文件組織(FileOrganization)。
例如,用戶創建的txt、cpp、word、excel、ppt等,都屬於文件的邏輯結構。
① 無結構文件:字符流,又稱流式文件。–源程序、可執行文件、庫函數等
② 有結構文件:由若干個相關記錄組成,又稱記錄型文件,如下圖。–數據結構、數據庫等
文件的物理結構
又稱文件的存儲結構,指文件在外存上的存儲組織形式。這不僅與存儲介質的存儲性能有關,而且與所採用的外存分配方式有關。
例如,採用FAT32、NTFS、EXT3、EXT4、Linux swap等,都屬於文件的物理結構。
文件系統模型
文件系統管理的對象有:① 文件;② 目錄;③ 磁盤空間;
模型層次圖:
文件的邏輯結構
分類
1. 記錄型文件
按記錄的組織方式可劃分爲
① 順序文件
順序文件中記錄的排序方式:
1)串結構,各記錄之間的順序與關鍵字無關,通常由時間決定。—-每次檢索必須從頭開始。
2)順序結構,所有記錄按關鍵字排序。—-採用折半查找、插值查找、跳步查找等來提高檢索效率。
② 索引文件
定長記錄文件—-順序存取方便、直接存取方便
變長記錄文件—-順序存取方便、直接存取困難
爲變長記錄文件建立一張索引表,對主文件中的每個記錄,在索引表中設有一個相應的表項,用於記錄該記錄的長度L及指向該記錄的指針(指向該記錄在邏輯地址空間的首址)。由於索引表是按記錄鍵排序的,因此,索引表本身是一個定長記錄的順序文件,從而也就可以方便地實現直接存取。
③ 索引順序文件
索引順序文件(Index Sequential File)可能是最常見的一種邏輯文件形式。它有效地克服了變長記錄文件不便於直接存取的缺點,而且所付出的代價也不算太大。它將順序文件中的所有記錄分爲若干個組(例如,50 個記錄爲一個組);爲順序文件建立一張索引表,在索引表中爲每組中的第一個記錄建立一個索引項,其中含有該記錄的鍵值和指向該記錄的指針。
④ 直接文件
根據給定的記錄鍵值,直接獲得指定記錄的物理地址。換言之,記錄鍵值本身就決定了記錄的物理地址。這種由記錄鍵值到記錄物理地址的轉換被稱爲鍵值轉換(Key to addresstransformation)。
⑤ 哈希文件
目前應用最廣的一種直接文件。它利用Hash 函數(或稱散列函數),可將記錄鍵值轉換爲相應記錄的地址。但爲了能實現文件存儲空間的動態分配,通常由Hash函數所求得的並非是相應記錄的地址,而是指向一目錄表相應表目的指針,該表目的內容指向相應記錄所在的物理塊,如下圖所示。例如,若令K爲記錄鍵值,用A作爲通過Hash函數H 的轉換所形成的該記錄在目錄表中對應表目的位置,則有關係A=H(K)。通常,把Hash函數作爲標準函數存於系統中,供存取文件時調用。
2. 流式文件
其長度以字節爲單位。對流式文件的訪問,則是採用讀/寫指針來指出下一個要訪問的字符。可以把流式文件看做是記錄式文件的一個特例。在UNIX 系統中,所有的文件都被看做是流式文件,即使是有結構文件,也被視爲流式文件,系統不對文件進行格式處理。
文件的外存分配方式
對換空間的管理:具有對換功能的OS中,將外存分爲文件區(用於存放文件)和對換區(用於存放從內存中換出的進程)。由於通常的文件都是較長久的駐留在外存上,故對文件區管理的主要目標,是提高文件存儲空間的利用率。爲此,對文件區採取離散分配方式。然而,進程在對換區中駐留的時間是短暫的,對換操作又較頻繁,故對對換空間(swap分區)管理的主要目標,是提高進程換入和換出的速度。爲此,採取的是連續分配方式,較少考慮外存中的碎片問題。
連續分配
1、連續分配(Continuous Allocation)要求爲每一個文件分配一組相鄰接的盤塊。一組盤塊的地址定義了磁盤上的一段線性地址。
2、物理結構:順序式。
3、如同內存的動態分區分配一樣,隨着文件建立時空間的分配和文件刪除時空間的回收,將使磁盤空間被分割成許多小塊,這些較小的連續區已難於用來存儲文件,此即外存的碎片。同樣,我們也可以利用緊湊的方法,將盤上所有的文件緊靠在一起,把所有的碎片拼接成一大片連續的存儲空間。
鏈接分配
1、分類:
① 隱式鏈接
在採用隱式鏈接分配方式時,在文件目錄的每個目錄項中,都須含有指向鏈接文件第一個盤塊和最後一個盤塊的指針。
隱式鏈接分配方式的主要問題在於:它只適合於順序訪問,它對隨機訪問是極其低效的。
② 顯式鏈接—-FAT/NTFS
把用於鏈接文件各物理塊的指針,顯式地存放在內存的一張鏈接表中。該表在整個磁盤僅設置一張。表的序號是物理盤塊號,從0 開始,直至N-1;N爲盤塊總數。在每個表項中存放鏈接指針,即下一個盤塊號。在該表中,凡是屬於某一文件的第一個盤塊號,或者說是每一條鏈的鏈首指針所對應的盤塊號,均作爲文件地址被填入相應文件的FCB 的“物理地址”字段中。由於查找記錄的過程是在內存中進行的,因而不僅顯著地提高了檢索速度,而且大大減少了訪問磁盤的次數。由於分配給文件的所有盤塊號都放在該表中,故把該表稱爲文件分配表FAT(File Allocation Table)。
索引分配
爲每個文件分配一個索引塊(表),再把分配給該文件的所有盤塊號都記錄在該索引塊中,因而該索引塊就是一個含有許多盤塊號的數組。在建立一個文件時,只需在爲之建立的目錄項中填上指向該索引塊的指針。
1、分類:
① 單級索引分配;
② 多級索引分配;
③ 混合索引分配;