一段程序的奇妙旅行
神經質硬盤
我這個程序一直在硬盤上睡大覺,這個傳統的機械硬盤容量超大,但是卻非常脆弱。
每當他移動磁頭,讀取數據的時候,他就在那里不斷祈禱:千萬別有什么大的震動啊。
時間久了,他就變得神神叨叨的,這也不能怪他,因為他那鋁合金制成的盤片在高速旋轉,每分鐘要轉幾千甚至上萬圈,磁頭懸浮在盤片上方滑來滑去,經常需要在毫秒級的時間內滑到指定位置,磁頭和盤片之間的距離是以納米來計算的,實在是太近了,一不小心就會出錯。
多個盤片摞在一起(當然對應多個磁頭),被封裝在硬盤內,在一塵不染的環境內高速旋轉。
在盤片上涂著薄薄的一層磁性材料, 這些磁性材料像無數個小磁鐵,都有南極和北極。讓人驚奇的是,所有的數據,都是由這些“小磁鐵”來存儲。
硬盤最常做的事情就是用磁頭去讀寫這些“小磁鐵”,看看是南極(S)還是北極(N),由此來確定是0還是1。
所有的數據在硬盤中只能以二進制的方式(0或者1)來存儲,包括我這段程序。
(圖片來源:https://www.computerhope.com/jargon/h/harddriv.htm,這是一種垂直的數據記錄方式,還有一種是水平的方式)
健忘癥患者內存
整天窩在硬盤上實在是沒什么意思,我挺期待出去走走,比如到內存去逛逛。 另外一段程序給我說:“你要小心,到了內存,你的存儲形式就要發生變化了。”
“什么變化?”
“內存是個純電子的結構,沒有機械部分,又穩定又快!”
“這不挺好嘛!” 我說道。
“內存中就不是‘小磁鐵’了,他是由一個個電容+訪問晶體管組成。每個電容可以存儲1bit的數據,即0或者1。”
(來源: https://www.youtube.com/watch?v=PVad0c2cljo)
“太好了,我正好想去體驗下不同的人生!” 我說。
“你要小心,這些電容中的電荷過一段時間就會丟失,電勢不足,數據也就丟失了。因此內存得周期性地讀出、然后重寫來刷新電容的電荷,這樣才能把數據給保持住。可悲的是這個刷新的操作一直要持續到數據改變或者斷電。這就是為什么內存被大家稱為‘健忘者’的原因。”
我絲毫不擔心,人類既然這么設計,肯定能保證數據的完整性。
(碼農翻身注:RAM分為兩類,一類是靜態RAM,一類是動態RAM,前者不用刷新就能保存數據,但是造價高,只在高速緩存中使用。)
CPU阿甘
終于有一天,CPU阿甘又對DMA控制器發出了指令,讓他從硬盤把我這個程序搬到內存。
他總是這樣,從來不親力親為,總是把任務交代給DMA以后,自己就忙著干別的事情去了。
硬盤和內存剛開始還不理解,為什么要這么做呢?后來他們看到了阿甘那令人咂舌的運算速度,比內存快幾百倍,比硬盤快幾十萬倍。 他們倆就明白了,CPU阿甘如果等著他們去搬運數據,那得等好幾個月才行。
硬盤找到了我這段程序,判斷是南極還是北極,他們是 ......SNNSSSSN......,也就是......01100001......。
DMA控制器把它們搬進入了內存,我搖身一變,成為了電容中的電荷。
內存則開始辛辛苦苦,不斷地刷新這些電容,防止數據丟失。
當然,我們這些二進制數據不會在內存的電容中呆著不走,我們馬上就通過總線奔向下一個目的地:顯卡。
顯卡
***次來到顯卡這里,我發現簡直就是一個獨立的王國:有自己的GPU, 顯存,甚至還有一個BIOS。
就拿GPU來說吧,居然像阿甘一樣配備了高級裝備:風扇! 足能顯出其高貴的地位。 這也沒辦法,人家要渲染圖形圖像,必須執行復雜的數學和幾何運算,發熱量大嘛。
由于圖形圖像不是一下子就能生成的,需要有個地方暫存數據,于是顯卡就裝備了顯存。
如果顯卡有獨立的顯存還行,有些集成的顯卡居然和內存來爭奪地盤,內存還不得不劃出來一塊兒給他,實在是讓人無語。
對了,顯存中還有一塊區域叫做“幀緩沖區”,這是圖像傳輸的一個關鍵區域,顯卡所生成的一幀畫面會先被寫入幀緩沖區。而一臺 72Hz 的顯示器每秒能夠顯示 72 幅畫面,也就是說每 1/72 秒(當顯示器刷新完一幅畫面時),顯卡就需要把緩沖區的內容通過特定接口發給顯示器。
如果接口是數字信號,那就比較簡單,直接把顯存的數據輸出即可。
如果接口不幸是模擬的(比如VGA),那顯卡還需要完成一個額外的步驟:數模轉換。
我比較好奇,問道:“為什么要做數模轉換?”
顯卡說:“模擬信號你懂不懂?不懂啊,舉個例子,假設顯示器所要求的電壓的變化是[100V ,200V],你不可能從100V一下子跳到200V吧,肯定是連續變化的,這就是模擬的信號。我們整天面對的都是0和1,都是數字信號。肯定需要做數字<->模擬轉換才行啊。”
顯卡一邊說,一邊把我這段程序轉化成了幀緩沖區的數據,然后進行數模轉換,向顯示器發送了出去。
***,顯示器把我展示給了程序員:
【本文為51CTO專欄作者“劉欣”的原創稿件,轉載請通過作者微信公眾號coderising獲取授權】


























