輸入輸出系統程序員
I/O系統管理的主要對象是I/O設備和相應的設備控制器。其最主要的任務是,完成用戶提出的I/O請求,提升I/O速率,以及提升設備的利用率,並能爲更高層的進程方便地使用這些設備提供手段。算法
1. 隱藏物理設備的細節編程
I/O設備的類型很是多,且彼此間在多方面都有差別,諸如它們接收和產生數據的速度,傳輸方向、粒度、數據的表示形式及可靠性等方面。數組
2. 與設備的無關性安全
隱藏物理設備的細節,在早期的OS中就已實現,它可方便用戶對設備的使用。與設備的無關性是在較晚時才實現的,這是在隱藏物理設備細節的基礎上實現的。網絡
3. 提升處理機和I/O設備的利用率數據結構
在通常的系統中,許多I/O設備間是相互獨立的,可以並行操做,在處理機與設備之間也能並行操做。所以,I/O系統的第三個功能是要儘量地讓處理機和I/O設備並行操做,以提升它們的利用率。爲此,一方面要求處理機能快速響應用戶的I/O請求,使I/O設備儘快地運行起來;另外一方面也應儘可能減小在每一個I/O設備運行時處理機的干預時間。函數
4. 對I/O設備進行控制佈局
對I/O設備進行控制是驅動程序的功能。目前對I/O設備有四種控制方式:① 採用輪詢的可編程I/O方式;② 採用中斷的可編程I/O方式;③ 直接存儲器訪問方式;④ I/O通道方式。post
5. 確保對設備的正確共享
從設備的共享屬性上,可將系統中的設備分爲以下兩類:
(1) 獨佔設備,進程應互斥地訪問這類設備,即系統一旦把這類設備分配給了某進程後,便由該進程獨佔,直至用完釋放。典型的獨佔設備有打印機、磁帶機等。系統在對獨佔設備進行分配時,還應考慮到分配的安全性。
(2) 共享設備,是指在一段時間內容許多個進程同時訪問的設備。典型的共享設備是磁盤,當有多個進程需對磁盤執行讀、寫操做時,能夠交叉進行,不會影響到讀、寫的正確性。
6. 錯誤處理
大多數的設備都包括了較多的機械和電氣部分,運行時容易出現錯誤和故障。從處理的角度,可將錯誤分爲臨時性錯誤和持久性錯誤。對於臨時性錯誤,可經過重試操做來糾正,只有在發生了持久性錯誤時,才須要向上層報告。
1. I/O軟件的層次結構
一般把I/O 軟件組織成四個層次,如圖6-1所示。
圖6-1 I/O系統的層次結構
2. I/O系統中各類模塊之間的層次視圖
爲了能更清晰地描述I/O系統中主要模塊之間的關係,咱們進一步介紹I/O系統中各類I/O模塊之間的層次視圖。見圖6-2所示。
1) /O系統的上、下接口
(1) /O系統接口。
(2) 軟件/硬件(RW/HW)接口。
圖6-2 I/O系統中各類模塊之間的層次視圖
2) /O系統的分層
與前面所述的I/O軟件組織的層次結構相對應,I/O系統自己也可分爲以下三個層次:
(1) 中斷處理程序。
(2) 設備驅動程序。
(3) 設備獨立性軟件。
在I/O系統與高層之間的接口中,根據設備類型的不一樣,又進一步分爲若干個接口。在圖6-2中示出了塊設備接口、流設備接口和網絡接口。
1. 塊設備接口
(1) 塊設備。
(2) 隱藏了磁盤的二維結構。
(3) 將抽象命令映射爲低層操做。
2. 流設備接口
流設備接口是流設備管理程序與高層之間的接口。該接口又稱爲字符設備接口,它反映了大部分字符設備的本質特徵,用於控制字符設備的輸入或輸出。
(1) 字符設備。
(2) get和put操做。
(3) in-control指令。
3. 網絡通訊接口
在現代OS中,都提供了面向網絡的功能。但首先還須要經過某種方式把計算機鏈接到網絡上。同時操做系統也必須提供相應的網絡軟件和網絡通訊接口,使計算機能經過網絡與網絡上的其它計算機進行通訊或上網瀏覽。
I/O設備通常是由執行I/O操做的機械部分和執行控制I/O的電子部件組成。一般將這兩部分分開,執行I/O操做的機械部分就是通常的I/O設備,而執行控制I/O的電子部件則稱爲設備控制器或適配器(adapter)。在微型機和小型機中的控制器常作成印刷電路卡形式,於是也常稱爲控制卡、接口卡或網卡,可將它插入計算機的擴展槽中。在有的大、中型計算機系統中,還配置了I/O通道或I/O處理機。
1. I/O設備的類型
1) 按使用特性分類
2) 按傳輸速率分類
2. 設備與控制器之間的接口
一般,設備並非直接與CPU進行通訊,而是與設備控制器通訊,所以,在I/O設備中應含有與設備控制器間的接口,在該接口中有三種類型的信號(見圖6-3所示),各對應一條信號線。
(1) 數據信號線。
(2) 控制信號線。
(3) 狀態信號線。
圖6-3 設備與控制器間的接口
1. 設備控制器的基本功能
(1) 接收和識別命令。
(2) 數據交換。
(3) 標識和報告設備的狀態。
(4) 地址識別。
(5) 數據緩衝區。
(6) 差錯控制。
2. 設備控制器的組成
因爲設備控制器位於CPU與設備之間,它既要與CPU通訊,又要與設備通訊,還應具備按照CPU所發來的命令去控制設備工做的功能,所以,現有的大多數控制器都是由如下三部分組成:
(1) 設備控制器與處理機的接口。
(2) 設備控制器與設備的接口。
(3) /O邏輯。
圖6-4 設備控制器的組成
1. 利用特定的I/O指令
在早期的計算機中,包括大型計算機,爲實現CPU和設備控制器之間的通訊,爲每一個控制寄存器分配一個I/O端口,這是一個8位或16位的整數,如圖6-5(a)所示。另外還設置了一些特定的I/O指令。
2. 內存映像I/O
在這種方式中,在編址上再也不區份內存單元地址和設備控制器中的寄存器地址,都採用k。當k值處於0~n-1範圍時,被認爲是內存地址,若k大於等於n時,被認爲是某個控制器的寄存器地址。
圖6-5 設備尋址形式
1. I/O通道設備的引入
雖然在CPU與I/O設備之間增長了設備控制器後,已能大大減小CPU對I/O的干預,但當主機所配置的外設不少時,CPU的負擔仍然很重。爲此,在CPU和設備控制器之間又增設了I/O通道(I/O Channel)。
2. 通道類型
1) 字節多路通道(Byte Multiplexor Channel)
這是一種按字節交叉方式工做的通道。它一般都含有許多非分配型子通道,其數量可從幾十到數百個,每個子通道鏈接一臺I/O設備,並控制該設備的I/O操做。這些子通道按時間片輪轉方式共享主通道。
圖6-6 字節多路通道的工做原理
2) 數組選擇通道(Block Selector Channel)
字節多路通道不適於鏈接高速設備,這推進了按數組方式進行數據傳送的數組選擇通道的造成。
3) 數組多路通道(Block Multiplexor Channel)
數組選擇通道雖有很高的傳輸速率,但它卻每次只容許一個設備傳輸數據。數組多路通道是將數組選擇通道傳輸速率高和字節多路通道能使各子通道(設備)分時並行操做的優勢相結合而造成的一種新通道。
3. 「瓶頸」問題
因爲通道價格昂貴,導致機器中所設置的通道數量勢必較少,這每每又使它成了I/O的瓶頸,進而形成整個系統吞吐量的降低。
圖6-7 單通路I/O系統
圖6-8 多通路I/O系統
對於操做系統中的I/O系統,本章採起從低層向高層的介紹方法,從本節開始首先介紹中斷處理程序。中斷在操做系統中有着特殊重要的地位,它是多道程序得以實現的基礎,沒有中斷,就不可能實現多道程序,由於進程之間的切換是經過中斷來完成的。另外一方面,中斷也是設備管理的基礎,爲了提升處理機的利用率和實現CPU與I/O設備並行執行,也必需有中斷的支持。中斷處理程序是I/O系統中最低的一層,它是整個I/O系統的基礎。
1. 中斷和陷入
1) 中斷
2) 陷入
2. 中斷向量表和中斷優先級
1) 中斷向量表
2) 中斷優先級
3. 對多中斷源的處理方式
1) 屏蔽(禁止)中斷
2) 嵌套中斷
圖6-9 對多中斷的處理方式
當一個進程請求I/O 操做時,該進程將被掛起,直到I/O設備完成I/O操做後,設備控制器便向CPU發送一箇中斷請求,CPU響應後便轉向中斷處理程序,中斷處理程序執行相應的處理,處理完後解除相應進程的阻塞狀態。
圖6-10 中斷現場保護示意圖
圖6-11 中斷處理流程
設備處理程序一般又稱爲設備驅動程序,它是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) 驅動程序是實如今與設備無關的軟件和設備控制器之間通訊和轉換的程序,具體說,它將抽象的I/O請求轉換成具體的I/O操做後傳送給控制器。又把控制器中所記錄的設備狀態和I/O操做完成狀況,及時地反映給請求I/O的進程。
(2) 驅動程序與設備控制器以及I/O設備的硬件特性緊密相關,對於不一樣類型的設備,應配置不一樣的驅動程序。但能夠爲相同的多個終端設置一個終端驅動程序。
(3) 驅動程序與I/O設備所採用的I/O控制方式緊密相關,經常使用的I/O控制方式是中斷驅動和DMA方式。
(4) 因爲驅動程序與硬件緊密相關,於是其中的一部分必須用匯編語言書寫。目前有不少驅動程序的基本部分已經固化在ROM中。
(5) 驅動程序應容許可重入。一個正在運行的驅動程序常會在一次調用完成前被再次調用。
3. 設備處理方式
在不一樣的操做系統中,所採用的設備處理方式並不徹底相同。
設備驅動程序的主要任務是啓動指定設備,完成上層指定的I/O工做。但在啓動以前,應先完成必要的準備工做,如檢測設備狀態是否爲「忙」等。在完成全部的準備工做後,才向設備控制器發送一條啓動命令。
圖6-12 狀態寄存器中的格式
對設備的控制,早期是使用輪詢的可編程I/O方式,後來發展爲使用中斷的可編程I/O方式。
1. 使用輪詢的可編程I/O方式
處理機對I/O設備的控制採起輪詢的可編程I/O方式,即在處理機向控制器發出一條I/O指令,啓動輸入設備輸入數據時,要同時把狀態寄存器中的忙/閒標誌busy置爲1,而後便不斷地循環測試busy(稱爲輪詢)。當busy=1時,表示輸入機還沒有輸完一個字(符),處理機應繼續對該標誌進行測試,直至busy=0,代表輸入機已將輸入數據送入控制器的數據寄存器中。因而處理機將數據寄存器中的數據取出,送入內存指定單元中,這樣便完成了一個字(符)的I/O。接着再去啓動讀下一個數據,並置busy=1。
圖6-13 程序I/O和中斷驅動方式的流程
2. 使用中斷的可編程I/O方式
當前,對I/O設備的控制,普遍採用中斷的可編程I/O方式,即當某進程要啓動某個I/O設備工做時,便由CPU向相應的設備控制器發出一條I/O命令,而後當即返回繼續執行原來的任務。設備控制器因而按照該命令的要求去控制指定I/O設備。此時,CPU與I/O設備並行操做。
3. 直接存儲器訪問方式
1) 接存儲器訪問方式的引入
雖然中斷驅動I/O比程序I/O方式更有效,但它還是以字(節)爲單位進行I/O的。每當完成一個字(節)的I/O時,控制器便要向CPU請求一次中斷。
該方式的特色是:
(1) 數據傳輸的基本單位是數據塊,即在CPU與I/O設備之間,每次傳送至少一個數據塊。
(2) 所傳送的數據是從設備直接送入內存的,或者相反。
(3) 僅在傳送一個或多個數據塊的開始和結束時,才需CPU干預,整塊數據的傳送是在控制器的控制下完成的。可見,DMA方式較之中斷驅動方式又進一步提升了CPU與I/O設備的並行操做程度。
2) MA控制器的組成
DMA控制器由三部分組成:主機與DMA控制器的接口;DMA控制器與塊設備的接口;I/O控制邏輯。圖6-14示出了DMA控制器的組成。這裏主要介紹主機與控制器之間的接口。
圖6-14 DMA控制器的組成
3) MA工做過程
當CPU要從磁盤讀入一數據塊時,便向磁盤控制器發送一條讀命令。該命令被送入命令寄存器CR中。同時,須要將本次要讀入數據在內存的起始目標地址送入內存地址寄存器MAR中。
圖6-15 DMA方式的工做流程圖
4. I/O通道控制方式
1) /O通道控制方式的引入
雖然DMA方式比起中斷方式來已經顯著地減小了CPU的干預,即已由以字(節)爲單位的干預減小到以數據塊爲單位的干預,但CPU每發出一條I/O指令,也只能去讀(或寫)一個連續的數據塊。而當咱們須要一次去讀多個數據塊且將它們分別傳送到不一樣的內存區域,或者相反時,則須由CPU分別發出多條I/O指令及進行屢次中斷處理才能完成。
2) 通道程序
通道是經過執行通道程序並與設備控制器共同實現對I/O設備的控制的。通道程序是由一系列通道指令(或稱爲通道命令)所構成的。
下面示出了一個由六條通道指令所構成的簡單的通道程序。該程序的功能是將內存中不一樣地址的數據寫成多個記錄。
爲了方便用戶和提升OS的可適應性與可擴展性,在現代OS的I/O系統中,都無一例外地增長了與設備無關的I/O軟件,以實現設備獨立性,也稱爲設備無關性。其基本含義是:應用程序中所用的設備,不侷限於使用某個具體的物理設備。爲每一個設備所配置的設備驅動程序是與硬件緊密相關的軟件。
1. 以物理設備名使用設備
在早期OS中,應用程序在使用I/O設備時,都使用設備的物理名稱,這使應用程序與系統中的物理設備直接相關。
2. 引入了邏輯設備名
爲了實現與設備的無關性而引入了邏輯設備和物理設備兩個概念。邏輯設備是抽象的設備名。
3. 邏輯設備名稱到物理設備名稱的轉換
在應用程序中,用邏輯設備名稱使用設備雖然方便了用戶,但系統卻只識別物理設備名稱,所以在實際執行時,還必須使用物理名稱。爲此,在系統中,必須具備將邏輯設備名稱轉換爲某物理設備名稱的功能。
1. 設備驅動程序的統一接口
爲了使全部的設備驅動程序有着統一的接口,一方面,要求每一個設備驅動程序與OS之間都有着相同的接口,或者相近的接口,這樣會使添加一個新的設備驅動程序變得很容易,同時在很大程度上方便了開發人員對設備驅動程序的編制。另外一方面,要將抽象的設備名映射到適當的驅動程序上,或者說,將抽象的設備名轉換爲具體的物理設備名,並進一步能夠找到相應物理設備的驅動程序入口。此外,還應對設備進行保護,禁止用戶直接訪問設備,以防止無權訪問的用戶使用。
2. 緩衝管理
不管是字符設備仍是塊設備,它們的運行速度都遠低於CPU的速度。爲了緩和CPU和I/O設備之間的矛盾、提升CPU的利用率,在現代OS中都無一例外地分別爲字符設備和塊設備配置了相應的緩衝區。緩衝區有着多種形式,如單緩衝區、雙緩衝區、循環緩衝區、公用緩衝池等,以知足不一樣狀況的須要。
3. 差錯控制
因爲設備中有着許多的機械和電氣部分,所以,它們比主機更容易出現故障,這就致使I/O操做中的絕大多數錯誤都與設備有關。錯誤可分爲以下兩類:
(1) 暫時性錯誤。
(2) 持久性錯誤。
4. 對獨立設備的分配與回收
在系統中有兩類設備:獨佔設備和共享設備。對於獨佔設備,爲了不諸進程對獨佔設備的爭奪,必須由系統來統一分配,不容許進程自行使用。每當進程須要使用某(獨佔)設備時,必須先提出申請。OS接到對設備的請求後,先對進程所請求的獨佔設備進行檢查,看該設備是否空閒。若空閒,才把該設備分配給請求進程。不然,進程將被阻塞,放入該設備的請求隊列中等待。等到其它進程釋放該設備時,再將隊列中的第一個進程喚醒,該進程獲得設備後繼續運行。
5. 獨立於設備的邏輯數據塊
不一樣類型的設備,其數據交換單位是不一樣的,讀取和傳輸速率也各不相同,如字符型設備以單個字符(字)爲單位,塊設備是以一個數據塊爲單位。即便同一類型的設備,其數據交換單位的大小也是有差別的,如不一樣磁盤因爲扇區大小的不一樣,可能形成數據塊大小的不一致。設備獨立性軟件應可以隱藏這些差別而被邏輯設備使用,並向高層軟件提供大小統一的邏輯數據塊。與設備無關軟件的功能如圖6-16所示。
圖6-16 與設備無關軟件的功能層次
系統爲實現對獨佔設備的分配,必須在系統中配置相應的數據結構。
1. 設備分配中的數據結構
在用於設備分配的數據結構中,記錄了對設備或控制器進行控制所需的信息。在進行設備分配時須要以下的數據結構。
1) 設備控制表DCT
系統爲每個設備都配置了一張設備控制表,用於記錄設備的狀況,如圖6-17所示。
圖6-17 設備控制表
2) 控制器控制表、通道控制表和系統設備表
(1) 控制器控制表(COCT)。系統爲每個控制器都設置了用於記錄控制器狀況的控制器控制表,如圖6-18(a)所示。 (2) 通道控制表(CHCT)。每一個通道都有一張通道控制表,如圖6-18(b)所示。
(3) 系統設備表(SDT)。這是系統範圍的數據結構,記錄了系統中所有設備的狀況,每一個設備佔一個表目,其中包括有設備類型、設備標識符、設備控制表及設備驅動程序的入口等項,如圖6-18(c)所示。
圖6-18 COCT、CHCT和SDT表
2. 設備分配時應考慮的因素
系統在分配設備時,應考慮以下幾個因素:
1) 設備的固有屬性
設備的固有屬性可分紅三種,對它們應採起不一樣的分配策略:
(1) 獨佔設備的分配策略。
(2) 共享設備的分配策略。
(3) 虛擬設備的分配策略,虛擬設備屬於可共享的設備,能夠將它同時分配給多個進程使用。
2) 設備分配算法
對設備分配的算法,一般只採用如下兩種分配算法:
(1) 先來先服務。
(2) 優先級高者優先。
3) 設備分配中的安全性
從進程運行的安全性上考慮,設備分配有如下兩種方式:
(1) 安全分配方式。
(2) 不安全分配方式。
3. 獨佔設備的分配程序
1) 基本的設備分配程序
咱們經過一個例子來介紹設備分配過程。當某進程提出I/O請求後,系統的設備分配程序可按下述步驟進行設備分配:
(1) 分配設備。
(2) 分配控制器。
(3) 分配通道。
2) 設備分配程序的改進
在上面的例子中,進程是以物理設備名提出I/O請求的。若是所指定的設備已分配給其它進程,則分配失敗。或者說上面的設備分配程序不具備與設備無關性。爲得到設備的獨立性,進程應使用邏輯設備名請求I/O。
1. 邏輯設備表LUT(Logical Unit Table)
在邏輯設備表的每一個表目中包含了三項:邏輯設備名、物理設備名和設備驅動程序的入口地址,如圖6-19(a)所示。
圖6-19 邏輯設備表
2. 邏輯設備表的設置問題
在系統中可採起兩種方式設置邏輯設備表:
第一種方式,是在整個系統中只設置一張LUT。
第二種方式,是爲每一個用戶設置一張LUT。
1. 系統調用
一方面,爲使諸進程能有條不紊地使用I/O設備,且能保護設備的安全性,不容許運行在用戶態的應用進程去直接調用運行在覈心態(系統態)的OS過程。但另外一方面,應用進程在運行時,又必須取得OS所提供的服務,不然,應用程序幾乎沒法運行。爲了解決此矛盾,OS在用戶層中引入了一箇中介過程——系統調用,應用程序能夠經過它間接調用OS中的I/O過程,對I/O設備進行操做。
圖6-20 系統調用的執行過程
2. 庫函數
在C語言以及UNIX系統中,系統調用(如read)與各系統調用所使用的庫函數(如read)之間幾乎是一一對應的。而微軟定義了一套過程,稱爲Win32 API的應用程序接口(Application Program Interface),程序員利用它們取得OS服務,該接口與實際的系統調用並不一一對應。用戶程序經過調用對應的庫函數使用系統調用,這些庫函數與調用程序鏈接在一塊兒,被嵌入在運行時裝入內存的二進制程序中。
1. 假脫機技術
在20世紀50年代,爲了緩和CPU的高速性與I/O設備低速性間的矛盾,而引入了脫機輸入、脫機輸出技術。該技術是利用專門的外圍控制機,先將低速I/O設備上的數據傳送到高速磁盤上,或者相反。這樣當處理機須要輸入數據時,即可以直接從磁盤中讀取數據,極大地提升了輸入速度。反之,在處理機須要輸出數據時,也能夠很快的速度把數據先輸出到磁盤上,處理機即可去作本身的事情。
2. SPOOLing的組成
如前所述,SPOOLing技術是對脫機輸入/輸出系統的模擬,相應地,如圖6-21(a)所示,SPOOLing系統創建在通道技術和多道程序技術的基礎上,以高速隨機外存(一般爲磁盤)爲後援存儲器。SPOOLing的工做原理如圖6-21(b)所示。
圖6-21 SPOOLing系統組成及工做原理
SPOOLing系統主要由如下四部分構成:
(1) 輸入井和輸出井。
(2) 輸入緩衝區和輸出緩衝區。
(3) 輸入進程和輸出進程。
(4) 井管理程序。
3. SPOOLing系統的特色
(1) 提升了I/O的速度。
(2) 將獨佔設備改造爲共享設備。
(3) 實現了虛擬設備功能。
4. 假脫機打印機系統
打印機是常常用到的輸出設備,屬於獨佔設備。利用假脫機技術可將它改造爲一臺可供多個用戶共享的打印設備,從而提升設備的利用率,也方便了用戶。共享打印機技術已被普遍地用於多用戶系統和局域網絡中。假脫機打印系統主要有如下三部分:
(1) 磁盤緩衝區。
(2) 打印緩衝區。
(3) 假脫機管理進程和假脫機打印進程。
5. 守護進程(daemon)
前面是利用假脫機系統來實現打印機共享的一種方案,人們對該方案進行了某些修改,如取消該方案中的假脫機管理進程,爲打印機創建一個守護進程,由它執行一部分原來由假脫機管理進程實現的功能,如爲用戶在磁盤緩衝區中申請一個空閒盤塊,並將要打印的數據送入其中,將該盤塊的首址返回給請求進程。另外一部分由請求進程本身完成,每一個要求打印的進程首先生成一份要求打印的文件,其中包含對打印的要求和指向裝有打印輸出數據盤塊的指針等信息,而後將用戶請求打印文件放入假脫機文件隊列(目錄)中。
在現代操做系統中,幾乎全部的I/O設備在與處理機交換數據時都用了緩衝區。緩衝區是一個存儲區域,它能夠由專門的硬件寄存器組成,但因爲硬件的成本較高,容量也較小,通常僅用在對速度要求很是高的場合,如存儲器管理中所用的聯想存儲器;設備控制器中用的數據緩衝區等。
引入緩衝區的緣由有不少,可歸結爲如下幾點:
(1) 緩和CPU與I/O設備間速度不匹配的矛盾。
(2) 減小對CPU的中斷頻率,放寬對CPU中斷響應時間的限制。
(3) 解決數據粒度不匹配的問題。
(4) 提升CPU和I/O設備之間的並行性。
圖6-22 利用緩衝寄存器實現緩衝
1. 單緩衝區(Single Buffer)
在單緩衝狀況下,每當用戶進程發出一I/O請求時,操做系統便在主存中爲之分配一緩衝區,如圖6-23所示。
圖6-23 單緩衝工做示意圖
2. 雙緩衝區(Double Buffer)
因爲緩衝區是共享資源,生產者與消費者在使用緩衝區時必須互斥。若是消費者還沒有取走緩衝區中的數據,即便生產者又生產出新的數據,也沒法將它送入緩衝區,生產者等待。若是爲生產者與消費者設置了兩個緩衝區,便能解決這一問題。
圖6-24 雙緩衝工做示意圖
若是在實現兩臺機器之間的通訊時僅爲它們配置了單緩衝,如圖6-25(a)所示,那麼,它們之間在任一時刻都只能實現單方向的數據傳輸。例如,只容許把數據從A傳送到B,或者從B傳送到A,而毫不容許雙方同時向對方發送數據。爲了實現雙向數據傳輸,必須在兩臺機器中都設置兩個緩衝區,一個用做發送緩衝區,另外一個用做接收緩衝區,如圖6-25(b)所示。
圖6-25 雙機通訊時緩衝區的設置
1. 環形緩衝區的組成
(1) 多個緩衝區。在環形緩衝中包括多個緩衝區,其每一個緩衝區的大小相同。做爲輸入的多緩衝區可分爲三種類型:用於裝輸入數據的空緩衝區R、已裝滿數據的緩衝區G以及計算進程正在使用的現行工做緩衝區C,如圖6-26所示。
圖6-26 環形緩衝區
2. 環形緩衝區的使用
計算進程和輸入進程可利用下述兩個過程來使用形環緩衝區。
(1) Getbuf過程。
(2) Releasebuf過程。
3. 進程之間的同步問題
使用輸入循環緩衝,可以使輸入進程和計算進程並行執行。相應地,指針Nexti和指針Nextg將不斷地沿着順時針方向移動,這樣就可能出現下述兩種狀況:
(1) Nexti指針追遇上Nextg指針。
(2) Nextg指針追遇上Nexti指針。
1. 緩衝池的組成
緩衝池管理着多個緩衝區,每一個緩衝區由用於標識和管理的緩衝首部以及用於存放數據的緩衝體兩部分組成。緩衝首部通常包括緩衝區號、設備號、設備上的數據塊號、同步信號量以及隊列連接指針等。爲了管理上的方便,通常將緩衝池中具備相同類型的緩衝區連接成一個隊列,因而可造成如下三個隊列:
(1) 空白緩衝隊列emq。
(2) 輸入隊列inq。
(3) 輸出隊列outq。
2. Getbuf過程和Putbuf過程
在數據結構課程中,曾介紹過隊列和對隊列進行操做的兩個過程,第一個是 Addbuf(type,number)過程。該過程用於將由參數number所指示的緩衝區B掛在type隊列上。第二個是Takebuf(type)過程。它用於從type所指示的隊列的隊首摘下一個緩衝區。
3. 緩衝區的工做方式
緩衝區能夠工做在以下四種工做方式,如圖6-27所示。
圖6-27 緩衝區的工做方式
磁盤設備是一種至關複雜的機電設備,在此僅對磁盤的某些性能,如數據的組織、磁盤的類型和訪問時間等方面作扼要的闡述。
1. 數據的組織和格式
磁盤設備可包括一個或多個物理盤片,每一個磁盤片分一個或兩個存儲面(Surface)(見圖6-28(a)),每一個盤面上有若干個磁道(Track),磁道之間留有必要的間隙(Gap)。爲使處理簡單起見,在每條磁道上可存儲相同數目的二進制位。
圖6-28 磁盤的結構和佈局
圖6-29 磁盤的格式化
2. 磁盤的類型
對於磁盤,能夠從不一樣的角度進行分類。最多見的有:將磁盤分紅硬盤和軟盤、單片盤和多片盤、固定頭磁盤和活動頭(移動頭)磁盤等。下面僅對固定頭磁盤和移動頭磁盤作些介紹。
(1) 固定頭磁盤。
(2) 移動頭磁盤。
3. 磁盤訪問時間
磁盤設備在工做時以恆定速率旋轉。爲了讀或寫,磁頭必須能移動到所指定的磁道上,並等待所指定的扇區的開始位置旋轉到磁頭下,而後再開始讀或寫數據。
1. 先來先服務(FCFS)
這是最簡單的磁盤調度算法。它根據進程請求訪問磁盤的前後次序進行調度。
2. 最短尋道時間優先(SSTF)
該算法選擇這樣的進程,其要求訪問的磁道與當前磁頭所在的磁道距離最近,以使每次的尋道時間最短,但這種算法不能保證平均尋道時間最短。
圖6-30 FCFS調度算法
圖6-31 SSTF調度算法
1. 掃描(SCAN)算法
SSTF算法的實質是基於優先級的調度算法,所以就可能致使優先級低的進程發生「飢餓」(Starvation)現象。由於只要不斷有新進程的請求到達,且其所要訪問的磁道與磁頭當前所在磁道的距離較近,這種新進程的I/O請求必然優先知足。在對SSTF算法略加修改後,則可防止低優先級進程出現「飢餓」現象。
2. 循環掃描(CSCAN)算法
SCAN算法既能得到較好的尋道性能,又能防止「飢餓」現象,故被普遍用於大、中、小型機器和網絡中的磁盤調度。但也存在這樣的問題:當磁頭剛從裏向外移動而越過了某一磁道時,剛好又有一進程請求訪問此磁道,這時,該進程必須等待,待磁頭繼續從裏向外,而後再從外向裏掃描完處於外面的全部要訪問的磁道後,才處理該進程的請求,導致該進程的請求被大大地推遲。
圖6-32 SCAN調度算法示例
圖6-33 CSCAN調度算法示例
3. NStepSCAN和FSCAN調度算法
1) StepSCAN算法
在SSTF、SCAN及CSCAN幾種調度算法中,均可能出現磁臂停留在某處不動的狀況,例如,有一個或幾個進程對某一磁道有較高的訪問頻率,即這個(些)進程反覆請求對某一磁道的I/O操做,從而壟斷了整個磁盤設備。咱們把這一現象稱爲「磁臂粘着」(Armstickiness)。在高密度磁盤上容易出現此狀況。
2) SCAN算法
FSCAN算法實質上是N步SCAN算法的簡化,即FSCAN只將磁盤請求隊列分紅兩個子隊列。一個是由當前全部請求磁盤I/O的進程造成的隊列,由磁盤調度按SCAN算法進行處理。另外一個是在掃描期間,將新出現的全部請求磁盤I/O的進程放入等待處理的請求隊列。這樣,全部的新請求都將被推遲到下一次掃描時處理。
習 題 8:
1. 試說明I/O系統的基本功能。
2. 簡要說明I/O軟件的四個層次的基本功能。
3. /O系統接口與軟件/硬件(RW/HW)接口分別是什麼接口?
4. 與設備無關性的基本含義是什麼? 爲何要設置該層?
5. 試說明設備控制器的組成。
6. 爲了實現CPU與設備控制器間的通訊,設備控制器應具有哪些功能?
7. 什麼是內存映像I/O? 它是如何實現的?
8. 爲何說中斷是OS賴以生存的基礎?
9. 對多中斷源的兩種處理方式分別用於何種場合?
10. 設備中斷處理程序一般需完成哪些工做?
11. 簡要說明中斷處理程序對中斷進行處理的幾個步驟。
12. 試說明設備驅動程序具備哪些特色。
13. 設備驅動程序一般要完成哪些工做?
14. 簡要說明設備驅動程序的處理過程可分爲哪幾步。
15. 試說明推進I/O控制發展的主要因素是什麼。
16. 有哪幾種I/O控制方式? 各適用於何種場合?
17. 試說明DMA的工做流程。
18. 爲什麼要引入與設備的無關性? 如何實現設備的獨立性?
19. 與設備的無關的軟件中,包括了哪些公有操做的軟件?
20. 在考慮到設備的獨立性時,應如何分配獨佔設備?
21. 何謂設備虛擬? 實現設備虛擬時所依賴的關鍵技術是什麼?
22. 在實現後臺打印時,SPOOLing系統應爲請求I/O的進程提供哪些服務?
23. 假脫機系統向用戶提供共享打印機的基本思想是什麼?
24. 引入緩衝的主要緣由是什麼?
25. 在單緩衝狀況下,爲何系統對一塊數據的處理時間爲max(C, T) ?
26. 爲何在雙緩衝狀況下,系統對一塊數據的處理時間爲max(T, C)?
27. 試繪圖說明把多緩衝用於輸出時的狀況。
28. 試說明收容輸入工做緩衝區和提取輸出工做緩衝區的工做狀況。
29. 何謂安全分配方式和不安全分配方式?
30. 磁盤訪問時間由哪幾部分組成? 每部分時間應如何計算?
31. 目前經常使用的磁盤調度算法有哪幾種? 每種算法優先考慮的問題是什麼?