1. 程式人生 > >作業系統——第六章筆記(三)

作業系統——第六章筆記(三)

5.與裝置無關的I/O軟體
5.1裝置獨立性的基本含義:
1)指應用程式中所使用的裝置,不侷限於使用某個具體的物理裝置,也稱為裝置無關性。
2)為了實現裝置獨立性,在裝置驅動程式之上設定一層軟體,稱為與裝置無關的I/O軟體,或裝置獨立性軟體。
3)裝置無關的軟體是I/O系統最高層軟體,但它和其下的裝置驅動程式之間的界限,將隨作業系統和裝置的不同而有所差異。
5.2裝置獨立性(無關性)
使用者程式設計時所用的裝置名(邏輯上的)與實際物理裝置無關;
1)好處:
 裝置分配時的靈活性
3個物理裝置(如印表機),程式中申請一臺印表機,執行時不拘泥必須是某臺(如第2個)印表機
 易於實現I/O重定向
指用於I/O操作的裝置可以更換(重定向),而不必改變應用程式。 程式除錯、執行中的“列印”,可通過修改邏輯裝置表的顯示終端,實現不同時候的不同的裝置使用。
5.3邏輯裝置名到物理裝置名的對映
1)邏輯裝置表LUT(Logical Unit Table)
2)LUT的設定問題
 整個系統設定一張LUT(裝置重名問題)
 為每個使用者設定一張LUT,記入各自PCB。
5.4裝置分配
5.4.1多道環境下,系統中裝置是所有程序共享的。要防止無序競爭,提高外設資源的利用率。需由OS進行統一、合理的裝置分配。所需資料結構:
1)資料結構
 裝置控制表(DCT)
a)系統為每一裝置都配置一張
b)記錄本裝置的情況。
 控制器控制表(COCT)
a)系統為每一控制器都配置一張
b)記錄本控制器的情況。
 通道控制表CHCT
 系統裝置表(SDT)
系統根據程序對裝置的請求進行裝置分配的過程:
IO請求中的裝置名 àSDTàDCTàCOCTàCHCT
2)裝置分配需考慮的因素
 裝置固有屬性:獨佔、共享、獨佔但可虛擬。根據屬性採取互斥、次序排程、虛擬等不同分配策略。
 裝置分配演算法(對不同程序的裝置請求序列,如何進行選擇),常採用兩種:
a)FCFS
b)優先順序高者優先
c)裝置分配的安全性:程序開始I/O後就阻塞直到I/O完成。不“請求和保持”(安全的);允許連續I/O請求,是不安全的,此類分配方式需進行安全性檢查。
 裝置獨立性
使用者IO請求中使用邏輯名申請某類裝置,實際物理名稱是系統根據裝置型別分析分配後才確定的。
3)獨佔裝置的分配過程
5.4.2基本分配步驟(一個有通道的例子):
 分配裝置:
a)根據請求裝置名,查詢SDT,找到DCT;
b)狀態、安全性等因素都可能導致本申請程序阻塞,掛入DCT等待佇列中。
 分配控制器
a)通過1步分配裝置後,從DCT找到COCT;
b)檢查COCT狀態字,若忙碌,程序PCB掛到其等待佇列
 分配通道
a)COCT找到CHCT
b)判斷狀態,…
當上述三步都通過後,才可啟動裝置進行資料傳輸
5.4.3裝置分配程式的改進細節
 增加裝置的獨立性
a)程序使用邏輯裝置名提出I/O請求。
b)系統從SDT中依次找下去,直到找到一個該類裝置中空閒可用的進行分配。
 考慮多通路情況
控制器、通道也是反覆查詢,直到找到一條通路。
5.4.4
 分配裝置:
在這裡插入圖片描述


 分配控制器
在這裡插入圖片描述
6.使用者層的I/O軟體
6.1小部分I/O系統軟體放在了使用者應用層上。
 庫函式(與應用程式連結)
 假離線技術(虛擬裝置)
6.2系統呼叫與庫函式
 不允許執行在使用者態的應用程序,去直接呼叫執行在核心態(系統態)的OS過程。
 應用程序在執行時,又必須取得OS所提供的服務。
 OS在使用者層中引入了系統呼叫,應用程式可以通過它,間接呼叫OS中的I/O過程,對I/O裝置進行操作。
6.3裝置分配中的虛擬技術—— SPOOLing技術
 虛擬性是OS的四大特徵之一。
 多道程式技術將一臺物理CPU虛擬為多臺邏輯CPU,實現多個使用者共享一臺主機;
6.4假離線技術
 多道程式技術,專門利用程式模擬離線I/O的外圍機,完成裝置I/O操作。
6.5 SPOOLing
6.5.1 SPOOLing系統的組成
 輸入井和輸出井:磁碟上開闢兩大儲存空間。輸入井模擬離線輸入的磁碟裝置,輸出井模擬離線輸出時的磁碟。
 輸入緩衝區和輸出緩衝區:為緩解速度矛盾,記憶體中開闢兩大緩衝空間,輸入緩衝區暫存輸入裝置送來的資料,再送給輸入井;輸出緩衝區暫存輸出井送來的資料,再送輸出裝置。
 輸入程序和輸出程序:用一程序模擬離線輸入時外圍裝置控制器的功能,把低速輸入裝置上的資料傳送到高速磁碟上;用另一程序模擬離線輸出時外圍裝置控制器的功能,把資料從磁碟上傳送到低速輸出裝置上。
6.5.2 SPOOLing技術的使用:
當用戶程序請求列印輸出時,SPOOLing系統同意為它列印輸出,但並不真正立即把印表機分配給使用者程序,而只為它做兩件事:
 由輸出程序在輸出井中為之請求一個空閒磁碟塊區,並將要列印的資料送入其中.
 輸出程序再為使用者程序申請一張空白的使用者請求打印表,並將使用者的列印要求填入其中,再將該表掛在請求列印佇列上。
6.5.3守護程序
 守護程序(Daemon)是執行在後臺 的一種特殊程序。它獨立於控制終端並且週期性地執行某種任務或等待處理某些發生的事件。守護程序是一種很有用的程序。
 Linux的大多數伺服器就是用守護程序實現的。比如,Internet伺服器inetd,Web伺服器httpd等。同時,守護程序完成許多系統任務。比如,作業規劃程序crond,列印程序lpd等。
6.6共享印表機
 印表機屬於獨佔裝置,利用SPOOLing技術可將其改造為一臺可供多個使用者共享的裝置。
6.7 SPOOLing系統的特點
 提高了I/O的速度。利用輸入輸出井模擬成離線輸入輸出,緩和了CPU和I/O裝置速度不匹配的矛盾。
 將獨佔裝置改造為共享裝置。並沒有為程序分配裝置,而是為程序分配一儲存區和建立一張I/O請求表。
 最終,實現了虛擬裝置功能。多個程序可“同時”使用一臺獨佔裝置。

6.6共享印表機
 印表機屬於獨佔裝置,利用SPOOLing技術可將其改造為一臺可供多個使用者共享的裝置。
6.7 SPOOLing系統的特點
 提高了I/O的速度。利用輸入輸出井模擬成離線輸入輸出,緩和了CPU和I/O裝置速度不匹配的矛盾。
 將獨佔裝置改造為共享裝置。並沒有為程序分配裝置,而是為程序分配一儲存區和建立一張I/O請求表。
 最終,實現了虛擬裝置功能。多個程序可“同時”使用一臺獨佔裝置。