1. 程式人生 > >第六章 輸入輸出系統(一)

第六章 輸入輸出系統(一)

6.1 I/O系統的功能、模型和介面

1.I/O系統的組成:

  • 需要用於輸入、輸出和儲存資訊的裝置;
  • 需要相應的裝置控制器;
  • 控制器與CPU連線的高速匯流排;
  • 有的大中型計算機系統,配置I/O通道;
    在這裡插入圖片描述

2.I/O系統的基本功能

  • 隱藏物理裝置的細節隱藏物理裝置細節,方便使用者
    使用者使用抽象的I/O命令即可
  • 實現裝置無關性,方便使用者
    使用者可用抽象的邏輯裝置名來使用裝置,同時也提高了OS的可移植性和易適應性。
  • 提高處理機和裝置的並行性,提高利用率:緩衝區管理
  • 對I/O裝置進行控制:控制方式、裝置分配、裝置處理
  • 確保對裝置正確共享:虛擬裝置及裝置獨立性等
  • 錯誤處理

3.I/O軟體的層次結構

①使用者層軟體
實現與使用者互動的介面,使用者可直接呼叫在使用者層提供的、與I/O操作有關的庫函式,對裝置進行操作。
②裝置獨立軟體
用於實現使用者程式與裝置驅動器的統一介面、裝置命名、裝置的保護以及裝置的分配與釋放等,同時為裝置管理和資料傳送提供必要的儲存空間。
③裝置驅動程式
與硬體直接相關,用於具體實現系統對裝置發出的操作指令,驅動I/O裝置工作的驅動程式。
④中斷處理程式
用於儲存被中斷程序的CPU環境,轉入相應的中斷處理程式進行處理,處理完後再恢復被中斷程序的現場後,返回到被中斷程序。

在這裡插入圖片描述
在這裡插入圖片描述

4.I/O系統的分層

  • 中斷處理程式
    處於I/O系統的底層,直接與硬體進行互動
  • 裝置驅動程式
    處於次底層,是程序和控制器之間的通訊程式
    功能:將上層發來的抽象I/O請求,轉換為對I/O裝置的具體命令和引數,並把它裝入到裝置控制其中的命令和引數暫存器中
  • 裝置獨立性軟體
    包括裝置命名、裝置分配、資料緩衝等軟體

5.I/O系統介面

  1. 塊裝置介面
  • 塊裝置
    資料的存取和傳輸都是以資料塊為單位的裝置。基本特徵是傳輸速率較高、可定址。磁碟裝置的I/O常採用DMA方式。
  • 特點:
    ①隱藏了磁碟的二維結構:塊裝置介面隱藏了磁碟地址是二維結構的情況:每個扇區的地址需要用磁軌號和扇區號來表示。
    ②將抽象命令對映為低層操作:塊裝置介面將上層發來的抽象命令,對映為裝置能識別的較低層具體操作。
  1. 流裝置介面
  • 字元裝置:
    資料的存取和傳輸是以字元為單位的裝置。如鍵盤、印表機等。基本特徵是傳輸速率較低、不可定址,常採用中斷驅動方式。
  • get和put操作:
    由於字元裝置是不可定址的,因而對它只能採取順序存取方式。(使用者程式)獲取或輸出字元的方法是採用get和put操作。
  • in-control指令:
    因字元裝置的型別非常多,且差異甚大,系統以統一的方式提供了一種通用的in-control指令來處理它們(包含了許多引數,每個引數表示一個與具體裝置相關的特定功能)。
  1. 網路通訊介面
  • 通過某種方式,把計算機連線到網路上。
  • 作業系統必須提供相應的網路軟體和網路通訊介面,使得計算機能通過網路與網路上的其它計算機進行通訊,或上網瀏覽。

6.2 I/O裝置和裝置控制器

1.I/O裝置的型別

  • 按傳輸速率分類:
    低速、中速、高速(鍵盤、印表機、磁碟)
    使用:儲存裝置、輸入輸出裝置
  • 按資訊交換的單位分類:
    塊裝置:有結構、速率高、可定址、DMA方式控制
    字元裝置:無結構、速率低、不可定址、中斷方式控制
  • 按裝置的共享屬性分類:
    獨佔:印表機
    共享:一個時刻上仍然是隻被一個程序佔用。可定址、可隨機訪問的色後備。磁碟。
    虛擬:使一臺獨佔裝置變換為若干臺邏輯裝置,供給若干使用者“同時使用”。

2.裝置與控制器之間的介面

與控制器的介面有三種類型的訊號

  • 資料訊號線(進出資料轉換、緩衝後傳送)
  • 控制訊號線(讀\寫\移動磁頭等控制)
  • 狀態訊號線
    在這裡插入圖片描述

2.裝置控制器

  • 裝置並不直接與CPU通訊
  • 計算機中的一個實體——“裝置控制器”負責控制一個或多個I/O裝置,以實現I/O裝置和計算機之間的資料交換。
  • 控制器是CPU與I/O裝置之間的介面,作為中間人接收從CPU發來的命令,並去控制I/O裝置工作,以使處理機脫離繁雜的裝置控制事務。
  • 常作成介面卡插入計算機
  • 可編址,不同類
    控制一個裝置時只有一個地址,若連線多個裝置則含有多個裝置地址
    管理的複雜性因不同裝置而異,分為字元裝置控制器、塊裝置控制器。

3.裝置控制器的基本功能

  1. 接收和識別CPU命令(控制暫存器:存放命令和引數)
  2. 標識和報告裝置的狀態(狀態暫存器)
  3. 資料交換(資料暫存器)
  4. 地址識別(控制器識別裝置地址、暫存器地址。地址譯碼器)
  5. 資料緩衝(協調I/O與CPU的速度差距)
  6. 差錯控制

4.裝置控制器的組成

  1. 裝置控制器與處理機的介面
  2. 裝置控制器與裝置的介面
  3. I/O邏輯
    在這裡插入圖片描述
    在這裡插入圖片描述

5.I/O通道

  • CPU只需向通道傳送一條I/O指令即可不再幹預後續操作。
  • 通道形成通道程式,執行I/O操作,完成後向CPU發中斷訊號。
  • 主要目的:建立更獨立的I/O操作,解放CPU。
    資料傳送的獨立
    I/0操作的組織、管理及結束處理也儘量獨立。
  • 實際上I/O通道是一種特殊的處理機:
    指令型別單一,只用於I/O操作;
    通道沒有記憶體,它與CPU共享記憶體

6.通道型別

  1. 位元組多路通道
  • 一個通道常通過多個子通道連線多個裝置控制器。
  • 多個裝置,通過非分配型子通道以位元組為單位交叉輪流使用主通道傳輸自己的資料。
  • 主通道掃描子通道速率足夠快,子通道上的裝置速率又不太高時,一般不丟失資訊。
  • 適用於並行、低速裝置。
  1. 陣列選擇通道
  • 針對高速裝置:分配型子通道
  • 裝置利用子通道佔用通道後,一段時間內一直獨佔,直至裝置傳送完畢釋放。
  • 利用率低。
  1. 陣列多路通道
  • 結合上述兩種方式。
  • 含多個非分配型子通道。資料傳送則按陣列方式進行。

6.3 中斷機構和中斷處理程式

中斷在作業系統中有特殊而重要的地位,沒有它就不可能實現多道程式。
中斷是I/O系統最低的一層,也是裝置管理的基礎。

1.中斷和陷入

  • 中斷:CPU對I/O裝置發來的中斷訊號的一種響應,中斷是由外部裝置引起的,又稱外中斷。
  • 陷入:由CPU內部事件所引起的中斷,通常把這類中斷稱為內中斷或陷入(trap)。
  • 中斷和陷入的主要區別:是訊號的來源。

2.中斷向量表

中斷向量表:為每種裝置配以相應的中斷處理程式,並把該程式的入口地址,放在中斷向量表的一個表項中,併為每一個裝置的中斷請求,規定一箇中斷號,它直接對應於中斷向量表的一個表項中。
在這裡插入圖片描述

3.對多中斷源的處理方式

  1. 遮蔽(禁止)中斷:
  • 所有中斷都將按順序依次處理。
  • 當處理機正在處理一箇中斷時,將遮蔽掉所有新到的中斷,讓它們等待,直到處理機已完成本次中斷的處理後,處理機再去檢查並處理。
  • 優點是簡單,但不能用於對實時性要求較高的中斷請求。
    在這裡插入圖片描述
  1. 巢狀中斷:
  • 中斷優先順序:系統根據不同中斷訊號源,對服務要求的緊急程度的不同,它們分別規定不同的優先順序。
  • 當同時有多個不同優先順序的中斷請求時,CPU優先響應最高優先順序的中斷請求;
  • 高優先順序的中斷請求,可以搶佔正在執行低優先順序中斷的處理機,該方式類似於基於優先順序的搶佔式程序排程。
    在這裡插入圖片描述

3.中斷處理程式

  1. 主要工作
    ①進行程序上下文的切換
    ②對處理中斷訊號源進行測試
    ③讀取裝置狀態
    ④修改程序狀態
  2. 中斷處理流程
    ①測定是否有未響應的中斷訊號
    ②保護被中斷程序的CPU環境
    ③轉入相應的裝置處理程式
    ④中斷處理
    ⑤恢復CPU的現場
    在這裡插入圖片描述

6.4 裝置驅動程式

1.裝置驅動程式是I/O系統的高層與裝置控制器之間的通訊程式,其主要任務:

  1. 接收上層軟體發來的抽象I/O要求,如read、write等命令;
  2. 再把它轉化為具體要求,傳送給裝置控制器,啟動裝置去執行。
  3. 反方向,它也將由裝置控制器發來的訊號,傳送給上層軟體。

2.驅動程式的功能

(1)接收由與上層裝置無關的軟體發來的命令和引數,並將命令中的抽象要求,轉換為與裝置相關的低層操作序列;
(2)檢查使用者I/O請求的合法性,瞭解I/O裝置的工作狀態,傳遞與I/O裝置操作有關的引數,設定裝置的工作方式;
(3)發出I/O命令,如果裝置空閒,便立即啟動I/O裝置,完成指定的I/O操作;如果裝置忙碌,則將請求者掛在裝置佇列上等待;
(4)及時響應由裝置控制器發來的中斷請求,並根據其中斷型別,呼叫相應的中斷處理程式進行處理。

3.裝置驅動程式的特點

(1)驅動程式是與裝置無關的軟體和裝置控制器之間通訊和轉換的程式。(位置)
(2)驅動程式與裝置控制器和I/O裝置的硬體特性,緊密相關。 (硬體特性)
(3)驅動程式與I/O裝置所採用的I/O控制方式緊密相關。 (硬體特性)
(4)由於驅動程式與硬體緊密相關,因而其中的一部分必須用匯編語言編寫。
(5)驅動程式應允許可重入,一個正在執行的驅動程式常會在一次呼叫完成前被再次呼叫。

4.裝置處理方式

(1)為每一類裝置設定一個程序,專門用於執行這類裝置的I/O操作。這種方式比較適合於較大的系統;
(2)在整個系統中設定一個I/O管理程序專門用於執行系統中所有各類裝置的I/O操作。也可以設定一個輸入程序和一個輸出程序,分別處理系統中的輸入或輸出操作;
(3)不設定專門的裝置處理程序,而只為各類裝置設定相應的裝置驅動程式,供使用者或系統程序呼叫。這種方式目前用得較多。

5.驅動程式處理過程

  1. I/O裝置與控制器間的通訊轉換程式
    瞭解抽象命令,瞭解控制器內部的暫存器結構
  2. 與硬體密切相關,每類裝置配備一種驅動程式
    功能:接受解釋指令(有通道的系統,自動通道程式)、相關判斷、傳送裝置命令、響應中斷
    特點:控制方式不同程式不同,部分固化進硬體,程式碼可重入。

6.I/O控制方式

  1. 程式I/O方式
  • 向控制器傳送一條I/O指令;啟動輸入裝置輸入資料;把狀態暫存器busy=1。
  • 然後不斷測試標誌。為1:表示輸入機尚未輸完一個字,CPU繼續對該標誌測試;直到為0:資料已輸入控制器資料暫存器中。
  • CPU取控制器中的資料送入記憶體單元,完成一個字的I/O 。
    在這裡插入圖片描述
  1. 中斷驅動I/O方式
  • CPU向相應的裝置控制器發出一條I/O命令
  • 然後立即返回繼續執行任務。
  • 裝置控制器按照命令的要求去控制指定I/O裝置。
  • 這時CPU與I/O裝置並行操作。
  • I/O裝置輸入資料中,無需CPU干預,因而可使CPU與I/O裝置並行工作。從而提高了整個系統的資源利用率及吞吐量。
    在這裡插入圖片描述
  1. 直接儲存器訪問DMA(位元組—塊)
    ①該方式的特點是:
  • 資料傳輸的基本單位是資料塊;
  • 所傳送的資料是從裝置直接送入記憶體的,或者直接從記憶體進裝置;不需要CPU操作。
  • CPU干預進一步減少:僅在傳送一個或多個數據塊的開始和結束時,才需CPU干預,整塊資料的傳送是在控制器的控制下完成的。
    ②DMA控制器的組成
  • 主機與DMA控制器的介面;
  • DMA控制器與塊裝置的介面;
  • I/O控制邏輯。
    在這裡插入圖片描述
    ③為實現主機與控制器之間塊資料的直接交換,必須設定如下四類暫存器:
  • 資料暫存器DR:暫存裝置到記憶體或從記憶體到裝置的資料。
  • 記憶體地址暫存器MAR:它存放把資料從裝置傳送到記憶體的起始的目標地址或記憶體原地址。
  • 資料計數器DC:存放本次CPU要讀或寫的字(節)數。
  • 命令/狀態暫存器CR:用於接收從CPU發來的I/O命令或有關控制和狀態資訊。
    ④DMA工作過程
  • CPU先向磁碟控制器傳送一條讀命令。
  • 該命令被送到命令暫存器CR中。
  • 同時傳送資料讀入到記憶體的起始地址,該地址被送入MAR中;
  • 要讀資料的字數則送入資料計數器DC中;
  • 將磁碟中的資料原地址直接送入DMA控制器的I/O控制邏輯上,按裝置狀態啟動磁頭到相應位置。
  • 啟動DMA控制器控制邏輯開始進行資料傳送
    DMA控制器讀入一個數據到資料暫存器DR中,然後傳到記憶體MAR地址中;
    接著MAR+1,DC-1,判斷DC是否為0,如否,繼續,反之控制器發中斷請求,傳送完畢。
    在這裡插入圖片描述
  1. I/O通道控制方式(組織傳送的獨立)
  • 通道是一種通過執行通道程式管理I/O操作的控制器,它使主機(CPU和記憶體)與I/O操作之間達到更高的並行程度。由於它的任務是管理實現輸入/輸出操作,提供一種傳送通道,所以將這種部件稱作“通道”。
  • 通道程式由一系列通道指令構成。
  • CPU指令->裝置驅動程式解讀->通道程式->通道
  • 通道指令一般包含下列資訊:
    操作碼。規定指令所執行的操作。
    記憶體地址。
    計數。表示本指令所要操作的位元組數。
    通道程式結束位。用以表示程式是否結束。
    記錄結束標誌。表示該指令是否與下條指令有關。

6.5 與裝置無關的I/O軟體

1.裝置獨立性的基本含義:

  • 指應用程式中所使用的裝置,不侷限於使用某個具體的物理裝置,也稱為裝置無關性。
  • 為了實現裝置獨立性,在裝置驅動程式之上設定一層軟體,稱為與裝置無關的I/O軟體,或裝置獨立性軟體。
  • 裝置無關的軟體是I/O系統最高層軟體,但它和其下的裝置驅動程式之間的界限,將隨作業系統和裝置的不同而有所差異。

2.裝置分配中的資料結構

  • 裝置控制表
  • 控制器控制表
  • 通道控制表
  • 系統裝置(總)表

3.裝置分配需考慮的因素

  • 裝置固有屬性:獨佔、共享、獨佔但可虛擬。根據屬性採取互斥、次序排程、虛擬等不同分配策略。
  • 裝置分配演算法(對不同程序的裝置請求序列,如何進行選擇),常採用兩種:
    1. FCFS
    2. 優先順序高者優先
  • 裝置分配的安全性:程序開始I/O後就阻塞直到I/O完成。不“請求和保持”(安全的);允許連續I/O請求,是不安全的,此類分配方式需進行安全性檢查。

4.獨佔裝置的分配過程

基本分配步驟(一個有通道的例子):

  1. 分配裝置:
    根據請求裝置名,查詢SDT,找到DCT;
    狀態、安全性等因素都可能導致本申請程序阻塞,掛入DCT等待佇列中。
  2. 分配控制器
    通過1步分配裝置後,從DCT找到COCT;
    檢查COCT狀態字,若忙碌,程序PCB掛到其等待佇列
  3. 分配通道
    COCT找到CHCT
    判斷狀態,…
    當上述三步都通過後,才可啟動裝置進行資料傳輸

5.裝置分配程式的改進細節

  1. 增加裝置的獨立性
    程序使用邏輯裝置名提出I/O請求。
    系統從SDT中依次找下去,直到找到一個該類裝置中空閒可用的進行分配。
  2. 考慮多通路情況
    控制器、通道也是反覆查詢,直到找到一條通路。