計算機操作系統(第四版)之輸入輸出系統要點梳理

輸入輸出系統



I/O軟件的層次結構

通常把 I/O 軟件組織成四個層次:
1)用戶層 I/O 軟件。實現與用戶交互的接口,用戶可直接調用該層所提供的、與 I/O 操作有關的庫函數對設備進行操作。
2)設備獨立性軟件。用於實現用戶程序與設備驅動器的統一接口、設備命名、設備的保護以及設備的分配與釋放等,同時爲設備管理和數據傳送提供必要的存儲空間。
3)設備驅動程序。與硬件直接相關,用於具體實現系統對設備發出的操作指令,驅動 I/O 設備工作的驅動程序。
4)中斷處理程序。CPU 先保護被中斷進程的 CPU 環境,再轉入相應的的中斷處理程序進行處理,處理完畢後 CPU 再恢復被中斷進程的現場,返回到被中斷的進程。

I/O設備和設備控制器

I/O設備一般是由執行I/O操作的機械部分和執行控制I/O的電子部件組成。通常將這兩部分分開,執行I/O操作的機械部分就是一般的I/O設備,而執行控制I/O的電子部件則稱爲設備控制器或適配器,也常稱爲控制卡、接口卡或網卡。

中斷機構和中斷處理程序

中斷簡介

中斷在操作系統中有着特殊重要的地位,它是多道程序得以實現的基礎,沒有中斷,就不可能實現多道程序,因爲進程之間的切換是通過中斷來完成的。另一方面,中斷也是設備管理的基礎,爲了提高處理機的利用率和實現CPU與I/O設備並行執行,也必需有中斷的支持。

  1. 中斷和陷入。
    1)中斷,是指CPU對I/O設備發來的中斷信號的響應。由外部設備引起,故又稱爲外中斷。
    2)陷入,是由CPU內部事件引起的中斷,如程序出錯等等,故又稱爲內中斷。
    中斷和陷入的主要區別是信號的來源,即是來自 CPU 外部,還是 CPU 內部。
  2. 中斷向量表和中斷優先級。
    1)中斷向量表。
    通常是爲每種設備配以相應的中斷處理程序,並把該程序的入口地址放在中斷向量表中的一個表項,併爲每一個設備的中斷請求規定一箇中斷號,它直接對應於中斷向量表的一個表項。當 I/O 設備發來中斷請求信號時,由中斷控制器確定該請求的中斷號,並去查找中斷向量表取得設備中斷處理程序的入口地址,這樣便可轉入中斷處理程序執行。
    2)中斷優先級。多箇中斷信號同時到達時,根據優先級分別先後處理。
  3. 對多中斷源的處理方式。
    1)屏蔽(禁止)中斷。
    類似於關中斷,當處理機正在處理一箇中斷時,將屏蔽掉所有的中斷,讓它們等待。直到處理機處理完本次中斷後,再去檢查是否有中斷髮生。
    2)嵌套中斷。
    CPU 優先響應最高優先級的中斷請求。高優先級的中斷請求可以搶佔正在運行的低優先級中斷的處理機。

中斷處理程序

中斷處理程序是I/O系統中最低的一層,它是整個I/O系統的基礎。中斷機構的處理過程:

  1. CPU測定是否有未響應的中斷信號。程序每當執行完當前指令後,處理機都要測試是否有未響應的中斷信號。
  2. 保護被中斷進程的CPU環境。
  3. 轉入相應的設備處理程序。由處理機對各個中斷源進行測試,以確定引起本次中斷的 I/O 設備,並向提供中斷信號的設備發送確認信號。在該設備收到確認信號後,就立即取消它所發出的中斷請求信號。然後,將相應的設備中斷處理程序的入口地址裝入到程序計數器中。這樣,當處理機運行時,便可自動地轉向中斷處理機程序。
  4. 中斷處理。
  5. 恢復CPU現場並退出中斷。
    這裏寫圖片描述

設備驅動程序

設備處理程序通常又稱爲設備驅動程序,它是I/O系統的高層與設備控制器之間的通信程序,其主要任務是接收上層軟件發來的抽象I/O要求,如read或write命令,再把它轉換爲具體要求後,發送給設備控制器,啓動設備去執行;反之,它也將由設備控制器發來的信號傳送給上層軟件。由於驅動程序與硬件密切相關,故通常應爲每一類設備配置一種驅動程序。

在多道程序系統中,驅動程序一旦發出 I/O 命令,啓動了一個 I/O 操作後,驅動程序便把控制返回給 I/O 系統,把自己阻塞起來,直到中斷到來時再被喚醒。具體的 I/O 操作是在設備控制器的控制下進行的,因此,在設備忙於傳送數據時,處理機又可以去幹其它的事情,實現了處理機與 I/O 設備的並行操作。

對I/O設備的控制方式

  1. 使用輪詢的可編程I/O方式。
    處理機對 I/O 設備的控制採取輪詢的可編程I/O方式,即在處理機向控制器發出一條 I/O 指令啓動輸入設備輸入數據時,要同時把狀態寄存器中的忙/閒標誌 busy 置爲 1,然後便不斷地循環測試 busy。當 busy=1 時,表示輸入機尚未輸完一個字(符),處理機應繼續對該標誌進行測試,直至 busy=0,表明輸入機已將輸入數據送入控制器的數據寄存器中。於是處理機將數據寄存器中的數據取出,送入內存指定單元中,這樣便完成了一個字(符)的 I/O。接着再去啓動讀下一個數據,並置 busy=1。
  2. 使用中斷的可編程I/O方式。
    採用中斷的可編程I/O方式,即當某進程要啓動某個 I/O 設備工作時,便由 CPU 向相應的設備控制器發出一條 I/O 命令,然後立即返回繼續執行原來的任務。設備控制器於是按照該命令的要求去控制指定 I/O 設備。此時,CPU 與 I/O 設備並行操作。一旦數據進入數據寄存器,控制器便通過控制線向 CPU 發送一中斷信號,由 CPU 檢查輸入過程中是否出錯,若無錯,便向控制器發送取走數據的信號,然後再通過控制器及數據線將數據寫入內存指定單元中。
    適用於低速流設備,如鍵盤,鼠標。
  3. 直接存儲器(DMA)訪問方式。
    中斷驅動 I/O 比程序 I/O 方式更有效,但須注意,它仍是以字(節)爲單位進行 I/O 的,每當完成一個字(節)的 I/O 時,控制器便要向 CPU 請求一次中斷。換言之,採用中斷驅動 I/O 方式時的 CPU 是以字(節)爲單位進行干預的。
    從而引入直接存儲器訪問方式,其特點如下:
    1)數據傳輸的基本單位是數據塊,即在 CPU 與 I/O 設備之間,每次傳送至少一個數據塊;
    2)所傳送的數據是從設備直接送入內存的,或者相反;
    3)僅在傳送一個或多個數據塊的開始和結束時,才需 CPU 干預,整塊數據的傳送是在控制器的控制下完成的。
  4. I/O通道控制方式。
    I/O 通道方式是 DMA 方式的發展,它可進一步減少 CPU 的干預,即把對一個數據塊的讀(或寫)爲單位的干預減少爲對一組數據塊的讀(或寫)及有關的控制和管理爲單位的干預。同時,又可實現 CPU、通道和 I/O 設備三者的並行操作。而通道能與 I/O 設備並行是因爲 I/O 通道實際上是一種特殊的處理機,它具有執行 I/O 指令的能力,並通過執行通道 I/O 程序來控制 I/O 操作。增設 I/O 通道的主要目的是爲了建立獨立的 I/O 操作,或者說是使一些原來由 CPU 處理的 I/O 任務轉由通道來承擔。

與設備無關的I/O軟件

爲了方便用戶和提高OS的可適應性與可擴展性,在現代OS的I/O系統中,都無一例外地增加了與設備無關的I/O軟件,以實現設備獨立性,也稱爲設備無關性。其基本含義是:應用程序中所用的設備,不侷限於使用某個具體的物理設備。這是在設備驅動程序之上設置的一層軟件,稱爲與設備無關的I/O軟件,或設備獨立性軟件。

通過在系統配置:①設備控制表 DCT;②控制器控制表 COCT;③通道控制表 CHCT;④系統設備表 SDT;實現都獨佔設備的分配。

同時,在系統中需要配置一張邏輯設備表 LUT,用於將邏輯設備名映射爲物理設備名。

用戶層的 I/O 軟件

一般而言,大部分的 I/O 軟件都在操作系統內部,但仍有一小部分在用戶層,包括系統調用、與用戶程序鏈接在一起的庫函數,以及完全運行於內核之外的假脫機系統等。

假脫機(Spooling)系統

如果說可以通過多道程序技術將一臺物理CPU 虛擬爲多臺邏輯 CPU,從而允許多個用戶共享一臺主機,那麼,通過 SPOOLing 技術便可將一臺物理 I/O 設備虛擬爲多臺邏輯 I/O 設備,同樣允許多個用戶共享一臺物理 I/O設備。

  1. 假脫機技術。
    脫機輸入、脫機輸出技術。該技術是利用專門的外圍控制機,先將低速I/O設備上的數據傳送到高速磁盤上,或者相反。
    事實上,當系統中引入了多道程序技術後,完全可以利用其中的一道程序,來模擬脫機輸入時的外圍控制機功能,把低速 I/O 設備上的數據傳送到高速磁盤上;再用另一道程序來模擬脫機輸出時外圍控制機的功能,把數據從磁盤傳送到低速輸出設備上。這樣,便可在主機的直接控制下,實現脫機輸入、輸出功能。此時的外圍操作與 CPU 對數據的處理同時進行,我們把這種在聯機情況下實現的同時外圍操作稱爲 SPOOLing,或稱爲假脫機操作。
  2. SPOOLing 系統的組成。
    1)輸入井和輸出井。這是在磁盤上開闢的兩個存儲空間。輸入井是模擬脫機輸入時的磁盤設備;輸出井是模擬脫機輸出時的磁盤。
    2)輸入緩衝區和輸出緩衝區。爲了緩和 CPU 和磁盤之間速度不匹配的矛盾,在內存中要開闢兩個緩衝區:輸入緩衝區和輸出緩衝區。輸入緩衝區用於暫存由輸入設備送來的數據,以後再傳送到輸入井。輸出緩衝區用於暫存從輸出井送來的數據,以後再傳送給輸出設備。
    3)輸入進程和輸出進程。輸入進程也稱爲預輸入進程,用於模擬脫機輸入時的外圍控制機。輸出進程也稱爲預輸出進程,用於模擬脫機輸出時的外圍控制機。
    4)井管理程序。用於控製作業與磁盤井之間信息的交換。當作業執行過程中向某臺設備發出啓動輸入或輸出操作請求時,由操作系統調用井管理程序,由其控制從輸入井讀取信息或將信息輸出至輸出井。
    這裏寫圖片描述
  3. SPOOLing系統的特點。
    1)提高了I/O的速度。
    2)將獨佔設備改造爲共享設備。
    3)實現了虛擬設備功能。
  4. 假脫機打印機系統。
    打印機是經常要用到的輸出設備,屬於獨佔設備。利用 SPOOLing 技術,可將之改造爲一臺可供多個用戶共享的設備,從而提高設備的利用率。主要有以下三部分:
    1)磁盤緩衝區。用於暫存用戶程序的輸出數據。
    2)打印緩衝區。緩和 CPU 和磁盤之間速度不匹配的矛盾,設置在內存中,暫存從磁盤緩衝區送來的數據。
    3)假脫機管理進程和假脫機打印進程。由假脫機管理進程爲每個要求打印的用戶數據建立一個假脫機文件,並把它放入假脫機文件隊列中,由假脫機打印進程依次對隊列中的文件進行打印。
    這裏寫圖片描述
    每當用戶進程發出打印輸出請求時,由假脫機管理進程完成兩項工作:①在磁盤緩衝區中爲之申請一個空閒盤塊,並將要打印的數據送入其中暫存;②爲用戶進程申請一張空閒的用戶請求打印表,並將用戶的打印要求填入其中,再將該表掛到假脫機文件隊列上。
    真正的打印輸出是假脫機打印進程負責的,當打印機空閒時,該進程首先從假脫機文件隊列的隊首摘取一張請求打印表,然後根據表中的要求將要打印的數據由輸出井傳送到內存緩衝區,再交付打印機進行打印。
  5. 守護進程。
    除了假脫機打印機系統可以實現打印機共享,也可以爲打印機建立一個守護進程。由守護進程執行一部分原來假脫機管理進程實現的功能。另一部分由請求進程自己完成,每個要求打印的進程先生成一份要求打印的文件,然後放入假脫機文件隊列中。守護進程是按照目錄中的文件依次來完成諸進程對該設備的請求的。

緩衝區管理

在現代操作系統中,幾乎所有的I/O設備在與處理機交換數據時都用了緩衝區。
單緩衝區、雙緩衝區、環形緩衝區、緩衝池。

磁盤存儲器的性能和調度

改善磁盤系統的性能:
1)選擇好的磁盤調度算法,以減少磁盤的尋道時間。
2)提高磁盤 I/O 速度,以提高對文件的訪問速度。
3)採取冗餘技術,提高磁盤系統的可靠性,建立高度可靠的文件系統。

磁盤性能簡述

  1. 數據的組織和格式。
    磁盤設備可包括一個或多個物理盤片,每個磁盤片分一個或兩個存儲面(Surface),每個盤面上有若干個磁道(Track),磁道之間留有必要的間隙(Gap)。爲使處理簡單起見,在每條磁道上可存儲相同數目的二進制位。 這樣,磁盤密度即每英寸中所存儲的位數,顯然是內層磁道的密度較外層磁道的密度高。每條磁道又被邏輯上劃分成若干個扇區(sectors),軟盤大約爲 8~32 個扇區,硬盤則可多達數百個,圖中顯示了一個磁道分成 8 個扇區。一個扇區稱爲一個盤塊(或數據塊),常常叫做磁盤扇區。各扇區之間保留一定的間隙。
    這裏寫圖片描述
    磁盤上存儲的物理記錄塊數目是由扇區數、磁道數以及磁盤面數所決定的。
    爲了在磁盤上存儲數據,必須先將磁盤低級格式化。下圖示出了一種溫盤(溫切斯特盤)中一條磁道格式化的情況。
    這裏寫圖片描述
    其中每條磁道含有 30 個固定大小的扇區,每個扇區容量爲 600 個字節,其中 512 個字節存放數據,其餘的用於存放控制信息。
    每個扇區包括兩個字段:
    1)標識符字段(ID Field),其中一個字節的 SYNCH 具有特定的位圖像,作爲該字段的定界符,利用磁道號(Track)、 磁頭號(Head #)及扇區號(Sector #)三者來標識一個扇區;CRC 字段用於段校驗。
    2)數據字段(Data Field),其中可存放 512 個字節的數據。
    值得強調的是,在磁盤一個盤面的不同磁道(Track)、每個磁道的不同扇區(Sector),以及每個扇區的不同字段(Filed)之間,爲了簡化和方便磁頭的辨識,都設置了一個到若干個字節不同長度的間距(Gap,也稱間隙)。
    磁盤格式化完成後,一般要對磁盤分區。
    但是,在真正可以使用磁盤前,還需要對磁盤進行一次高級格式化,即設置一個引導塊、空閒存儲管理、根目錄和一個空文件系統,同時在分區表中標記該分區所使用的文件系統。
  2. 磁盤的類型。
    對磁盤,可以從不同的角度進行分類。最常見的有:將磁盤分成硬盤和軟盤、單片盤和多片盤、固定頭磁盤和活動頭(移動頭)磁盤等。
    1)固定頭磁盤。在每條磁道上都有一讀/寫磁頭,所有的磁頭都被裝在一剛性磁臂中。這種結構的磁盤主要用於大容量磁盤上。
    2)移動頭磁盤。每一個盤面僅配有一個磁頭,也被裝入磁臂中。爲能訪問該盤面上的所有磁道,該磁頭必須能移動以進行尋道。廣泛應用於中小型磁盤設備中,在微型機上配置的溫盤和軟盤都採用移動磁頭結構。
  3. 磁盤訪問時間。
    1)尋道時間 Ts,這是指把磁臂(磁頭)移動到指定磁道上所經歷的時間。
    2)旋轉延遲時間 Tr,這是指定扇區移動到磁頭下面所經歷的時間。
    3)傳輸時間 Tt,這是指把數據從磁盤讀出或向磁盤寫入數據所經歷的時間。

早期的磁盤調度算法

由於在訪問磁盤的時間中,主要是尋道時間,因此,磁盤調度的目標是使磁盤的平均尋道時間最少。

  1. 先來先服務 FCFS。
    根據進程請求訪問磁盤的先後次序進行調度。
  2. 最短尋道時間優先。
    該算法選擇這樣的進程:其要求訪問的磁道與當前磁頭所在的磁道距離最近,以使每次的尋道時間最短。但這種算法不能保證平均尋道時間最短。

基於掃描的磁盤調度算法

  1. 掃描(SCAN)算法。
    SSTF算法可能導致優先級低(即不斷出現的新進程所要訪問的磁道與當前磁頭的位置時鐘較勁,使原本較遠的進程一直得不到滿足)的進程發生“飢餓”現象。
    掃描算法不僅考慮到欲訪問的磁道與當前磁道間的距離,更優先考慮的是磁頭當前的移動方向。例如,當磁頭正在自裏向外移動時,SCAN 算法所考慮的下一個訪問對象,應是其欲訪問的磁道既在當前磁道之外,又是距離最近的。這樣自裏向外地訪問,直至再無更外的磁道需要訪問時,纔將磁臂換向爲自外向裏移動。這時,同樣也是每次選擇這樣的進程來調度,即要訪問的磁道在當前位置內且距離最近者。
    由於在這種算法中磁頭移動的規律頗似電梯的運行,因而又常稱之爲電梯調度算法。
  2. 循環掃描(CSCAN)算法。
    循環掃描算法是對掃描算法的改進。如果對磁道的訪問請求是均勻分佈的,當磁頭到達磁盤的一端,並反向運動時落在磁頭之後的訪問請求相對較少。這是由於這些磁道剛被處理,而磁盤另一端的請求密度相當高,且這些訪問請求等待的時間較長,爲了解決這種情況,循環掃描算法規定磁頭單向移動。例如,只自裏向外移動,當磁頭移到最外的被訪問磁道時,磁頭立即返回到最裏的欲訪磁道,即將最小磁道號緊接着最大磁道號構成循環,進行掃描。
  3. NStepSCAN 和 FSCAN 調度算法。
    1)NStepSCAN算法。
    在 SSTF、 SCAN 及 CSCAN 幾種調度算法中,都可能會出現磁臂停留在某處不動的情況。例如,有一個或幾個進程對某一磁道有較高的訪問頻率,即這個(些)進程反覆請求對某一磁道的 I/O 操作,從而壟斷了整個磁盤設備。我們把這一現象稱爲“磁臂粘着”。
    NStepSCAN 算法是將磁盤請求隊列分成若干個長度爲 N 的子隊列,磁盤調度將按 FCFS 算法依次處理這些子隊列。而每處理一個隊列時又是按 SCAN 算法,對一個隊列處理完後,再處理其他隊列。當正在處理某子隊列時,如果又出現新的磁盤 I/O 請求,便將新請求進程放入其他隊列,這樣就可避免出現粘着現象。當 N 值取得很大時,會使 N 步掃描法的性能接近於 SCAN 算法的性能;當 N=1 時,N 步 SCAN 算法便蛻化爲 FCFS 算法。
    2)FSCAN 算法。
    FSCAN 算法實質上是 N 步 SCAN 算法的簡化,即 FSCAN 只將磁盤請求隊列分成兩個子隊列。一個是由當前所有請求磁盤 I/O 的進程形成的隊列,由磁盤調度按 SCAN 算法進行處理。在掃描期間,將新出現的所有請求磁盤 I/O 的進程,放入另一個等待處理的請求隊列。這樣,所有的新請求都將被推遲到下一次掃描時處理。

繼續加油~

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