2014-01-16 184 views
-1

在運行linux的4GB RAM系統中,3gb給用戶空間,1gb給內核,這是否意味着即使內核使用50MB,用戶空間不足,用戶也不能使用內核空間?如果不是,爲什麼?爲什麼不能將他們的頁面映射到用戶空間?linux內核和用戶地址空間

+1

好像你在混淆虛擬空間和物理空間 – tristan

+0

這意味着每個用戶空間進程都有3GB的*虛擬內存空間*。一個用戶空間進程可映射2GB內存,另一個用戶空間進程可使用所有可用物理內存映射另一個(2GB至50MB)內存。 – Peter

+0

該死的,沒錯,我混淆了這兩個,但現在出現了一個新問題:爲什麼?每個流程都有自己的VAS權利?爲什麼它限制爲3GB? –

回答

2

3GB/1GB拆分進程空間是固定的。無論實際使用多少RAM,都無法更改它。

4

3/1分離指的是虛擬內存。但是,虛擬內存很少。這意味着即使「紙上」有1 GB,但實際上使用的LOT小於此值。在可能的情況下,「虛擬」內存由物理頁面支持(也就是說,如果您的虛擬內存佔用空間爲50 MB,則使用50 MB物理內存),直到沒有更多物理內存爲止如果你A)溢出交換或B)系統遇到內存不足的情況,並以困難的方式釋放內存 - 通過殺死進程。

它變得更加複雜。虛擬內存在實際使用之前不會真正使用(提交)。這意味着當你全部使用內存的時候,你會得到一個「IOU」或「承諾」的內存,但是當你真正使用內存的時候,內存只會被消耗掉,就像在寫內存的時候一樣。然而,總的來說,你是正確的,因爲在內核和用戶模式之間存在隔離 - 在硬件層面上。換句話說,在4GB可尋址(假設爲32位)中,最高1GB(即使它在您的地址空間中)無法訪問,實際上屬於內核。 (4GB的限制來自32位指針 - 對於64位,它有效地爲48,這意味着256TB,btw,128TB用戶,128TB內核)。而且,這個1GB的內核空間在其他進程中也是一樣的。因此,當您「調用內核」(即系統調用)時,您處於哪個進程並不重要,最終會在所有進程之間共享的最高1GB內。

此外,關鍵是1GB並未完全使用。內核的實際內存空間要小很多 - 幾十MB。從理論上講,內核可以使用UP到1GB,但假設它可以通過RAM或(很少)交換進行備份。你可以看看/ proc/meminfo。至於上面的答案,關於改變3/1 - 它實際上可以改變(在Windows中,它就像boot.ini中的內核命令行選項一樣簡單,在Linux中需要重新編譯)。

相關問題