缓冲机制
計(jì)算機(jī)為什么需要緩沖機(jī)制?如何實(shí)現(xiàn)緩沖呢?
我們知道cpu的主頻可以達(dá)到2.6GHz,這還是在單核的情況下,如果多核再加上超線程技術(shù),cpu的計(jì)算主頻可以更高。而普通的硬盤只有幾十MHz,我們自己用的u盤如果3MHz就感覺可以了。可以看到cpu計(jì)算速度是硬盤等存儲設(shè)備拷貝數(shù)據(jù)的幾十甚至上百倍,如果cpu等待從硬盤的來的數(shù)據(jù)(硬盤存儲數(shù)據(jù)而數(shù)據(jù)運(yùn)算必須拷貝到內(nèi)存)進(jìn)行運(yùn)算,不僅僅會極大的浪費(fèi)資源還會影響我們操作員的體驗(yàn)。緩沖機(jī)制就是為了解決這一問題,所有的速度不匹配的系統(tǒng)都會用到緩沖機(jī)制。
緩沖機(jī)制就是開辟一塊存儲區(qū)域(緩沖區(qū)),根據(jù)中斷機(jī)制來解決速度不匹配問題。當(dāng)輸入和輸出公用一片內(nèi)存時(shí),在前面的內(nèi)存管理我們知道,必須要為內(nèi)存設(shè)定臨界量,使得一塊區(qū)域內(nèi)只有一個(gè)進(jìn)程在使用這個(gè)資源。在數(shù)據(jù)拷貝時(shí),輸入進(jìn)程將數(shù)據(jù)拷貝到緩沖區(qū),而輸出進(jìn)程負(fù)責(zé)將緩沖區(qū)中的數(shù)據(jù)拷貝走。數(shù)據(jù)輸入進(jìn)程拷貝完數(shù)據(jù)后,發(fā)出一個(gè)信號讓數(shù)據(jù)輸出進(jìn)程從緩沖區(qū)取走數(shù)據(jù)。取完數(shù)據(jù)后,發(fā)出一個(gè)信號讓數(shù)據(jù)輸入進(jìn)程開始向緩存區(qū)放入數(shù)據(jù)。這樣就能有效避免了數(shù)據(jù)的沖突,但是這樣還是不能有效解決cpu利用率問題,畢竟拷貝數(shù)據(jù)很慢,cpu不可能一直等待數(shù)據(jù)拷完。于是系統(tǒng)采用中斷機(jī)制來進(jìn)行數(shù)據(jù)拷貝。
cpu將放權(quán)讓IO通道子系統(tǒng)進(jìn)行全權(quán)控制數(shù)據(jù)的考入和考出,只是在數(shù)據(jù)開始輸入和數(shù)據(jù)結(jié)束傳遞,cpu才參與其中。這樣就大大解放了cpu,從而可以使得cpu完成更高效的工作。開始向緩沖區(qū)寫入數(shù)據(jù)時(shí),cpu發(fā)出指令讓IO通道進(jìn)行數(shù)據(jù)讀取,然后cpu完成其他工作。待到緩沖區(qū)完成數(shù)據(jù)接收時(shí),IO通道利用中斷機(jī)制向cpu發(fā)出中斷請求,cpu暫停其他進(jìn)程,轉(zhuǎn)而響應(yīng)中斷,將緩沖區(qū)數(shù)據(jù)取出。
為了進(jìn)一步解決速率不匹配的問題,可以創(chuàng)建一個(gè)緩沖池。緩沖池可以是一個(gè)鏈表,當(dāng)輸入數(shù)據(jù)后,數(shù)據(jù)不急著從緩沖區(qū)輸出,而是將輸入數(shù)據(jù)放入到鏈表結(jié)構(gòu)中。當(dāng)有進(jìn)程發(fā)出指令從緩沖池讀取數(shù)據(jù)時(shí),緩沖數(shù)據(jù)從鏈表的頭部取出相關(guān)數(shù)據(jù)結(jié)構(gòu),發(fā)送給指定的線程。
雙緩沖可以實(shí)現(xiàn)雙向通信,同時(shí)還能實(shí)現(xiàn)串行到并行的轉(zhuǎn)換。
總結(jié)
- 上一篇: 51单片机频率计c语言程序,51单片机简
- 下一篇: 写给大数据初学者的话——转自lxw的大数