SSD為什么不能當(dāng)做內(nèi)存用?
為什么 SSD 不能當(dāng)做內(nèi)存用?在回答這個(gè)問(wèn)題之前我們先去某東上逛一圈。
圖片來(lái)自 Pexels
輸入“SSD”隨便找到銷(xiāo)量比較高的一項(xiàng),在商品詳情頁(yè)上有這樣的描述:
注意圖片上顯示的規(guī)格,讀速高達(dá) 3.5GB/s,真實(shí)情況下稍差點(diǎn)(尤其是隨機(jī)讀寫(xiě)),但也不會(huì)很離譜,可以看到,這個(gè)速度是非??斓模久雮鞲咔咫娪暗乃?。
那么問(wèn)題來(lái)了,既然現(xiàn)在的 SSD 讀取速度這么快,那么可以把 SSD 當(dāng)做內(nèi)存來(lái)用嗎?
要想回答這個(gè)問(wèn)題,我們先來(lái)看看內(nèi)存的速度。
速度差異
當(dāng)前采用第四代 DDR 技術(shù)的內(nèi)存,其帶寬基本上能到 20GB-30GB 左右。怎么樣,即使 SSD 的速度很快,但和內(nèi)存相比還是有一個(gè)數(shù)量級(jí)的差異。
也就是說(shuō),如果真的當(dāng)把 SSD 當(dāng)內(nèi)存使用,那么你的計(jì)算機(jī)可能會(huì)比當(dāng)前慢上 10 倍左右。
如果站在用戶(hù)的角度你覺(jué)得慢點(diǎn)無(wú)所謂,那么接下來(lái)我們從計(jì)算機(jī)以及操作系統(tǒng)的角度來(lái)看看這樣可不可行。
新建一個(gè)文件試試
如果你現(xiàn)在在計(jì)算機(jī)旁邊可以進(jìn)行一個(gè)小實(shí)驗(yàn),以下以我的 Windows 10 機(jī)器為例。
新建一個(gè)文本文件,隨便寫(xiě)點(diǎn)什么東西,然后右鍵打開(kāi)屬性,你會(huì)看到:
這個(gè)文件大小本身只有 816 字節(jié),但卻占據(jù)了 4KB 的空間。讓我們?cè)偻@個(gè)文件里加些內(nèi)容,再看一下:
此時(shí)內(nèi)容的大小是 5.73KB,占據(jù)的空間卻來(lái)到了 8KB。這說(shuō)明什么呢?很簡(jiǎn)單,這說(shuō)明文件大小是按照塊來(lái)分配的,但這又能說(shuō)明什么問(wèn)題呢?
訪問(wèn)內(nèi)存與訪問(wèn)硬盤(pán)的區(qū)別
要知道內(nèi)存的尋址粒度是 byte 級(jí)別的,也就是說(shuō)每個(gè)字節(jié)都有它的內(nèi)存地址,CPU 可以直接通過(guò)這個(gè)地址獲取到相應(yīng)的內(nèi)容。
但對(duì)于 SSD 來(lái)說(shuō)就不是這樣了,從上面的實(shí)驗(yàn)也可以看到,其實(shí) SSD 是以塊的粒度來(lái)管理數(shù)據(jù)的,至于塊的大小各有差異,這不是重點(diǎn)。
這里的重點(diǎn)是:CPU 沒(méi)有辦法直接訪問(wèn)文件中某個(gè)特定的字節(jié)。
CPU 沒(méi)有辦法直接訪問(wèn)存儲(chǔ)在 SSD 上的任何數(shù)據(jù)。那么 CPU 是怎么訪問(wèn)文件內(nèi)容的呢?
文件系統(tǒng)來(lái)幫忙
一切皆文件這個(gè)概念想必大家都不陌生吧。在現(xiàn)代操作中,我們以文件的形式來(lái)使用 SSD,這繞不開(kāi)操作系統(tǒng)中的文件系統(tǒng)。
文件系統(tǒng)把 SSD 上的數(shù)據(jù)以文件的形式呈現(xiàn)出來(lái),程序直接操作文件,讀寫(xiě)文件時(shí)把請(qǐng)求發(fā)送給文件系統(tǒng),文件系統(tǒng)把請(qǐng)求路由給 SSD,SSD 處理完請(qǐng)求后數(shù)據(jù)會(huì)被 Copy 到相應(yīng)進(jìn)程的內(nèi)存中,此后程序直接操作內(nèi)存。
完整的過(guò)程以及文件系統(tǒng)的實(shí)現(xiàn)可以寫(xiě)成一本書(shū)的完整一章!
從這里我們可以看出,CPU 沒(méi)有辦法像訪問(wèn)內(nèi)存那樣直接按照字節(jié)粒度去 SSD 中尋址,CPU 訪問(wèn) SSD(磁盤(pán))通常需要借助文件系統(tǒng)。
當(dāng)然,我們也有辦法繞開(kāi)文件系統(tǒng),但 CPU 依然無(wú)法直接訪問(wèn) SSD(磁盤(pán))中的某個(gè)字節(jié)。
正是因?yàn)?CPU 無(wú)法直接按照字節(jié)粒度去訪問(wèn) SSD,因此 CPU 無(wú)法脫離內(nèi)存直接在 SSD 中運(yùn)行你寫(xiě)的程序。
操作系統(tǒng)在把 SSD 當(dāng)內(nèi)存用
當(dāng)然在這里還要插個(gè)題外話,盡管操作系統(tǒng)不能把 SSD 當(dāng)內(nèi)存來(lái)用,但實(shí)際上操作系統(tǒng)在間接把你的 SSD 當(dāng)內(nèi)存來(lái)用。
現(xiàn)代操作系統(tǒng)會(huì)自動(dòng)在空閑內(nèi)存中緩存 SSD(磁盤(pán))數(shù)據(jù)。
當(dāng)你首次讀取文件時(shí),這次讀請(qǐng)求的確需要經(jīng)過(guò)慢吞吞的 SSD(磁盤(pán))來(lái)處理,但此后這塊數(shù)據(jù)就被緩存在了內(nèi)存當(dāng)中,下次再訪問(wèn)這塊數(shù)據(jù)時(shí)就不用訪問(wèn) SSD(磁盤(pán))了。
而如果你寫(xiě)入數(shù)據(jù),一般來(lái)說(shuō)也是寫(xiě)到內(nèi)存,稍后會(huì)有一個(gè)任務(wù)把內(nèi)存中的數(shù)據(jù)寫(xiě)入磁盤(pán)。
因此從這里我們可以看出,現(xiàn)代操作系統(tǒng)基本上是在把 SSD 當(dāng)內(nèi)存來(lái)用,更不用提磁盤(pán)交換空間,是不是很聰明。
OK,這個(gè)題外話就到這里。讓我們回到原問(wèn)題來(lái)。
虛擬內(nèi)存
現(xiàn)代操作系統(tǒng)的內(nèi)存管理都采用虛擬內(nèi)存,這會(huì)帶來(lái)一個(gè)問(wèn)題。
對(duì)于 32 位操作系統(tǒng)來(lái)說(shuō),其最大尋址范圍只有 4G,也就是說(shuō)如果你把 SSD 當(dāng)做內(nèi)存,即使 SSD 有 1T,那么操作系統(tǒng)真正能用到的也只有 4G,剩下的就都浪費(fèi)掉了。
因此,現(xiàn)代操作系統(tǒng)對(duì)內(nèi)存的管理方式也無(wú)法讓我們把 SSD 當(dāng)內(nèi)用,除非修改操作系統(tǒng)。
當(dāng)然,對(duì)于 64 位操作系統(tǒng)則不存在這個(gè)問(wèn)題,因?yàn)?64 位操作系統(tǒng)可尋址空間足夠大,盡管這個(gè)空間足夠可觀也需要意識(shí)到這是有上限的。
使用壽命
SSD 的制造原理決定了這類(lèi)存儲(chǔ)設(shè)備是有固定使用壽命的。
你會(huì)發(fā)現(xiàn) SSD 這貨就和車(chē)一樣,當(dāng)跑出一定里程后就會(huì)出問(wèn)題,在 SSD 中的里程數(shù)就是所謂的總寫(xiě)入字節(jié),TBW,全稱(chēng)是 Max Terabytes Written,最多能寫(xiě)多少 TB,以下是某種型號(hào)的 SSD 其 TBW 規(guī)格。
一般來(lái)說(shuō)普通的 SSD 其 TBW 在幾百 TB,也就是說(shuō)如果你的 SSD 寫(xiě)入上百 TB,那么很可能就要報(bào)廢了。
有的同學(xué)可能覺(jué)得這使用壽命也太短了吧,但實(shí)際上作為普通用戶(hù),你的電腦不會(huì)有那么頻繁的寫(xiě) SSD 場(chǎng)景,每天寫(xiě)磁盤(pán)的量應(yīng)該會(huì)很小,當(dāng)然頻繁下小電影除外,因此作為普通用戶(hù)你可以不用在意 SSD 的使用壽命問(wèn)題。
但就像剛才說(shuō)的,SSD 畢竟是有 TBW 這個(gè)限制的,內(nèi)存則沒(méi)有這個(gè)問(wèn)題。因此如果你把 SSD 當(dāng)內(nèi)存用的話,相信很快你的 SSD 就會(huì)被 CPU 寫(xiě)死。
展望未來(lái)
受限于當(dāng)代的存儲(chǔ)設(shè)備制造技術(shù),我們還沒(méi)有辦法直接把 SSD 當(dāng)做內(nèi)存來(lái)用,我們的各種軟件包括操作系統(tǒng)、文件系統(tǒng)以及各種硬件包括 CPU 等都沒(méi)有做好把 SSD 當(dāng)做內(nèi)存來(lái)用的準(zhǔn)備。
但隨著技術(shù)的進(jìn)步,這一點(diǎn)未來(lái)可能會(huì)有改觀。Intel 已經(jīng)發(fā)布了一種存儲(chǔ)設(shè)備,該設(shè)備就像 SSD,但同時(shí)又可以支持像內(nèi)存那樣隨機(jī)尋址。
也許在未來(lái)我們的內(nèi)存也可以像 SSD 那樣,即使斷電內(nèi)容也不會(huì)丟失,那樣的話你的電腦就沒(méi)有“關(guān)機(jī)”這種操作了,電腦加電后根本就沒(méi)有“啟動(dòng)”一說(shuō),是不是很有趣。
如果內(nèi)存和磁盤(pán)一樣斷電后也不丟內(nèi)容,那么會(huì)帶來(lái)什么有趣的新功能呢?
總結(jié)
SSD 能否當(dāng)做內(nèi)存來(lái)用?這絕不是一個(gè)簡(jiǎn)單的問(wèn)題,這涉及到 CPU、操作系統(tǒng)、文件系統(tǒng)、存儲(chǔ)設(shè)備制造原理等方方面面的問(wèn)題,你需要對(duì)計(jì)算機(jī)系統(tǒng)有透徹的理解才能回答好這個(gè)問(wèn)題。
作者:碼農(nóng)的荒島求生
編輯:陶家龍
出處:轉(zhuǎn)載自公眾號(hào)碼農(nóng)的荒島求生(ID:escape-it)
























 
 
 










 
 
 
 