OS學習筆記七:IO系統

衣舞晨風發表於2017-10-10

一、I/O管理概述

1、I/O管理示意

這裡寫圖片描述

2、I/O管理的目標和任務

(1) 按照使用者的請求,控制裝置的各種操作,完成I/O 裝置與記憶體之間的資料交換,最終完成使用者的I/O 請求

  • 裝置分配與回收

    • 記錄裝置的狀態

    • 根據使用者的請求和裝置的型別,採用一定的分配演算法,選擇一條資料通路

  • 執行裝置驅動程式,實現真正的I/O 操作

  • 裝置中斷處理:處理外部裝置的中斷

  • 緩衝區管理:管理I/O

(2) 建立方便、統一的獨立於裝置的介面

  • 方便性:向使用者提供使用外部裝置的方便介面,使使用者程式設計時不考慮裝置的複雜物理特性

  • 統一性:對不同的裝置採取統一的操作方式 ,即在 使用者程式中使用的是邏輯裝置

  • 邏輯 裝置與物理 裝置

  • 遮蔽 硬體細節(裝置的 物理特性、錯誤處理、不同I/O過程的 差異性)

通用性

種類繁多、結構各異

→ 設計簡單、避免錯誤

→ 採用統一的方式處理所有裝置

(3) 充分利用各種技術(通道,中斷,緩衝,非同步I/O等)提高CPU 與裝置、裝置與裝置之間的並行工作能力,充分利用資源,提高資源利用率

  • 並行性

  • 均衡性(使裝置充分忙碌)

(4) 保護

裝置傳送或管理的資料應該是安全的、不被破壞的、保密的

3、I/O裝置組成

I/O 裝置一般由機械和電子兩部分組成:

  • 機械部分是裝置本身(物理裝置)

  • 電子部分又稱裝置控制器( 或介面卡)

    • (埠)地址譯碼

    • 按照主機與裝置之間約定的格式和過程接受計算機發來的資料和控制訊號 或 向主機傳送資料和狀態訊號

    • 將計算機的數字訊號轉換成機械部分能識別的模擬訊號,或反之

    • 實現裝置內部硬體緩衝、資料加工等提高效能或增強功能

4、裝置介面–控制器的作用

  • 作業系統將命令寫入控制器的介面暫存器(或介面緩衝區)中,以實現輸入/輸出,並從介面暫存器讀取狀態資訊或結果資訊

  • 當控制器接受一條命令後,可 獨立於CPU 完成指定操作,CPU 可以另外執行其他計算;命令完成時,控制器產生一箇中斷,CPU 響應中斷,控制轉給作業系統;通過讀控制器暫存器中的資訊,獲得操作結果和裝置狀態

  • 控制器與裝置之間的介面常常是一個低階介面

  • 控制器的任務:把序列的位流轉換為位元組塊,並進行必要的錯誤修正: 首先,控制器按位進行組裝,然後存入控制器內部的緩衝區中形成以位元組為單位的塊;在對塊驗證檢查和並證明無錯誤時,再將它複製到記憶體中

5、I/O埠地址

  • I/O 埠地址:介面電路中每個暫存器具有的、唯一的地址,是個整數

  • 所有I/O 埠地址形成I/O 埠空間( 受到保護)

這裡寫圖片描述

6、I/O獨立編制

這裡寫圖片描述

7、記憶體映像編址

  • 分配給系統中所有埠的地址空間與記憶體的地址空間統一編址
  • 把I/O 埠看作一個儲存單元,對I/O 的讀寫操作等同於對記憶體的操作
  • 優點
    • 凡是可對記憶體操作的指令都可對I/O 埠操作
    • 不需要專門的I/O 指令
    • I/O 埠可佔有較大的地址空間
  • 缺點
    • 佔用記憶體空間

8、記憶體對映I/O的優點

  • 不 需要特殊的保護機制來阻止使用者程式執行I/O 操作作業系統必須要做的事情 : 避免把包含控制暫存器的那部分地址空間放入任何使用者的虛擬地址空間之中

  • 可以引用記憶體的每一條指令也可以引用控制暫存器

    例如,如果指令TEST 可以測試一個記憶體字是否為0 ,那麼它也可以用來測試一個控制暫存器是否為0

9、記憶體對映I/O的缺點

  • 對一個裝置控制暫存器 不能 進行快取記憶體

  • 考慮 以下 彙編程式碼迴圈 , 第一次引用PORT_4 將導致它被快取記憶體,隨後的引用將只從快取記憶體中取值並且不會再查詢裝置 , 之後當裝置最終變為就緒時,軟體將沒有辦法發現這一點 , 結果迴圈將永遠進行下去

  • 為避免這一情形,硬體必須針對每個頁面具備選擇 性 禁用快取記憶體的能力 , 作業系統必須管理選擇性快取記憶體,所以這一特性為硬體和作業系統兩者增添了額外的複雜性

LOOP :TEST PORT-4 // 檢測埠4 是否為0
    BEQ READY // 如果為0 ,轉向READY
    BRANCH LOOP // 否則,繼續測試
READY

10、I/O軟體設計

分層的設計思想

  • 把I/O 軟體組織成多個層次
  • 每一層都執行作業系統所需要的功能的一個相關子集,它依賴於更低一層所執行的更原始的功能,從而可以隱藏這些功能的細節 ; 同時,它又給高一層提供服務
  • 較低層考慮硬體的特性,並向較高層軟體提供介面
  • 較高層不依賴於硬體,並向使用者提供一個友好的、清晰的、簡單的、功能更強的介面

這裡寫圖片描述

11、裝置獨立性(裝置無關性)

使用者編寫的程式可以訪問任意I/O 裝置,無需事先指定裝置

從使用者角度: 使用者在編制程式時,使用邏輯裝置名,由系統實現從邏輯裝置到物理裝置(實際裝置)的
轉換,並實施I/O 操作

從系統角度: 設計並實現I/O 軟體時, 除了直接與裝置打交道的低層軟體之外,其他部分的軟體不賴於硬體

好處:

裝置分配時的靈活性

易於實現I/O

12、引入快取技術解決什麼問題?

作業系統中最早引入的技術

  • 解決CPU 與I/O 裝置之間速度的不匹配問題

    凡是資料到達和離去速度不匹配的地方均可採用緩衝技術

  • 提高CPU 與I/O 裝置之間的並行性

  • 減少了I/O 裝置對CPU 的中斷請求次數,放寬CPU

二、UNIX SYSTEM V 快取技術

1、基本概念

  • 採用緩衝池技術,可平滑和加快資訊在記憶體和磁碟之間的傳輸

  • 緩衝區結合 提前讀和延遲寫 技術對具有 重複性及陣發性I/O 程式、提高I/O 速度很有幫助

  • 可以充分利用之前從磁碟讀入、雖已傳入使用者區但仍在緩衝區的資料 ( 儘可能減少磁碟I/O 的次數,提高系統執行的速度)

  • 緩衝池:200 個緩衝區(512 位元組或1024 位元組)

  • 每個緩衝區由兩部分組成:緩衝控制塊或緩衝首部 + 緩衝資料區

    系統通過緩衝控制塊來實現對緩衝區的管理

  • 空閒緩衝區佇列(av 鏈)

    佇列 頭部為bfreelist

  • 裝置緩衝佇列(b 鏈)

    連結 所有分配給各類裝置使用的緩衝區,按照雜湊方式組織

buf 用b 雙向鏈,可以有64 個佇列,每個佇列首部有頭標裝置為b_dev上的邏輯塊b 在雜湊佇列的
頭標為:i=(b_dev + b) mod 64

這裡寫圖片描述

  • 每個緩衝區同時在av 鏈和b 鏈:

    • 開始:在空閒av 鏈( 緩衝區未被使用時)

    • 開始IO 請求:在裝置IO 請求佇列和裝置b 鏈

    • IO 完成:在空閒av 鏈和裝置b

2、例項

  • 當程式想從指定的盤塊讀取資料時,系統根據盤塊號從裝置b 鏈( 雜湊佇列) 中查詢,如找到緩衝區,則將該緩衝區狀態標記為“忙”,並從空閒av 佇列中取下,並完成從緩衝區到記憶體使用者區的資料傳送

  • 如果在裝置b 鏈中未找到時,則從空閒av 鏈隊首摘取一個緩衝區,插入裝置I/O 請求佇列;並從原裝置b 鏈中取下,插入由讀入資訊盤塊號確定的新的裝置b 鏈中

  • 當資料從磁碟塊讀入到緩衝區後,緩衝區從裝置I/O 請求佇列取下;當系統完成從緩衝區到記憶體使用者區的資料傳送後,要把緩衝區釋放,鏈入空閒av 鏈隊尾

  • 當資料從磁碟塊讀入到緩衝區,並傳送到記憶體使用者區後,該緩衝區一直保留在原裝置b 鏈中,即它的資料一直有效。若又要使用它,則從空閒av 鏈中取下,使用完後插入到空閒av 鏈隊尾。若一直未使用它,則該緩衝區從空閒av 鏈隊尾慢慢升到隊首,最後被重新分配,舊的盤塊資料才被置換

系統對緩衝區的分配是採用近似LRU 演算法

本文整理自:《作業系統原理》北京大學_陳向群 講義

個人微信公眾號:
這裡寫圖片描述

作者:jiankunking 出處:http://blog.csdn.net/jiankunking

相關文章