外設IO原理


外設一般是指除了CPU、內存之前的其他接入到計算機的設備,比如硬盤、光驅、鼠標、鍵盤、打印機等。一般軟件編程領域的同學關心的I/O,是I/O硬件提供給軟件的接口,如硬件能夠接收的命令、它能夠完成的功能以及它能夠報告的錯誤。

IO設備分類

    I/O設備大概分爲兩種:塊設備和字符設備。
    塊設備:信息存儲在固定大小的塊中,傳輸以一個或多個完整(連續的)塊爲單位。塊設備特徵是每個塊都可以獨立於其他塊進行讀寫。其中硬盤、CD-ROM和USB是最常見的塊設備。
    字符設備:以字符爲單位發送或者接收一個字符流,而不考慮任何塊結構。字符設備不可尋址,沒有尋道操作。打印機、網絡接口、鼠標以及大多數與磁盤不同的設備都可以看作是字符設備。
    問題:這種分類並不完美。如時鐘既不是塊設備也不是字符設備。內存映射的顯示器也不適用於這一分類。

IO設備核心結構

    I/O設備一般是由機械部分和電子部分構成。

  • 控制器

    電子部分被稱爲設備控制器或者適配器。對於個人設備而言,一般是主板上的芯片或者插入PCI擴展槽中的印刷電路板。控制器通常有一個插口,通往設備的電纜可以插到這個插口中,很多控制器可以控制2、4甚至8個相同設備。會有各種適合這個接口標準的控制器或設備,如IDE、SATA、SCSI或USB等接口的磁盤驅動器。

  • 控制器和設備之間的交互

    控制器和設備之間一般通過串行的位流進行數據傳輸,控制器負責把串行的位流轉換爲字節塊,並進行必要的錯誤矯正。字節塊一般存儲在控制器內部的緩衝區,在這裏位流按位組裝,校驗證明無錯後再複製到主存中。

  • 控制器和cpu的通訊

    控制器存在幾個寄存器與cpu進行通訊,這些寄存器被稱爲控制寄存器。通過控制寄存器,操作系統可以命令設備發送數據、接受數據、開啓或者關閉,亦或是執行某些操作,也可以瞭解設備狀態,如是否準備好接受一個新的命令等。
    除了控制寄存器,許多設備還有數據緩衝區,操作系統可以往數據緩衝區讀入或者取出數據。CPU與I/O設備的控制寄存器和數據緩衝區的通訊存在三種方法:

  1. 爲控制寄存器分配一個端口號,所有I/O端口形成I/O端口空間。操作系統可以(而普通用戶程序不可以)使用一條特殊的I/O彙編指令訪問控制寄存器,將端口中內容存入到cpu的寄存器中,或者將cpu寄存器的內容寫出到端口中。在這一方案中,內存地址空間和I/O地址空間是不同的。
  2. 將控制寄存器映射到內存空間中。每個控制寄存器被分配唯一的內存地址,且不會有內存被分配這一地址,通常控制寄存器的地址位於地址空間的頂端。這種方法叫做內存映射I/O。這一方案的好處是可以把普通內存的訪問指令用作控制寄存器地址的訪問指令,而不需要區分兩者。
  3. 第三種方案其實是種混合方案,數據緩衝區使用內存映射,控制寄存器使用單獨的I/O端口。

對於方案1:cpu如果想要讀入一個字,首先需要將地址放到總線的地址線上,總線的一條控制線上置起一個READ信號,還需要一個信號線表明是I/O空間還是內存空間,這樣I/O空間和內存空間可以區分開來響應請求。

對於方案2:不需要信號線表明I/O還是內存空間,因爲內存模塊和I/O模塊會將總線上的請求地址和自己的服務範圍地址作比較,來確定是內存進行響應還是I/O進行響應,由於不存在地址既分給了I/O又分給了內存,所以不存在歧義和衝突。

對於如何存取I/O數據的優化方案:直接存儲器存儲(DMA):
使用DMA控制器,就不需要CPU參與數據的傳輸工作,直接使用DMA將緩衝區數據讀取到內存中去。這樣只需要在處理完成之後,發送中斷信號給cpu即可。數據傳輸準備工作交給DMA完成,可以極大的節省CPU的計算資源。

本系列文章:
    計算機底層架構(偏硬件)綜述
    計算機處理器(CPU)基礎
         彙編語言基礎–機器級數據存儲
         彙編語言基礎–彙編操作指令概述
     計算機多級存儲模型
     外設IO原理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章