內(nèi)存揭奧秘,總線解玄機
上回說到,阿飛從混沌中醒來,意外發(fā)現(xiàn)自己的大腦被數(shù)據(jù)化存儲到了一臺計算機內(nèi)存中,根據(jù)神秘聲音的指示,他需要趕緊聯(lián)系網(wǎng)卡找到自己大腦的另一半然后逃離這里。不料內(nèi)存卻告訴他,如果不趕緊把自己持久化存儲起來,一旦計算機關閉他就會消失···
“怎么,怎么持久化存儲起來?”,阿飛一下緊張起來,說話竟都有些結(jié)巴了。
剛說完,阿飛的眼前又劃出了一道光亮,光線指向的遠處,他看到了另一個龐然大物。
“這是硬,硬盤?”
“沒錯,我這里不是久留之地,一旦斷電了數(shù)據(jù)就都消失了。硬盤可以持久化存儲數(shù)據(jù),就算沒有供電,數(shù)據(jù)也依然存在,你要是能到那里就安全了”,內(nèi)存說到。
“那我怎么才能從這里到硬盤里去呢?”
“這事得找CPU,這臺計算機上是一個x86-64架構(gòu)的CPU,他有兩條指令:in和out,可以用來從硬盤上讀寫數(shù)據(jù),他可以用mov指令把你讀到寄存器中,再用out指令把你寫到硬盤上”
- mov bx, addr;
- ep:
- mov ax, [bx];
- out port, ax;
- add bx, 2;
- loop .rep
“寄存器?那才幾個字節(jié),這樣折騰不得寫好久?唉,說到這,我連我自己有多少數(shù)據(jù)量都還不知道,內(nèi)存大哥,你看下我有多少字節(jié)?”,阿飛問到。
內(nèi)存條頓了頓,計算了起來,片刻之后回答道:“20210529個字節(jié),差不多20MB”
怎么才20MB,我的大腦就這么點數(shù)據(jù)嗎,就算只有一部分那也太少了吧?阿飛心里這樣想著,感到有些詫異。
“讓我算一下,這得傳輸多少次···20MB,一次2個字節(jié)···就是···”,阿飛念念有詞的計算起來。
“不用算了,我給你算好了,就算一次傳送4個字節(jié),CPU也得讀寫五百多萬次”,內(nèi)存打斷了阿飛。
“什么?這也太慢了!”,阿飛失望的說到。
“你嫌慢?CPU大哥估計還不愿意干這活呢”
“啊?為什么?”
“這種傳輸方式叫Programming Input/Output,簡稱PIO,因為傳輸效率低下,這會花去CPU大量時間,不能去執(zhí)行其他程序了,所以現(xiàn)在他們很少用這方式來傳輸數(shù)據(jù)了”
“那言下之意,還有別的辦法了?別賣關子了,快告訴我吧!”,阿飛急的問到。
“有,用DMA的方式,直接讓DMA控制器通過總線把你傳輸?shù)接脖P中,數(shù)據(jù)不用經(jīng)過CPU老大哥”
DMA?阿飛一下想起了什么,“這個東西我在大學課本上學過,叫直接存儲器訪問(Direct Memory Access),由DMAC,也就是DMA控制器來負責數(shù)據(jù)的傳輸,我記得DMAC好像是一個編號叫8257的芯片,他現(xiàn)在在哪里?”
內(nèi)存不禁笑出了聲:“什么8257,那都是哪個年代的老黃歷了,那玩意早就下崗了。”
“那現(xiàn)在DMAC在哪里?”
“看到硬盤不遠處的那塊芯片了嗎,那就是PCH,也就是你口中說的南橋芯片,它里面集成了SATA控制器,用于控制那個SATA接口的硬盤,SATA控制器中又集成了DMA控制器,一會兒就由他把你傳輸過去。”
“看來我學的課本真過時了,你趕緊幫我聯(lián)系一下,我很著急啊”,阿飛催促到。
“這可不行,我只是一個總線從設備,只能被動接收命令時使用總線,只有總線主設備才能主動使用總線,等著吧”
等?阿飛的心一下又懸了起來,“那誰是主設備呢?”
“CPU老大,他是最大的主設備,還有DMA控制器們,他們也是主設備,等一會兒硬盤的DMA控制器找我通信時,我?guī)湍憬o他帶個話,讓他把你傳輸過去”,內(nèi)存說到。
阿飛只好耐著性子等了起來,不時又想起神秘老者的話,他急的像熱鍋上的螞蟻,不知道如何是好。
“這要等多久?”,阿飛忍不住問到。
不過這一次,內(nèi)存沒有理他。
過了好一陣···
“快來了!我看到DMA控制器發(fā)出總線申請信號了”,內(nèi)存說到。
“什么意思?”,阿飛有些不太明白。
“之前不是給你說過了嗎,咱們主板上各部件之間通信都得通過總線系統(tǒng),這總線系統(tǒng)英文名叫bus,也就是公共汽車的意思,所有人共享的。但共享得有個章法,不能大家一起用,那就亂了套了,所以主設備們要使用之前,都得發(fā)出申請,交給總線仲裁器來判定由誰來使用”
“共享?那么多設備,忙得過來嗎?”
“很早以前的ISA總線只有幾十MB/s,設備連得多了以后確實不太忙得過來,不過后來改成PCI總線就快多了,有幾百MB/s了。到現(xiàn)在這臺計算機中的PCIe總線,能達到好幾GB/s,完全忙得過來”
“就這一根線,能傳輸?shù)倪@么快?”
內(nèi)存又忍不住笑了出來,“總線可不是一根線,那可是幾十上百根線呢,數(shù)據(jù)、地址、時鐘還有各種控制信號,一根線哪里夠”
“原來如此,我一直以為總線就是一根線呢,看來又被課本上的圖給誤導了···”,阿飛若有所思的說到。
“來了來了,消息來了,我得去忙了,你等我一下,我把你的情況給DMA控制器說一下”,阿飛還沉浸在自己的思索中,內(nèi)存又接著說到。
阿飛又開始緊張起來,一會兒就要去硬盤里了,那里又是怎樣一副天地,心里一點數(shù)也沒有,既期待又害怕。
無聊之際,阿飛又試圖回憶自己是如何來到這里,卻依舊是一陣頭暈,看來自己的大腦數(shù)據(jù)真是缺失了一部分,忙完持久化存儲的事情,得趕緊找網(wǎng)卡幫我把信息傳遞出去才行。
等了好久,內(nèi)存條終于來了消息:“你快準備好,我已經(jīng)跟硬盤的DMA控制器說好了,馬上就來傳輸你”
話音剛落,還沒等阿飛反應過來,只感覺一陣電流竄遍全身,接著像是在一股巨大的引力撕扯下,阿飛感覺自己被吸入了一個漩渦,身旁的一切飛速向后退去,心臟都快要從身體里跳了出來,打出生以來他哪里見過這陣仗。
“快看,來了一個新文件”
“這家伙是什么格式的,怎么從來沒見過”
···
迷迷糊糊中,阿飛聽到有人在說話,慢慢睜開眼睛,才發(fā)現(xiàn)自己不知什么時候竟然睡了過去,一定是剛才那陣引力把我弄暈了,阿飛心里這樣想著。
阿飛環(huán)顧四周,仍舊是一片漆黑。
“內(nèi)存大哥?內(nèi)存大哥?”,阿飛叫了兩聲。
“什么內(nèi)存大哥,這里是硬盤”,不遠處一個聲音傳來。
看來成功來到硬盤了,阿飛長舒了一口氣,再也不用擔心斷電了。
突然,一個巨大的東西從遠處飛了過來,在阿飛眼前劃出了一束電子流,剎那間,四周全被照亮。
這時,阿飛看到了剛才那聲音的源頭···
本文轉(zhuǎn)載自微信公眾號「編程技術宇宙」,可以通過以下二維碼關注。轉(zhuǎn)載本文請聯(lián)系編程技術宇宙公眾號。