作業系統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.裝置分配中的資料結構
在用於裝置分配的資料結構中,記錄了對裝置或控制器進行控制所需的資訊。在進行裝置分配時需要如下的資料結構。
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)
- 守護程序取代假離線管理程序。執行以下功能: 為使用者申請磁碟緩衝區的空閒盤塊、寫入列印資料、返回該盤塊的首址。
- 守護程序是允許使用印表機的唯一程序。列印程序要將要求列印的檔案放在假離線檔案佇列中。並喚醒守護程序。
- 守護程序的任務是按照佇列中每個檔案的說明執行逐個列印任務,直至全部完成,然後休眠。
- 總之,凡是需要將獨佔裝置改造為共享裝置時,都要為該裝置配置守護程序和假離線檔案佇列。
八.參考資料
《作業系統第四版》