設備管理 | I/O軟體
來自專欄 操作系統筆記
I/O軟體的組成:I/O控制模塊
IO軟體是計算機系統中用來完成所有與IO操作相關功能的一組軟體。
根據它們與底層硬體的緊密程度,通常組織成如下圖所示的組織結構:
設備驅動:完成具體的IO操作
中斷處理:完成IO結束後的中斷處理操作
設備獨立性軟體:用來屏蔽底層硬體的物理特性,同時向上層軟體提供統一方便的使用介面。主要完成對IO設備通用的一些操作,設備的命名、設備的保護、IO操作中緩衝的管理、設備的分配與釋放等。
用戶層軟體主要完成與IO操作相關的系統調用,並對IO操作進行格式化。
I/O控制模塊的實現方式: 即驅動程序的調用方式
(1)以設備處理進程的方式
介面程序負責接收用戶上傳上來的IO系統調用,並進行解析,轉換成設備處理進程能夠識別的命令形式,然後喚醒設備處理進程 並將IO請求交給設備處理進程。
設備處理進程根據IO請求負責調用設備驅動程序,完成具體的IO操作。
(2)將設備與文件一樣對待:UNIX、linux
將設備與文件一樣對待,使用文件系統的系統調用命令進行設備的讀、寫,由文件系統統一管理。
Linux系統的塊設備處理過程如下:
根據文件名查找索引節點,然後找到該索引節點內的該設備的文件操作表的入口地址,調用其中的 sys_read 完成本次的 read 操作。
sys_read 首先查找磁碟高速緩存,判斷要查找的數據是否已經在告訴緩衝中,如果存在直接返回不需要再讀取磁碟。
(3)設備處理進程方式的I/O控制過程
① 用戶進程請求I/O的系統功能調用
系統功能調用的形式: doio(ldev,mode,amount,addr);
ldev: 邏輯設備名
mode: 操作模式
amount: 傳輸數據的位元組數
addr: 傳送地址
例如:fd1=open(「/dev/lp」,O_WRONLY);
n=write(fd1,buf1,count1);
② I/O進程處理過程:I/O介面程序
- 將邏輯設備轉換為物理設備
- 獲得 I/O系統調用中給出的邏輯設備名 (ldev);
- 根據邏輯設備描述器,將邏輯設備名轉換為物理設備名。
- 合法性檢查
- 獲得 I/O系統調用中給出的操作模式mode;
- 根據DCB中命令轉換表中允許的操作,檢查操作的合法性。並不檢查用戶是否有許可權來操作這個設備。
- 形成I/O請求塊,發消息給對應的設備處理進程
- 根據請求的參數形成I/O請求塊 (IORB);
- 將I/O請求塊 (IORB)掛到對應的設備請求隊列。
- I/O進程的處理演算法描述
{ while (該進程的邏輯設備描述器隊列不空) { if (與ldev相聯結的物理設備找到) break; / * 找到 * / } if (該進程的邏輯設備描述器隊列為空) return(錯誤碼); / * 設備邏輯名錯 * / 檢查參數與該設備特性是否一致; if (不一致) return (錯誤碼); / * 傳送參數錯 * / 構造iorb; 把iorb插入到該設備的請求隊列中; 喚醒因等待I/O請求塊而睡眠的設備處理進程; }
③ 設備處理進程: process io
{ l: while (設備請求隊列不空) { 取一個iorb; 提取請求的詳細信息; 啟動I/O操作; sleep (事件:I/O完成) /* I/O操作 * / /* 等I/O完成後,進入中斷處理程序,並在那裡喚醒設備處理進程 * / if (出錯) 將錯誤信息寫在該設備的dcb中; 傳送數據到目的地; 喚醒請求此I/O操作的進程; 刪除iorb; } sleep (事件:因無I/O請求); // 單有新的 IO 請求塊的時候再喚醒。 goto l ; }
④ 請求I/O的進程、I/O進程、設備處理進程、中斷處理程序之間的同步關係
中斷處理程序
其中CPU環境的保存分為兩步進行,首先由硬體完成CPU內部的PSW和PC兩個寄存器的值保存到中斷棧中,接下來由軟體保存其餘寄存器的值到中斷棧。
設備驅動程序
設備驅動程序是上層軟體與設備控制器之間的一個通信程序。
(1)設備驅動程序的功能
- 接收由上層軟體發來的抽象命令, 將其轉換為具體要求,並插入請求隊列。如印表機驅動程序需要將列印數據從存儲編碼(內碼)轉換成輸出編碼(字型檔)
- 完成I/O操作的初始化工作:檢查用戶I/O請求的合法性,了解I/O設備的狀態,傳遞有關參數,設置設備的工作方式。
- 發出I/O命令,啟動I/O設備。
- 及時響應由控制器或通道發來的中斷請求。
- 根據用戶的I/O請求,自動地構成通道程序。
(2)設備驅動程序的特點
- 驅動程序是請求I/O的進程與設備控制器之間的一個通信和轉換程序。
- 驅動程序與設備控制器和I/O設備的硬體特性緊密相關, 因而對不同類型的設備應配置不同的驅動程序。
- 驅動程序與I/O設備所採用的I/O控制方式緊密相關。
- 由於驅動程序與硬體緊密相關, 因而其中的一部分代碼必須用彙編語言書寫。
- 驅動程序不允許系統調用。
設備獨立性軟體
(1)設備獨立性的概念
是指用戶在程序中使用的設備與實際使用的設備無關,即在用戶程序中僅使用邏輯設備名。也稱為設備無關性。
物理設備名:是系統提供的設備的標準名稱,它是永久的、不可更改的。
邏輯設備名:是用戶自己指定的設備名(或設備號),它是暫時的、可更改的。
(2)引入設備獨立性的好處
- 提高設備分配的靈活性
- 容易實現I/O重定向 例: cat test.sh> test.txt
(3)設備獨立性的實現
① 在高級語言中用軟通道實現
使用高級語言提供的指派語句,通過指派一個邏輯設備名(通道號)來定義一個設備或文件。
如:fd1 = open(「/dev/lp」 ,mode) ;
n= write(fd1,buf1,count);
使用 fd1 來代替物理設備 /dev/lp 。
② 在交互系統中,用指派命令來定義如:PDP系列機上的RT11系統
ASSIGN 設備物理名 設備邏輯名
如:assign lp :7
則程序中所有對邏輯設備號7的引用都在行式印表機上輸出。
當系統中有多個印表機的時候,需要以交互的方式來進行選擇,如:
③ 邏輯設備描述器ldd(或邏輯設備表ldt)
描述了進程中邏輯設備名與物理設備名的對應關係。
每個進程建立一個ldd鏈表。
推薦閱讀:
※lunix系統下proc/stat文件怎麼看?
※操作系統引論 | 操作系統的用戶介面
※文件系統 | 文件的共享和保護
※系統調用的實現細節(用戶態)
※進程與進程管理 | 死鎖的基本概念處理死鎖的基本方法
TAG:操作系統 |