揭秘計算機奇蹟:探索I/O裝置的神秘世界!

努力的小雨發表於2023-10-26

引言

在之前的章節中,我們詳細講解了計算機系統中一些核心組成部分,如中央處理器(CPU)、記憶體、硬碟等。這些元件負責處理和儲存資料,使得計算機能夠有效地執行。然而,除了這些核心元件,計算機系統還包含許多其他重要的部分,其中之一就是輸入輸出裝置。它們使得計算機能夠與使用者進行有效的溝通和交流,提升了計算機的實用性和使用者體驗。因此,在學習計算機系統的過程中,深入瞭解輸入輸出裝置的原理和工作方式也非常重要。

輸入輸出裝置

image

I/O介面,又被稱為I/O控制器或裝置控制器,是一種負責協調主機與外部裝置之間資料傳輸的關鍵元件。其主要功能是管理資料的輸入和輸出,在資料傳輸過程中起到橋樑的作用。透過有效地控制和排程資料流,I/O介面能夠實現高效的資料傳輸,提升系統的整體效能。

image

I/O控制器涵蓋了多種多樣的型別和標準。其中,針對不同外部裝置的控制需求,相應的I/O介面也會制定相應的標準。舉例來說,我們有用於控制USB裝置的I/O介面,它提供了可靠的資料傳輸和連線效能,使得計算機可以方便地與各類USB裝置進行通訊。另外,還有用於控制SATA 3.0硬碟的I/O介面,它支援高速資料傳輸,並具備熱插拔和高可靠性的特點。

image

image

如今,隨著技術的不斷進步和積體電路的發展,現代的I/O介面(晶片)也趨向於被整合到南橋晶片內部。

CPU如何控制I/O裝置

程式直接控制和中斷控制方式

image

  1. 首先,我們來討論資料暫存器(Data Register)。當CPU需要將資料寫入I/O裝置時,例如列印內容為“GeekTime”,首先要將字元“G”傳送給對應的I/O裝置。
  2. 接下來是命令暫存器(Command Register)。CPU向印表機傳送一個命令,告訴它開始列印工作。此時,印表機的控制電路將執行兩個動作。首先,它會設定狀態暫存器中的狀態為not-ready,表示印表機正在工作中。然後,它會實際操作印表機進行列印。
  3. 而狀態暫存器(Status Register)的作用是向CPU報告裝置狀態。當裝置開始工作時,狀態暫存器會告知CPU裝置正在工作中。在這個階段,CPU傳送的任何資料或命令都是無效的。只有當前面的動作完成,狀態暫存器重新變為ready狀態時,CPU才能傳送下一個字元或命令。

現在,讓我們討論快速的I/O裝置(如磁碟),如果每準備好一個字就向CPU傳送一次中斷請求,會導致什麼問題呢?

這種情況下,CPU需要花費大量的時間來處理中斷服務程式,從而導致CPU利用率嚴重下降。每次中斷請求都會打斷CPU正在執行的任務,使其無法充分利用時間進行其他計算工作。這種頻繁的中斷請求會導致CPU的效率下降,影響系統的整體效能。

為了解決這個問題,可以採取一些最佳化措施。例如,可以引入緩衝區,將多個位元組的資料一次性傳輸給CPU,減少中斷請求的次數。另外,也可以使用DMA(直接記憶體訪問)技術,將資料直接傳輸到記憶體,減輕CPU的負擔。透過這些最佳化措施,可以提高CPU的利用率,提升系統的整體效能。

DMA存取方式

image

DMA控制方式是一種最佳化技術,它透過在主存和裝置之間建立一條直接資料通路(DMA匯流排)來實現高速資料傳輸。在這種方式下,CPU只需向DMA介面傳送讀/寫命令,並指示主存地址、裝置地址以及讀寫資料的數量等引數,然後DMA控制器便會自動控制裝置與主存之間的資料讀寫操作。

具體而言,當CPU發出讀/寫命令後,DMA控制器會透過DMA匯流排直接訪問裝置,並將資料傳輸到主存或從主存傳輸到裝置。為了保證資料的完整性,在每傳輸一整塊資料(如1KB)後,DMA控制器才會向CPU發出一次中斷請求,通知CPU資料傳輸已完成。這樣,CPU就能夠及時處理其他任務,而不需要等待每個資料傳輸的完成。

通道控制方式

image

有的商用中型機、大型機可能會接上超多的I/0裝置。如果都讓CPU來直接管理這些裝置的資料傳輸和操作,那麼CPU的負擔將會非常沉重,無法充分發揮其處理計算任務的能力。為了解決這個問題,引入了通道的概念。

通道是具有特殊功能的處理器,可以將CPU與I/0裝置之間的通訊過程進行統一管理。通道有自己的資料暫存器、命令暫存器和狀態暫存器,可以完成與I/0裝置之間的資料傳輸、裝置控制和錯誤處理等任務。CPU只需要傳送指令給通道,然後通道會自動完成與裝置之間的資料傳輸和操作,不再需要CPU的直接參與。

image

通道可以被理解為是一種功能較為有限的處理器,類似於“弱雞版的CPU”,它能夠識別並執行一系列通道指令,通常這些指令的種類和功能比較單一。

訊號和地址

一旦我們理解了實際的I/O裝置和介面之間的關係,就會面臨一個新的問題:CPU到底需要向匯流排傳送怎樣的命令,才能與I/O介面上的裝置進行通訊呢?

在計算機系統中,CPU和I/O裝置之間的通訊是透過CPU支援的特定機器指令來實現的。這些機器指令被稱為I/O指令,用於控制和操作I/O裝置。CPU可以使用這些指令來傳送命令、讀取資料、寫入資料以及查詢裝置狀態等操作。

為了簡化已經足夠複雜的CPU,計算機系統將I/O裝置的各個暫存器和I/O裝置內部的記憶體地址都對映到主記憶體地址空間中。主記憶體的地址空間中會為不同的I/O裝置預留一段一段的記憶體地址。當CPU想要與這些I/O裝置進行通訊時,它會向這些預留的地址傳送資料。

而我們的I/O裝置會監控地址線,並在CPU向其傳送資料時,將傳輸過來的資料接入到對應裝置的暫存器和記憶體中。無論是向I/O裝置傳送命令、查詢裝置狀態還是傳輸資料,CPU都可以透過這種方式進行。這種方式被稱為記憶體對映I/O(Memory-Mapped I/O,簡稱MMIO)。

image

CPU 和 I/O 裝置之間的通訊

在計算機系統中,CPU和I/O裝置之間的通訊是透過以下方式來解決的。

首先,在I/O裝置一側,我們將I/O裝置分成可以與CPU通訊的介面電路和實際的I/O裝置本身。介面電路包含狀態暫存器、命令暫存器、資料暫存器、資料緩衝區和裝置記憶體等元件。介面電路透過匯流排與CPU通訊,接收來自CPU的指令和資料。介面電路中的控制電路會解碼接收到的指令,並實際操作相應的硬體裝置。

而在CPU一側,CPU透過訪問記憶體地址或埠地址進行資料的傳輸和讀取。對於CPU來說,它並不直接與特定裝置進行互動,而是透過讀寫特定的記憶體地址或埠地址來實現與I/O裝置的通訊。在軟體層面,透過定義傳輸命令和資料的方式,而不是引入新的指令,來實際操作對應的I/O硬體。這樣,CPU可以透過與介面電路的通訊來與I/O裝置進行互動,完成輸入和輸出的功能。

總結

本文主要介紹了計算機系統中輸入輸出裝置的原理和工作方式。輸入輸出裝置是計算機系統中的重要組成部分,它們使得計算機能夠與使用者進行有效的溝通和交流。文章介紹了I/O介面的功能和作用,以及不同型別的I/O介面的標準。同時,還介紹了CPU如何控制I/O裝置的程式直接控制和中斷控制方式,以及使用DMA和通道控制方式進行最佳化的方法。最後,文章解釋了CPU和I/O裝置之間的通訊方式。透過深入瞭解輸入輸出裝置的原理和工作方式,可以更好地理解計算機系統的工作原理,提升系統的整體效能。

相關文章