一步步编写操作系统 14 CPU与外设通信——IO接口 上
介紹顯卡之前,必須得和大家交待清楚,那么多的外部設備,cpu是如何與他們交流。
大家都學過微機接口技術吧?沒學過也沒關系,反正我也只是籠統地說說^_^,保證大家一定能看得懂。
按理說,如果硬件種類較少,讓cpu直接同硬件進行IO操作也不是很過分,但現實不是這樣的,計算機能發展到今天這樣興盛,是和誕生各種各樣的硬件分不開的。微型計算機通過外部設備與外面的世界互換信息,外部設備種類繁多,原理各異,有機械式、電動式、電子式,輸出的信號也多種多樣,有模擬量、數字量、開關量。它們都有自己特性,數據格式不相同,有的外設是用串行數據,有的是并行數據,并且它們都在自己的時序下工作,無論它們的速度如何,在cpu看來都太慢了。
讓cpu小朋友與每個“個性不同,脾氣迥異”的硬件大大們打交道,這也太為難cpu了,您看,通過執行jmp $這樣的死循環語句就能看得出,人家cpu可是個踏實低調的主,所以,“交際”這類活動對它還是少點好。再說,同任何一個設備打交道,cpu那么速度那么快,它不得嫌棄別人慢嗎,為了減少自己的等待時間,還得為低速設備準備數據緩沖區。cpu用的信號都是TTL電平,外設大多數都是機電設備,機電設備可不能用TTL電平驅動,這還不算完呢,cpu系統總線上傳送的都是并行數據(所以你聽到的都是8位、16位、32位cpu…),外設可是并行、串行都有,還得轉換格式,想想就麻煩啊。看來,不可能讓cpu一一適應它們,否則cpu要做的工作太多了。
cpu面臨的問題,就像校長面臨一群學生一樣,讓校長親自管理每個學生的學習,即使是肌肉男施瓦辛格也得累倒,于是,班主任的出現幫了大忙,每個班主任負責一批學生,由他們了解學生的情況后再向校長匯報,這樣校長他不需要過人的體格,工作起來也會游刃有余了。人創造出來的東西必然脫離不了人的思維,cpu工程師們也給cpu找了“班主任”,在cpu和外設之間加了個代理,總之,以后cpu有什么事就同它接觸就行了。什么速度不匹配,緩沖區之類的,全都由代理來搞定。舉個例子,如果是串行設備,cpu就同串行接口通信,把數據發給它后,數據再經由串行接口發給串行設備,串行設備有了反饋后,把數據發送給串行接口,再經串行接口返回給cpu,并行設備也是如此。
任何不兼容的問題,都可以通過增加一“層”來解決。在cpu和外設之間的這一層就是IO接口。IO接口形式不限,它可以是個電路板,也可以是塊芯片,甚至可以是個插槽,它的作用就是在cpu和外設之間相互做協調轉換,如cpu和外設速度不匹配,它就是變速箱,cpu和外設信號不通用,它就是翻譯機。
這樣通過加了中間層后,工作就被劃分成多個部分,每個部分都有專人負責,大家都輕松了,多好啊。
不過,說的還是有點抽象是嗎?那就整點具體的,機箱里的聲卡就是驅動音響設備的IO接口,本章介紹的顯卡也同樣是一種IO接口,它是用來驅動顯示器的。也許您打開機箱后也未發現我說的聲卡和顯卡,那是不是就沒有它們呢?當然不會,要是聽不到聲音看不到圖像,人們買電腦干嗎?用來學習的?哈哈,你懂的。其實它們被集成在主板芯片組中了,您用的就是傳說中的集成聲卡和集成顯卡。這下清楚多了吧,下面咱們還是繼續說點抽象的。
IO接口是連接cpu與外部設備的邏輯控制部件,既然稱為邏輯,就說明可分為硬件和軟件兩部分。硬件部分所做的都是一些實質具體的工作,其功能是協調cpu和外設之間的種種不匹配,如雙方由于速度不匹配,那IO接口就實現數據緩沖以減少等待時間,數據格式不匹配,IO接口就在這兩種格式間互相轉換。IO接口內部實際上也是由軟件來控制運作的,這就是所謂的“邏輯”部分,所以軟件是指用來控制接口電路工作的驅動程序以及完成內部數據傳輸所需要的程序。
既然提到了軟件,這就意味著編程,這樣一來,IO接口芯片又可按照是否可編程來分類,可分為可編程接口芯片和不可編程接口芯片。
接口的作用是連接處理器和外部設備,如果外部設備很簡單,傻瓜型的、不需要設定就直接能用,就可以用不可編程接口芯片與處理器連接,不可編程接口芯片是種非常簡單的IO接口。
當然物理設備還是很貴重的,并且計算機中的IO接口數量也是有限的,所以我們當然希望IO接口功能越多越好,可以設置多種工作模式,甚至允許多個外部設備通過同一個IO接口芯片與處理器連接。計算機與IO接口的通信是通過計算機指令實現的,當我們需要定制某些功能時,我們也必須用計算機指令告訴IO接口:哪些設備連接在此IO接口上、此IO接口的工作模式等。這種通過軟件指令選擇IO接口上的功能、工作模式的做法,稱為“IO接口控制編程”。這通常是用端口讀寫指令in/out來實現的,后面會說到。
cpu太忙了,它的時間特別寶貴,為了簡化cpu訪問外部設備的工作,能夠輕松地同任何硬件通信,大家就約定好IO接口的功能:
1.設置數據緩沖,解決cpu與外設的速度不匹配。
cpu和外設速度上的差異可以通過設置緩沖區來解決,也就是說,數據先存儲在緩沖區里,等需要的時候(無論緩沖區是否滿了)就傳送出去。
2.設置信號電平轉換電路。
cpu和外設的信號電平不同,如cpu所用的信號是TTL電平,而外設大多數是機電設備,故不能使用TTL電平驅動,可以在接口電路中設置電平轉換電路來解決。
3.設置數據格式轉換
外設是多種多樣的,輸出的信息可能是數字信號、模擬信號等,而cpu只能處理數字信號。數字信號需要經過數/模轉換(D/A)成模擬量才能被送到外設以驅動硬件,模擬量也同樣需要經過模/數(A/D)轉換成數字量才能被cpu處理。所以接口電路中需要包括A/D轉換器和D/A轉換器。另外,即使雙方使用的都是數字信號,這也牽涉到格式和字長的問題,如cpu使用的是8位或16位或32位并行數據,而外設用并行或串行數據都有可能,所以IO接口中必須能夠識別格式并且轉換成對方需要的形式才行。
4.設置時序控制電路來同步cpu和外部設備
硬件的工作也是按照某種時序,它們都有自己的時序系統,就像cpu工作在自己的晶振時序上一樣。雙方時序不同,接口電路就要協調這兩種不同的時間計法。如,cpu發控制信號、定時信號給IO接口電路,IO接口用它們來控制和管理硬件。隨后硬件有了反饋后,其應答信號也需要通過接口返回給cpu,這樣cpu先“問”,硬件后“回答”,就實現了一次握手,之后便可以實現IO的同步操作。
5.提供地址譯碼
cpu同多個硬件打交道,每個硬件要反饋的信息很多,所以一個IO接口必須包含多個端口(即IO接口上的寄存器)來存儲這些信息內容。但同一時刻,只能有一個端口和cpu數據交換,這就需要IO接口提供地址譯碼電路,使cpu可以選中某個端口,使其可以訪問數據總線。
在后來新加入的硬件只要符合此約定就能同cpu數據交換,這樣cpu就可以輕松應對種類萬千的硬件啦。
后面的內容下半場再說。
總結
以上是生活随笔為你收集整理的一步步编写操作系统 14 CPU与外设通信——IO接口 上的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三个美国人就有一人被她“盗窃”!前亚马逊
- 下一篇: 泰国报告全球首例新冠“猫传人”病例 戴口