標籤:

設備管理 | I/O軟體

設備管理 | 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:操作系統 |