計算機的核心是CPU,用來處理各類數(shù)據(jù),但是計算機中的數(shù)據(jù)都存放在硬盤之類的外部設備中。計算機處理數(shù)據(jù)時,需要先將數(shù)據(jù)從I/O設備中讀取至內存中,此后CPU才能對該數(shù)據(jù)進行處理。計算機處理數(shù)據(jù)的過程簡單說來就是先讀取,再計算。
近年來,CPU的處理速度得到了飛速的提升,而從I/OS設備中讀取數(shù)據(jù)的熟讀卻發(fā)展很慢,導致了一個很尷尬的場面——“存儲墻”,即CPU往往早已完成了數(shù)據(jù)的計算,但是I/O設備還在拼命地運作以將數(shù)據(jù)讀入內存。有種在飯店里吃飯,上一道菜就消滅一道,饑腸轆轆地期盼下一道菜上來的感覺。為此好多計算機科學家針對I/O設備與主機交換信息的方式進行了研究,希望能夠進一步的加大計算機的效率。
目前I/O設備與主機交換信息的方式主要有三種:
程序查詢方式
顧名思義,拿讀入數(shù)據(jù)為例,CPU發(fā)出讀取I/O設備中數(shù)據(jù)的命令,并選用不停查詢的方式等待數(shù)據(jù)準備完成,然后將數(shù)據(jù)存入內存中。也就是說CPU從發(fā)出需要數(shù)據(jù)的請求開始,會一直等待數(shù)據(jù)傳輸完畢,然后再做接下來的工作,期間屬于“踏步”狀態(tài)什么都不做。而這種方式由于CPU等待的時間太過于長,致使計算效率不高。
程序中斷方式
程序中斷方式是程序查詢方式的改進版,程序查詢方式中CPU等待的時間太過于長,而CPU本身很繁忙有太多的事情要做,計算機科學家認為這樣的方式根本不科學,應當解除CPU必須等待的限制。在需要用到數(shù)據(jù)的時候,向I/O設備發(fā)出讀取數(shù)據(jù)的指令,讓I/O設備自己把數(shù)據(jù)準備好后再通知CPU。CPU不用等待,將任務中斷,接著就處理下一條指令了,直到I/O設備將數(shù)據(jù)準備完畢,發(fā)消息給CPU說:“大哥,您要的數(shù)據(jù)準備好啦?!盋PU在完成手頭的指令后,就可以接著處理剛剛被掛起的任務,將準備的數(shù)據(jù)寫入內存中。這樣的方式使得CPU的計算資源沒有浪費,相對于程序查詢方式,有了很大的提升。不過這樣做的前提是I/O設備有一定的智能,能夠在沒有CPU的指導下也能夠處理數(shù)據(jù)了。但是將任務中斷本身就需要一定的計算資源,接受I/O回饋消極需要一定的計算資源,回到剛剛工作的地方也需要一定的計算資源,如果中斷的次數(shù)太過頻繁,也會給CPU帶來不少計算上的負擔。
DMA方式
有些極端的科學家覺得就算采用程序中斷方式,效率還是不夠高,如果能夠繼續(xù)讓I/O設備智能化,繞過CPU直接將數(shù)據(jù)存入內存之中,就可以省下更多CPU的計算資源了。結果這樣的方式還真的被研究出來了。DMA方式又叫直接存儲式訪問,借用I/O接口實現(xiàn)了I/O設備的智能化。當CPU發(fā)出一個讀數(shù)指令時,I/O接口接到指令,將數(shù)據(jù)從I/O設備直接存入到內存之中,不用再次麻煩CPU大哥了,只需要在完成之后告訴CPU:“讀取操作已經(jīng)完成?!彼訡PU擁有了一個更加聰明的手下I/O接口,只需要吩咐工作,不再需要親手過問了。但是事物都用兩面性,在交給I/O接口讀取數(shù)據(jù)的任務時,自然也得交給它相應的資源,其中就包括了用于傳輸數(shù)據(jù)的總線了。這也就意味著,CPU雖然在發(fā)出讀數(shù)命令后能夠直接進行下一步工作,不再過問,但是這個期間不能再進行其他的需要用到總線的工作(包括數(shù)據(jù)的存取,以及指令的存?。?,只能進行一些緩存中的指令。當然計算機的整體計算效率又提升了好多。
這三種就是I/O設備與主機交換信息的控制方式,可以看出,為了提升計算機的計算效率,I/O設備越發(fā)的智能化,省去了更多CPU的計算資源。