學什么?
- I/O? input / output??
- 輸入:鼠標 鍵盤 手柄 觸摸屏 攝像頭 MTC? 掃描儀
- 輸出:顯示器 打印機? 耳機? 音響?
- 既是輸入也是輸出:光驅? 網卡? 磁盤? U盤
- 硬件:設備如何把數據返回到PC機,但是不同種類的設備,適合不同的控制方式,引出了I/O控制方式(數據怎么輸入輸出)
- 軟件:輸入輸出時面對的多種問題,CPU與I/O速度不匹配,基本數據單元大小也不匹配 引出了,緩存技術;緩沖技術(內存);假脫機技術;spooling技術? ;因為使用硬件的進程數量很多,但是硬件設備比較少,如何對設備進行分配和回收?
- I/O系統層次管理 ->? 代碼實現框架? ??各司其職,低耦合性,便于代碼的修改和軟件的更新、高效移植
IO管理硬件知識
IO管理設備分類(硬件分類)
- 按照數據的傳輸速度進行分類(使用場合決定的 -> 人類設計)
- 高速設備? ? ?以MB/GB為單位? ? ?磁帶、磁盤、光盤、U盤、網卡等
- 中速設備? ? ?以KB為單位? ? ? ? ? ? 打印機(串口設備)
- 低速設備? ? ?以B為單位? ? ? ? ? ? ? 鍵盤、鼠標、手柄等
- 注意事項:
- 和人類接觸的設備為低速設備
- 中速設備: 機械設備,速度介于電子設備(CPU、內存)和人類之間
- 高速設備:盡可能快
- 按照信息交換的單位分
- 塊設備? ? ? ? ?以數據塊為單位傳輸? ? U盤、硬盤、SD卡、網卡等? ? 高速設備
- 字符設備? ? ?以字符為單位傳輸? ? ?鍵盤、鼠標、手柄、打印機等? ? 低速/中速設備
IO控制方式
控制方式的發展過程
- 程序直接控制方式:cpu主動詢問? ? ?費時費力,cpu利用率很低
- 中斷驅動方式:CPU被動通知,cpu利用率稍微提高,cpu取數據? ? 最為常用
- DMA方式:CPU被動通知,DMA控制器硬件,dma取數據,cpu利用取回的數據;dma需要知道取幾個數據,以及數據取完之后,不同數據的存放地址,取數據操作結束之后,通知CPU進行下一步操作;減少了cpu被通知的次數,減少cpu中斷的次數;缺點:cpu需要對DMA下達很多的指令,進一步優化
- 通道方式:cpu的被動通知,減少cpu對dma下達的指令數;cpu利用率進一步提高;使用協處理器對DMA施加命令,整體完成之后才通知cpu
- 從上往下 CPU的利用率提高,設計復雜度提高,成本也提高
程序直接控制方式
- cpu周期性運行輸入進程(50ms),當輸入進程檢測到鍵盤輸入的數據之后,利用進程間通信的方式將數據傳輸給需要的進程
- 該方式效率很低,幾乎不再使用
- mcu dsp 等還在使用
- 通常用在低速設備中,高速設備容易丟失數據(鍵盤輸入速度趕不上 cpu處理速度)
中斷類控制方式
中斷驅動方式
- 新增控制總線 (中斷信號在其中傳輸,提高成本)
- 中斷處理程序不是 進程
- 鍵盤輸入程序,引發控制總線的中斷,中斷會觸發中斷處理程序,中斷處理程序會從數據總線獲取數據,將數據傳給其他進程
- 廣泛使用,使用在低速設備,比如鍵盤、手柄、鼠標等
- 中斷控制總線? 數量有限,如果沒有了,只能使用程序直接控制的方式
DMA方式
- DMA 一般用于塊設備、高速設備
- DMA控制器的四個寄存器
- 內存地址寄存器MAR? 記錄內存開始的地址? ? ? ? ? ? ? ? ? ? ? ? ?地址
- 數據計數寄存器DC? ?一次需要從外設讀取的數據字節數? ? ?長度
- 數據寄存器DR? 接收物理外設輸入的數據,將接收的數據再傳給對應需要的進程,起到緩存的占用
- 命令狀態寄存器CR? 控制讀,讀完執行的指令
- 步驟
- 1,磁盤向CPU發出DMA傳輸請求
- 2,cpu接收請求,執行DMA配置程序,對四個寄存器的地址進行設置
- 3,DMA控制器讀取磁盤(設備)數據到數據寄存器DR,一個一個字節的讀
- 4,DMA控制器根據MAR的數值,尋找內存存放的位置,開始搬運數據
- 5,DMA控制器開始搬運數量為 數據寄存器DC 存儲的數值大小的值
- 6,一組數據搬運完成之后,則DMA控制器產生中斷信號給cpu
- 7,cpu執行中斷程序,利用信號量通知其他程序 數據傳輸完一組
- 8,如果數據全部傳輸完畢,則傳輸自動結束;如果還有需要傳輸的數據,則重新執行 1-8
- 優勢
- 減少了CPU被通知的次數? 具體體現在上述流程的? 4-5
- 只有所有數據讀完才執行一次中斷處理程序 而不會每來一個數據就會產生一個字段?
通道方式
- 新增通道協處理器
- 每傳輸一次數據 會進行一次DMA配置
- 步驟
- 1,磁盤(設備)向cpu發出通道傳輸請求
- 2,cpu接收請求,激活通道協處理器,并告知通道協處理器的位置
- 3,通道協處理器執行通道程序進行DMA配置
- 4,DMA控制器 開始讀取數據到?數據寄存器DR
- 5,DMA控制器根據MAR的數值,尋找內存存放的位置,開始搬運數據
- 6,DMA控制器開始搬運數量為 數據寄存器DC 存儲的數值大小的值
- 7,如果還有下一組數據 則繼續執行 3-7
- 8,如果沒有下一組數據,則說明幾組數據傳輸完成,通道協處理器向cpu發出中斷信號
- 9,中斷程序通知其他進程,幾組數據全部傳輸完成
?
緩存技術
- 緩存的原因:通過在高速存儲器里面保存低速存儲器的副本,來提高cpu對數據的訪問速度
- 例如
- 快表是頁表的緩存
- 請求分頁中,cache中的頁面是內存中工作集頁面的緩存
- 內存中工作集頁面是磁盤中程序頁面的緩存
- 現在 快速 的里面找,如果沒有才會到慢速的設備里面尋找
為什么引入緩存技術
- 對低速設備產生的數據進行堆積,放在緩存區中,積少成多,然后cpu對其進行集中性處理
- 目的和好處
- 緩和cpu和IO設備速度不匹配的矛盾
- 解決基本數據單元大小不匹配的問題?
- 減少IO對cpu中斷頻率(緩沖區大小 如DMA傳輸)
- 提高cpu與IO設備的并行性
單緩沖區
- 設置緩沖區和工作區,比如播放器是將緩沖區的內容取到工作區之后,對工作區的數據進行操作,然后緩沖區繼續緩沖數據。就可以實現,播放器一邊播放,一邊緩沖數據。播放和緩存同時進行
- 軟存區為空的時候,才可以輸入數據,直到充滿為止
- 緩存區滿的時候,才可以取出,直到為空的時候為止
- 生產時間 > 消費時間 ->? 處理一塊緩存區數據的平均時間 = 取用時間 + 生產時間
- 生產時間 <?消費時間 ->? 處理一塊緩存區數據的平均時間 = 取用時間 + 消費時間
- 處理一塊緩存區數據的平均時間 = 取用時間 + MAX(消費時間 , 生產時間)
- 處理一塊緩存區數據的平均時間 = MAX(生產時間,消費時間 + 取用時間)
雙緩沖區
- 相較于先前 單緩沖區,利用了 播放器將數據從緩沖區到工作區這段時間? ?(取時間)
- 生產時間 > 取用時間 + 消費時間 ->? 取用時間 + 生產時間
- 生產時間 <?取用時間 + 消費時間(產生斷層,數據中斷) -
- 結論一致??處理一塊緩存區數據的平均時間 = MAX(生產時間,消費時間 + 取用時間)
- 生產時間 > 取用時間 + 消費時間 IO設備可以連續輸入數據,cpu會等待
- 生產時間 <?取用時間 + 消費時間?IO設備不可以連續輸入數據,cpu繁忙
循環緩沖區?
- 使用循環鏈表 的形式首尾相連,每個緩沖區的大小相等
- 兩個指針 in 和 out,in負責輸入數據,out負責取出數據
- 會產生追趕問題,in和out指針
- 生產 > 輸出,不可以連續輸入,cpu忙,處理數據
- 生產 < 輸出,可以連續輸入,cpu等待
緩沖池
- 緩沖池中的緩沖區是公用的
- 分別設置 輸入隊列、輸出隊列和空閑隊列
- 收容輸入 取空閑隊列的頭部的容器塊,裝載來自服務器的數據;
- 提取輸入 將裝載數據的容器塊,送到指定的進程工作區,然后將沒有數據的容器塊重新放到排隊隊列等待裝載數據
- 收容輸出 取空閑隊列的頭部的容器塊,裝載來自進程工作區產生的數據
- 提取輸出 將裝載數據的容器塊,送到指定的進程服務器,然后將沒有數據的容器塊重新放到排隊隊列等待裝載數據
SpooLing技術
- 輸入設備 將數據放到內存中的輸入緩沖區,當緩沖區滿的時候,由spi進程將緩沖區的數據保存到磁盤中的輸入井中的脫機輸入文件里。如果其他進程要使用,則讀取脫機輸入文件即可
- 其他進程輸出數據的時候,先將其保存到輸入井中的脫機輸出文件里,再由SPO進程依次將輸出文件數據輸出到內存的輸出緩沖區,再輸出到輸出設備里面
- 例子 共享打印機
- 優勢:掉電不會丟失
設備的分類
- 從軟件思維對設備分類
- 獨占式設備 -> 打印機??
- 虛擬設備 -> spooling虛擬出來的設備
- 分時共享設備 -> 磁盤網卡?
設備的數據結構
- OS 內核
- 硬件系統
- 設備 = 機械部分 + 電子部分
- 查詢過程? SDT -> DCT -> COCT -> CHCT
- SDT 系統設備表? PC機已有設備
- DCT 設備控制表? 具體設備,比如鍵盤、鼠標
- COCT 控制器控制表
- CHCT 通道控制表
IO層級結構
- 軟件分層思想
- 用戶層IO軟件? ? ? ->api接口
- 設備獨立性軟件? ?->將不同的設備進行封裝,統一接口,如linux將所有的設備都視為文件 Dev目錄下,設備的文件
- 設備驅動軟件? ? ? ->控制設備的程序 不同的設備 需要不同的操作程序
- 中斷處理程序? ? ? ->中斷處理 IO控制方式
- 硬件? ? ? ? ? ? ? ? ? ? ->機械部分 + 電子部分 = 設備
?