神秘消失的內存去哪了?
最近工作繁忙,周末偶有閑暇,集中回復被邀請回答的問題。其中一個問題十分有趣:題主買了8G內存,但在魯大師上看只有7.8G,懷疑是不是被騙了:
我覺得問題很典型,正試圖作答,忽然發現問題已關閉,原因是「代為完成個人任務」。多麼神奇的描述,完全讓人不知所云。Google了一下發現是有人舉報問題太簡單等等原因。
有些人往往做事不求甚解,舉報的人認為搜索一下,在別的地方看就是8G了,或者誤認為是硬碟界的「1G=1000MB」的原因。稍微懂點的可能認為被顯存佔據了。事實上,這個問題沒有那麼簡單。只有BIOS工程師有資格回答這個問題,讓我們小中見大,扮演一下神探柯南,來看一下「神秘消失」的內存去哪了?
他被騙了嗎?
最近內存漲價,是不是內存廠商把7.8G的內存當作8G內存賣,謀取暴利呢?相信知乎的大部分用戶對這個陰謀論都會莞爾一笑的。是的,不可能。看過本專欄內存系列文章的人都了解了一些內存的相關原理:
老狼:內存系列一:快速讀懂內存條標籤老狼:內存系列二:深入理解硬體原理老狼:內存系列三:內存初始化淺析內存都是由Rank、chip和bank組成。0.2G的內存連一個bank都組成不了,更別說chip了。Chip是經銷商能夠偷梁換柱的最小單位。
魯大師出問題了?
魯大師並沒有問題,只是沒有把問題標識清除。」柯南「的電腦也是8G內存,我們來看一下系統屬性怎麼說:
任務管理器呢?
這下清楚了,是有8G內存的,不過只有7.9G可用(他的例子是7.8G)。內存這麼貴,蒼蠅也是肉,0.1G去哪了呢?
微軟乾的?
是不是Windows偷偷藏起來了?明明有8G,卻只給我們用7.9G,壟斷真可惡!微軟表示很無辜,它也想用那個0.1G啊。多點總是好的,省得老往硬碟裡面倒騰。排除所有的不可能,真相只有一個!
微軟引導憤怒的群眾來到BIOS家門口。
BIOS乾的?!
在微軟出示的證據清單面前(E820表或者memory map),BIOS低下了頭,喃喃地承認了。「寶寶心裡也苦啊」,BIOS淚流滿面。BIOS開始向圍觀吃瓜群眾介紹情況。
BIOS負責內存的初始化、測試並且最後向操作系統報告內存情況,堪稱內存的總管了。總管雖然表面光鮮,但工作卻並不輕鬆,有不少相關單位都想在其中分一杯羹。為了協調各個單位,BIOS通過UMA來統一管理分配的內存:
這些相關單位包括核顯、ME等等。他們總是想要佔據內存更多空間,BIOS只能在內存中偷一些給他們用。
真的是Stolen memory啊。BIOS自己也要用內存,雖然大部分在啟動OS時都還回去了(Boot time memory),但還是留了些自用(Reserved, runtime memory)。這些部分,BIOS在最後給操作系統的交割清單中都標明要用,OS不得侵犯,否則死機啊啥的BIOS就不管了!
結論
吃瓜群眾聽的似懂非懂,好像覺得有些道理,慢慢散去了。只有一個人留了下來,那就是原來的題主。題主盯住BIOS和柯南,眼睛通紅,像要噴出火來:」為什麼柯南是7.9,我是7.8,這不公平!「。柯南悠悠的說,誰讓你的BIOS不給力呢?說著,乘題主不備,飛也似的逃了!
歡迎大家關注本專欄和用微信掃描下方二維碼加入微信公眾號"UEFIBlog",在那裡有最新的文章。同時歡迎大家給本專欄和公眾號投稿!
推薦閱讀:
※假如要黑掉越南機場並播放廣播,該如何實現呢?
※你比計算機強在哪裡?
※譚浩強《C語言程序設計》第三版怎麼樣?從零開始學會被帶偏嗎?
※如何看待不同計算機語言使用對個人編程習慣的影響?