建個(gè)站的網(wǎng)站打不開有沒有免費(fèi)的廣告平臺
5.1 I/O管理概述
5.1.1 I/O設(shè)備
注:塊設(shè)備可以尋址,但是字符設(shè)備是不可尋址的
I/O設(shè)備是將數(shù)據(jù)輸入到計(jì)算機(jī)中,或者可以接收計(jì)算機(jī)輸出數(shù)據(jù)的外部設(shè)備,屬于計(jì)算機(jī)中的硬件部件;
- 設(shè)備的分類
- 按使用特性分類:
- 人機(jī)交互類外部設(shè)備:鼠標(biāo)、鍵盤、打印機(jī)等,用于人機(jī)交互。數(shù)據(jù)傳輸速度慢。
- 存儲設(shè)備:移動硬盤、光盤等,用于數(shù)據(jù)存儲。數(shù)據(jù)傳輸速度快。
- 網(wǎng)絡(luò)通信設(shè)備:調(diào)制解調(diào)器等,用于網(wǎng)絡(luò)通信。數(shù)據(jù)傳輸速度介于上述二者之間。
- 按信息交換的單位分類:
- 塊設(shè)備。信息交換以數(shù)據(jù)塊為單位。它屬于有結(jié)構(gòu)設(shè)備,如磁盤等。磁盤設(shè)備的基本特征是傳輸速率較高、可尋址,即對它可隨機(jī)地讀/寫任意一塊。
- 字符設(shè)備。信息交換以字符為單位。它屬于無結(jié)構(gòu)類型,如交互式終端機(jī)、打印機(jī)等。
- 按傳輸速率分類:
- 低速設(shè)備。傳輸速率僅為每秒幾字節(jié)到數(shù)百字節(jié)的一類設(shè)備,如鍵盤、鼠標(biāo)等。
- 中速設(shè)備。傳輸速率為每秒數(shù)千字節(jié)至數(shù)萬字節(jié)的一類設(shè)備,如激光打印機(jī)等。
- 高速設(shè)備。傳輸速率在數(shù)百千字節(jié)至千兆字節(jié)的一類設(shè)備,如磁盤機(jī)、光盤機(jī)等。
- 按使用特性分類:
- I/O接口
I/O接口
(又稱為設(shè)備控制器
)位于CPU與設(shè)備之間,它既要與CPU通信,又要與設(shè)備通信,還要具有按CPU發(fā)來的命令去控制設(shè)備工作的功能,主要由三部分組成,如下圖所示。
-
組成部分:
-
設(shè)備控制器與CPU的接口:實(shí)現(xiàn)控制器與CPU之間的通信
該接口有三類信號線:數(shù)據(jù)線、地址線和控制線。
數(shù)據(jù)線與兩類寄存器相連:數(shù)據(jù)寄存器(存放從設(shè)備送來的輸入數(shù)據(jù)或從CPU送來的輸出數(shù)據(jù))和控制/狀態(tài)寄存器(存放從CPU送來的控制信息或設(shè)備的狀態(tài)信息)。
-
設(shè)備控制器與設(shè)備的接口:實(shí)現(xiàn)控制器與設(shè)備之間的通信
一個(gè)設(shè)備控制器可以連接一個(gè)或多個(gè)設(shè)備,因此控制器中有一個(gè)或多個(gè)設(shè)備接口。
每個(gè)接口中都存在數(shù)據(jù)、控制和狀態(tài)三種類型的信號。
-
I/O邏輯:負(fù)責(zé)識別CPU發(fā)出的命令,并向設(shè)備發(fā)出命令
用于實(shí)現(xiàn)對設(shè)備的控制。它通過一組控制線與CPU交互,對從CPU收到的I/O命令進(jìn)行譯碼。
CPU啟動設(shè)備時(shí),將啟動命令發(fā)送給控制器,同時(shí)通過地址線把地址發(fā)送給控制器,由控制器的I/O邏輯對地址進(jìn)行譯碼,并相應(yīng)地對所選設(shè)備進(jìn)行控制。
-
-
主要功能:
- 接受和識別CPU發(fā)出的指令(控制寄存器)
- 向CPU報(bào)告設(shè)備的狀態(tài)(狀態(tài)寄存器)
- 數(shù)據(jù)交換(數(shù)據(jù)寄存器暫存數(shù)據(jù))
- 地址識別(由I/O邏輯實(shí)現(xiàn))
- 數(shù)據(jù)緩沖
- 差錯(cuò)控制
3.I/O端口
I/O端口是指設(shè)備控制器中可被CPU直接訪問的寄存器,主要有以下三類寄存器。
-
寄存器類型:
- 數(shù)據(jù)寄存器:實(shí)現(xiàn)CPU和外設(shè)之間的數(shù)據(jù)緩沖。
- 狀態(tài)寄存器:獲取執(zhí)行結(jié)果和設(shè)備的狀態(tài)信息,以讓CPU知道是否準(zhǔn)備好。
- 控制寄存器:由CPU寫入,以便啟動命令或更改設(shè)備模式。
-
實(shí)現(xiàn)I/O端口通信,有兩種編址方法:
- 獨(dú)立編址。為每個(gè)端口分配一個(gè)I/O端口號,所有I/O端口形成I/O端口空間,普通用戶程序不能對其進(jìn)行訪問,只有操作系統(tǒng)使用特殊的I/O指令才能訪問端口。
- 統(tǒng)一編址。又稱內(nèi)存映射I/O,每個(gè)端口被分配唯一的內(nèi)存地址,且不會有內(nèi)存被分配這地址,通常分配給端口的地址靠近地址空間的頂端。
5.1.2 I/O控制方式
設(shè)備管理的主要任務(wù)之一是控制設(shè)備和內(nèi)存或CPU之間的數(shù)據(jù)傳送。外圍設(shè)備與內(nèi)存之間的輸入/輸出控制方式有以下4種。
-
程序直接控制方式
如下圖所示,計(jì)算機(jī)從外部設(shè)備讀取的每個(gè)字,CPU需要對外設(shè)狀態(tài)進(jìn)行循環(huán)檢查,直到確定該字已經(jīng)在I/O控制器的數(shù)據(jù)寄存器中。
-
工作流程:
-
CPU干預(yù)的頻率:很頻繁,I/O操作開始之前、完成之后需要CPU介入,并且在等待I/O完成的過程中CPU需要不斷地輪詢檢查。
-
數(shù)據(jù)傳送的單位:每次讀/寫一個(gè)字
-
數(shù)據(jù)的流向:
- 讀操作(數(shù)據(jù)輸入):I/O設(shè)備→CPU→內(nèi)存
- 寫操作(數(shù)據(jù)輸出):內(nèi)存→CPU→I/O設(shè)備
- 每個(gè)字的讀/寫都需要CPU的幫助
-
優(yōu)點(diǎn):實(shí)現(xiàn)簡單。在讀/寫指令之后,加上實(shí)現(xiàn)循環(huán)檢查的一系列指令即可
-
缺點(diǎn):CPU和I/O設(shè)備只能串行工作,CPU需要一直輪詢檢查,長期處于“忙等”狀態(tài),CPU利用率低。
這種方式不會讓進(jìn)程阻塞
/*實(shí)際上,程序直接控制方式(也稱為忙等待或輪詢)在某些情況下確實(shí)會讓進(jìn)程阻塞,但這里的“阻塞”與傳統(tǒng)意義上的操作系統(tǒng)中的阻塞(如等待I/O操作完成而掛起進(jìn)程)有所不同。在程序直接控制方式中,進(jìn)程不會因等待I/O操作完成而被操作系統(tǒng)掛起或切換到其他進(jìn)程,但它會停留在當(dāng)前的循環(huán)中,不斷檢查I/O操作的完成情況,這同樣會導(dǎo)致進(jìn)程無法執(zhí)行其他任務(wù),從而形成一種“阻塞”的效果,盡管這種阻塞是在用戶態(tài)內(nèi)發(fā)生的,并未涉及操作系統(tǒng)層面的進(jìn)程調(diào)度。詳細(xì)解釋如下:忙等待(Busy Waiting):在程序直接控制方式中,當(dāng)進(jìn)程需要執(zhí)行I/O操作時(shí),它不會通過系統(tǒng)調(diào)用來請求操作系統(tǒng)完成I/O,而是會直接在用戶態(tài)中循環(huán)檢查I/O設(shè)備的狀態(tài)。如果I/O操作尚未完成,進(jìn)程會繼續(xù)循環(huán)檢查,而不是被操作系統(tǒng)掛起或切換到其他進(jìn)程。這種持續(xù)的檢查操作占用了CPU資源,但進(jìn)程并沒有進(jìn)行實(shí)質(zhì)性的工作(如處理數(shù)據(jù)、計(jì)算等),因此被視為一種“忙等待”或“輪詢”。 CPU資源浪費(fèi):由于進(jìn)程在忙等待期間持續(xù)占用CPU資源,而并沒有進(jìn)行有效的計(jì)算或處理,這會導(dǎo)致CPU資源的浪費(fèi)。特別是當(dāng)I/O操作需要較長時(shí)間才能完成時(shí),這種浪費(fèi)尤為明顯。 響應(yīng)性差:由于進(jìn)程被“阻塞”在忙等待循環(huán)中,它無法及時(shí)響應(yīng)其他事件或請求,如用戶輸入、定時(shí)器中斷等。這會導(dǎo)致程序的響應(yīng)性變差,用戶體驗(yàn)下降。 并非真正的阻塞:然而,需要注意的是,程序直接控制方式中的“阻塞”與傳統(tǒng)意義上的阻塞(如等待I/O操作完成而掛起進(jìn)程)是不同的。在程序直接控制方式中,進(jìn)程并沒有被操作系統(tǒng)掛起或切換到其他進(jìn)程,它仍然在運(yùn)行中,只是由于持續(xù)進(jìn)行無效的忙等待而無法執(zhí)行其他任務(wù)。 綜上所述,程序直接控制方式雖然不會讓進(jìn)程在操作系統(tǒng)層面被掛起或阻塞,但它通過忙等待的方式同樣會導(dǎo)致進(jìn)程無法執(zhí)行其他任務(wù),從而形成一種在用戶態(tài)內(nèi)的“阻塞”效果。因此,在實(shí)際應(yīng)用中,我們通常會采用更高效的I/O控制方式(如中斷驅(qū)動方式、DMA方式等)來避免這種不必要的資源浪費(fèi)和性能下降。*/
-
-
中斷驅(qū)動方式
中斷驅(qū)動方式的思想是,允許I/O設(shè)備主動打斷CPU的運(yùn)行并請求服務(wù),從而"解放” CPU,使得其向I/O控制器發(fā)送讀命令后可以繼續(xù)做其他有用的工作。
- 工作流程:
- 引入中斷機(jī)制。由于I/O設(shè)備速度很慢,因此在CPU發(fā)出讀/寫命令后,可將等待I/O的進(jìn)程阻塞,先切換到別的進(jìn)程執(zhí)行。
- 當(dāng)I/O完成后,控制器會向CPU發(fā)出一個(gè)中斷信號,CPU檢測到中斷信號后,會保存當(dāng)前進(jìn)程的運(yùn)行環(huán)境信息,轉(zhuǎn)去執(zhí)行中斷處理程序處理該中斷。
- 處理中斷的過程中,CPU從I/O控制器讀一個(gè)字的數(shù)據(jù)傳送到CPU寄存器,再寫入主存。接著,CPU恢復(fù)等待I/O的進(jìn)程(或其他進(jìn)程)的運(yùn)行環(huán)境,然后繼續(xù)執(zhí)行。
①CPU會在每個(gè)指令周期的末尾檢查中斷:
②中斷處理過程中需要保存、恢復(fù)進(jìn)程的運(yùn)行環(huán)境,這個(gè)過程是需要一定時(shí)間開銷的??梢?#xff0c;如果中斷發(fā)生的須率太高,也會降低系統(tǒng)性能。- CPU干預(yù)的頻率:每次I/O操作開始之前、完成之后需要CPU介入。等待I/O完成的過程中CPU可以切換到別的進(jìn)程執(zhí)行。
- 數(shù)據(jù)傳送單位:每次讀/寫一個(gè)字
- 數(shù)據(jù)流向:
- 讀操作(數(shù)據(jù)輸入):I/O設(shè)備→CPU→內(nèi)存
- 寫操作(數(shù)據(jù)輸出):內(nèi)存→CPU→I/O設(shè)備
- 優(yōu)點(diǎn):與“程序直接控制方式”相比,在“中斷驅(qū)動方式”中,I/O控制器會通過中斷信號主動報(bào)告I/O已完成,CPU不再需要不停地輪詢。CPU和I/O設(shè)備可并行工作,CPU利用率得到明顯提升。
- 缺點(diǎn):每個(gè)字在I/O設(shè)備與內(nèi)存之間的傳輸,都需要經(jīng)過CPU。而頻繁的中斷處理會消耗較多的CPU時(shí)間。
這種方式會讓進(jìn)程阻塞
- 工作流程:
-
DMA方式
DMA(直接存儲器存取)方式的基本思想是在I/O設(shè)備和內(nèi)存之間開辟直接的數(shù)據(jù)交換通路,徹底“解放”CPU。下圖為DMA工作流程。
-
與“中斷驅(qū)動方式”相比,DMA方式有這樣幾個(gè)改進(jìn):
- ①數(shù)據(jù)的傳送單位是“塊”。不再是一個(gè)字、一個(gè)字的傳送:
- ②數(shù)據(jù)的流向是從設(shè)備直接放入內(nèi)存,或者從內(nèi)存直接到設(shè)備。不再需要CPU作為“快遞小哥”。
- ③僅在傳送一個(gè)或多個(gè)數(shù)據(jù)塊的開始和結(jié)束時(shí),才需要CPU干預(yù),數(shù)據(jù)傳送通過DMA控制器完成。
-
DMA控制器組成:
下圖為DMA控制器的組成。
DMA控制器中設(shè)置如下4類寄存器:
- 數(shù)據(jù)寄存器(DR)。暫存從設(shè)備到內(nèi)存或從內(nèi)存到設(shè)備的數(shù)據(jù)。
- 內(nèi)存地址寄存器(MAR)。在輸入時(shí),它存放把數(shù)據(jù)從設(shè)備傳送到內(nèi)存的起始目標(biāo)地址;在輸出時(shí),它存放由內(nèi)存到設(shè)備的內(nèi)存源地址。
- 數(shù)據(jù)計(jì)數(shù)器(DC)。存放本次要傳送的字(節(jié))數(shù),剩余要讀/寫的字節(jié)數(shù)。
- 命令/狀態(tài)寄存器(CR)。接收從CPU發(fā)來的I/O命令、有關(guān)控制信息,或設(shè)備的狀態(tài)。
-
CPU干預(yù)的頻率:僅在傳送一個(gè)或多個(gè)數(shù)據(jù)塊的開始和結(jié)束時(shí),才需要CPU干預(yù)。
-
數(shù)據(jù)傳送單位:每次讀/寫一個(gè)或多個(gè)塊(注意:每次讀寫的只能是連續(xù)的多個(gè)塊,且這些塊讀入內(nèi)存后在內(nèi)存中也必須是連續(xù)的)
-
數(shù)據(jù)流向:
- 讀操作(數(shù)據(jù)輸入):I/O設(shè)備→內(nèi)存
- 寫操作(數(shù)據(jù)輸出):內(nèi)存→I/O設(shè)備
-
優(yōu)點(diǎn):數(shù)據(jù)傳輸以“塊”為單位,CPU介入頻率進(jìn)一步降低。數(shù)據(jù)的傳輸不再需要先經(jīng)過CPU再寫入內(nèi)存,數(shù)據(jù)傳輸效率進(jìn)一步增加。CPU和I/O設(shè)備的并行性得到提升。
-
缺點(diǎn):CPU每發(fā)出一條I/O指令,只能讀/寫一個(gè)或多個(gè)連續(xù)的數(shù)據(jù)塊。如果要讀/寫多個(gè)離散存儲的數(shù)據(jù)塊,或者要將數(shù)據(jù)分別寫到不同的內(nèi)存區(qū)域時(shí),CPU要發(fā)出多條I/O指令,進(jìn)行多次中斷處理才能完成。
-
-
通道控制方式
通道:I/O通道是指專門負(fù)責(zé)輸入輸出的處理機(jī)。是一種硬件,可以理解為是“弱雞版的CPU”。通道可以識別并執(zhí)行一系列通道指令。
與CPU相比,通道可以執(zhí)行的指令很單一,并且通道程序是放在主機(jī)內(nèi)存中的,也就是說通道與CPU共享內(nèi)存
-
完成一次讀寫流程:
-
CPU干預(yù)的頻率:極低,通道會根據(jù)CPU的指示執(zhí)行相應(yīng)的通道程序,只有完成一組數(shù)據(jù)塊的讀/寫后才需要發(fā)出中斷信號,請求CPU干預(yù)。
-
數(shù)據(jù)傳送的單位:每次讀/寫一組數(shù)據(jù)塊
-
數(shù)據(jù)的流向(在通道的控制下進(jìn)行)
- 讀操作(數(shù)據(jù)輸入):I/O設(shè)備→內(nèi)存
- 寫操作(數(shù)據(jù)輸出):內(nèi)存→I/O設(shè)備
-
缺點(diǎn):實(shí)現(xiàn)復(fù)雜,需要專門的通道硬件支持
-
優(yōu)點(diǎn):CPU、通道、I/O設(shè)備可并行工作,資源利用率很高。
-
5.1.4 I/O軟件層次結(jié)構(gòu)
為了更好地設(shè)計(jì) I/O 軟件,采用 層次式結(jié)構(gòu) 的 I/O 軟件;
一個(gè)比較合理的層次劃分如上圖所示。整個(gè)I/O軟件可以視為具有4個(gè)層次的系統(tǒng)結(jié)構(gòu),各層次功能如下:
-
用戶層軟件(產(chǎn)生I/O請求,格式化I/O,SPOOLing)
實(shí)現(xiàn)了與用戶交互的接口,用戶可直接使用該層提供的、與I/O操作相關(guān)的庫函數(shù)對設(shè)備進(jìn)行操作。
用戶層軟件將用戶請求翻譯成格式化的I/O請求,并通過“系統(tǒng)調(diào)用”請求操作系統(tǒng)內(nèi)核的服務(wù)
-
設(shè)備獨(dú)立性軟件(映射;保護(hù);分塊;緩沖;分配)
設(shè)備獨(dú)立性軟件,又稱設(shè)備無關(guān)性軟件。與設(shè)備的硬件特性無關(guān)的功能幾乎都在這一層實(shí)現(xiàn)。
-
功能:
- ① 向上層提供統(tǒng)一的調(diào)用接口(如read/write系統(tǒng)調(diào)用)
- ② 設(shè)備的保護(hù)
- ③ 差錯(cuò)處理
- ④ 設(shè)備的分配與可收
-
-
⑤ 數(shù)據(jù)緩沖區(qū)管理
- ⑥ 建立邏輯設(shè)備名到物理設(shè)備名的映射關(guān)系;根據(jù)設(shè)備類型選擇調(diào)用相應(yīng)的驅(qū)動程序
-
邏輯設(shè)備
為實(shí)現(xiàn)設(shè)備獨(dú)立性而引入了邏輯設(shè)備和物理設(shè)備這兩個(gè)概念。在應(yīng)用程序中,使用邏輯設(shè)備名來請求使用某類設(shè)備;而在系統(tǒng)實(shí)際執(zhí)行時(shí),必須將邏輯設(shè)備名映射成物理設(shè)備名使用。
使用邏輯設(shè)備名好處:
-
①增加設(shè)備分配的靈活性
- ②易于實(shí)現(xiàn)I/O重定向,指用于I/O操作的設(shè)備可以更換(即重定向),而不必改變應(yīng)用程序。
設(shè)備獨(dú)立性軟件需要通過“邏輯設(shè)備表(LUT,Logical Unit Table)”來確定邏輯設(shè)備對應(yīng)的物理設(shè)備,并找到該設(shè)備對應(yīng)的設(shè)備驅(qū)動程序。
I/O設(shè)備被當(dāng)做一種特殊的文件;不同類型的I/O設(shè)備需要有不同的驅(qū)動程序處理
操作系統(tǒng)系統(tǒng)可以采用兩種方式管理邏輯設(shè)備表(LUT):
- 第一種方式,整個(gè)系統(tǒng)只設(shè)置一張LUT,這就意味著所有用戶不能使用相同的邏輯設(shè)備名,因此這種方式只適用于單用戶操作系統(tǒng)。
-
第二種方式,為每個(gè)用戶設(shè)置一張LUT,各個(gè)用戶使用的邏輯設(shè)備名可以重復(fù),適用于多用戶操作系統(tǒng)。系統(tǒng)會在用戶登錄時(shí)為其建立一個(gè)用戶管理進(jìn)程,而LUT就存放在用戶管理進(jìn)程的PCB中。
-
設(shè)備驅(qū)動程序(設(shè)置設(shè)備寄存器,檢查設(shè)備狀態(tài))
與硬件直接相關(guān),負(fù)責(zé)具體實(shí)現(xiàn)系統(tǒng)對設(shè)備發(fā)出的操作指令,驅(qū)動I/O設(shè)備工作的驅(qū)動程序。 將上層發(fā)出的一系列命令(如read/write)轉(zhuǎn)化成特定設(shè)備“能聽得懂”的一系列操作。
不同設(shè)備的內(nèi)部硬件特性也不同,這些特性只有廠家才知道,因此廠家須提供與設(shè)備相對應(yīng)的驅(qū)動程序,CPU執(zhí)行驅(qū)動程序的指令序列,來完成設(shè)置設(shè)備寄存器,檢查設(shè)備狀態(tài)等工作。
為I/O內(nèi)核子系統(tǒng)隱藏設(shè)備控制器之間的差異。
4.中斷處理程序
當(dāng)I/O任務(wù)完成時(shí),I/O控制器會發(fā)送一個(gè)中斷信號,系統(tǒng)會根據(jù)中斷信號類型找到相應(yīng)的中斷處理程序并執(zhí)行。
-
中斷處理程序的處理流程如下:
-
中斷處理層的任務(wù):
- 進(jìn)行進(jìn)程上下文的切換,
- 對處理中斷信號源進(jìn)行測試,
- 讀取設(shè)備狀態(tài)和修改進(jìn)程狀態(tài)等。
由于中斷處理與硬件緊密相關(guān),對用戶而言,應(yīng)盡量加以屏蔽,因此應(yīng)放在操作系統(tǒng)的底層,系統(tǒng)的其余部分盡可能少地與之發(fā)生聯(lián)系。
5.硬件
執(zhí)行IO操作,機(jī)械部件、電子部件組成
總結(jié)
說明用戶對設(shè)備的一次命令過程如下所示:
- ①當(dāng)用戶要讀取某設(shè)備的內(nèi)容時(shí),通過操作系統(tǒng)提供的read命令接口,這就經(jīng)過了用戶層。
- ②操作系統(tǒng)提供給用戶使用的接口,一般是統(tǒng)一的通用接口,也就是幾乎每個(gè)設(shè)備都可以響應(yīng)的統(tǒng)一命令,如read命令,用戶發(fā)出的read命令,首先經(jīng)過設(shè)備獨(dú)立層進(jìn)行解析,然后交往下層。
- ③接下來,不同類型的設(shè)備對read命令的行為會有所不同,如磁盤接收read命令后的行為與打印機(jī)接收read命令后的行為是不同的。因此,需要針對不同的設(shè)備,把read命令解析成不同的指令,這就經(jīng)過了設(shè)備驅(qū)動層。
- ④命令解析完畢后,需要中斷正在運(yùn)行的進(jìn)程,轉(zhuǎn)而執(zhí)行read命令,這就需要中斷處理程序。
- ⑤最后,命令真正抵達(dá)硬件設(shè)備,硬件設(shè)備的控制器按照上層傳達(dá)的命令操控硬件設(shè)備,完成相應(yīng)的功能。
理解:
直接涉及到硬件其體細(xì)節(jié)、且與中斷無關(guān)的操作肯定是在設(shè)備驅(qū)動程序?qū)油瓿傻?#xff1b;
沒有涉及硬件的、對各種設(shè)備都需要進(jìn)行的管理工作都是在設(shè)備獨(dú)立性軟件層完成的。
5.1.4 應(yīng)用程序I/O接口
在I/O系統(tǒng)與高層之間的接口中,根據(jù)設(shè)備類型的不同,又進(jìn)一步分為若干接口。
-
字符設(shè)備接口
字符設(shè)備是指數(shù)據(jù)的存取和傳輸是以字符為單位的設(shè)備,如鍵盤、打印機(jī)等?;咎卣魇莻鬏斔俾瘦^低、不可尋址,并且在輸入輸出時(shí)通常采用中斷驅(qū)動方式。
-
字符設(shè)備的操作
- get和put操作。由于字符設(shè)備不可尋址,只能采取順序存取方式,通常為字符設(shè)備建立一個(gè)字符緩沖區(qū),用戶程序通過get操作從緩沖區(qū)獲取字符,通過put操作將字符輸出到緩沖區(qū)。
- in-control指令。字符設(shè)備類型繁多,差異甚大,因此在接口中提供一種通用的in-control指令來處理它們(包含了許多參數(shù),每個(gè)參數(shù)表示一個(gè)與具體設(shè)備相關(guān)的特定功能)。
字符設(shè)備都屬于獨(dú)占設(shè)備,為此接口中還需要提供打開和關(guān)閉操作,以實(shí)現(xiàn)互斥共享。
-
-
塊設(shè)備接口
塊設(shè)備是指數(shù)據(jù)的存取和傳輸是以數(shù)據(jù)塊為單位的設(shè)備,典型的塊設(shè)備是磁盤?;咎卣魇莻鬏斔俾瘦^高、可尋址。磁盤設(shè)備的I/O常采用DMA方式。
- 隱藏了磁盤的二維結(jié)構(gòu):在二維結(jié)構(gòu)中,每個(gè)扇區(qū)的地址需要用磁道號和扇區(qū)號來表示。塊設(shè)備接口將磁盤的所有扇區(qū)從0到n-1依次編號,這樣,就將二維結(jié)構(gòu)變?yōu)橐环N線性序列。
- 將抽象命令映射為低層操作:塊設(shè)備接口支持上層發(fā)來的對文件或設(shè)備的打開、讀、寫和關(guān)閉等抽象命令,該接口將上述命令映射為設(shè)備能識別的較低層的具體操作。
- 內(nèi)存映射接口:內(nèi)存映射接口通過內(nèi)存的字節(jié)數(shù)組來訪問磁盤,而不提供讀/寫磁盤操作。映射文件到內(nèi)存的系統(tǒng)調(diào)用返回包含文件副本的一個(gè)虛擬內(nèi)存地址。只在需要訪問內(nèi)存映像時(shí),才由虛擬存儲器實(shí)際調(diào)頁。內(nèi)存映射文件的訪問如同內(nèi)存讀寫一樣簡單,極大地方便了程序員。
-
網(wǎng)絡(luò)設(shè)備接口
許多操作系統(tǒng)提供的網(wǎng)絡(luò)I/O接口為網(wǎng)絡(luò)套接字接口,套接字接口的系統(tǒng)調(diào)用使應(yīng)用程序創(chuàng)建的本地套接字連接到遠(yuǎn)程應(yīng)用程序創(chuàng)建的套接字,通過此連接發(fā)送和接收數(shù)據(jù)。
-
阻塞/非阻塞I/O
-
**阻塞I/O:**當(dāng)用戶進(jìn)程調(diào)用I/O操作時(shí),進(jìn)程就被阻塞,需要等待I/O操作完成,進(jìn)程才被喚醒繼續(xù)執(zhí)行。
eg:字符設(shè)備接口一一從鍵盤讀一個(gè)字符get
-
非阻塞I/O:用戶進(jìn)程調(diào)用I/O操作時(shí),不阻塞該進(jìn)程,該I/O調(diào)用返回一個(gè)錯(cuò)誤返回值,通常,進(jìn)程需要通過輪詢的方式來查詢I/O操作是否完成。
eg:塊設(shè)備接口一一往磁盤寫數(shù)據(jù)write
-
5.1.5 本節(jié)小結(jié)
I/O管理要完成哪些功能?
I/O管理需要完成以下4部分內(nèi)容:
- 狀態(tài)跟蹤。要能實(shí)時(shí)掌握外部設(shè)備的狀態(tài)。
- 設(shè)備存取。要實(shí)現(xiàn)對設(shè)備的存取操作。
- 設(shè)備分配。在多用戶環(huán)境下,負(fù)責(zé)設(shè)備的分配與回收。
- 設(shè)備控制。包括設(shè)備的驅(qū)動、完成和故障的中斷處理。
錯(cuò)題總結(jié)或者需要注意的點(diǎn)
1.共享設(shè)備必須是可尋址和可隨機(jī)訪問的設(shè)備
2.共享設(shè)備是指在一段時(shí)間內(nèi)允許多個(gè)進(jìn)程同時(shí)訪問的設(shè)備,而不是同一時(shí)刻
3.虛擬設(shè)備是指,把一個(gè)物理設(shè)備變換成多個(gè)對應(yīng)的邏輯設(shè)備
4.設(shè)備控制器通常需要提供:控制寄存器,狀態(tài)寄存器和控制命令
5.在OS中,通道技術(shù)是一種硬件機(jī)制
6.通道控制設(shè)備控制器,設(shè)備控制器控制設(shè)備工作
7.向設(shè)備寄存器的寫命令是在I/O軟件中的設(shè)備驅(qū)動程序完成的
8.中斷驅(qū)動方式:
? 處理中斷請求:一旦確定了中斷源,中斷處理程序就會執(zhí)行與該中斷源相關(guān)聯(lián)的特定代碼。這可能包括讀取設(shè)備的狀態(tài)寄存器、從設(shè)備讀取數(shù)據(jù)或向設(shè)備寫入數(shù)據(jù)、更新系統(tǒng)的狀態(tài)或執(zhí)行其他必要的操作。