本文來(lái)自微信公眾號(hào):編程技術(shù)宇宙 (ID:xuanyuancoding),作者:軒轅之風(fēng) O
總線技術(shù)
我是 CPU 一號(hào)車間的阿 Q,最近為了一件事兒搞得我挺煩的。
當(dāng)初我們 CPU 工廠剛剛來(lái)到主板上建廠時(shí),那時(shí)候主板上的單位還不多,跟我們打交道最多的就是內(nèi)存那家伙了。
后來(lái),鍵盤、鼠標(biāo)、硬盤、網(wǎng)卡、聲卡、顯卡等等設(shè)備紛紛入駐主板,這塊土地變得越來(lái)越熱鬧起來(lái)。
不過(guò),他們的到來(lái)并沒(méi)有影響我們的地位,畢竟我們是中央處理器,所有人都得聽(tīng)我們指揮。
為了和主板上這些家伙們通信,我們花了重金鋪了一條線路,主板上家家戶戶都連上了這條線路,我們把它叫做總線,雖然說(shuō)是一條,但實(shí)際上它包含了傳輸數(shù)據(jù)的數(shù)據(jù)總線,傳輸?shù)刂返牡刂房偩€和進(jìn)行控制管理的控制總線。
這樣一來(lái),各單位就能一起聊天了。不過(guò)這線路是共用的,大家不能都一起傳數(shù)據(jù),那就亂套了。為了統(tǒng)一管理,我們?cè)O(shè)立了一個(gè)新的單位叫總線控制器,這個(gè)單位來(lái)統(tǒng)一管理總線,大家要通信就得找它申請(qǐng),這就叫做總線仲裁。
不過(guò)啊,主板上的單位之間的速度還是千差萬(wàn)別的,像內(nèi)存就比硬盤、網(wǎng)卡這些單位快多了(當(dāng)然,跟我們 CPU 車間的工作速度那還是不能比),不僅如此,不同單位他們的接口還千差萬(wàn)別,用一套總線矛盾就日益明顯了,后來(lái)就變成了多級(jí)總線,讓慢的跟慢的玩,快的跟快的玩,最后大家再用一個(gè)東西把不同總線連接起來(lái),這個(gè)東西就是橋!
主板上后來(lái)出現(xiàn)了兩個(gè)著名的橋,一個(gè)離我們 CPU 很近的叫北橋,內(nèi)存那家伙和我們通信就會(huì)經(jīng)過(guò)它,另一個(gè)離我們遠(yuǎn)一點(diǎn)的叫南橋,那些慢一些的 I / O 設(shè)備就通過(guò)南橋接進(jìn)來(lái)。再后來(lái),隨著我們 CPU 工廠的壯大,直接把北橋收購(gòu)了,現(xiàn)在變成了我們廠里的一個(gè)部門了。
PIO 模式
現(xiàn)在我們可以和這些 I / O 設(shè)備通信了,就拿硬盤來(lái)說(shuō)吧,它有 I / O 端口,我們提供了 in 和 out 兩條指令,就可以對(duì)它進(jìn)行讀寫數(shù)據(jù)了。這種通信的方式叫做可編程輸入輸出模型,Programming Input / Output Model,簡(jiǎn)稱 PIO。
我們是整個(gè)主板上的核心,俗話說(shuō)得好,能力越大,責(zé)任越大,但有時(shí)候真心覺(jué)得有點(diǎn)累。
隨著越來(lái)越多的設(shè)備接入主板,越來(lái)越多的程序需要等待我們?nèi)?zhí)行,工作量大的壓的我們喘不過(guò)氣來(lái)。
尤其是隨著技術(shù)進(jìn)步,我們 CPU 工廠的速度越來(lái)越快,與硬盤的讀寫速度之間的差距越來(lái)越拉大,我們還用這種方式通信就太浪費(fèi)我們的時(shí)間了。
DMA 技術(shù)
這幾天,我們幾個(gè)車間的 Leader 私下聚在一起討論起這個(gè)事情來(lái)。
“阿 Q,你不覺(jué)得現(xiàn)在我們花了太多時(shí)間再讀寫硬盤上了嗎,這家伙慢不是他的錯(cuò),扯我們后腿這就是他的錯(cuò)了啊。傳輸一次數(shù)據(jù),我們要執(zhí)行好多次 I / O 端口讀寫,我們寶貴的時(shí)間都浪費(fèi)在這上面了!”,二號(hào)車間的虎子一臉幽怨的說(shuō)到。
“嗨,我最近也為這事發(fā)愁呢,程序越來(lái)越多,讀寫硬盤的時(shí)間越來(lái)越多了,尤其是那個(gè)叫 MySQL 的,老讓我訪問(wèn)硬盤,可累死我了。”
沒(méi)想到我倆都憋了一肚子苦水呢。
這時(shí),平日里愛(ài)拍老板馬屁的八號(hào)車間老大說(shuō)了一句話:“你們說(shuō)的問(wèn)題確實(shí)存在,這工作太沒(méi)技術(shù)含量了,就是個(gè)體力活嘛,要不咱給老板說(shuō)說(shuō),讓他外包出去吧”
我倆一聽(tīng),妙啊,要是能把這體力活外包出去,那可簡(jiǎn)直太好了,我們就可以專心做我們的專職工作了。
“你跟老板平時(shí)走得近,這事你去說(shuō)吧”,我給虎子使了個(gè)眼色,一起攛掇老八去說(shuō)這事。
“行,我去就我去”。
還別說(shuō),領(lǐng)導(dǎo)立馬就同意了這個(gè)想法,畢竟能提高我們的工作效率,他自然是舉雙手歡迎。
沒(méi)過(guò)多久,就成立了一個(gè)外包團(tuán)隊(duì),獨(dú)立出我們廠子,專門來(lái)負(fù)責(zé)這件事。和我們 CPU 一樣,他們也提供了幾個(gè)寄存器,傳輸數(shù)據(jù)的時(shí)候,只需要設(shè)置一下這些寄存器的內(nèi)容,告訴他們要傳輸哪里的數(shù)據(jù),從哪到哪,長(zhǎng)度是多少,接下來(lái)的事情我們就不用操心了,交由他們來(lái)完成。我們就可以騰出功夫做其他事情,等數(shù)據(jù)傳輸完畢了,他們?cè)儆弥袛嗟姆绞礁嬖V我們,我們直接去處理就好了,省去了讓我們親自去搬運(yùn)的過(guò)程,真是爽的飛起~
后來(lái),我們給這項(xiàng)技術(shù)也取了一個(gè)名字,叫 Direct Memory Access,直接存儲(chǔ)器訪問(wèn),簡(jiǎn)稱 DMA,這個(gè)外包團(tuán)隊(duì)就是 DMAC,DMA 控制器。
DMA 全面開(kāi)花
前幾天的月總結(jié)會(huì)上,領(lǐng)導(dǎo)表?yè)P(yáng)了老八,說(shuō)多虧他的建議讓廠里的生產(chǎn)效率大大提升。早知道,當(dāng)初就不攛掇老八去跟老板提建議了,我自己去。
正想著走神,突然想到了一個(gè)問(wèn)題,這一次我打算抓住機(jī)會(huì)掙個(gè)表現(xiàn)。
“老板,這個(gè) DMA 技術(shù)好是好,但現(xiàn)在只能用于硬盤哦。最近網(wǎng)卡那家伙數(shù)據(jù)包也挺多的,我花了好多時(shí)間去把數(shù)據(jù)包從網(wǎng)卡讀取到內(nèi)存中,又低效又沒(méi)有技術(shù)含量,可不可以把這技術(shù)推廣到網(wǎng)卡上???”,我起身說(shuō)到。
老板點(diǎn)了點(diǎn)頭,若有所思。
二號(hào)車間虎子見(jiàn)狀也起身說(shuō)到:“老板,除了硬盤和網(wǎng)卡,顯示器也有這個(gè)需求。我經(jīng)常要疲于奔波于把內(nèi)存數(shù)據(jù)傳輸?shù)斤@示器,也是勞神勞力,建議 DMA 技術(shù)也推廣到顯示器呢”
老板聽(tīng)完,皺了皺眉頭說(shuō)到,“這個(gè)不同設(shè)備之間的差別還是挺大的,沒(méi)法通用。難不成我們要為每個(gè)設(shè)備成立一個(gè)外包團(tuán)隊(duì)?這成本有點(diǎn)高啊???”
老板果然還是老板,還是把成本考慮在第一位。
這時(shí),愛(ài)拍馬屁的老八又說(shuō)話了,“老板說(shuō)的是。我倒是有個(gè)建議,這個(gè) DMA 推廣到網(wǎng)卡、顯示器這些單位也可以,不過(guò)讓他們自己掏錢來(lái)增加 DMAC,按照他們各自不同的需求來(lái)做。咱們不能當(dāng)這冤大頭”
老板一聽(tīng),喜形于色,大聲叫好!
就這樣,很快我們就把這項(xiàng)技術(shù)推廣了出去,主板上以網(wǎng)卡、顯示器、攝像頭為首的那些個(gè)單位為了不落后于人,紛紛擁抱變化,集成了 DMAC。
我們得到了徹底的解放,再也不用做枯燥的搬運(yùn)工了~
廣告聲明:文內(nèi)含有的對(duì)外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時(shí)間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。