
另一種詢問方式是:
」為什麼硬碟、筆式驅動器和 SSD 需要分區方案,而 RAM 不需要?」
只是想更好地理解所有記憶事物是如何運作的。
答案1
嗯,問題有點複雜。
首先,問題中表達的假設是錯誤的。硬碟和快閃記憶體其實根本不需要分割區!您只需將原始資料寫入硬碟,然後將其讀回即可正常運作。即使在今天,一些相對簡單的電腦系統也沒有使用分區,因為沒有必要使用它們。例如,我的辦公桌上現在有一台基於 ATmega 162 微控制器的計算機,它使用閃存,沒有分區。
基本上,分區的作用是分離系統設計者之間的勞動職責。在我的 162 上,我需要知道每一位資料儲存在哪裡以及每個快閃記憶體單元被存取了多少次,以便我可以實現磨損均衡。為此,我甚至不需要文件。然而問題是我的微型計算機只有 16 KiB 的閃存,這個數量可以透過手動和原始碼註解來管理。這就像一張只有一個抽屜的桌子。我可以把任何東西放在那裡,並且很容易夠到和取用。
在大型電腦系統(例如今天的桌上型電腦)上,軟體是數千名程式設計師單獨工作的成果。他們需要有某種儲存資料的方式,這就是我們需要文件和分區的原因。當我們擁有它們時,程式設計師可以只專注於他需要處理的數據,而無需擔心損壞其他數據。他可以讓從事檔案系統程式設計的程式設計師不用擔心資料的實體儲存。繼續我的抽屜範例,這就像擁有一個倉庫系統,如果您有數十萬種庫存商品,則試圖找到一件商品。因此,雖然您可以伸手進入簡單的抽屜並拿一支鉛筆,例如在倉庫箱子中,但鉛筆將位於倉庫 3,P 區,貨架 273,第 3 層,第 5 號盒子。
我希望我更清楚地說明了為什麼我們使用分區,即使我們實際上不需要它們。
現在轉移到 RAM。 RAM 中沒有分區的說法也是不正確的。我們使用分區的基本原因是組織,RAM 也是組織的。然而,就 RAM 而言,系統核心決定每一位資訊的去向,並追蹤空間使用情況。
讓我們比較一下我的簡單 ATmega 162 上的程式如何運作以及 Windows 等現代作業系統上的程式如何運作。在 162 上,程式使用將用來儲存資料的記憶體位置的位址進行預先編程。由於162只有一個程序,所以我不需要擔心覆蓋另一個程式使用的資料或記憶體分配。我可以將我想要的任何內容寫入每個儲存單元,並且在電腦運行時它將保留在那裡。
另一方面,在 Windows 上,我們可以同時運行大量程序,並且所有程式都會在記憶體中寫入和讀取資料。也就是說,我們不能允許單一程式直接存取記憶體單元(事實上,程式設計師必須知道如何存取該特定電腦上的記憶體以及該電腦有多少 RAM 等等。此時我們得到回到數千與一名程式員的討論。相反,當每個程式啟動時,內核為其分配內存並為該程式分配內存,它看起來好像是計算機上運行的唯一程式。核心的作用是確保我們的程式不會嘗試讀取或寫入分配給其他程式的內存,並且不會嘗試執行標記為資料的內存,並且不會使整個系統陷入危險。因此基本上在 Windows 和許多其他現代作業系統上,每個程式都有自己的 RAM 分區。值得注意的是,在 32 位元系統上,每個程式最多只能佔用 2 GiB 的 RAM,因為這是「分區」大小的上限。
我想在這裡說一點題外話。有些程式會受到 RAM 分區的影響。例如,有一些名為「訓練者」的程式允許在電腦遊戲中作弊。他們的工作方式是找到遊戲儲存資料(例如生命數或健康狀況)的記憶體位置,然後他們將直接存取資料並更改它。另一方面,我們也遇到了病毒,它們透過嘗試存取重要係統服務使用的記憶體並破壞它來進行邪惡的活動。
另一件值得提出的事情是頁面文件或交換分區。對於編寫應用程式的程式設計師來說,程式是在頁面檔案中還是在 RAM 中並不重要,因為核心會處理這一點。在我的 ATmega 162 上,情況有點複雜。當我需要使用比可用更多的 RAM 時,我必須先手動檢測我用完所有 RAM 的情況,之後我需要手動將資料從 RAM 複製到閃存,釋放 RAM,將其用於我想要的任何用途需要使用它時,再次釋放它,將資料從快閃記憶體移至RAM,然後釋放快閃記憶體中佔用的空間。在桌上型電腦上,程式甚至無法查看它是否已交換到磁碟上然後移回 RAM 中。
一件更有趣的事情是性能。讓我們回到抽屜和倉庫的例子。讓我們從倉庫中取出所有物品並將它們堆成一堆。因此,如果我們需要從抽屜裡拿一支鉛筆,我們只需打開抽屜並拿走鉛筆即可。如果我們需要從一堆其他數千支鉛筆、筆記本、尺、糖果、橡皮擦等中取出一支特定的鉛筆,我們將不得不花費大量時間來尋找它。與在組織良好的倉庫中找到同一支鉛筆所需的時間相比,這個時間(在平均情況下)要長得多。另一方面,在有組織的倉庫中找到鉛筆所需的時間比在抽屜中找到鉛筆所需的時間長得多。因此,有些方法適用於少量數據,有些方法適用於大量數據。檔案系統透過以邏輯方式將資料儲存在磁碟上(可以輕鬆找到每個單獨的資料)來提高效能。一些文件系統還提供其他好處。對於 JFFS2(專為快閃記憶體設計的檔案系統)而言,檔案系統實現了磨損均衡,因此使用者或設計的硬體無需這樣做。
另一個有趣的事情是我們也可以使用 RAM 的標準檔案系統!有些程式會佔用 RAM 並像檔案系統一樣組織它,並允許程式像使用磁碟空間一樣使用它。
一些有趣的連結: 維基百科記憶體管理文章描述 RAM 中的資料如何以及為何分區。 作業系統篇、記憶體篇解釋了為什麼我們需要記憶體分段、虛擬記憶體分頁等。
答案2
簡單來說,RAM 確實有一個佈局方案,但它被硬體抽象化掉了。
在內部,RAM 被排列為按行和列排列的「儲存單元」矩陣,就像電子表格一樣。每個儲存單元用於儲存一位數據,可以透過指示資料的行和列位置(或位址)來即時檢索該資料。
這與長期儲存如何運作的基本概念沒有太大區別,檔案系統和分割區映射只是一個抽象,以防止您直接存取原始磁碟。
答案3
為硬碟建立了分割區方案,以便您可以安裝多個不相容的作業系統,這些作業系統可以在同一碟片的不同部分中共存。筆式驅動器和 SSD 驅動器繼承了它們的老表弟硬碟的方案。
對於個人電腦來說,RAM 通常一次僅由一個作業系統使用,因此沒有針對它的分割方案。但即便如此,在一些大型電腦(大型主機)中,也存在 RAM 的分區方案。
答案4
RAM 不需要分區,因為它是按頁組織的,而且這些頁是動態 (MMU) 結構的,無需預先分配區域。然而,當硬體組件(主要是一些顯示卡,但也可以是任何東西)在作業系統啟動之前保留一部分實體 RAM 時,RAM 會發生某種臨時分區。
實際上,硬碟、筆式驅動器或 SSD 也不真正需要分區方案,或至少不需要。仍然有一些不可避免的組件,例如BIOS(或等效固件)和引導程序,需要分區表才能正常工作,但由於操作系統(更準確地說是文件系統和捲管理器)設計限制,才需要分區。
ZFS 池概念證明,即使您想要引導多個作業系統並且這些作業系統需要多個磁碟區和檔案系統,也不需要分割區。
僅當磁碟機由一個或多個不支援 ZFS(或假設的等效項)的作業系統使用時才需要分割區。