1. 程式人生 > >作業系統19———IO系統之與裝置無關的I/O軟體&使用者層的I/O軟體

作業系統19———IO系統之與裝置無關的I/O軟體&使用者層的I/O軟體

作業系統19———IO系統之與裝置無關的I/O軟體&使用者層的I/O軟體

一.目錄

二.與裝置無關軟體的基本概念

裝置獨立性(裝置無關性)的含義:應用程式中所用的裝置,不侷限於使用某個具體的物理裝置。 與裝置無關的I/O軟體(裝置獨立性軟體)含義:在裝置驅動程式之上設定一層軟體,以實現裝置獨立性。

1. 以物理裝置名使用裝置

早期OS中,應用程式在使用I/O裝置時,都使用裝置的物理名字,但這樣會導致很多的問題,比如:不靈活,給使用者帶來不便。對提高I/O裝置的利用率也很不利。

2.引入了邏輯裝置名

為了實現與裝置的無關性而引入了邏輯裝置和物理裝置兩個概念。邏輯裝置是抽象的裝置名,如/dev/printer,並不指定哪一臺印表機。好處:系統裝置分配靈活。 可實現I/O重定向。即:用於IO操作的裝置可更換,而不必改變應用程式。

如修改邏輯裝置表:終端->印表機

3.邏輯裝置名到物理裝置名的轉換

為了實現邏輯裝置名到物理裝置名的對映,系統必須設定一張邏輯裝置表LUT(Logical Unit Table),能夠將應用程式中所使用的邏輯裝置名對映為物理裝置名,並提供該裝置驅動程式的入口地址。

這裡寫圖片描述

三.與裝置無關的軟體

與裝置無關的軟體是I/O系統的最高層軟體,在它下面是裝置的驅動程式。總的來說,與裝置無關的軟體中,包括了執行所有裝置的公有操作的軟體,具體包括如下幾項:

  1. 裝置驅動的統一介面:可以很方便的新增裝置的驅動程式。
  2. 緩衝管理:見後面的部落格
  3. 差錯控制:包括兩類錯誤,暫時性錯誤,永久性錯誤。
  4. 對獨立裝置的分配與回收:對獨佔裝置有系統進行統一的分配和回收處理。
  5. 獨立於裝置的邏輯資料塊:隱藏不同裝置的物理資料塊大小的差異,向高層軟體提供大小統一的邏輯資料塊。

四.裝置分配

系統為實現對獨佔裝置的分配,必須在系統中配置相應的資料結構。

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

在用於裝置分配的資料結構中,記錄了對裝置或控制器進行控制所需的資訊。在進行裝置分配時需要如下的資料結構。

a.裝置控制表DCT   系統為每一個裝置都配置了一張裝置控制表,用於記錄裝置的情況,如下圖 這裡寫圖片描述 b.控制器控制表(COCT) 系統為每一個控制器都設定了用於記錄控制器情況的控制器控制表,如圖(a)所示。 c.通道控制表(CHCT) 每個通道都有一張通道控制表,如圖(b)所示。   d.系統裝置表(SDT)

這是系統範圍的資料結構,記錄了系統中全部裝置的情況,每個裝置佔一個表目,其中包括有裝置型別、裝置識別符號、裝置控制表及裝置驅動程式的入口等項,如圖©所示。 這裡寫圖片描述

2.裝置分配時應考慮的因素

a.裝置的固有屬性 裝置獨佔屬性可分為三種。對它們應採取不同的分配策略:

  • 獨享裝置:將一個裝置分配給某程序後,便由該程序獨佔,直到該程序完成或釋放該裝置。
  • 共享裝置:對於共享裝置,可同時分配給多個程序使用,此時必須注意對於這些程序訪問該裝置的先後次序進行合理排程。
  • 虛擬裝置:虛擬裝置屬於可共享裝置,可以將它同時分配給多個程序使用。

b.裝置分配演算法

  • 先來先服務:即按照程序的請求的先後次序來進行分配裝置

  • 優先順序高者優先:該演算法將佇列中的優先順序較高的放在隊首前 c.裝置分配中的安全性

  • 安全分配方式:程序發出I/O請求後就進入阻塞態

  • 不安全分配方式:程序發出I/O請求仍繼續執行

3.獨佔裝置的分配程式

a.基本的裝置分配程式 分配裝置–>分配控制器–>分配通道 b.裝置分配程式的改進

  • 增加裝置的獨立性: 邏輯裝置名請求I/O。系統應查詢所有該類裝置的DCT。
  • 考慮多通路情況:對多個控制器和通道的分配,必須查詢所有的控制器和通道。

五.邏輯裝置名到物理裝置名對映的實現

為實現與裝置的無關性,當應用程式請求使用I/O裝置時,應當用邏輯裝置名。但系統只識別物理裝置名,因此在系統中需要配置一張邏輯裝置表,用於將邏輯裝置名對映為物理裝置名。

1.邏輯裝置表LUT

在邏輯裝置表的每個表目中包含了三項:邏輯裝置名、物理裝置名和裝置驅動程式的入口地址。如下圖。當程序用邏輯表請求分配I/O裝置時,系統根據當時的具體情況,為它分配一個相應的物理裝置。同時,在邏輯裝置表中建立一個標目,填上應用程式中使用的邏輯裝置名和系統分配的物理裝置名,以及該裝置驅動程式入口地址。當以後程序在利用該邏輯裝置名請求I/O操作時,系統通過查詢LUT,便可以找到該邏輯裝置所對應的物理裝置和該裝置的驅動程式。

這裡寫圖片描述

2.邏輯裝置表的設定問題

在系統中可採取兩種方式設定邏輯裝置表:     第一種方式,是在整個系統中只設置一張LUT。   第二種方式,是為每個使用者設定一張LUT。

六.系統呼叫和函式庫

1. 系統呼叫

一方面,為使諸程序能有條不紊地使用I/O裝置,且能保護裝置的安全性,不允許執行在使用者態的應用程序去直接呼叫執行在核心態(系統態)的OS過程。但另一方面,應用程序在執行時,又必須取得OS所提供的服務,否則,應用程式幾乎無法執行。為了解決此矛盾,OS在使用者層中引入了一箇中介過程——系統呼叫,應用程式可以通過它間接呼叫OS中的I/O過程,對I/O裝置進行操作。

2. 庫函式

在C語言以及UNIX系統中,系統呼叫(如read)與各系統呼叫所使用的庫函式(如read)之間幾乎是一一對應的。而微軟定義了一套過程,稱為Win32 API的應用程式介面(Application Program Interface),程式設計師利用它們取得OS服務,該介面與實際的系統呼叫並不一一對應。使用者程式通過呼叫對應的庫函式使用系統呼叫,這些庫函式與呼叫程式連線在一起,被嵌入在執行時裝入記憶體的二進位制程式中。

七.假離線系統

1. 什麼是SPOOLing技術(假離線技術)

  • 定義:在聯機的情況下實現的同時外圍操作
  • 特點:是對離線輸入輸出系統的模擬。因此, 必須建立在具有多道程式功能的作業系統上,而且需要高速外存的支援。
  • 方式:將資料從輸入裝置傳送到磁碟或反之。
  • 通過它可以將一臺獨佔的物理裝置虛擬為多臺邏輯裝置,從而允許多個使用者(程序)共享。

2.SPOOLing系統的組成

  • 輸入井和輸出井:在磁碟上開闢的兩個大儲存空間
  • 輸入緩衝區和輸出緩衝區:在記憶體中開闢的兩個緩衝區
  • 輸入程序Spi和輸出程序Spo:是記憶體中的兩個程序
  • 井管理程式:控制作業與磁碟井之間資訊的交換 這裡寫圖片描述

3.假離線印表機系統

SPOOLing系統接收到使用者程序的列印輸出請求後:

  • 由輸出程序在輸出井中為之申請一個空閒磁碟塊區,並將要列印的資料送入其中;
  • 輸出程序再為使用者程序申請一張空白的使用者請求打印表,並將使用者的列印要求填入其中,再將該表掛到請求列印佇列上。

當印表機空閒時,輸出程序將從請求列印佇列的隊首取出一張請求打印表,再從輸出井把資料送到記憶體緩衝區,啟動印表機列印輸出。列印完後,輸出程序檢查請求列印佇列……

4.SPOOLing系統的特點

  • 提高了I/O的速度,緩和了CPU與低速I/O裝置速度不匹配的矛盾
  • 利用高速共享裝置,將獨佔裝置改造為共享裝置
  • 實現了虛擬裝置功能:使用者都感到獨佔了一臺裝置

5.守護程序(deamon)

  • 守護程序取代假離線管理程序。執行以下功能: 為使用者申請磁碟緩衝區的空閒盤塊、寫入列印資料、返回該盤塊的首址。
  • 守護程序是允許使用印表機的唯一程序。列印程序要將要求列印的檔案放在假離線檔案佇列中。並喚醒守護程序。
  • 守護程序的任務是按照佇列中每個檔案的說明執行逐個列印任務,直至全部完成,然後休眠。
  • 總之,凡是需要將獨佔裝置改造為共享裝置時,都要為該裝置配置守護程序和假離線檔案佇列。

八.參考資料

《作業系統第四版》