計算機操作系統筆記06

第6章 輸入輸出系統 —— I/O系統

管理對象:

I/O設備和相應的設備控制器(I/O系統組成)

基本任務:

完成用戶提出的I/O請求,
提高I/O速率、改善I/O設備的利用率。
爲更高層進程方便使用設備提供手段

6.1 I/O系統的功能、模型和接口

1)主要功能:

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

2)I/O/系統的層次結構和模型

層次結構:系統中的設備管理模塊分爲若干個層次
層間操作:下層爲上層提供服務,完成輸入輸出功能中的某些子功能,並屏蔽功能實現的細節。

I/O軟件的分層

①用戶層軟件
實現與用戶交互的接口,用戶可直接調用在用戶層提供的、與I/O操作有關的庫函數,對設備進行操作。
②設備獨立軟件
用於實現用戶程序與設備驅動器的統一接口、設備命名、設備的保護以及設備的分配與釋放等,同時爲設備管理和數據傳送提供必要的存儲空間。

③設備驅動程序
與硬件直接相關,用於具體實現系統對設備發出的操作指令,驅動I/O設備工作的驅動程序。
④中斷處理程序
用於保存被中斷進程的CPU環境,轉入相應的中斷處理程序進行處理,處理完後再恢復被中斷進程的現場後,返回到被中斷進程。

I/O軟件系統的層次

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

 I/O系統接口

在I/O系統與高層接口中,根據設備類型的不同,又進一步分爲若干個接口。主要包括:
塊設備接口
流設備接口
網絡通信接口

 

6.2 I/O設備和設備控制器

1)I/O設備的類型

I/O設備的類型繁多,從OS的觀點,按其重要的性能指標進行分類如下:
按傳輸速率分類:
低速、中速、高速(鍵盤、打印機、磁盤)
使用:存儲設備、輸入輸出設備
按信息交換的單位分類:
塊設備:有結構、速率高、可尋址、DMA方式控制
字符設備:無結構、速率低、不可尋址、中斷方式控制

2)設備控制器

設備並不直接與CPU通信
計算機中的一個實體——“設備控制器”負責控制一個或多個I/O設備,以實現I/O設備和計算機之間的數據交換。
控制器是CPU與I/O設備之間的接口,作爲中間人接收從CPU發來的命令,並去控制I/O設備工作,以使處理機脫離繁雜的設備控制事務。

3)I/O通道

①I/O通道設備的引入
設備控制器已大大減少CPU對I/O的干預
(如承擔了選擇設備,數據轉換、緩衝等功能)
但當主機的外設很多時,CPU的負擔仍然很重。
在CPU和設備控制器之間增設一個硬件機構:“通道”
設置通道後
CPU只需向通道發送一條I/O指令即可不再幹預後續操作。
通道形成通道程序,執行I/O操作,完成後向CPU發中斷信號。

②通道類型
根據其控制的外圍設備的不同類型,信息交換方式也可分爲以下三種類型:
字節多路通道
數組選擇通道
數組多路通道

 

6.3 中斷機構和中斷處理程序&&6.4 設備驅動程序

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

1.中斷簡介

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

⑵中斷向量表
中斷向量表:爲每種設備配以相應的中斷處理程序,並把該程序的入口地址,放在中斷向量表的一個表項中,併爲每一個設備的中斷請求,規定一箇中斷號,它直接對應於中斷向量表的一個表項中。

⑶對多中斷源的處理方式
①屏蔽(禁止)中斷:
所有中斷都將按順序依次處理。
當處理機正在處理一箇中斷時,將屏蔽掉所有新到的中斷,讓它們等待,直到處理機已完成本次中斷的處理後,處理機再去檢查並處理。
優點是簡單,但不能用於對實時性要求較高的中斷請求。

②嵌套中斷:
中斷優先級:系統根據不同中斷信號源,對服務要求的緊急程度的不同,它們分別規定不同的優先級。
當同時有多個不同優先級的中斷請求時,CPU優先響應最高優先級的中斷請求;
高優先級的中斷請求,可以搶佔正在運行低優先級中斷的處理機,該方式類似於基於優先級的搶佔式進程調度。

2.中斷處理程序

主要工作
①進行進程上下文的切換
②對處理中斷信號源進行測試
③讀取設備狀態
④修改進程狀態

設備驅動程序是I/O系統的高層與設備控制器之間的通信程序,其主要任務:
接收上層軟件發來的抽象I/O要求,如read、write等命令;
再把它轉化爲具體要求,發送給設備控制器,啓動設備去執行。
反方向,它也將由設備控制器發來的信號,傳送給上層軟件。

1.驅動程序的功能

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

2.設備驅動程序的特點

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

3.設備處理方式

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

4. 驅動程序處理過程

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

 5.  I/O控制方式

程序I/O方式
中斷驅動I/O方式
直接存儲器訪問DMA(字節—塊)
I/O通道控制方式(組織傳送的獨立)
宗旨:減少主機對I/O控制的干預,將CPU從繁雜的I/O控制事物中解脫出來。

1)程序I/O方式

cpu對I/O設備的控制採取程序I/O方式,或稱忙—等待方式
向控制器發送一條I/O指令;啓動輸入設備輸入數據;把狀態寄存器busy=1。
然後不斷測試標誌。爲1:表示輸入機尚未輸完一個字,CPU繼續對該標誌測試;直到爲0:數據已輸入控制器數據寄存器中。
CPU取控制器中的數據送入內存單元,完成一個字的I/O 。
高速CPU空閒等待低速I/O設備,致使CPU極大浪費。

2)中斷驅動I/O方式

CPU向相應的設備控制器發出一條I/O命令
然後立即返回繼續執行任務。
設備控制器按照命令的要求去控制指定I/O設備。
這時CPU與I/O設備並行操作。
I/O設備輸入數據中,無需CPU干預,因而可使CPU與I/O設備並行工作。從而提高了整個系統的資源利用率及吞吐量。

3)直接存儲器訪問DMA 方式

①該方式的特點是:
數據傳輸的基本單位是數據塊;
所傳送的數據是從設備直接送入內存的,或者直接從內存進設備;不需要CPU操作。
CPU干預進一步減少:僅在傳送一個或多個數據塊的開始和結束時,才需CPU干預,整塊數據的傳送是在控制器的控制下完成的。
可見DMA方式又是成百倍的減少了CPU對I/O的干預,進一步提高了CPU與I/O設備的並行操作程度。

②DMA控制器的組成

DMA控制器由三部分組成:
主機與DMA控制器的接口;
DMA控制器與塊設備的接口;
I/O控制邏輯。
  如下頁圖。

③DMA工作過程

CPU先向磁盤控制器發送一條讀命令。
該命令被送到命令寄存器CR中。
同時發送數據讀入到內存的起始地址,該地址被送入MAR中;
要讀數據的字數則送入數據計數器DC中;
將磁盤中的數據原地址直接送入DMA控制器的I/O控制邏輯上,按設備狀態啓動磁頭到相應位置。
啓動DMA控制器控制邏輯開始進行數據傳送
DMA控制器讀入一個數據到數據寄存器DR中,然後傳到內存MAR地址中;
接着MAR+1,DC-1,判斷DC是否爲0,如否,繼續,反之控制器發中斷請求,傳送完畢。

4)I/O通道控制方式

DMA適用於讀一個連續的數據塊;
如一次讀多個數據塊到內存不同區域,須由CPU分別發送多條I/O指令、進行多次DMA中斷處理。
再進一步減少CPU的干預(減少中斷), 引入通道。
實現對一組數據塊的讀(寫)及有關的控制和管理爲單位的干預。
此時,CPU只需發一條I/O指令,給出通道程序的首地址及要訪問設備即可。
* CPU、通道和I/O設備三者的並行操作,提高整系統資源利用率。

 

 

6.5 與設備無關的I/O軟件

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

【設備獨立性(無關性)】              —— Device Independence

用戶編程時所用的設備名(邏輯上的)與實際物理設備無關;
好處:
設備分配時的靈活性
    3個物理設備(如打印機),程序中申請一臺打印機,執行時不拘泥必須是某臺(如第2個)打印機
易於實現I/O重定向
    指用於I/O操作的設備可以更換(重定向),而不必改變應用程序。 程序調試、運行中的“打印”,可通過修改邏輯設備表的顯示終端,實現不同時候的不同的設備使用。

邏輯設備名到物理設備名的映射

邏輯設備表LUT(Logical Unit Table)

邏輯

設備名

物理

設備名

驅動程序

入口地址

/ dev / tty

2

1024

/ dev / printer

5

2046

 

 


LUT的設置問題
整個系統設置一張LUT(設備重名問題)
爲每個用戶設置一張LUT,記入各自PCB。

 

 

6.6 用戶層的I/O軟件

小部分I/O系統軟件放在了用戶應用層上。
庫函數(與應用程序鏈接)
假脫機技術(虛擬設備)

1)系統調用與庫函數

不允許運行在用戶態的應用進程,去直接調用運行在覈心態(系統態)的OS過程。
應用進程在運行時,又必須取得OS所提供的服務。
於是:
OS在用戶層中引入了系統調用,應用程序可以通過它,間接調用OS中的I/O過程,對I/O設備進行操作。

2)設備分配中的虛擬技術             —— SPOOLing技術

虛擬性是OS的四大特徵之一。
多道程序技術將一臺物理CPU虛擬爲多臺邏輯CPU,實現多個用戶共享一臺主機;

主要有三大部分(如下頁圖)
輸入井和輸出井:磁盤上開闢兩大存儲空間。輸入井模擬脫機輸入的磁盤設備,輸出井模擬脫機輸出時的磁盤。
輸入緩衝區和輸出緩衝區:爲緩解速度矛盾,內存中開闢兩大緩衝空間,輸入緩衝區暫存輸入設備送來的數據,再送給輸入井;輸出緩衝區暫存輸出井送來的數據,再送輸出設備。
輸入進程和輸出進程。
用一進程模擬脫機輸入時外圍設備控制器的功能,把低速輸入設備上的數據傳送到高速磁盤上;
用另一進程模擬脫機輸出時外圍設備控制器的功能,把數據從磁盤上傳送到低速輸出設備上。

 

SPOOLing系統的特點

提高了I/O的速度。利用輸入輸出井模擬成脫機輸入輸出,緩和了CPU和I/O設備速度不匹配的矛盾。
將獨佔設備改造爲共享設備。並沒有爲進程分配設備,而是爲進程分配一存儲區和建立一張I/O請求表。
最終,實現了虛擬設備功能。多個進程可“同時”使用一臺獨佔設備。

 

6.7 緩衝區管理

I/O控制方式減少CPU對I/O的干預提高利用率;
緩衝則通過緩和CPU和I/O設備速度不匹配矛盾,增加CPU和I/O設備的並行性,提高利用率。
現代OS中,幾乎所有的I/O設備與處理機交換數據時,都用了緩衝區。

引入緩衝區的主要原因:
緩和CPU與I/O設備間速度不匹配的矛盾。
緩衝區數據成批傳入內存,也可進一步減少對CPU的中斷頻率
最終目的:提高CPU和I/O設備的並行性。
使用緩衝區的方式:
1)單緩衝、多緩衝
2)循環緩衝
3)緩衝池(Buffer Pool)

1)單緩衝、多緩衝

單緩衝(Single Buffer)
每當用戶進程發出一I/O請求時,


單位:字符設備輸入時,緩衝區用於暫存用戶輸入/輸出的一行數據;塊設備輸入則是成塊數據。

雙緩衝(Double Buffer)
進一步加快輸入和輸出速度,提高設備利用率制,也稱緩衝對換(Buffer Swapping)
輸入:數據送入第一緩衝區,裝滿後轉向第二緩衝區。
讀出:OS從第一緩衝區中移出數據,送入用戶進程,再由CPU對數據進行計算。

 

2)循環緩衝

多個緩衝區。大小相同,三種類型:
預備裝輸入數據的空緩衝區R
裝滿數據的緩衝區G
計算進程正在使用的現行工作緩衝區C
多個指針。
指示正在使用的緩衝區C的指針Current
指示計算進程下一個可取的緩衝區G的指針Nextg
指示輸入進程下次可放的緩衝區R的指針Nexti

 

3)緩衝池(Buffer Pool)

對於既可輸入又可輸出的公用緩衝池,至少應含有下列三種類型的緩衝區:
空緩衝區;
裝滿輸入數據的緩衝區;
裝滿輸出數據的緩衝區;
    爲方便管理,將上述類型相同的緩衝區連成隊列
空緩衝區隊列(所有進程都可用)
輸入隊列(n個進程有各自的隊列)
輸出隊列(n個進程有各自的隊列)
*(隊列長度不固定,根據進程實際情況靈活變動,需要多少用多少)

四種工作方式:
收容輸入:Getbuf(emq),hin;輸入數據填入一空緩衝區;Putbuf(inq,hin)
提取輸入: Getbuf(inq),sin;從輸入緩衝隊列中取出一數據區的內容;Putbuf(emq,sin)
收容輸出: Getbuf(emq),hout;輸出數據填入一空緩衝區;Putbuf(outq,hout)
提取輸出: Getbuf(outq),sout;從輸出緩衝隊列中取一數據區的內容;Putbuf(emq,sout)

6.8 磁盤存儲器的性能和調度

磁盤調度方法

對所有請求訪問磁盤的進程進行合理調度,使對磁盤的平均訪問時間最小。
目標:使平均尋道時間最少。
算法:
FCFS
最短尋道時間優先SSTF
掃描算法SCAN(磁盤電梯調度算法)
循環掃描算法CSCAN
N-Step-SCAN算法
FSCAN算法

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章