計算機組成.更好的利用處理器.從輸入輸出看中斷

  • 有了存儲器就足夠了嗎?不,還差最後一步的包裝
  • 即外設
  • 諸如顯示屏、鍵盤、鼠標、音響等等,這些纔是我們直接可以接觸到的計算機
  • 這些設備,如顯示屏,是接收圖像的數據並顯示出來;而鼠標、鍵盤則屬於輸入設備,這些數據是某程序運行所需要用到的,比如我現在正在打字的火狐瀏覽器
  • 也就是說,外設也需要也需要數據,這些數據也要被CPU來處理,而這些數據的傳輸也需要在控制之下

I/O技術

無I/O技術

  • 最初電腦的輸入用……紙帶……恐怕那個時候只有研究人員用電腦?……

程序查詢I/O

  • I/O設備的工作全由CPU來控制
  • CPU主動查詢I/O設備的狀態,若檢測到數據就緒,則交換/處理一個數據字,否則繼續查詢
  • I/O設備直接與CPU相連導致更換I/O設備困難
  • 而CPU在控制I/O設備的時候,只是在控制而已,CPU本身應該是用來運算的,而在I/O的時候卻閒置了;而且由於需要CPU主動的查詢,所以就算I/O設備沒有準備好,也同樣會消耗CPU時間

程序中斷方式

  • 首先改進的就是,讓準備好的I/O設備來通知CPU
  • CPU這個時候一般是在幹活的,所以就需要先放下手頭的工作來處理I/O。
  • 不過一次只能處理一個數據字。
  • 中斷是需要保護現場的,即CPU當前工作的所有狀態,以便可以恢復繼續工作

DMA直接內存讀取

  • 後來發現,I/O操作和CPU的關係,只不過是I/O需要讀/寫命令、寫入的主存地址、傳送的數據個數,而已
  • 這麼簡單的活交給CPU簡直浪費啊
  • 引入DMA控制器:CPU處理I/O是往DMA控制器寫入外設地址、主存地址和計數器,剩下的由DMA控制器來控制

Channel通道技術

  • DMA還不夠強大
    • 通常一個DMA只能服務一個外設
    • DMA控制器一次控制傳輸的數據有限,還需要多次CPU的介入
  • 通道則更爲強大
    • 它是一個協處理器
    • CPU通過I/O指令來控制通道工作
    • 而通道可以執行專門的通道指令來控制I/O的工作

PPU外圍處理機

  • 通道還是受限於CPU的控制
  • PPU則完全獨立於CPU,全權負責I/O

I/O接口

  • 衆多外設各不相同,其數據交換也不同
  • 但本質都是外設的數據,所以就可以用一層I/O接口來屏蔽掉雙方的差異
    • CPU只需要考慮I/O接口的構成
    • 外設也是只需要考慮I/O接口

功能

  • 地址識別和設備選擇:既然也是數據,就要有自己的地址;既然又是設備,就要對應好外設
  • 接收、保存CPU的I/O控制命令:放在接口的控制寄存器
  • 反應外設的工作狀態:如數據狀態(是否就緒)、工作狀態(忙、空閒)
  • 信號轉換:屏蔽掉外設的工作邏輯、時序等等
  • 數據格式、碼制的轉換及數據檢錯、糾錯
  • 傳送數據
  • 中斷

組成

  • 數據緩衝寄存器:數據端口:交換的數據
  • 端口地址譯碼器
  • 接口控制邏輯
  • 中斷邏輯
  • 狀態寄存器 :狀態端口:外設狀態
  • 命令寄存器:控制端口:工作內容、工作方式

編址

  • I/O端口是按地址來訪問的
  • 獨立編址
    • 單獨外設的地址
    • 需要專門的I/O指令來區分開主存地址
  • 統一編址
    • 主存地址空間一部分劃爲I/O端口的地址範圍
    • 將I/O端口視爲主存的一部分

中斷

  • CPU如何處理中斷請求信號

響應

  • 信號
    • 控制總線
      • 接受中斷請求針腳 INTR
      • 發出中斷響應針腳 INTA 
    • 中斷允許標誌 EINT(=1允許中斷)
    • 開中斷命令 STI(置EINT爲1)
    • 關中斷命令 CLI(置EINT爲0)
  • 響應條件
    • CPU收到中斷請求
    • EINT=1
    • 指令剛剛執行完
  • CPU工作
    • 進入中斷週期,置中斷狀態觸發器INT爲1
    • 發出中斷響應信號
    • 保存斷點和狀態(即PC和標誌寄存器,其餘寄存器由中斷服務程序的保護現場來保存)
    • 關中斷
    • 接受中斷類型碼,生成中斷服務程序的入口地址
      • 軟件查詢法 :
      • 硬件向量法:中斷源收到INTA後生成一個特定的向量地址(中斷類型號),CPU根據它來生成入口地址
    • 執行中斷處理程序

中斷過程

  • 中斷請求:中斷源通過INTR針腳向CPU發出請求信號
  • 中斷判優:多箇中斷信號的優先級排序
  • 中斷響應:若EINT爲1,CPU會在指令執行完後掃描INTR看看是否有中斷請求,有則置INT爲1,進行上述的CPU工作
  • 中斷處理:由預先編制的中斷服務程序完成
    • 保護現場
    • 中斷服務
    • 恢復現場
  • 開中斷:EINT置1
  • 中斷返回:IRET,將PC和標誌寄存器恢復(恢復斷點)

中斷屏蔽

  • 中斷也可以被中斷
  • 這樣就相當於改變了中斷的優先級
  • 需要設置中斷屏蔽字,來判斷當前中斷能否被下一個中斷來中斷

DMA

組成

  • 主存地址寄存器AR
  • 字計數器WC
  • 設備地址寄存器DAR
  • 中斷邏輯
  • 控制/狀態邏輯

工作

  • 預處理:CPU執行I/O指令,選擇DMA控制器和I/O接口,外設地址、主存地址和個數寫入DMA控制器,I/O接口啓動外設
  • 數據傳輸:DMA控制器控制下,完成主存與I/O接口之間的傳輸
  • 後處理:當WC的個數傳輸完,DMA控制器向CPU發出中斷請求
    • 如果數據有錯,重新發送
    • 如果還有數據,再啓動新一輪DMA
    • 如果結束,CPU向DMA控制器發送結束信號EOP

數據傳送

  • I/O接口在數據就緒時向DMAC發出DMA請求信號DREQ
  • DMAC向CPU發出佔用總線信號HOLD
  • CPU決定是否讓出總線,如果讓出則發送總線允許信號HLDA
  • DMAC接收到HLDA獲取總線控制權,向I/O接口輸出DMA應答信號DACK
  • DMAC向系統總線發出讀寫命令和訪存地址,I/O接口開始與系統總線交換數據
  • DMA數據傳輸結束,AR增1,WC減1 (即一次傳送一個數據字)
  • DMAC撤銷HOLD信號,釋放總線

CPU和DMA和BUS

  • DMAC接收到HLDA後一直佔用BUS直到傳輸完畢
  • DMAC在CPU不使用BUS的時候使用一個週期的BUS來傳輸一個數據字
  • CPU和DMA交替使用BUS:CPU工作週期比主存訪問週期長得多的時候使用這種方式,分爲子週期,分別讓CPU和DMA使用總線,此時DMA無須請求總線

Channel

  • CPU管理DMA都是一些簡單的命令,可以交給一個協處理器來完成
  • 通道就是一個簡單的微處理器和DMA控制器的集成

改進CPU

  • CPU的管態、目態和訪管指令
  • I/O指令只能在管態下,由OS執行
  • 廣義I/O指令在目態下執行
  • 啓動I/O指令

功能

  • 接受CPU的I/O指令,選擇外設與通道相連
  • 執行CPU編制的通道程序
  • 給出外設地址
  • 給出主存地址
  • 控制交換個數
  • 檢查外設狀態
  • 格式轉換
  • 結束操作

工作

  • 用戶程序執行廣義I/O指令,進入管態
  • CPU響應中斷,執行I/O管理程序,其根據廣義I/O指令的參數,針對特定通道使用通道命令編寫通道程序,該程序最後一條爲“無鏈通道指令”——停止通道工作,並向CPU發中斷。
  • 通道程序寫到主存中,將入口地址寫入主存中預先劃分的“通道地址字”單元,執行啓動I/O指令。再由通道來執行通道程序
  • 通道程序執行完,向CPU發送中斷信號,CPU響應並進入管態,執行管理程序來完成結束操作

發佈了51 篇原創文章 · 獲贊 48 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章