1. 程式人生 > >漫談計算機組成原理(七)I/O系統

漫談計算機組成原理(七)I/O系統

本文講什麼?

這個系列的文章其實可以分成兩個部分,計算機系統的其他硬體結構和CPU。
而我們今天要講述的內容,就是其他硬體結構中的最後一個部分——I/O(輸入輸出)系統。
這篇文章主要講述的就是I/O系統的組成以及I/O系統的工作原理,下面就正式開始I/O系統之旅吧!

I/O裝置的組成

說起輸入輸出系統,其實我們一點都不陌生。從我們開始接觸計算機到現在,滑鼠、鍵盤、顯示器等可能是我們一直在使用的,但僅僅是這些裝置並沒有辦法組成I/O系統,這隻能算是I/O系統的一部分——外圍裝置(I/O硬體)。除了外圍裝置,I/O硬體還包括I/O介面。只有硬體沒有軟禁,這個系統只能是一堆廢鐵,所以,I/O軟體和I/O硬體共同組成了計算機的I/O系統。

I/O軟體

所謂I/O軟體,簡單講就是用來控制I/O硬體的,分成I/O指令和通道指令兩個部分。I/O系統的主要任務就是將使用者輸入的資料經過處理轉換成人能夠識別的資料再輸出。就比如我現在正在努力的敲鍵盤,而通過鍵盤輸入的字元經過輸入法轉換成漢字,最終顯示在螢幕上,儘管有些不太準確,但大致上就這這樣一個過程。

  • I/O指令
    I/O指令實際上是CPU指令的一部分,基本格式是這樣的:【操作碼|命令碼|裝置碼】。操作碼是一種控制指令,如訪存、算數邏輯運算等,命令碼是執行具體的指令,比如說算數邏輯運算中的加減乘除,而裝置碼就是外圍裝置在I/O系統中的編號。通過I/O指令,就能夠實現對I/O裝置的基本控制。

  • 通道指令
    說道通道指令,我們需要先了解一下I/O系統的發展史。
    早期的I/O系統,因為裝置較少,所以採用I/O裝置直接與CPU連線

    的方式,很明顯,裝置一旦多了,就會對CPU造成嚴重的負擔,所以有了介面這種連線方式;介面連線在I/O匯流排和I/O裝置之間,起到了橋樑的作用,介面不但能夠對資料進行緩衝,還能對中斷進行處理,最終採用正確的邏輯,裝置們就能分時佔用CPU,大大的提高了速率。後來出現的DMA,同樣起到了提高效率的作用,DMA能夠在主存和I/O裝置之間直接交換資料,進一步解放了CPU;雖然DMA方式不錯,但是在大型機上面,I/O裝置太多,互動十分頻繁,CPU不但需要對眾多的DMA進行管理,而且控制起來十分複雜,直接影響了CPU的效率,又有了通道這種結構。通道可以理解為一種特殊的處理器,功能和CPU類似,但肯定不如CPU強大,它的作用僅僅是處理經過通道的資料,減輕CPU負擔而已。最後就是I/O處理機
    ,這玩意獨立於系統而存在,功能更加強大,但不是重點,就不展開介紹了。
    繼續說通道指令,通道指令是通道自身的指令,用來執行I/O指令,比如讀寫磁碟、控制I/O裝置的工作狀態等等。

I/O硬體

I/O硬體基本包括介面和I/O裝置兩個部分,上面說的其實已經十分全面了,就不再贅述。

I/O系統與主機的資訊傳輸方式

我們之前講的只是一個鋪墊,這一章節最重要的還是主機和I/O系統之間的資料傳輸
在講之前需要先了解一下I/O裝置與主機之間的連線方式。

  • 分散連線(輻射式連線):就是I/O系統發展階段中的第一個階段,各種裝置都直接連線在主機上。這種方式不便於維護,成本相對較高。

  • 匯流排連線:即用介面將匯流排和I/O裝置連線起來,這樣的便於增刪裝置。

I/O系統與主機的資訊傳輸方式共有5種,這裡我值介紹三種,即程式查詢方式、程式中斷方式、DMA方式。

程式查詢方式

這種方式,一張圖就很好說明了。

程式查詢方式就是利用CPU向I/O裝置傳送讀取指令,然後再檢查I/O裝置的狀態,如果I/O裝置已經準備就緒,則一個一個位元組的將資料傳輸到CPU中;如果I/O裝置沒有準備就緒,則CPU將會不斷的向I/O裝置傳送查詢請求,直到I/O裝置準備好了。
注意,在CPU不斷查詢的過程中,原有的程式是被打斷了的,如果I/O裝置沒有準備好,那麼原來執行的程式就不會執行,直到I/O裝置就緒,且資料讀取完畢,程式才會恢復。
上面說的是隻有一個裝置的情況,CPU會採取踏步查詢的方式查詢I/O裝置是否準備好了。那麼如果一個介面連線著多個I/O裝置又當如何呢?如下圖,當一個裝置沒有準備好的時候,就向下查詢,然後如果還是沒有準備好,則迴圈這個過程。

可以看到,這種方式存在非常鮮明的優先順序問題,極端一些,如果第一個裝置請求完成一次,接著就進行下一次請求,那麼後面的裝置可能永遠也沒有辦法得到CPU的“臨幸”。

程式中斷方式

這種方式就要比第一種方式聰明瞭,上一種方式是由CPU佔據主導地位,而這種方式是由I/O裝置佔據主導。
只有當I/O裝置準備好了以後,才會向CPU傳送一箇中斷請求,表示我已經準備好了,然後CPU執行中斷,與I/O裝置進行資料互動。
圖示如下:

這種方式沒有CPU的“原地踏步”式的查詢,即CPU不會去等待裝置準備好,而是裝置準備好了,你直接通知CPU就好了,這無疑大大提高了效率。
注:中斷程式的流程如下:保護現場–>中斷服務–>恢復現場–>中斷返回
這裡額外講述一下中斷,實際上有兩種中斷方式,一種是單重中斷,另外一種就是多重中斷。

單重中斷很好理解,就是中斷現行的程式,轉而去執行另外一個服務,而多重中斷則是在單重中斷的基礎上建立的。一般來講,I/O介面中的是否允許中斷標記,在一個I/O裝置發起中斷後就關閉了,也就是不再允許裝置中斷現在的中斷程式,如果遇到特殊情況,如遇到緊急事件需要處理,那麼就會中斷現在的中斷。就叫做你多重中斷。

DMA方式

DMA方式就如同一開始講的那樣,DMA直接與主存進行資料互動,不佔用CPU的時鐘週期,直接I/O裝置之間建立通路,再次提升了效率。
我們來看一下DMA方式傳送資料的過程:

如圖所示,DMA傳輸資料的過程包括三個過程。
首先是預處理,找到I/O裝置輸入的資料要存放在主存中的地址,然後找到I/O裝置的地址,接著設定資料傳送的個數。
接著是資料傳送,因為DMA方式並不佔用CPU,所以可以在主程式執行的過程中,完成I/O裝置的資料傳送。
然後是後處理,即將DMA終結掉。

I/O介面

最後,我們來了解下起到了橋樑作用的I/O介面。

如上圖所示,I/O介面由資料緩衝暫存器、裝置選擇電路、裝置狀態標記、命令暫存器和命令譯碼器組成。之所以說I/O介面起到了橋樑的作用,是指它一端連線了CPU,另一端則連線了I/O裝置,能夠有效的保證裝置和CPU間 正確的資料交換。
接下來說一下各個模組的作用:
裝置選擇電路:這個電路是一種比較器,簡單可以理解為CPU向介面傳送了一個裝置地址,而比較器就是拿著這個裝置地址去判斷究竟那個I/O裝置的地址和這個地址相同,如果找到則建立連線。
命令暫存器和命令譯碼器:起到了傳送命令的作用
資料緩衝暫存器:緩衝從I/O裝置中讀取到的資訊,或者是把CPU中傳給I/O裝置的資料快取。
裝置狀態標記:可以用於標記裝置的工作狀態、標記裝置是否準備完成、標記是否可以向CPU傳送中斷請求等

總結

本文介紹了I/O系統的組成,重點在介紹三種資料的傳送方式。希望能夠幫助到大家更好的理解I/O系統,感謝閱讀!
喜歡我文章的同學,可以幫忙點個贊、關注一下我。
公眾號:最高許可權位元流