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