1. 程式人生 > >作業系統原理總結

作業系統原理總結

一、基礎知識點

1. 作業系統的資源管理技術

資源管理解決物理資源數量不足合理分配資源這兩個問題。 
PM2VM 
作業系統虛擬機器為使用者提供了一種簡單、清晰、易用、高效的計算機模型。虛擬機器的每種資源都是物力資源通過複用虛擬抽象而得到的產物。 
虛擬機器提供程序執行的邏輯計算環境。從概念上來說,一個程序執行在一臺虛擬機器上,可以認為一個程序就是一臺虛擬機器,一臺虛擬機器就是一個程序。

  • 複用空分複用共享時分複用共享。 
    a. 空分複用共享(space-multiplexed sharing): 將資源從“空間”上分割成更小的單位供不同程序使用。在計算機系統中,記憶體和外存(磁碟)等是空分複用共享的。 
    b. 時分複用共享(time-multiplexed sharing): 將資源從“時間”上分割成更小的單位供不同程序使用。在計算機系統中,處理器和磁碟機等是時分複用共享的。

  • 虛擬:對資源進行轉化、模擬或整合,把一個物理資源轉變成多個邏輯上的對應物,也可以把多個物理資源變成單個邏輯上的對應物,即建立無須共享獨佔資源的假象,或建立易用且多於實際物理資源的虛擬資源假象,以達到多使用者共享一套計算機物理資源的目的。虛擬技術可用於外部裝置(外部裝置同時聯機操作(SPOOLing)),儲存資源(虛擬記憶體)和檔案系統(虛擬檔案系統(Virtual File System, VFS))中。

    複用和虛擬相比較,複用所分割的是實際存在的物理資源,而虛擬則實現假想的同類資源。虛擬技術解決某類物理資源不足的問題,提供易用的虛擬資源和更好的執行環境。

  • 抽象:通過建立軟體來遮蔽硬體資源的物理特性和實現細節,簡化對硬體資源的操作、控制和使用。

    複用和虛擬的主要目標是解決物理資源數量不足的問題,抽象則用於處理系統複雜性,重點解決資源易用性。

2. 系統呼叫

  • 系統呼叫: 為給應用程式的執行提供良好環境,核心提供了一系列具有預定功能的服務例程,通過一組稱為系統呼叫(System Call)的介面呈現給使用者,系統呼叫把應用程式的請求傳送至核心,呼叫相應的服務例程完成所需處理,將處理結果返回給應用程式。 
    OS_System_Call

    注:系統呼叫的編號稱為功能號

  • 系統呼叫的執行過程: 當CPU執行程式中編寫的由訪管指令(supervisor, 也稱自陷指令(trap)或中斷指令(interrupt), 指引起處理器中斷的機器指令)實現的系統呼叫時會產生異常訊號,通過陷阱機制(也稱異常處理機制

    ,當異常或中斷髮生時,處理器捕捉到一個執行執行緒,並且將控制權轉移到作業系統中某一個固定地址的機制),處理器的狀態由使用者態(user mode, 又稱目態或普通態)轉變為核心態(kerbel mode, 又稱管態或核心態),進入作業系統並執行相應服務例程,以獲得作業系統服務。當系統呼叫執行完畢時,處理器再次切換狀態,控制返回至發出系統呼叫的程式。

  • 系統呼叫是應用程式獲得作業系統服務的唯一途徑

系統呼叫的作用: 
1. 核心可以基於許可權和規則對資源訪問進行裁決,保證系統的安全性。 
2. 系統呼叫對資源進行抽象,提供一致性介面,避免使用者在使用資源時發生錯誤,且程式設計效率大大提高。

系統呼叫與函式呼叫的區別: 
1. 呼叫形式和實現方式不同。功能號 VS 地址; 使用者態轉換到核心態 VS 使用者態。 
2. 被呼叫程式碼的位置不同。 動態呼叫 + 作業系統 VS 靜態呼叫 + 使用者級程式。 
3. 提供方式不同。 作業系統 VS 程式語言。

3. 作業系統核心

  • 核心: 是一組程式模組,作為可信軟體來提供支援程序併發執行的基本功能和基本操作,通常駐留在核心空間,運行於核心態,具有直接訪問硬體裝置和所有記憶體空間的許可權,是僅有的能夠執行特權指令的程式。

  • 核心的功能: 
    a. 中斷處理。中斷處理是核心中最基本的功能,也是作業系統賴以活動的基礎。 
    b. 時鐘管理。時鐘管理是核心的基本功能。 
    c. 短程排程。短程排程的職責是分配處理器,按照一定的策略管理處理器的轉讓,以及完成保護和恢復現場工作。 
    d. 原語管理。 原語是核心中實現特定功能的不可中斷過程。

核心是作業系統對裸機的第一次改造,核心和裸機組成了第一層虛擬機器,程序在虛擬機器上執行。

4. 處理器狀態: 核心態和使用者態

  • 僅在核心態下才能使用的指令稱為特權指令,執行這些指令不僅影響執行程式自身,而且還會干擾其他程式及作業系統。 非特權指令在核心態和和使用者態下都能工作。

現代計算機為處理器建立硬體標誌位,稱處理器狀態位,通常是程式狀態字(Program Status Word, PSW)中的一位,來將處理器的狀態設定為核心態或使用者態。

  • 使用者態向核心態轉換的情況: 
    a. 程式請求作業系統服務, 執行系統呼叫。 
    b. 在程式執行時產生中斷事件(如I/O操作完成),執行程式被中斷,轉向中斷處理程式處理。 
    c. 在程式執行時產生異常事件(如在目態下執行特權指令),執行程式被打斷,轉向異常處理程式工作。

以上三種情況都是通過中斷機制發生,可以說中斷和異常是使用者態到核心態轉換的僅有途徑。

  • 使用者棧和核心棧 
    a. 使用者棧是使用者程序空間中的一塊區域。用於儲存應用程式的子程式(函式)間相互呼叫的引數,返回值,返回點和子程式的區域性變數。 
    b. 核心棧是記憶體中作業系統空間的一塊區域。用於儲存中斷現場和儲存作業系統程式(函式)間相互呼叫的引數,返回值,返回點和程式的區域性變數。

5. 中斷(Interupt)

  • 中斷:程式執行過程中遇到急需處理的事件時,暫時終止現行程式在CPU上的執行,轉而執行相應的事件處理程式,待處理完成後再返回斷點或排程其他程式的執行過程。

  • 中斷的分類: 
    a. 外中斷(又稱中斷或非同步中斷): 來自處理器之外的中斷訊號,如,時鐘中斷、鍵盤中斷等。外中斷可分為可遮蔽中斷和非可遮蔽中斷。 
    b. 內中斷(又稱異常或同步中斷),來自處理器內部的中斷訊號,如,訪管中斷,硬體故障中斷,程式性中斷等。內中斷不能被遮蔽

  • 中斷和異常的響應: 發現中斷源 → 保護現場 → 轉向中斷/異常事件處理程式執行 → 恢復現場

6. 程序

  • 程序:具有獨立功能的程式在某個資料集合上的一次執行活動,也是作業系統進行資源分配和保護的基本單位。 
    a. 從原理角度看,程序是支援程式執行的一種系統機制,它對處理器上執行程式的活動進行抽象。 
    b. 從實現角度看,程序是一種資料結構,用來準確地刻畫執行程式的狀態和系統動態變化狀況。

  • 程序狀態的七態模型

    OS_SEVEN

    a. 新建態(new): 程序被建立,尚未進入就緒佇列。 
    b. 就緒態(ready): 程序具備執行條件,等待系統分配處理器。 
    c. 掛起就緒態(ready suspend):程序具備執行條件,但目前在外存中。 
    d. 執行態(running): 程序佔有處理器正在執行。 
    e. 終止態(exit): 程序達到正常結束點或被其他原因所終止,下一步將被撤銷。 
    f. 等待態(wait): 又稱阻塞態或休眠態。程序正在等待某個事件完成,目前不具備執行條件。 
    g. 掛起等待態(blocked suspend): 程序正在等待某個事件完成,並且在外存中。

  • 程式和資料刻畫程序的靜態特徵,稱為程序控制塊的一種資料結構刻畫程序的動態特徵。程序映像(process image)包括程序控制塊、程序程式塊、程序核心塊、程序資料塊等要素。

  • 程序控制塊(Process Control Block, PCB):程序存在的唯一標識,作業系統掌握程序的唯一資料結構和管理程序的主要依據。包括標識資訊、現場資訊和控制資訊等資訊。

  • 程序佇列(process queue):處於同一狀態的所有程序的PCB連結在一起的資料結構。 有兩種佇列組織方式:連結方式和索引方式。

  • 程序切換必定在核心態而非使用者態發生。

  • 程序可以分為兩部分,資源集合和執行緒集合。程序要支撐執行緒執行,為執行緒提供虛擬地址空間和各種資源。程序封裝管理資訊,執行緒封裝執行資訊。

    OS_MultiThread

7. 處理器排程

  • 處理器排程層次: 
    OS_Scheduling 
    a. 高階排程: 又稱作業排程、長程排程。從輸入系統的一批作業(job, 使用者提交給作業系統計算的一個獨立任務)中按照預定的排程策略挑選若干作業進入記憶體,為其分配所需資源並建立對應作業的使用者程序。 
    b. 中級排程: 又稱平衡排程,中程排程。根據記憶體資源情況決定記憶體所能容納的程序數目,並完成外存和記憶體中程序對換工作。 
    c. 低階排程:又稱程序排程/執行緒排程,短程排程。根據某種原則決定就緒佇列中那個程序/執行緒先獲得處理器,並將處理器出讓給它使用。

  • 低階排程演算法: 
    a. 先來先服務(First Come First Server, FCFS)演算法。 
    b. 最短作業優先(Shortest Job First, SJF)演算法。 
    c. 最短剩餘時間優先(Shortest Remaining Time First, SRTF)演算法: 假設當前某程序/執行緒正在執行,如果有新程序/執行緒移入就緒佇列,若它所需的CPU執行時間比當前執行的程序/執行緒所需的剩餘CPU時間還短,搶佔式最短作業優先演算法強行剝奪當前執行者的控制權,排程新程序/執行緒執行。 
    d. 最高響應比優先(Highest Response Ratio First, HRRF)演算法:非剝奪式演算法。其中,響應比 = (作業已等待時間 + 作業處理時間) / 作業處理時間。 
    e. 優先順序排程演算法:優先順序高的選擇程序/執行緒優先選擇。 
    f. 輪轉排程(Round-Robin, RR)演算法: 也稱時間片排程。就緒佇列的程序輪流執行一個時間片。 
    g. 多級反饋佇列(Multi-Level Feedback Queue, MLFQ)演算法

    衡量排程演算法的效能指標: 
    a. 資源利用率: CPU利用率 = CPU有效工作時間/(CPU有效工作時間 + CPU空閒等待時間) 
    b. 吞吐率: 單位時間內CPU處理作業的個數。 
    c. 公平性: 確保每個程序都能獲得合理的CPU份額和其他資源份額,不會出現飢餓現象。 
    d. 響應時間: 從互動式程序提交一個請求(命令)直到獲得響應之間的時間間隔。 
    e. 週轉時間: 批處理使用者從向系統提交作業開始到作業完成為止的時間間隔。 
    平均週轉時間:T = (ni=1ti∑i=1nti ) / n , 其中 titi 表示作業i的週轉時間。 
    平均帶權作業週轉時間: T = (ni=1wi∑i=1nwi) / n, 其中 wi=ti/tkwi=ti/tk , titi 表示作業i的週轉時間。 tktk 表示作業i的執行時間。

8. 程序的互動

  • 程序互斥(Mutual Exclusion): 若干程序因相互搶奪獨佔型資源而產生的競爭制約關係。
  • 程序同步(Synchronization): 為完成共同任務的併發程序基於某個條件來協調其活動,因為需要在某些位置上排定執行的先後次序而等待、傳遞資訊或訊息所產生的協作制約關係。

    資源競爭會引發兩個控制問題: 
    a. 死鎖: 一組程序因爭奪資源陷入永遠等待的狀態。 
    b. 飢餓: 一個可執行程序由於由於其他程序總是優先於它,而被排程程式無限期地拖延而不能被執行。

9. 臨界區管理

  • 併發程序中與共享變數有關的程式段稱為臨界區(Critical Section)。共享變數所代表的資源稱為臨界資源(Critical Resource),即一次僅能供一個程序使用的資源。

  • 臨界區排程原則: 
    a. 擇一而入。 一次之多隻有一個程序進入臨界區內執行。 
    b. 忙則要等。 如果已有程序在臨界區中, 試圖進入此臨界區的其他程序應等待。 
    c. 有限等待。 進入臨界區內的程序應在有限時間內退出。

  • 臨界區管理的軟體演算法:Peterson演算法。 
    為每個程序設定標誌,當標誌值為 true 時表示該程序要求進入臨界區,另外再設定一個指示器 turn 以指示可以由哪個程序進入臨界區,當 turn = i 時則可由 Pi 進入臨界區。

    /* Peterson 演算法 */
    
    bool inside[2];
    inside[0] = false;
    inside[1] = false;
    enum { 0, 1 } turn;
    
    /* 程序0 */
    process P0(){
        inside[0] = true;               //請求...
        turn = 1;
        while(inside[1] && turn == 1) ; //等待...
    
        /*臨界區 */
    
        inside[0] = false;              //歸還...
    }
    
    /* 程序1 */
    process P1(){
        inside[1] = true;               //請求...
        turn = 0;
        while(inside[0] && turn == 0) ; //等待...
    
        /*臨界區 */
    
        inside[1] = false;              //歸還...
    }

    Peterson演算法滿足臨界區管理的三個原則。

  • 臨界區管理的硬體設施: 
    a. 關中斷。 在程序進入臨界區時關中斷,程序退出臨界區時開中斷。 
    b. 測試並設定指令。 利用機器指令TS(Test and Set)實現臨界區的上鎖和開鎖原語操作。 
    c. 對換指令。 利用對換指令實現臨界區的上鎖和開鎖原語操作。

10. 訊號量(samaphore)和PV操作

PV操作都是原語操作, 不可中斷。

  • 訊號量和PV操作

    // 訊號量
    typedef struct semaphore {
        int value;                 // 訊號量值
        struct pcb* list;          // 指向“等待該訊號量的程序佇列”的指標
    };  
    
    // P操作
    void P(semaphore s){
        s.value--;                 // 訊號量值減一
    
        // 如果訊號量值小於0, 執行P操作的程序呼叫sleep(s.list)阻塞自己,
        // 被置成“等待訊號量s”狀態,並移入s訊號量佇列,轉向程序排程程式。
        if(s.value < 0) sleep(s.list);
    }
    
    // V操作
    void V(semaphore s){
        s.value++;                 // 訊號量值加一
    
        // 如果訊號量小於等於0, 則呼叫wakeup(s.list)釋放一個等待訊號量s的程序,
        // 並轉換成就緒態, 程序則繼續執行。
        if(s.value <= 0) wakeup(s.list);
    }

    a. 若訊號量值 s.value 為正值, 此值等於在封鎖程序之前對訊號量 s 可施行P操作的次數,即,s所代表的實際可用的資源數。 
    b. 若訊號量值 s.value 為負值, 其絕對值等於登記在 s 訊號量佇列中的等待程序的數目。 
    c. 通常P操作意味著請求一個資源,V操作意味著釋放一個資源。在一定條件下,P操作也可表示掛起程序的操作,V操作代表喚醒被掛起程序的操作。

  • 訊號量實現互斥

    semaphore mutex;
    mutex = 1;
    
    //程序Pi, i = 12 ..., n
    process Pi(){
        P(mutex);
    
        /* 臨界區 */
    
        V(mutex);
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

11. 管程

  • 管程(monitor):代表共享資源的資料結構及併發程序在其上執行的一組構成就構成管程,管程被請求和釋放資源的程序鎖呼叫。

    OS_manitor

    a. 條件變數。 管程內的一種資料結構。只有在管程中才能被訪問,程序可以在條件變數上等待或被喚醒。只能通過 wait() 和 signal() 原語操作來控制。 
    b. wait() 原語。 掛起呼叫程序並釋放管程,直至另一個程序在條件變數上執行 signal()。 
    c. signal() 原語。如果有其他的程序因對條件變數執行 wait() 而被掛起,便釋放之。 如果沒有程序在等待,那麼相當於空操作,訊號不被儲存。

12. 死鎖

  • 死鎖的主要解決方法: 死鎖防止、死鎖避免、死鎖檢測和恢復。

  • 死鎖產生的必要條件: 
    a. 互斥條件。 臨界資源是獨佔資源,程序應互斥且排他地使用這些資源。 
    b. 佔有和等待條件。 程序在請求資源得不到滿足而等待時,不釋放已佔有的資源。 
    c. 不剝奪條件。已獲資源只能由程序資源釋放,不允許被其他程式剝奪。 
    d. 迴圈等待條件。 存在迴圈等待鏈,其中每個程序都在等待下一個程序所持有的資源。

    死鎖的防止就是去破壞死鎖產生的必要條件。 如,使資源可同時使用(破壞互斥條件)、靜態分配資源(破壞佔有和等待條件)、剝奪排程(破壞不剝奪條件)、層次分配策略(迴圈等待條件)等。

  • 死鎖避免: 銀行家演算法 (額…自己百度去吧。 = =!)

  • 死鎖檢測和恢復: 程序-資源分配圖(額…還是去百度吧。) 
    a. 如果程序-資源分配圖中無環路,此時系統沒有死鎖。 
    b. 如果程序-資源分配圖中有環路,且每個資源類中只有一個資源,則系統發生死鎖。 
    c. 如果程序-資源分配圖中有環路,且所涉及的資源類有多個資源,則不一定會發生死鎖。

13. 可變分割槽儲存管理

  • 可變分割槽儲存分配演算法: 
    a. 最先適應分配演算法。從未分配區的開始位置開始掃描,在找到的第一個能滿足長度要求的空閒區上分配儲存空間。 
    b. 下次適應分配演算法。從未分配區上次掃描結束處開始順序查詢,在找到的第一個能滿足長度要求的空閒區上分配儲存空間。 
    c. 最優適應分配演算法。掃描整個未分配區,選擇能滿足使用者程序要求的最小分割槽分配儲存空間。 
    d. 最壞適應分配演算法。掃描整個未分配區,選擇能滿足使用者程序要求的最大分割槽分配儲存空間。 
    e. 快速適應分配演算法。為經常用到的長度的空閒區設立單獨的空閒區連結串列。

14. 分頁儲存管理

  • 基本概念: 
    a. 頁面。 程序邏輯地址空間分成大小相等的區,每個區稱為頁面或頁。(@楊領well注: 頁面的本質是邏輯地址空間
    b. 頁框(kuàng, 0.0)。 又稱頁幀。記憶體實體地址空間分成大小相等的區,其大小和頁面大小相等,每個區就是一個頁框。(@楊領well注: 頁框的本質是實體地址空間
    c. 邏輯地址。分頁儲存器的邏輯地址由頁號和頁內偏移兩部分組成。

    OS_PageOffset

    d. 記憶體頁框表。頁框表的表項給出物理塊使用情況:0為空閒,1為佔用。 
    e. 頁表。頁表是作業系統為程序建立的,是程式頁面和記憶體頁框的對照表,頁表的每一欄指明程式中的某一頁面和分得的頁框之間的關係。

  • 分頁儲存管理的地址轉換

    OS_PageTable

  • 翻譯快表:也稱轉換後援緩衝(Translation Look_aside Buffer, TLB)。用來存放程序最近訪問的部分頁表項。(@楊領well注: 翻譯快表之於頁表類似於Cache之於儲存器)

  • 二級頁表:把整個頁表分割成許多小頁表,每個稱為頁表頁,每個頁表頁含有若干個頁表表項。頁表頁允許分散對應不連續的頁框。為了找到頁表頁,應建立地址索引,稱為頁目錄表,其表項指出頁表頁起始地址。

  • 二級頁表實現邏輯地址到實體地址轉換的過程: 由硬體“頁目錄表基址暫存器”指出當前執行程序的頁目錄表的記憶體起始地址,加上“頁目錄位移”作為索引,可找到頁表頁在記憶體的起始地址,再以“頁目錄位移”作為索引,找到頁表頁在記憶體的起始位置,再以“頁表頁位移”作為索引,找到頁表頁的表項,此表項中包含一個頁面對應的頁框號,由頁框號和頁內偏移便可生成實體地址。

    OS_TwoLvPageTable

    @楊領well注: 類比於書的目錄,找某一段內容的時候,先在目錄上找到對應的章節,再在對應的章節下面找具體的知識點。比如,我要在《作業系統原理》中查“多級頁表”。首先我知道它是在儲存管理一章的,於是就找到了“第四章 儲存管理”(類似於找到了頁目錄表)。 然後在第四章下面找“多級頁表”(類似於在頁目錄表下面找具體的頁表頁)。最後找到“多級頁表”對應的頁碼(類似於在頁表頁中找到其對應的頁框)。最後查閱對應的章節頁碼(類似於讀取對應頁框的資料)。

15. 分段儲存管理

OS_Segment

分段和分頁的比較: 
a. 分段是資訊的邏輯單位,由源程式的邏輯結構及含義所決定,是使用者可見的,段長由使用者根據需要來確定,段起始地址可以從任何記憶體地址開始。引入的目的是滿足使用者模組化程式設計的需要。 
b. 分頁是資訊的物理單位,與源程式的邏輯無關,是使用者不可見的,頁長由系統(硬體)決定,頁面只能從頁大小的整數倍地址開始。引入目的是實現離散分配並提高記憶體利用率

16. 虛擬儲存管理

  • 虛擬儲存管理的基本思路:

    OS_VirtualMemory

    把磁碟空間當做記憶體的一部分,程序的程式和資料部分放在記憶體中,部分放在磁碟上。程式執行時,它執行的指令或訪問的資料在哪裡由儲存管理負責判斷,並針對情況採取響應的措施。

  • 請求分頁虛存管理: 將程序資訊副本存放在外存中,當它被排程投入執行時,程式和資料沒有全部裝進記憶體,僅裝入當前使用頁面,程序執行過程中訪問到不在記憶體的頁面時,產生缺頁異常,再由系統自動調入。

  • 全域性頁面替換策略(頁面替換演算法的作用範圍是整個系統,不考慮程序的屬主): 
    a. 最佳頁面替換演算法(Optimal Replacement, OPT)。 淘汰不再訪問的頁或者距現在最長時間後才訪問的頁。 
    b. 先進先出頁面替換演算法(First in First Out Replacement, FIFO)。淘汰在記憶體中駐留時間最長的頁。 
    c. 最近最少使用頁面替換演算法(Least Recently Used Replacement, LRU)。 淘汰最近一段時間內最久未被使用的頁面。 
    d. 第二次機會頁面替換演算法(Second Chance Replacement, SCR)。 首先檢查FIFO頁面佇列中的隊首,這是最早進入記憶體的頁面,如果其“引用位”為0,那麼它最早進入且未被引用,此頁被淘汰。如果其“引用位”為1,說明雖然它最早進記憶體,但最近仍在使用,於是將“引用位”清零,並把這個頁面移到隊尾,把它看做新調入的頁面,再給它一次機會。 
    e. 時鐘頁面替換演算法(Clock Policy Replacement, Clock)。與SCR演算法思路一致。只是用迴圈佇列來構造頁面佇列,佇列指標指向可能被淘汰的頁面。如果佇列指標指向的頁的“引用位”為1,則將其置為0,同時佇列指標指向下一個頁。

  • 區域性頁面替換演算法(頁面替換演算法的作用侷限於程序自身,要為程序維護稱為工作集的一組頁面): 
    a. 區域性最佳頁面替換演算法(Local Minimum Replacement, MIN)。 在t時刻時,若頁面P在未來(t, t+delta)時間段內未被引用,則它被淘汰。 
    b. 工作集置換演算法。 在t時刻時,若頁面P在未來(t-delta, t)時間段內未被引用,則它被淘汰。 
    c. 模擬工作集替換演算法。 
    d. 缺頁頻率替換演算法

17. 請求段頁式虛擬記憶體管理

OS_SegmentPage

  • 虛地址以程式的邏輯結構劃分為段。
  • 實地址劃分為位置固定、大小相等的頁框(塊)。
  • 邏輯地址分為三個部分:段號s、段內頁號p、頁內位移d。對於使用者而言,段式虛擬地址應該由段號s和段內位移d’組成,作業系統內部自動把d’解釋成段內頁號p和頁內位移號d。

18. I/O硬體原理:I/O控制方式

  • 輪詢方式: 又稱程式直接控制方式。使用查詢指令測試裝置控制器的忙閒狀態位,確定記憶體和裝置是否能能交換資料。(@楊領well注:所謂輪詢,就好比,老溼依次問每一個童鞋:“有問題沒?”, 如果沒問題,就繼續問下一個童鞋。如果這個童鞋有問題,這個老溼就停下了解決這個問題。然後又繼續詢問下一個童鞋。)
  • 中斷方式: 要求CPU和裝置控制器及裝置之間存在中斷請求線,裝置控制器的狀態暫存器有相應的中斷允許位。 
    a. 程序發出啟動I/O指令。 
    b. 裝置控制器檢查狀態暫存器的內容,執行相應的I/O操作,一旦傳輸完成,裝置控制器通過中斷請求線發出I/O中斷訊號。 
    c. CPU收到並響應I/O中斷後,轉向裝置的I/O中斷處理程式執行。 
    d. 中斷處理程式執行資料讀取操作,將I/O緩衝暫存器的內容寫入記憶體。操作結束後退出中斷程式恢復之前的狀態。 
    e. 執行中斷前之前執行的程序。 
    (@楊領well注: 類似於老溼在上面講課,有童鞋問問題時,老溼就記錄下自己講到的位置,然後取回答童鞋的問題,回答完之後,又回到剛剛講課的地方繼續講課)

  • DMA(Direct Memory Access, 直接儲存器存取)方式: 記憶體和裝置之間有一條資料通路成塊的傳輸資料,無須CPU幹9預,實際資料傳輸操作由DMA直接完成。

  • 通道方式: CPU在執行主程式時遇到I/O請求,啟動在指定通道上選址的裝置,一旦啟動成功,通道開始控制裝置進行操作,這時CPU就可以執行其他任務並與通道並行工作,直到I/O操作完成;當通道發出I/O操作結束中斷時,處理器才響應並停止當前工作,轉而處理I/O操作結束時間。

19. I/O軟體原理

  • I/O中斷處理程式: 通常是裝置驅動程式的組成部分之一。檢查裝置狀態暫存器內容,判斷產生中斷原因,根據I/O操作的完成情況進行相應處理。若資料傳輸有錯,應向上層軟體報告裝置出錯資訊,實施重新執行;若正常結束,應喚醒等待傳輸的程序,使其轉換為就緒態;若有等待傳輸的I/O命令,應通知相關軟體啟動下一個I/O請求。
  • I/O裝置驅動程式:裝置驅動程式是裝置專有的。把使用者提交的邏輯I/O請求轉化為物理I/O的啟動和執行。同時監督裝置是否正確執行,管理資料緩衝區,進行必要的糾錯處理。
  • 獨立於裝置的I/O軟體
  • 使用者空間的I/O軟體

20. 緩衝技術

  • 緩衝技術的基本思想: 當程序執行寫操作輸出資料時,先向系統申請一個輸出緩衝區,然後將資料送至緩衝區,若是順序寫請求,則不斷地把資料填入緩衝區,直至裝滿為止,此後程序可以繼續計算,同時,系統將緩衝區的內容寫在裝置上。當程序執行讀操作輸入資料時,先向系統申請一個輸入緩衝區,系統將裝置上的一條物理記錄讀至緩衝區,根據要求把當前所需要的邏輯記錄從緩衝區中選出並傳送給程序。
  • 單緩衝: 是最簡單的緩衝技術,每當有I/O請求時,作業系統就在記憶體的系統區中開設一個緩衝區。不允許多個程序同時對一個緩衝器操作。

    OS_SingleBuffer

  • 雙緩衝: CPU可把輸出到裝置的資料放入其中一個緩衝器(區)、讓裝置慢慢處理;然後,它又可以從另一個為終端設定的緩衝器(區)中讀取所需要的輸入資料。

    OS_TwoBuffer

  • 多緩衝: 是把多個緩衝區連線起來組成兩部分,一部分專門用於輸入,另一部分專門用於輸出的緩衝結構。

    OS_MultiBuffer

21. 驅動排程技術

  • 磁碟的物理結構: 
    OS_DISK 
    磁碟包括多個盤面,每個盤面有一個讀寫磁頭,所有的磁頭都固定在唯一的移動臂上同時移動。一個盤面上的讀寫磁頭的軌跡稱為磁軌,讀寫磁頭下的所有磁軌形成柱面,一個磁軌又可以劃分為多個扇區。在磁碟上定位某個物理記錄需要知道其柱面號磁頭號以及扇區號。定位物理記錄時,磁頭到達指定扇區的時間稱為查詢時間, 選擇磁頭號並旋轉至指定扇區的時間稱為搜尋延遲
  • 磁軌(柱面)的搜尋定位演算法: 
    a. 先來先服務演算法(First Come First Server algorithm, FCFS)。 
    b. 最短查詢時間優先演算法: 總是執行查詢時間最短的請求。 
    c. 掃描演算法: 移動臂來回的掃過所有柱面,掃描處遇到I/O請求便進行處理。 
    d. 分步掃描演算法: 將I/O請求分為長度為N的子佇列,按FIFO演算法依次處理每個佇列,而每個子佇列採用掃描演算法,處理完一個後再服務下一個佇列。 
    e. 電梯排程演算法: 又稱LOOK演算法。 
    OS_Elevator 
    磁頭號由外向內遞增。 
    f. 迴圈掃描演算法: 移動臂總是從0號柱面至最大號柱面順序掃描,然後直接返回0號柱面重復進行,歸途中不提供服務(而掃描演算法歸途是要提供服務的)。

22. 裝置獨立性

  • 裝置獨立性: 使用者通常不指定物理裝置,而是指定邏輯裝置,使得使用者作業和物理裝置分離開來,再通過其他途徑建立邏輯裝置和物理裝置之間的對映,裝置的這種特性稱為裝置獨立性。

23. 虛擬裝置

  • 外部裝置同時聯機操作(Simultaneous Peripheral Operations On Line, SPPPLing): 
    OS_SPOOLing

    a. 預輸入程式。 控制資訊從輸入裝置至輸入井,填寫預輸入表以便在作業執行過程中要求輸入資訊時可以隨時找到其存放位置。 
    b.