計算機作業系統——學習筆記(上)
第一章 作業系統引論
作業系統OS是配置在計算機硬體上的第一層軟體,是對硬體系統的首次擴充。
1. 目標
有效性、方便性、可擴充性、開放性。
2. 作用
- 作為使用者與計算機硬體系統之間的介面
- 作為計算機系統資源的管理者
- 實現了對計算機資源的抽象
3.發展過程
①人工操作方式:使用者獨佔全機,CPU等待人工操作。 ②離線輸入輸出方式:事先將裝有使用者程式和資料的紙帶裝入紙帶輸入機,在外圍機的控制下,把紙帶上的資料輸入到磁帶上(類似於磁碟)。當CPU需要時,從磁帶將其高速地調入記憶體。反之類同。優點:減少了CPU的空閒時間,提高了I/O速度。 ③單道批處理系統:首先監督程式將磁帶第一個作業裝入記憶體,執行控制權在該作業,該作業處理完成時,控制權交回到監督程式,再由監督程式把磁帶上的第二個作業調入記憶體。系統自動對作業成批處理。(記憶體始終只保持一道作業—單道批處理)。 缺點:記憶體浪費,不能充分利用系統資源。 ④多道批處理系統:使用者所提交的作業先存放在外存,排成一個“後備佇列”,再由作業排程程式按一定的演算法從佇列選擇若干作業調入記憶體,使他們共享CPU和系統中的各種資源。 優缺點:資源利用率提高,系統吞吐量大,平均週轉時間長,無互動能力。 ⑤分時系統:在一臺主機上連線了多個帶有顯示器和鍵盤的終端,同時允許多個使用者通過自己的終端,以互動方式使用計算機,共享主機中的資源。因此,作業直接進入記憶體,採用輪轉執行方式,系統配置一個多路卡(實現分時多路複用),及時接收使用者終端命令(資料)。 特徵:多路性、獨立性、及時性、互動性。 ⑥實時系統:系統能及時響應外部事件的請求,在規定的時間內完成對該事件的處理,並控制所有實時任務的協調一致的執行。 特徵:多路性(週期性資訊採集,多個物件或執行機構進行控制)、獨立性、及時性、互動性、可靠性(多級容錯措施)。
4.基本特徵
①併發性 引入程序:提高了系統資源的利用率和系統吞吐量,並改善了系統的效能。 引入執行緒:對它的排程所付出的開銷比程序小得多,能更高效地提高系統內多個程式間併發執行的程度。 ②共享性 互斥共享方式:在一段時間內只允許一個程序訪問的資源稱為臨界資源或獨佔資源。 同時訪問方式:允許在一段時間內由多個程序同時對它們進行訪問。 ③虛擬技術(通過某種技術把一個物理實體變為若干個邏輯上的對應物) (1) 時分複用技術:利用處理機的空閒時間執行其他程式,提高處理機的利用率。 (2) 空分複用技術:利用儲存器的空閒空間存放其他程式,提高記憶體的利用率。 ④非同步性(程序以不可預知的速度向前推進)。
5.主要功能
- 儲存器管理功能 ①程序控制:建立和撤銷程序,分配資源、資源回收,控制程序執行過程中的狀態轉換。 ②程序同步:為多個程序執行進行協調。 程序互斥(為每個臨界資源配置一把鎖)、程序同步。 ③程序通訊:實現相互合作之間的程序之間的資訊交換。 ④排程:作業排程,程序排程。
- 儲存器管理功能 儲存器管理的主要任務:為多道程式的執行提供良好的環境,方便使用者使用儲存器,提高儲存器的利用率,並能從邏輯上擴充記憶體。 功能: ①記憶體分配:靜態分配、動態分配。 ②記憶體保護:確保每道使用者程式都只在自己的記憶體空間內執行,彼此互不干擾。一種比較簡單的記憶體保護機制是設定兩個界限暫存器。 ③地址對映:將地址空間中的邏輯地址轉換為記憶體空間中與之對應的實體地址。 ④記憶體擴充:藉助於虛擬儲存技術,邏輯上擴充記憶體容量。
- 裝置管理功能: 裝置管理的主要任務:完成使用者程序提出的I/O請求,為其分配所需的I/O裝置;提高CPU和I/O裝置的利用率,提高I/O速度,方便使用者使用I/O裝置。 功能: ①快取管理:緩和CPU和I/O裝置速度不匹配的矛盾。 ②裝置分配:根據使用者程序I/O請求、系統現有資源情況以及按照某種裝置的分配策略,為之分配其所需的裝置。 ③裝置處理:用於實現CPU和裝置控制器之間的通訊。
- 檔案管理功能 檔案管理的主要任務:對使用者檔案和系統檔案進行管理,方便使用者使用,並保證檔案的安全性。 ①檔案儲存空間的管理:為每個檔案分配必要的外存空間,提高外存的利用率,並能有助於提高檔案系統的存、取速度。 ②目錄管理:為每個檔案建立其目錄項,並對眾多的目錄項加以有效的組織,以實現方便的按名存取,即使用者只須提供檔名便可對該檔案進行存取。 ③檔案的讀/寫管理和保護
- 作業系統與使用者之間的介面:使用者介面、程式藉口
6.系統呼叫
如果一個程序在使用者態需要使用核心態的功能,就進行系統呼叫從而陷入核心,由作業系統代為完成。 Linux 的系統呼叫主要有以下這些: 程序控制 fork(); exit(); wait(); 程序通訊 pipe(); shmget(); mmap(); 檔案操作 open(); read(); write(); 裝置操作 ioctl(); read(); write(); 資訊維護 getpid(); alarm(); sleep(); 安全 chmod(); umask(); chown()。
7.OS結構設計
傳統的作業系統結構:無結構作業系統 --> 模組化結構OS --> 分層式結構OS
- 大核心與微核心
- 大核心 大核心是將作業系統功能作為一個緊密結合的整體放到核心。 由於各模組共享資訊,因此有很高的效能。 大核心是將作業系統功能作為一個緊密結合的整體放到核心。 由於各模組共享資訊,因此有很高的效能。
- 微核心 由於作業系統不斷複雜,因此將一部分作業系統功能移出核心,從而降低核心的複雜性。移出的部分根據分層的原則劃分成若干服務,相互獨立。 在微核心結構下,作業系統被劃分成小的、定義良好的模組,只有微核心這一個模組執行在核心態,其餘模組執行在使用者態。
-
微核心OS結構 ①足夠小的核心 ②基於客戶/伺服器模式 ③應用“機制與策略分離”原理 ④採用面向物件技術
-
微核心的基本功能 ①程序(執行緒)管理 ②低階儲存器管理 ③中斷和陷入處理
微核心作業系統存在的問題:執行效率降低。 微核心OS的效率降低的最主要原因: 頻繁地在使用者態和核心態之間進行切換。即在完成一次客戶對OS提出的服務請求時,需要利用訊息實現多次互動和進行使用者/核心模式以及上下文的多次切換。
8.中斷分類
- 外中斷 由 CPU 執行指令以外的事件引起,如 I/O 完成中斷,表示裝置輸入/輸出處理已經完成,處理器能夠傳送下一個輸入/輸出請求。此外還有時鐘中斷、控制檯中斷等。 - 異常 由 CPU 執行指令的內部事件引起,如非法操作碼、地址越界、算術溢位等。 - 陷入 在使用者程式中使用系統呼叫。
第二章 程序管理
1. 程序的基本概念
程式的順序執行:按照某種先後次序順序執行,僅當前一程式執行完後,才能執行後繼操作。 特徵:順序性、封閉性、可再現性。 前驅圖:描述程序之間執行的前後關係。 程式的併發執行: 特徵:間斷性、失去封閉性、不可再現性
程序實體:由程式段、相關的資料段和PCB組成,所謂建立和撤銷程序實際是對其中的PCB的建立和撤銷。(PCB:程序控制塊Process Control Block) 程序的特徵:動態性、併發性、獨立性、非同步性 程序定義:是程序實體的執行過程,是系統進行資源分配和排程的一個獨立單元。 程序的三種基本狀態:就緒狀態、執行狀態、阻塞狀態(阻塞典型事件:請求I/O,申請緩衝空間等)。 程序的三種基本狀態及其轉換圖。
掛起狀態:程序處於靜止狀態,暫停執行(執行狀態下掛起),暫不接受排程(就緒狀態下掛起)。 程序的五種基本狀態及其轉換圖。
具有建立、終止和掛起狀態的程序狀態圖。
程序控制塊PCB PCB中記錄了作業系統所需的、用於描述程序的當前情況以及控制程序執行的全部資訊。是作業系統中最重要的記錄型資料結構。
程序控制塊中的資訊:程序識別符號、處理機狀態、程序排程資訊、程序控制資訊。 程序控制塊的組織方式:連結方式、索引方式。
2.程序控制
程序控制一般是由OS的核心中的原語來實現的。 程序的建立 ①申請空白PCB。 ②為新程序分配資源。 ③初始化程序控制塊。 ④將新程序插入就緒佇列(如果程序就緒佇列能夠接納新程序)。
程序的終止過程 ①根據被終止程序的識別符號,從 PCB 集合中檢索出該程序的 PCB,從中讀出該程序的狀態。 ②若被終止程序正處於執行狀態,應立即終止該程序的執行,並置排程標誌為真,用於指示該程序被終止後應重新進行排程。 ③若該程序還有子孫程序,還應將其所有子孫程序予以終止,以防它們成為不可控的程序。 ④將被終止程序所擁有的全部資源,或者歸還給其父程序,或者歸還給系統。 ⑤將被終止程序(PCB)從所在佇列(或連結串列)中移出,等待其他程式來蒐集資訊。
程序的阻塞與喚醒 程序的掛起與啟用
3.程序同步
併發程序之間的制約關係 ①間接相互制約關係。源於資源共享。 ②直接相互制約關係。源於程序間的合作。
臨界區:每個程序中訪問臨界資源的那段程式碼稱為臨界區。築程序互斥地進入自己的臨界區,便可實現諸程序對臨界資源互斥訪問。 為了互斥訪問臨界資源,每個程序在進入臨界區之前,需要先進行檢查。 可把一個訪問臨界資源的迴圈程序描述如下:
同步機制應遵循的規則:空閒讓進、忙則等待、有限等待、讓權等待。
- 訊號量機制
- 整型訊號量 用於表示資源數目的整型量,僅能通過原子操作wait(S)和signal(S)來訪問,也就是常見的 P 和 V 操作,執行時不可中斷,通常的做法是在執行這些操作的時候遮蔽中斷。
- 記錄型訊號量 不存在“忙等”現象的程序同步機制,遵循了“讓權等待”的準則。需要一個用於代表資源數目的整型變數value外,還應增加一個程序連結串列指標L,用於連結上述的所有等待程序。 如果訊號量的取值只能為0或者1,那麼就成為了互斥量(Mutex),0表示臨界區已經加鎖,1表示臨界區解鎖。用於程序互斥。
- AND型訊號量 將程序在整個執行過程中需要的所有資源,一次性全部分配給程序,待程序使用完後再一起釋放。
- 訊號量集 AND型訊號量基礎上,對程序所申請的所有資源以及每類資源不同的資源需求量,在一次P、V原語操作中完成申請或釋放。 訊號量的應用
- 利用訊號量實現程序互斥 wait(mutex)和signal(mutex)必須成對地出現。
- 利用訊號量實現前趨關係
- 管程機制 雖然訊號量機制是一種既方便、又有效的程序同步機制,但每個要訪問臨界資源的程序都必須自備同步操作wait(S)和signal(S)。這就使大量的同步操作分散在各個程序中。這不僅給系統的管理帶來了麻煩,而且還會因同步操作的使用不當而導致系統死鎖。 代表共享資源的資料結構,以及由對該共享資料結構實施操作的一組過程所組成的資源 管理程式,共同構成了一個作業系統的資源管理模組,我們稱之為管程。 管程被請求和釋放資源的程序所呼叫。 Hansan為管程所下的定義是:“一個管程定義了一個數據結構和能為併發程序所執行(在該資料結構上)的一組操作,這組操作能同步程序和改變管程中的資料”。 管程由四部分組成: ①管程的名稱。 ②區域性於管程內部的共享資料結構說明。 ③對該資料結構進行操作的一組過程。 ④對區域性於管程內部的共享資料設定初始值的語句。 管程相當於圍牆,它把共享變數和對它進行操作的若干過程圍了起來,所有程序要訪問臨界資源時,都必須經過管程(相當於通過圍牆的門)才能進入,而管程每次只准許一個程序進入管程,從而實現了程序互斥。
- 條件變數 對條件變數的操作僅僅是 wait 和 signal,因此條件變數也是一種抽象資料型別,每個條件變數儲存了一個連結串列,用於記錄因該條件變數而阻塞的所有程序,同時提供的兩個操作即可表示為x.wait和x.signal,其含義為: ①x.wait:正在呼叫管程的程序因x條件需要被阻塞或掛起,則呼叫x.wait將自己插入到x條件的等待佇列上,並釋放管程,直到x條件變化。此時其它程序可以使用該管程。 ②x.signal:正在呼叫管程的程序發現x條件發生了變化,則調x.signal,重新啟動一個因x條件而阻塞或掛起的程序。如果存在多個這樣的程序,則選擇其中的一個,如果沒有,則繼續執行原程序,而不產生任何結果。
經典程序同步問題(使用訊號量方法解決) 生產者-消費者問題 ①利用記錄型訊號量 ②利用AND訊號量 ③利用管程
哲學家進餐問題 ①利用記錄型訊號量 考慮到如果所有哲學家同時拿起左手邊的筷子,那麼就無法拿起右手邊的筷子,造成死鎖。
為了防止死鎖的發生,可以設定兩個條件: 必須同時拿起左右兩根筷子; 只有在兩個鄰居都沒有進餐的情況下才允許進餐。 ②利用AND訊號量機制。
讀者-寫者問題 ①利用記錄型訊號量 ②利用訊號量集機制
程序通訊
程序同步與程序通訊很容易混淆,它們的區別在於: 程序同步:控制多個程序按一定順序執行; 程序通訊:程序之間的資訊交換。 程序通訊是一種手段,而程序同步是一種目的。 也可以說,為了能夠達到程序同步的目的,需要讓程序進行通訊,傳輸一些程序同步所需要的資訊。
- 程序通訊的型別
- 共享儲存器系統 因為資料不需要在程序之間複製,所以這是最快的一種 IPC。 ①基於共享資料結構的通訊方式。低效,只適於傳遞相對少量的資料。 ②基於共享儲存區的通訊方式。高階通訊方式。
- 訊息傳遞系統 在該機制中,程序間的資料交換是以格式化的訊息(message)為單位的;在計算機網路中,又把message稱為報文。程式設計師直接利用作業系統提供的一組通訊命令(原語),實現大量資料的傳遞。 分為直接通訊方式和間接通訊方式
- 管道通訊系統 “管道”(pipe)是指用於連線一個讀程序和一個寫程序以實現彼此間通訊的一個共享檔案,又名pipe檔案。 它具有以下限制: 只支援半雙工通訊(單向交替傳輸); 只能在父子程序中使用。 FIFO也稱為命名管道,去除了管道只能在父子程序中使用的限制。
- 訊息緩衝佇列通訊機制 傳送程序利用Send原語將訊息直接傳送給接收程序;接收程序則利用Receive原語接收訊息。 相比於 FIFO,訊息佇列具有以下優點: 訊息佇列可以獨立於讀寫程序存在,從而避免了 FIFO 中同步管道的開啟和關閉時可能產生的困難; 避免了 FIFO 的同步阻塞問題,不需要程序自己提供同步方法; 讀程序可以根據訊息型別有選擇地接收訊息,而不像 FIFO 那樣只能預設地接收。
- 訊號量 它是一個計數器,用於為多個程序提供對共享資料物件的訪問。
執行緒
執行緒與程序的比較 ①排程 執行緒是獨立排程的基本單位,在同一程序中,執行緒的切換不會引起程序切換,從一個程序中的執行緒切換到另一個程序中的執行緒時,會引起程序切換。 ②併發性 不僅程序之間可以併發執行,而且在一個程序中的多個執行緒之間亦可併發執行。 ③擁有資源 程序都可以擁有資源,是系統中擁有資源的一個基本單位。一般而言,執行緒自己不擁有系統資源(也有一點必不可少的資源),但它可以訪問其隸屬程序的資源。 ④系統開銷 由於建立或撤銷程序時,系統都要為之分配或回收資源,如記憶體空間、I/O 裝置等,所付出的開銷遠大於建立或撤銷執行緒時的開銷。類似地,在進行程序切換時,涉及當前執行程序 CPU 環境的儲存及新排程程序 CPU 環境的設定,而執行緒切換時只需儲存和設定少量暫存器內容,開銷很小。
執行緒間的同步和通訊 互斥鎖; 條件變數; 訊號量機制。 ①私有訊號量:實現同一程序中各執行緒之間的同步,屬於特定的程序所有,OS並不知道私用訊號量的存在。 ②公有訊號量:實現不同程序間或不同程序中各執行緒之間的同步,由OS為它分配空間並進行管理,是一種比較安全的同步機制。
執行緒的實現方式 ①核心支援執行緒 在核心的支援下執行的,即無論是使用者程序中的執行緒,還是系統程序中的執行緒,他們的建立、撤消和切換等也是依靠核心,在核心空間實現的。 ②使用者級執行緒 僅存在於使用者空間中。對於這種執行緒的建立、撤消、執行緒之間的同步與通訊等功能,都無須利用系統呼叫來實現。
第三章 處理機排程與死鎖
處理機排程的層次 ①高階排程 高階排程又稱為作業排程或長程排程,其主要功能是根據某種演算法,把外存上處於後備佇列中的那些作業調入記憶體,也就是說,它的排程物件是作業。 作業:通常的程式、資料和作業說明書。 作業控制塊 JCB:儲存了系統對作業進行管理和排程所需的全部資訊。 ②低階排程 通常也把低階排程(Low Level Scheduling)稱為程序排程或短程排程(ShortTerm Scheduling),它所排程的物件是程序(或核心級執行緒)。程序排程是最基本的一種排程,在多道批處理、分時和實時三種類型的 OS 中,都必須配置這級排程。
低階排程的功能 儲存處理機的現場資訊、按某種演算法選取程序、把處理機分配給程序
程序排程中的三個基本機制 排隊器、分派器(分派任務)、上下文切換機制
程序排程方式
- 非搶佔方式 實現簡單,系統開銷小,適用於大多數的批處理系統環境。但它難以滿足緊急任務的要求——立即執行,因而可能造成難以預料的後果。顯然,在要求比較嚴格的實時系統中,不宜採用這種排程方式。
- 搶佔方式 搶佔方式的優點是,可以防止一個長程序長時間佔用處理機,能為大多數程序提供更公平的服務,特別是能滿足對響應時間有著較嚴格要求的實時任務的需求。但搶佔方式比非搶佔方式排程所需付出的開銷較大。
程序排程原則 優先權原則、段作業(程序)優先原則、時間片原則。
③中級排程 中級排程(Intermediate Level Scheduling)又稱中程排程(Medium-Term Scheduling)。引入中級排程的主要目的是為了提高記憶體利用率和系統吞吐量。為此,應使那些暫時不能執行的程序不再佔用寶貴的記憶體資源,而將它們調至外存上去等待,把此時的程序狀態稱為就緒駐外存狀態或掛起狀態。當這些程序重新具備執行條件且記憶體又稍有空閒時,由中級排程來決定把外存上的那些又具備執行條件的就緒程序重新調入記憶體,並修改其狀態為就緒狀態,掛在就緒佇列上等待程序排程。中級排程實際上就是儲存器管理中的對換功能。
排程佇列模型 ①僅有程序排程的排程佇列模型 ②具有高階和低階排程的排程佇列模型 ③同時具有三級排程的排程佇列模型
選擇排程方式和排程演算法的若干準則
- 面向使用者的準則:週轉時間短、響應時間快、截止時間的保證、優先權準則
- 面向系統的準則:系統吞吐量高、處理機利用率好、各類資源的平衡利用。
排程演算法 在 OS 中排程的實質是一種資源分配,因而排程演算法是指:根據系統的資源分配策略所規定的資源分配演算法。 ①先來先服務排程演算法 FCFS 演算法比較有利於長作業(程序),而不利於短作業(程序)。FCFS 排程演算法有利於 CPU 繁忙型的作業,而 不利於 I/O 繁忙型的作業(程序)。CPU 繁忙型作業是指該類作業需要大量的 CPU 時間進行 計算,而很少請求 I/O。通常的科學計算便屬於 CPU 繁忙型作業。I/O 繁忙型作業是指 CPU 進行處理時需頻繁地請求 I/O。目前的大多數事務處理都屬於 I/O 繁忙型作業。 ②短作業(程序)優先排程演算法 SJF 排程演算法能有效地降低作業的平均等待時間,提高系統吞吐量。
③高優先權優先排程演算法
- 優先權排程演算法的型別 非搶佔式優先權演算法 主要用於批處理系統中;也可用於某些對實時性要求不嚴的實時系統中。 搶佔式優先權排程演算法 常用於要求比較嚴格的實時系統中,以及對效能要求較高的批處理和分時系統中。
- 優先權的型別 ①靜態優先權 靜態優先權是在建立程序時確定的,且在程序的整個執行期間保持不變 ②動態優先權 動態優先權是指在建立程序時所賦予的優先權,是可以隨程序的推進或隨其等待時間的增加而改變的,以便獲得更好的排程效能。
- 高響應比優先排程演算法 既照顧了短作業,又考慮了作業到達的先後次序,不會使長作業長期得不到服務。 Rp優先順序 =(等待時間+要求服務時間)/要求服務時間=響應時間/要求服務時間
基於時間片的輪轉排程演算法
- 時間片輪轉法 就緒佇列中的所有程序在給定的時間內均能獲得一時間片的處理機執行時間。 時間片大小的確定:時間片略大於一次典型的互動所需要的時間
- 多級反饋佇列排程演算法 ①應設定多個就緒佇列,併為各個佇列賦予不同的優先順序、不同大小的執行時間片。在優先權愈高的佇列中,為每個程序所規定的執行時間片就愈小。 ②當一個新程序進入記憶體後,首先將它放入第一佇列的末尾,按FCFS原則排隊等待排程。 ③僅當第一佇列空閒時,排程程式才排程第二佇列中的程序執行。
實時排程
實現條件 ①提供必要的資訊 ②系統處理能力強 ③採用搶佔式排程機制 ④具有快速切換機制
分類 ①非搶佔式排程演算法 非搶佔式輪轉排程演算法、非搶佔式優先排程演算法 ②搶佔式排程演算法
基於時鐘中斷的搶佔式優先權排程演算法 常用的幾種實時排程演算法
- 最早截止時間優先即EDF(Earliest Deadline First)演算法 根據任務的開始截止時間來確定任務的優先順序。截止時間愈早,其優先順序愈高。具有最早截止時間的任務排在佇列的最前面。排程程式在選擇任務時,總是選擇就緒佇列中的第一個任務,為之分配處理機,使之投入執行。
- 最低鬆弛度優先即LLF(Least Laxity First)演算法 根據任務緊急(或鬆弛)的程度,來確定任務的優先順序。任務的緊急程度愈高,為該任務所賦予的優先順序就愈高,以使之優先執行。
- 產生死鎖的原因和必要條件
死鎖(Deadlock),是指多個程序在執行 過程中因爭奪資源而造成的一種僵局。 產生死鎖的原因可歸結為如下兩點: ①競爭資源。 ②程序間推進順序非法。 產生死鎖的必要條件: ①互斥條件:指程序對所分配到的資源進行排它性使用,即在一段時間內某資源只由一個程序佔用。如果此時還有其它程序請求該資源,則請求者只能等待,直至佔有該資源 的程序用畢釋放。 ②請求和保持條件:指程序已經保持了至少一個資源,但又提出了新的資源請求,而該資源又已被其它程序佔有,此時請求程序阻塞,但又對自己已獲得的其它資源保持不放。 ③不剝奪條件:指程序已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。 ④環路等待條件:指在發生死鎖時,必然存在一個程序——資源的環形鏈。
- 處理死鎖的基本方法
①鴕鳥策略 因為解決死鎖問題的代價很高,因此鴕鳥策略這種不採取任務措施的方案會獲得更高的效能。 當發生死鎖時不會對使用者造成多大影響,或發生死鎖的概率很低,可以採用鴕鳥策略。 大多數作業系統,包括 Unix,Linux 和 Windows,處理死鎖問題的辦法僅僅是忽略它。 ②預防死鎖 通過設定某些限制條件,去破壞產生死鎖的四個必要條件中的一個或幾個條件,來預防發生死鎖。 ③避免死鎖 在資源的動態分配過程中,用某種方法去防止系統進入不安全狀態,從而避免發生死鎖。 ④檢測死鎖與解除死鎖 檢測死鎖允許系統在執行過程中發生死鎖。但可通過系統所設定的檢測機構,及時地檢測出死鎖的發生,並精確地確定與死鎖有關的程序和資源;然後,採取適當措施,從系統中將已發生的死鎖清除掉。 解除死鎖常用的實施方法是撤消或掛起一些程序,以便回收一些資源,再將這些資源分配給已處於阻塞狀態的程序,使之轉為就緒狀態,以繼續執行。
- 預防死鎖的方法
- 預防死鎖
使四個必要條件中的第2、3、4個條件之一不能成立,來避免發生死鎖。至於必要條件1,因為它是由裝置的固有特性所決定的。 ①破壞“請求和保持”條件:破壞請求:系統規定所有程序在開始執行之前,都必須一次性地申請其在整個執行過程所需的全部資源。破壞保持:分配資源時,只要有一種資源不能滿足某程序的要求,即使其它所需的各資源都空閒,也不分配給該程序,而讓該程序等待。 ②破壞“不可搶佔”條件:當一個已經保持了某些資源的程序,再提出新的資源請求而不能立即得到滿足時,必須釋放它已經保持了的所有資源,待以後需要時再重新申請。 ③破壞“迴圈等待”條件:系統將所有資源按型別進行線性排隊,並賦予不同的序號。
- 系統安全狀態
所謂安全狀態,是指系統能按某種程序順序(P1,P2,…,Pn)(稱〈P1,P2,…,Pn〉序 列為安全序列),來為每個程序Pi分配其所需資源,直至滿足每個程序對資源的最大需求,使每個程序都可順利地完成。如果系統無法找到這樣一個安全序列,則稱系統處於不安全狀態。 避免死鎖的實質在於:系統在進行資源分配時,如何使系統不進入不安全狀態。 圖 a 的第二列 Has 表示已擁有的資源數,第三列 Max 表示總共需要的資源數,Free 表示還有可以使用的資源數。從圖 a 開始出發,先讓 B 擁有所需的所有資源(圖 b),執行結束後釋放 B,此時 Free 變為 5(圖 c);接著以同樣的方式執行 C 和 A,使得所有程序都能成功執行,因此可以稱圖 a 所示的狀態是安全的。 定義:如果沒有死鎖發生,並且即使所有程序突然請求對資源的最大需求,也仍然存在某種排程次序能夠使得每一個程序執行完畢,則稱該狀態是安全的。 安全狀態的檢測與死鎖的檢測類似,因為安全狀態必須要求不能發生死鎖。下面的銀行家演算法與死鎖檢測演算法非常類似,可以結合著做參考對比。
- 利用銀行家演算法避免死鎖
上圖中有五個程序,四個資源。左邊的圖表示已經分配的資源,右邊的圖表示還需要分配的資源。最右邊的E、P以及A分別表示:總資源、已分配資源以及可用資源,注意這三個為向量,而不是具體數值,例如 A=(1020),表示4個資源分別還剩下1/0/2/0。 檢查一個狀態是否安全的演算法如下: - 查詢右邊的矩陣是否存在一行小於等於向量A。如果不存在這樣的行,那麼系統將會發生死鎖,狀態是不安全的。 - 假若找到這樣一行,將該程序標記為終止,並將其已分配資源加到A中。 - 重複以上兩步,直到所有程序都標記為終止,則狀態時安全的。 如果一個狀態不是安全的,需要拒絕進入這個狀態。
- 死鎖的檢測與解除
死鎖的檢測 S為死鎖狀態的充分條件是:當且僅當S狀態的資源分配圖是不可完全簡化的。該充分條件被稱為死鎖定理。 死鎖的解除 ①剝奪資源。從其它程序剝奪足夠數量的資源給死鎖程序,以解除死鎖狀態。 ②撤銷程序。最簡單的撤消程序的方法是使全部死鎖程序都夭折。
第四章 儲存器管理
- 儲存器的層次結構
①CPU暫存器:暫存器 ②主存(記憶體):快取記憶體、主儲存器、磁碟快取 ③輔存:固定磁碟,可移動儲存介質 暫存器和主儲存器又被稱為可執行儲存器。 作業系統的儲存管理,負責對可執行儲存器的分配、回收以及提供在儲存層次間資料移動的管理機制
- 程式的裝入和連結
將一個使用者源程式變為一個可在記憶體中執行的程式,通常都要經過以下幾個步驟: ①編譯,由編譯程式將使用者原始碼編譯成若干個目標模組; ②連結,由連結程式(Linker)將編譯後形成的一組目標模組,以及它們所需要的庫函式連結在一起,形成一個完整的裝入模組; ③裝入,由裝入程式將裝入模組裝入記憶體。
程式的裝入 ①絕對裝入方式(單道程式環境) 編譯時知道程式將駐留在記憶體的位置,將產生絕對地址(即實體地址)的目的碼。絕對裝入程式按照已知地址將裝入模組裝入記憶體,不需對地址修改。 ②可重定位裝入方式 裝入時,對目標程式中指令和資料的各地址重定位(虛擬地址到記憶體地址對映)。(靜態重定位) ③動態執行時裝入方式 在把裝入模組裝入記憶體後,並不立即把裝入模組中的相對地址轉換為絕對地址,而是把這種地址轉換推遲到程式真正要執行時才進行。
程式的連結 ①靜態連結。在程式執行之前,先將各目標模組及它們所需的庫函式,連結成一個完整的裝配模組,以後不再拆開。 ②裝入時動態連結。這是指將使用者源程式編譯後所得到的一組目標模組,在裝入記憶體時,採用邊裝入邊連結的連結方式。 ③執行時動態連結。這是指對某些目標模組的連結,是在程式執行中需要該(目標)模組時,才對它進行的連結。(可加快程式的裝入過程,且可節省大量的記憶體空間)
連續分配管理方式 ①單一連續分配 (單道程式環境下)將記憶體分為系統區和使用者區,系統區僅供OS使用,使用者區僅裝使用者程式(獨佔)。 ②固定分割槽分配 (多道程式環境下)將整個使用者空間劃分為若干個固定大小的區域。被劃分幾個分割槽便允許幾個程式併發執行而不會互相干擾。 ③動態分割槽分配 根據程序的實際需要,動態地為之分配記憶體空間。 資料結構:空閒分割槽表、空閒分割槽鏈。
分割槽分配演算法 順序搜尋法 首次適應演算法 要求空間分割槽鏈以地址遞增的次序連結。分配記憶體時,從鏈首開始順序查詢,直至大小滿足要求,按照作業大小從該空閒分區劃分記憶體空間給請求者,餘下的空閒空間留在空閒鏈中。 迴圈首次適應演算法 從上次找到的空閒分割槽的下一個空閒分割槽開始查詢。設定起始查尋指標,用於指示下一次起始查尋的空閒分割槽,採用迴圈查詢方式。 最佳適應演算法 要求將所有的空閒分割槽按其容量以從小到大的順序形成一空閒分割槽鏈。(容易形成許多難以利用的碎片) 最壞適應演算法 掃描整個空閒分割槽表或連結串列,挑選一個最大的空閒區,分割一部分儲存空間給作業使用。 快速適應演算法(分類搜尋法) 將空閒分割槽根據其容量大小進行分類,對於每一類具有相同容量的所有空閒分割槽,單獨設立一個空閒分割槽連結串列,空閒分割槽的分類是根據程序常用的空間大小進行劃分, 分割槽分配操作:分配記憶體、回收記憶體。
④可重定位分割槽分配 系統對記憶體進行“緊湊”使若干程式移位,用該程式在記憶體的新起始地址去置換原來的起始地址。(獲得新起始地址——動態重定位:系統中增設一個重定位暫存器存放程式和資料在記憶體的起始地址,程式執行時,真正訪問的記憶體地址是相對地址與重定位暫存器中的地址相加而形成的)。
對換 是指把記憶體中暫時不能執行的程序或者暫時不用的程式和資料調出到外存上,以便騰出足夠的記憶體空間,再把已具備執行條件的程序或程序所需要的程式和資料調入記憶體。 在具有對換功能的OS中,通常把外存分為檔案區和對換區。前者用於存放檔案,後者用於存放從記憶體換出的程序。檔案區採取離散分配方式。對換區採用連續分配方式。
- 基本分頁儲存管理方式
連續分配方式形成的許多“碎片”,不進行“緊湊”,利用離散的方式,將一個程序直接分散地裝入到許多不相鄰接的分割槽中。 ①頁面與頁表 分頁儲存管理是將一個程序的邏輯地址空間分成若干個大小相等的片,稱為頁面或頁,併為各頁加以編號,從 0開始,如第 0 頁、第 1 頁等。相應地,也把記憶體空間分成與頁面相同大小的若干個儲存塊,稱為(物理)塊或頁框(frame)。
地址結構:前一部分為頁號P,後一部分為位(偏)移量W(頁內地址)。
系統應能保證程序的正確執行,即能在記憶體中找到每個頁面所對應的物理塊。為此,系統又為每個程序建立了一張頁面映像表,簡稱頁表。實現從頁號到物理塊號的地址對映。
②地址變換機構 實現從邏輯地址到實體地址的轉換。實際上只是將邏輯地址中的頁號,轉換為記憶體中的物理塊號。藉助於頁表來完成。
- 基本的地址變換機構 頁表大多駐留在記憶體中。在系統中只設置一個頁表暫存器 PTR(Page-Table Register),在其中存放頁表在記憶體的始址和頁表的長度。平時,程序未執行時,頁表的始址和頁表長度存放在本程序的 PCB 中。當排程程式排程到某程序時,才將這兩個資料裝入頁表暫存器中。
- 具有快表的地址變換機構 為了提高地址變換速度,可在地址變換機構中增設一個具有並行查尋能力的特殊高速緩衝暫存器,又稱為“聯想暫存器”(Associative Memory),或稱為“快表”,用以存放當前訪問的那些頁表項。
- 基本分段儲存管理方式
①分段系統的基本原理 作業的地址空間被劃分為若干個段,每個段定義了一組邏輯資訊。段的長度由相應的邏輯資訊組的長度決定,因而各段長度不等。
分段地址中的地址結構:段號-段內地址 段表:記錄了該段在記憶體中的起始地址和段的長度。用於實現從邏輯段到實體記憶體去的對映。 地址變換機構
- 邏輯地址中的段號S與段表長度TL比較。若S>TL,段號太大,訪問越界,產生越界中斷訊號。若S<TL,未越界,根據段表始址和該段段號,計算出該段對應段表項的位置,從中讀出該段在記憶體的起始地址。
- 檢查比較段內地址d和該段的段長SL。若d>SL,發出越界中斷訊號。若d<SL,未越界,段基址+段內地址=要訪問的記憶體實體地址。
分頁和分段的區別
- 頁是資訊的物理單位,分頁系統是系統管理的需要。段是資訊的邏輯單位,分段系統是為滿足使用者的需要。 - 頁的大小固定且由系統決定。 段的長度不固定,決定於使用者所編寫的程式,根據資訊的性質劃分的。 - 分頁的使用者程式地址空間是一維的。分段的使用者程式地址空間是二維的。分段是使用者的行為,程式設計師標示一個地址時,既需給出段名,也需給出段內地址。
- 分頁主要用於實現虛擬記憶體,從而獲得更大的地址空間;分段主要是為了使程式和資料可以被劃分為邏輯上獨立的地址空間並且有助於共享和保護。 分段系統的一個突出優點,是易於實現段的共享,即允許若干個程序共享一個或多個分段,且對段的保護也十分簡單易行。
②段頁式儲存管理方式 分頁和分段儲存管理方式都各有其優缺點。分頁系統能有效地提高記憶體利用率,而分段系統則能很好地滿足使用者需要。 基本原理 段頁式系統的基本原理,是分段和分頁原理的結合,程式的地址空間劃分成多個擁有獨立地址空間的段,每個段上的地址空間劃分成大小相同的頁,併為每一個段賦予一個段名。這樣既擁有分段系統的共享和保護,又擁有分頁系統的虛擬記憶體功能。
其地址結構由段號、段內 頁號及頁內地址三部分所組成。
- 虛擬儲存器的基本概念
虛擬儲存器(記憶體)的目的是為了讓實體記憶體擴充成更大的邏輯記憶體,從而讓程式獲得更多的可用記憶體。 為了更好的管理記憶體,作業系統將記憶體抽象成地址空間。每個程式擁有自己的地址空間,這個地址空間被分割成多個塊,每一塊稱為一頁。這些頁被對映到實體記憶體,但不需要對映到連續的實體記憶體,也不需要所有頁都必須在實體記憶體中。當程式引用到不在實體記憶體中的頁時,由硬體執行必要的對映,將缺失的部分裝入實體記憶體並重新執行失敗的指令。 從上面的描述中可以看出,虛擬記憶體允許程式不用將地址空間中的每一頁都對映到實體記憶體,也就是說一個程式不需要全部調入記憶體就可以執行,這使得有限的記憶體執行大程式成為可能。例如有一臺計算機可以產生 16 位地址,那麼一個程式的地址空間範圍是 0~64K。該計算機只有 32KB 的實體記憶體,虛擬記憶體技術允許該計算機執行一個 64K 大小的程式。 區域性性原理 程式在執行時將呈現出區域性性規律,即在一較短的時間內,程式的執行僅侷限於某個部分;相應地,它所訪問的儲存空間也侷限於某個區域。 時間侷限性 典型原因是由於在程式中存在著大量的迴圈操作。 空間侷限性 典型情況是程式的順序執行。
虛擬儲存器的定義 虛擬儲存器是指具有請求調入功能和置換功能,能從邏輯上對記憶體容量加以擴充的一種儲存器系統。其邏輯容量由記憶體容量和外存容量之和所決定,其執行速度接近於記憶體速度,而每位的成本卻又接近於外存。
虛擬儲存器的特徵 ①多次性 多次性是指一個作業被分成多次調入記憶體執行,亦即在作業執行時沒有必要將其全部裝入,只需將當前要執行的那部分程式和資料裝入記憶體即可;以後每當要執行到尚未調入的那部分程式時,再將它調入。 ②對換性 對換性是指允許在作業的執行過程中進行換進、換出,亦即,在程序執行期間,允許將那些暫不使用的程式和資料,從記憶體調至外存的對換區(換出),待以後需要時再將它們從外存調至記憶體(換進);甚至還允許將暫時不執行的程序調至外存,待它們重又具備執行條件時再調入記憶體。換進和換出能有效地提高記憶體利用率。 ③虛擬性 虛擬性是指能夠從邏輯上擴充記憶體容量,使使用者所看到的記憶體容量遠大於實際記憶體容量。實現小記憶體執行大作業,改善記憶體利用率,提高併發程度,增加系統吞吐量。
虛擬儲存器的實現方法 虛擬儲存器的實現,都毫無例外地建立在離散分配的儲存管理方式的基礎上。 ①請求分頁系統 硬體支援 請求分頁的頁表機制 請求頁表增加四個欄位作為請求分頁的資料結構。請求分頁系統中頁表諸項:頁號、物理塊號、狀態位P、訪問欄位A、修改位M、外存地址。 缺頁中斷機構 每當所要訪問的頁面不在記憶體時,便產生一缺頁中斷,請求OS將所缺之頁調入記憶體。 地址變換機構 在分頁系統地址變換機構的基礎上,再為實現虛擬儲存器而增加了某些功能而形成的,如產生和處理缺頁中斷,以及從記憶體中換出一頁的功能等等。
實現請求分頁的軟體:在硬體的支援下,將程式正在執行時所需的頁面(尚未在記憶體中的)調入記憶體,再將記憶體中暫時不用的頁面從記憶體置換到磁碟上。 ②請求分段系統 硬體支援:請求分段的段表機制、缺段中斷機構、地址變換機構
記憶體分配策略和分配演算法 ①最小物理塊數的確定。 ②物理塊的分配策略
- 固定分配區域性置換
- 可變分配全域性置換
- 可變分配拒不置換
③物理塊的分配演算法
- 平均分配演算法
- 按比例分配演算法
- 考慮優先權的分配演算法
調頁策略 ①調入頁面的時機
- 預調頁策略 如果程序的許多頁是存放在外存的一個連續區域中,則一次調入若干個相鄰的頁,會比一次調入一頁更高效些。
- 請求調頁策略 當程序在執行中需要訪問某部分程式和資料時,若發現其所在的頁面不在記憶體,便立即提出請求,由OS將其所需頁面調入記憶體。
②確定從何處調入頁面
- 全部從對換區調入所需頁面
- 不會被修改的檔案都直接從檔案區調入,那些可能被修改的部分,從對換區調入。
- Unix方式。未執行過的頁面從檔案去調入,曾經執行過但又被換出的頁面,從對換區調入。
頁面調入過程 每當程式所要訪問的頁面未在記憶體(存在位為“0”)。 ①向CPU發缺頁中斷。 ②中斷處理程式保留CPU環境去分析中斷原因。 ③轉入缺頁中斷處理程式。 ④通過查詢頁表得到該頁所在外存物理塊。 ⑤若記憶體未滿,啟動磁碟I/O,調該缺頁入記憶體,修改頁表。 ⑥若記憶體已滿,置換演算法將記憶體中一頁換出,調該缺頁入記憶體,修改頁表,置該頁面存在位為“1”,頁表項寫入快表。
頁面置換演算法 在程序執行過程中,若其所要訪問的頁面不在記憶體而需把它們調入記憶體,但記憶體已無空閒空間時,為了保證該程序能正常執行,系統必須從記憶體中調出一頁程式或資料送磁碟的對換區中。但應將哪個頁面調出,須根據一定的演算法來確定。通常,把選擇換出頁面的演算法稱為頁面置換演算法。
頁面置換演算法的主要目標是使頁面置換頻率最低(也可以說缺頁率最低)。
①最佳置換演算法 其所選擇的被淘汰頁面,將是以後永不使用的,或許是在最長(未來)時間內不再被訪問的頁面。採用最佳置換演算法,通常可保證獲得最低的缺頁率。 ②先進先出(FIFO)頁面置換演算法 該演算法總是淘汰最先進入記憶體的頁面,即選擇在記憶體中駐留時間最久的頁面予以淘汰。 該演算法會將那些經常被訪問的頁面也被換出,從而使缺頁率升高。 ③最近最久未使用(LRU)置換演算法 選擇最近最久未使用的頁面予以淘汰。該演算法賦予每個頁面一個訪問欄位,用來記錄一個頁面自上次被訪問以來所經歷的時間 t,當須淘汰一個頁面時,選擇現有頁面中其t值最大的,即最近最久未使用的頁面予以淘汰。 硬體支援:暫存器和棧。 ④Clock置換演算法 迴圈地檢查各頁面的使用情況。 ⑤最少使用(LFU)置換演算法 在採用最少使用置換演算法時,應為在記憶體中的每個頁面設定一個移位暫存器,用來記錄該頁面被訪問的頻率。該置換演算法選擇在最近時期使用最少的頁面作為淘汰頁。 ⑥頁面緩衝演算法(PBA) 將一個被淘汰的頁放入兩個連結串列中的一個,即如果頁面未被修改,就將它直接放入空閒連結串列中;否則,便放入已修改頁面的連結串列中。 當有一個未被修改的頁要換出時,實際上並不將它換出記憶體,而是把該未被修改的頁所在的物理塊掛在自由頁連結串列的末尾。類似地,在置換一個已修改的頁面時,也將其所在的物理塊掛在修改頁面連結串列的末尾。利用這種方式可使已被修改的頁面和未被修改的頁面都仍然保留在記憶體中。當該程序以後再次訪問這些頁面時,只需花費較小的開銷,使這些頁面又返回到該程序的駐留集中。
請求分段儲存管理方式 硬體支援 ①段表機制 段表項中增加了增補位。這是請求分段式管理中所特有的欄位,用於表示本段在執行過程中是否做過動態增長。 ②缺段中斷機構 段不是定長的,這使對缺段中斷的處理要比對缺頁中斷的處理複雜。 ③地址變換機構 因為被訪問的段並非全在記憶體,所以在地址變換時,若發現所要訪問的段不在記憶體,必須先將所缺的段調入記憶體,並修改段表,然後才能再利用段表進行地址變換。
分段的共享與保護 ①共享段表 共享程序計數count、存取控制欄位、段號。 ②共享段的分配與回收 ③分段保護
- 越界檢查(邏輯地址空間的段號與段表長度進行比較,段內地址與段長進行比較)。
- 存取控制檢查。
- 環保護機構(一個程式可以訪問駐留在相同環或較低特權環中的資料,一個程式可以呼叫駐留在相同環或較高特權環中的服務)。
第五章 裝置管理
- I/O系統
裝置控制器 裝置控制器是計算機中的一個實體,其主要職責是控制一個或多個I/O裝置,以實現I/O裝置和計算機之間的資料交換。
裝置控制器的基本功能 ①接收和識別命令:相應的控制暫存器,存放接收的命令和引數,進行譯碼。 ②資料交換:CPU與控制器之間、控制器與I/O裝置之間,資料交換。 ③標識和報告裝置的狀態:控制器記錄裝置的狀態供CPU瞭解。 ④地址識別:控制器中配置地址譯碼器,識別其所控制的裝置的地址。 ⑤資料緩區:主機速率高,I/O裝置速率低,暫存資料匹配速率再進行資料傳送。 ⑥差錯控制:I/O裝置傳來的資料,裝置控制器進行差錯檢測,若錯,將差錯檢測碼置位,並向CPU報告,CPU處理,資料作廢,重新傳送。 I/O通道 I/O通道處於CPU和裝置控制器之間,是一種特殊的處理機,它具有執行I/O指令的能力,並通過執行通道(I/O)程式來控制I/O操作。指令型別單一、通道與CPU共享記憶體。 通道型別 ①位元組多路通道 按位元組交叉方式工作的通道。 ②陣列選擇通道 按陣列方式進行資料傳送, ③陣列多路通道 將陣列選擇通道傳輸速率高和位元組多路通道能使各子通道(裝置)分時並行操作的優點相結合而形成的一種新通道。資料傳送是按陣列方式進行的。
匯流排系統 在計算機系統中的各部件,如 CPU、儲存器以及各種I/O裝置之間的聯絡,都是通過匯流排來實現的。匯流排的效能是用匯流排的時鐘頻率、頻寬和相應的匯流排傳輸速率等指標來衡量的。
- I/O控制方式
①程式I/O方式(不斷迴圈測試狀態暫存器中的忙/閒標誌busy) ②中斷驅動I/O控制方式(CPU中斷處理,I/O裝置可與CPU並行工作) ③直接暫存器訪問(DMA)I/O控制方式(資料傳輸的基本單位是資料塊,所傳送的資料是從裝置直接送入記憶體的或者相反,僅在傳送一個或多個數據塊的開始和結束時,才需CPU干預,整塊資料的傳送是在控制器的控制下完成的) ④I/O通道控制方式 DMA方式的發展,進一步減少CPU的干預,把對一個數據塊的 讀(或寫)為單位的干預減少為對一組資料塊的讀(或寫)及有關的控制和管理為單位的干預。實現CPU、通道、I/O裝置三者的並行操作。
- 緩衝管理
引入緩衝區的原因 ①緩和CPU與I/O裝置間速度不匹配的矛盾。 ②減少對CPU的中斷頻率,放寬對CPU中斷響應時間的限制。 ③提高CPU和I/O裝置之間的並行性。
單緩衝 在單緩衝情況下,每當使用者程序發出一I/O請求時,作業系統便在主存中為之分配一緩衝區。 雙緩衝 實現雙向傳輸。一個用作傳送緩衝區,另一個用作接收緩衝區。 迴圈緩衝 當輸入與輸出或生產者與消費者的速度相差甚遠時,可將多個緩衝組織成迴圈緩衝形式。使輸入程序和計算程序並行執行。可能出現系統受計算限制(輸入程序阻塞)和系統受I/O限制(計算程序阻塞)。
緩衝池 提高緩衝區的利用率,既可用於輸入又可用於輸出的公用緩衝池。
- I/O軟體
I/O軟體的總體設計目標是高效率和通用性。前者是要確保I/O裝置與CPU的併發性,以提高資源的利用率;後者則是指儘可能地提供簡單抽象、清晰而統一的介面,採用統一標準的方法,來管理所有的裝置以及所需的I/O操作。
I/O系統的層次及功能
- 使用者層軟體 實現與使用者互動的介面。
- 裝置獨立性軟體 負責實現與裝置驅動器的統一介面、裝置命名、裝置的保護以及裝置的分配與釋放等,同時為裝置管理和資料傳送提供必要的儲存空間。
- 裝置驅動程式 與硬體直接相關,負責具體實現系統對裝置發出的操作指令,驅動I/O裝置工作的驅動程式。
- 中斷處理程式 用於儲存被中斷程序的 CPU 環境,轉入相應的中斷處理程式進行處理,處理完後再恢復被中斷程序的現場後返回到被中斷程序
- 硬體 執行I/O操作。
中斷處理程式的處理過程 ①喚醒被阻塞的驅動(程式)程序 ②保護被中斷程序的CPU環境 ③轉入相應的裝置處理程式 ④中斷處理 ⑤恢復CPU的現場並退出中斷
裝置驅動程式 是I/O程序與裝置控制器之間的通訊程式。 裝置驅動程式的功能 ①接收由裝置獨立性軟體發來的命令和引數,並將命令中的抽象要求轉換為具體要求。 ②檢查使用者 I/O 請求的合法性,瞭解I/O裝置的狀態,傳遞有關引數,設定裝置的工作方式。 ③發出I/O命令。如果裝置空閒,便立即啟動I/O裝置去完成指定的I/O操作;如果裝置處於忙碌狀態,則將請求者的請求塊掛在裝置佇列上等待。 ④及時響應由控制器或通道發來的中斷請求,並根據其中斷型別呼叫相應的中斷處理程式進行處理。 ⑤對於設定有通道的計算機系統,驅動程式還應能夠根據使用者的I/O請求,自動地構成通道程式。
裝置獨立性軟體 裝置無關性:應用程式獨立於具體使用的物理裝置。 裝置獨立性軟體的主要功能 ①執行所有裝置的公有操作。 ②向用戶層(或檔案層)軟體提供統一介面。
- 裝置分配
裝置分配中的資料結構 裝置控制表、控制器控制表、通道控制表和系統裝置表 裝置分配時應考慮的因素 ①裝置的固有屬性 對獨佔、共享、可虛擬三種裝置應採取不同的分配策略。 ②裝置分配演算法 先來先服務、優先順序高者呼叫。 ③裝置分配中的安全性 安全分配方式、不安全分配方式
SPOOLing技術 利用一道程式模擬離線輸入時的外圍控制機功能,把低速I/O裝置的資料傳送到高速磁碟上(離線輸入),再利用另一道程式離線輸出時的外圍控制機功能,把高速磁碟的資料傳送到低速輸出裝置上(離線輸出)。。這樣,便可在主機的直接控制下,實現離線輸入、輸出功能。此時的外圍操作與CPU對資料的處理同時進行,我們把這種在聯機情況下實現的同時外圍操作稱為 SPOOLing,或稱為假離線操作。
SPOOLing系統的組成 ①輸入井和輸出井 ②輸入緩衝區和輸出緩衝區 ③輸入程序SPi和輸出程序SPo SPOOLing系統的特點 ①提高了I/O的速度。 ②將獨佔裝置改造為共享裝置。 ③實現了虛擬裝置功能。
- 磁碟儲存器的管理
磁碟結構 盤面(Platter):一個磁碟有多個盤面; 磁軌(Track):盤面上的圓形帶狀區域,一個盤面可以有多個磁軌; 扇區(Track Sector):磁軌上的一個弧段,一個磁軌可以有多個扇區,它是最小的物理儲存單位,目前主要有 512 bytes 與 4 K 兩種大小; 磁頭(Head):與盤面非常接近,能夠將盤面上的磁場轉換為電訊號(讀),或者將電訊號轉換為盤面的磁場(寫); 制動手臂(Actuator arm):用於在磁軌之間移動磁頭; 主軸(Spindle):使整個盤面轉動。 磁碟排程演算法 讀寫一個磁碟塊的時間的影響因素有: 尋道時間(制動手臂移動,使得磁頭移動到適當的磁軌上) 旋轉時間(主軸轉動盤面,使得磁頭移動到適當的扇區上) 實際的資料傳輸時間 其中,尋道時間最長,因此磁碟排程的主要目標是使磁碟的平均尋道時間最短。 ①先來先服務 這是一種最簡單的磁碟排程演算法。它根據程序請求訪問磁碟的先後次序進行排程。此演算法的優點是公平、簡單,且每個程序的請求都能依次地得到處理,不會出現某一程序的請求長期得不到滿足的情況。但此演算法由於未對尋道進行優化,致使平均尋道時間可能較長。僅適用於請求磁碟I/O的程序數目較少的場合。 ②最短尋道時間優先 要求訪問的磁軌與當前磁頭所在的磁軌距離最近,以使每次的尋道時間最短。雖然平均尋道時間比較低,但是不夠公平。如果新到達的磁軌請求總是比一個在等待的磁軌請求近,那麼在等待的磁軌請求會一直等待下去,也就是出現飢餓現象。具體來說,兩端的磁軌請求更容易出現飢餓現象。 ③掃描演算法 該演算法不僅考慮到欲訪問的磁軌與當前磁軌間的距離,更優先考慮的是磁頭當前的移動方向。總是按一個方向來進行磁碟排程,直到該方向上沒有未完成的磁碟請求,然後改變方向。因為考慮了移動方向,因此所有的磁碟請求都會被滿足,解決了SSTF的飢餓問題。 ④迴圈掃描演算法 CSCAN演算法規定磁頭單向移動。將最小磁軌號緊接著最大磁軌號構成迴圈,進行迴圈掃描。 ⑤NStepSCAN和FSCAN排程演算法 NStepSCAN演算法 N步SCAN演算法是將磁碟請求佇列分成若干個長度為N的子佇列,磁碟排程將按 FCFS演算法依次處理這些子佇列。而每處理一個佇列時又是按SCAN演算法,對一個佇列處理完後,再處理其他佇列。當正在處理某子佇列時,如果又出現新的磁碟 I/O請求,便將新請求程序放入其他佇列,這樣就可避免出現粘著現象。 FSCAN演算法 FSCAN演算法實質上是N步SCAN演算法的簡化,即FSCAN只將磁碟請求佇列分成兩個子佇列。
磁碟快取記憶體 磁碟快取記憶體的形式 磁碟快取記憶體是指利用記憶體中的儲存空間來暫存從磁碟中讀出的一系列盤塊中的資訊。這裡的快取記憶體是一組在邏輯上屬於磁碟,而物理上是駐留在記憶體中的盤塊。 資料交付方式 資料交付是指將磁碟快取記憶體中的資料傳送給請求者程序。(資料交付、指標交付)。 置換演算法 最近最久未使用演算法LRU、最近未使用演算法NRU及最少使用演算法LFU。 除了考慮到最近最久未使用這一原則外,還考慮了以下幾點: 訪問頻率、可預見性、資料一致性。 週期性地寫回磁碟 在UNIX系統中專門增設了一個修改(update)程式,使之在後臺執行,該程式週期性地呼叫一個系統呼叫SYNC。該呼叫的主要功能是強制性地將所有在快取記憶體中已修改的盤塊資料寫回磁碟。
提高磁碟I/O速度的其它方法 ①提前讀 使用者(程序)對檔案進行訪問時,經常採用順序訪問方式,即順序地訪問檔案各盤塊的資料。在這種情況下,在讀當前塊時可以預知下一次要讀的盤塊。因此,可以採取預先讀方式,即在讀當前塊的同時,還要求將下一個盤塊(提前讀的塊)中的資料也讀入緩衝區。 ②延遲寫 延遲寫是指在緩衝區A中的資料,本應立即寫回磁碟,但考慮到該緩衝區中的資料在不久之後可能還會再被本程序或其它程序訪問(共享資源),因而並不立即將該緩衝區 A 中的資料寫入磁碟,而是將它掛在空閒緩衝區佇列的末尾。當該緩衝區A仍在佇列中時,任何訪問該資料的程序,都可直接讀出其中的資料而不必去訪問磁碟。 ③優化物理塊的分佈 使磁頭的移動距離最小。 ④虛擬盤 所謂虛擬盤,是指利用記憶體空間去模擬磁碟,又稱為RAM盤。虛擬盤的主要問題是:它是易失性儲存器。與磁碟快取記憶體的主要區別在於: 虛擬盤中的內容完全由使用者控制,而高速磁碟快取中的內容則是由OS控制的。
廉價磁碟冗餘陣列 它是利用一臺磁碟陣列控制器,來統一管理和控制一組(幾臺到幾十臺)磁碟驅動器,組成一個高度可靠的、快速的大容量磁碟系統。磁碟陣列採取並行交叉存取。