1. 程式人生 > >作業系統-IO系統

作業系統-IO系統

一、前言

I/O系統是OS的重要組成部分,完成使用者提出I/O的請求。

二、I/O系統

I/O軟體的層次結構: (1)使用者層I/O軟體,實現與使用者互動的介面。 (2)裝置獨立性軟體,實現使用者程式與裝置驅動程式的統一介面。 (3)裝置驅動程式,與硬體直接相關,用於具體實現系統對裝置發出的操作命令。 (4)中斷處理程式,使用者儲存cpu環境,轉入相應的中斷處理程式,處理完畢之後再恢復被中斷程序的現場,返回被中斷的程序。 I/O系統中包括I/O系統介面和軟體/硬體介面。I/O系統介面主要用於高層與I/O系統的介面,軟體/硬體介面主要用於中斷處理程式和用於不同裝置的裝置驅動程式。

三、I/O裝置與裝置控制器

3.1裝置

分為塊裝置和字元裝置、獨佔裝置和共享裝置、高速和低速裝置。

裝置與控制器之間的介面,資料訊號線,控制訊號線和狀態訊號線。

3.2裝置控制器

裝置控制器應具有以下功能:接收和識別命令,執行處理器發來的命令;資料交換;標識和識別裝置的狀態;地址識別;資料緩衝區;差錯控制。

裝置控制器組成: (1)裝置控制器與處理機的介面:用於實現cpu與裝置控制器的通訊。 (2)裝置控制器與裝置的介面:裝置控制器可以連線多個裝置。 (3)I/O邏輯:用於實現對裝置的控制。

3.3記憶體映像I/O

驅動程式將抽象I/O命令轉換出一系列具體的命令、引數等資料裝入裝置控制器的相應暫存器,由控制器來執行這些命令。

3.4I/O通道

通道為了減少cpu與I/O裝置的負擔,在主機配置多個外設時,cpu的負擔仍然很重。 通道型別:位元組多路通道、陣列選擇通道、陣列多路選擇通道。

四、中斷結構與處理程式

4.1中斷

       中斷是指cpu對I/O裝置發來的中斷訊號的一種相應。

       陷入是指cpu內部事件所引起的中斷。        中斷向量表,由中斷控制器確定請求中斷的中斷號,根據中斷號尋找中繼向量表,從中取得中斷處理程式的入口地址。        中斷存在優先順序的區別。當多箇中斷源發出中斷時,系統可以採取兩種策略,一種是遮蔽中斷,一種是巢狀中斷。

4.2中斷處理程式

(1)測定是否有未響應的中斷訊號。
(2)保護中斷程序的cpu環境。 (3)轉入相應的裝置處理程式。 (4)中斷處理 (5)恢復cpu現場並退出中斷。

五、裝置驅動程式

裝置驅動程式的處理過程:
(1)將抽象要求轉換為具體要求 (2)對服務請求進行校驗 (3)檢查裝置狀態 (4)傳送必要的引數 (5)啟動I/O裝置 對I/O裝置的控制方式: (1)輪詢可程式設計的I/O方式 (2)使用中斷的可程式設計方式 (3)直接儲存器訪問方式 (4)I/O通道控制方式

六、與裝置無關的I/O軟體

6.1裝置分配的資料結構

(1)裝置控制表
(2)控制器控制表 (3)通道控制表 (4)系統裝置表

6.2獨佔裝置的分配程式

(1)分配裝置(2)分配控制器(3)分配通道

6.3邏輯裝置表

用於進行邏輯裝置名到物理裝置名的對映。包含邏輯裝置名、物理裝置名和裝置驅動程式的入口地址。

七、使用者層I/O軟體

      SPOOLing 系統主要有以下三部分:         (1) 輸入井和輸出井。這是在磁碟上開闢的兩個大儲存空間。輸入井是模擬離線輸入時 的磁碟裝置,用於暫存 I/O 裝置輸入的資料;輸出井是模擬離線輸出時的磁碟,用於暫存用 戶程式的輸出資料。         (2) 輸入緩衝區和輸出緩衝區。為了緩和 CPU 和磁碟之間速度不匹配的矛盾,在記憶體 中要開闢兩個緩衝區:輸入緩衝區和輸出緩衝區。輸入緩衝區用於暫存由輸入裝置送來的 資料,以後再傳送到輸入井。輸出緩衝區用於暫存從輸出井送來的資料,以後再傳送給輸 出裝置。        (3) 輸入程序 SPi和輸出程序 SPo。這裡利用兩個程序來模擬離線 I/O 時的外圍控制機。 其中,程序 SPi模擬離線輸入時的外圍控制機,將使用者要求的資料從輸入機通過輸入緩衝區 再送到輸入井,當 CPU 需要輸入資料時,直接從輸入井讀入記憶體;程序 SPo模擬離線輸出 時的外圍控制機,把使用者要求輸出的資料先從記憶體送到輸出井,待輸出裝置空閒時,再將 輸出井中的資料經過輸出緩衝區送到輸出裝置上。

八、緩衝區管理

緩衝區的引入 (1)緩和cpu與I/O速度不匹配的矛盾。 (2)減少對cpu的中斷頻率,放寬中斷相應時間的限制。 (3)解決資料粒度不匹配的問題。 (4)提高cpu與I/O裝置的並行度。

迴圈緩衝區: (1)  Getbuf 過程。當計算程序要使用緩衝區中的資料時,可呼叫 Getbuf 過程。該過程 將由指標 Nextg 所指示的緩衝區提供給程序使用,相應地,須把它改為現行工作緩衝區, 並令 Current 指標指向該緩衝區的第一個單元,同 時 將 Nextg 移向下一個 G 緩衝區。類 似 地 , 每 當 輸入程序要使用空緩衝區來裝入資料時,也呼叫 Getbuf 過程,由該過程將指標 Nexti 所指示的緩衝區提供給輸入程序使用,同時將 Nexti 指標移向下一個 R 緩衝區。  (2) Releasebuf 過程。當計算程序把 C 緩衝區中的資料提取完畢時,便呼叫 Releasebuf 過程,將緩衝區 C 釋放。此時,把該緩衝區由當前(現行)工作緩衝區 C 改為空緩衝區 R。類 似地,當輸入程序把緩衝區裝滿時,也應呼叫 Releasebuf 過程,將該緩衝區釋放,並改為 G 緩衝區。

緩衝區的構成:        (1) 空緩衝佇列 emq。這是由空緩衝區所鏈成的佇列。其隊首指標 F(emq)和隊尾指標 L(emq)分別指向該佇列的首緩衝區和尾緩衝區。         (2) 輸入佇列 inq。這是由裝滿輸入資料的緩衝區所鏈成的佇列。其隊首指標 F(inq)和 隊尾指標 L(inq)分別指向該佇列的首緩衝區和尾緩衝區。         (3) 輸出佇列 outq。這是由裝滿輸出資料的緩衝區所鏈成的佇列。其隊首指標 F(outq)和 隊尾指標 L(outq)分別指向該佇列的首緩衝區和尾緩衝區
緩衝區的使用方式:        (1) 收容輸入。在輸入程序需要輸入資料時,便呼叫 Getbuf(emq)過程,從空緩衝佇列 emq 的隊首摘下一空緩衝區,把它作為收容輸入工作緩衝區 hin。然後,把資料輸入其中, 裝滿後再呼叫 Putbuf(inq,hin)過程,將該緩衝區掛在輸入佇列 inq 上。         (2) 提取輸入。當計算程序需要輸入資料時,呼叫 Getbuf(inq)過程,從輸入佇列 inq 的 隊首取得一個緩衝區,作為提取輸入工作緩衝區(sin),計算程序從中提取資料。計算程序用 完該資料後,再呼叫 Putbuf(emq,sin)過程,將該緩衝區掛到空緩衝佇列 emq 上。        (3) 收容輸出。當計算程序需要輸出時,呼叫 Getbuf(emq)過程從空緩衝佇列 emq 的隊 首取得一個空緩衝區,作為收容輸出工作緩衝區 hout。當其中裝滿輸出資料後,又呼叫 Putbuf(outq,hout)過程,將該緩衝區掛在 outq 末尾。         (4) 提取輸出。由輸出程序呼叫 Getbuf(outq)過程,從輸出佇列的隊首取得一裝滿輸出 資料的緩衝區,作為提取輸出工作緩衝區 sout。在資料提取完後,再呼叫 Putbuf(emq,sout) 過程,將該緩衝區掛在空緩衝佇列末尾

九、磁碟儲存器

  1. 先來先服務(FCFS,First Come First Served) :先來先服務原則
  2. 最短尋道時間優先(SSTF,Shortest Seek Time First) :下一次尋道是尋找離當前位置距離最短的,會出現飢餓現象。
  3. SCAN 演算法:自裡向外然後自外向裡。 
  4. 迴圈掃描(CSCAN)演算法 :到達最外層磁軌時,返回最靠裡的磁軌執行。
  5.  NStepSCAN 演算法 :分為多個長度為N的請求子佇列。
  6.  FSCAN 演算法 :分為兩個請求佇列。