解密鍵盤輸入:探索裝置控制器的奧秘

努力的小雨發表於2023-09-09

流程初探

鍵盤是我們最常用的輸入硬體裝置之一。作為程式設計師,你知道當我們敲擊鍵盤上的字母"A"時,作業系統會發生什麼嗎?下面我將簡要介紹整個過程,以便你更容易理解為什麼需要這些元件。

首先,讓我們來看看CPU的硬體架構圖。

image

CPU內部的記憶體介面需要透過系統匯流排和I/O橋接器與記憶體建立連線。而橋接器另一側連線著透過記憶體匯流排與CPU建立連線的記憶體。其他外接裝置,如鍵盤和顯示器,都是透過I/O匯流排連線的I/O裝置。

當我們敲擊鍵盤上的字母"A"時,整個過程可以簡要概括為以下幾個步驟:

  1. 鍵盤裝置控制器掃描碼儲存:鍵盤裝置控制器將掃描碼資料儲存在資料暫存器中。
  2. 中斷請求傳送給CPU:鍵盤裝置控制器向CPU傳送中斷請求。
  3. CPU儲存上下文並呼叫中斷處理程式:CPU接收到中斷請求後,儲存當前程式的上下文,並呼叫鍵盤的中斷處理程式。
  4. 掃描碼轉換為ASCII碼並儲存在鍵盤緩衝區:中斷處理程式將掃描碼轉換為對應的ASCII碼,並將其儲存在鍵盤緩衝區中。
  5. 鍵盤驅動程式讀取緩衝區的掃描碼:鍵盤驅動程式負責讀取鍵盤緩衝區中的掃描碼。
  6. 資料傳遞給應用程式:鍵盤驅動程式根據需要將資料傳遞給相應的應用程式。
  7. 顯示驅動程式控制顯示器顯示:顯示驅動程式負責資料一個一個寫入到顯示裝置的控制器的暫存器中的資料緩衝區並控制顯示器的顯示和螢幕影像的更新。

透過以上流程,我們可以實現鍵盤輸入的響應和字元的顯示。這是一個簡單的鍵盤輸入過程,實際上還需要考慮更多的細節和處理邏輯,但以上流程可以幫助我們初步理解鍵盤輸入的處理過程。

裝置控制器

我們的電腦裝置可以連線各種不同的輸入輸出裝置,如鍵盤、滑鼠、顯示器、網路卡、硬碟、印表機和音響等。每個裝置都有不同的使用方式和功能,但作業系統需要統一管理這些裝置。

為了減輕CPU的負擔,每個外設都配備了一個專門的裝置控制器,其實也跟應用程式就不需要直接與底層裝置進行互動一樣。裝置控制器位於作業系統與硬體之間的中間層,負責處理外設硬體與CPU之間的通訊和操作。

為了遮蔽裝置之間的差異,每個裝置都配備了對應的裝置控制器(Device Control)元件。例如,硬碟有硬碟控制器,顯示器有影片控制器等。這些裝置控制器透過與作業系統進行互動,將外設的功能和狀態資訊傳遞給作業系統,並接收來自作業系統的指令來控制裝置的執行。

image

作業系統利用裝置控制器提供的介面和功能來管理和控制不同的裝置。透過作業系統提供的裝置驅動程式,應用程式可以透過作業系統進行與裝置的互動。裝置驅動程式負責與裝置控制器通訊,並將資料傳遞給相應的裝置。例如,鍵盤驅動程式負責讀取鍵盤裝置控制器中的掃描碼,並將其轉換為對應的ASCII碼,然後傳遞給應用程式。

裝置控制器內部包含晶片,這些晶片具有自己的邏輯功能,並且擁有與CPU進行通訊的暫存器。這些暫存器包括狀態暫存器(Status Register)、命令暫存器(Command Register)以及資料暫存器(Data Register)。

透過作業系統向這些暫存器寫入命令,可以指示裝置執行傳送資料、接收資料、開啟或關閉等操作。透過讀取這些暫存器,作業系統可以獲取裝置的狀態資訊,例如裝置是否準備好接收新的命令等,如下圖:

image

具體而言,命令暫存器用於向裝置傳送命令,告知裝置進行輸入/輸出操作。當命令被接收後,裝置開始執行對應的任務,並在任務完成後將狀態暫存器中的狀態標記為完成。

狀態暫存器的作用是向CPU傳遞裝置的工作狀態,以告知CPU裝置當前是否正在工作或已經完成工作。如果裝置處於工作狀態,CPU再次傳送資料或命令是沒有意義的,直到前面的工作完成,狀態暫存器將狀態標記為已完成,CPU才能傳送下一個字元或命令。

資料暫存器用於CPU向I/O裝置寫入需要傳輸的資料。例如,如果要列印內容為"Hello",CPU首先向對應的I/O裝置傳送一個'H'字元。

透過讀寫裝置控制器中的暫存器,CPU能夠方便地控制裝置。相比於CPU直接控制輸入輸出裝置,這種方式更加便捷和標準化。

另外,裝置控制器還可以根據裝置的特性將輸入輸出裝置分為兩大類:塊裝置(Block Device)和字元裝置(Character Device)。

塊裝置將資料儲存在固定大小的塊中,每個塊都有自己的地址。常見的塊裝置有硬碟、USB等。而字元裝置則以字元為單位傳送或接收字元流,它們是不可定址的,也沒有尋道操作。滑鼠就是一個典型的字元裝置。

由於塊裝置通常傳輸的資料量較大,因此裝置控制器設立了一個可讀寫的資料緩衝區。當CPU向控制器的緩衝區寫入資料時,只有當緩衝區中的資料達到一定程度時,才會傳送給裝置。而當CPU從控制器的緩衝區讀取資料時,也需要等待緩衝區中的資料達到一定程度後,才能將資料複製到記憶體中。這樣做的目的是為了減少對裝置的操作次數,提高資料傳輸的效率。

那麼,CPU是如何與裝置的控制暫存器和資料緩衝區進行通訊的呢?這裡存在兩種方法:

一種是透過埠 I/O方式,每個裝置的控制暫存器都被分配了一個獨立的I/O埠。CPU可以透過特殊的彙編指令(如in/out指令)來操作這些暫存器,實現與裝置的通訊。

另一種是透過記憶體對映 I/O方式,將所有裝置的控制暫存器對映到記憶體空間中。這樣,CPU就可以像讀寫記憶體一樣,直接讀寫裝置的控制暫存器和資料緩衝區。這種方式相對於埠 I/O方式來說,更加靈活和方便。

總結

鍵盤輸入的處理過程包括鍵盤裝置控制器將掃描碼儲存、中斷請求傳送給CPU、中斷處理程式將掃描碼轉換為ASCII碼並儲存在鍵盤緩衝區、鍵盤驅動程式讀取緩衝區的掃描碼並傳遞給應用程式,最後顯示驅動程式控制顯示器顯示字元和更新螢幕影像。

裝置控制器位於作業系統與硬體之間的中間層,負責處理外設硬體與CPU之間的通訊和操作。它透過與作業系統進行互動,將外設的功能和狀態資訊傳遞給作業系統,並接收來自作業系統的指令來控制裝置的執行。

裝置控制器內部包含有自己的邏輯功能和與CPU通訊的暫存器,例如狀態暫存器、命令暫存器和資料暫存器。透過作業系統向這些暫存器寫入命令,可以指示裝置執行相應的輸入/輸出操作,透過讀取這些暫存器,作業系統可以獲取裝置的狀態資訊。

透過本文的介紹,我們可以初步瞭解鍵盤輸入的處理過程和裝置控制器的作用,從而更好地理解作業系統與硬體之間的互動過程。

相關文章