在運行linux的4GB RAM系統中,3gb給用戶空間,1gb給內核,這是否意味着即使內核使用50MB,用戶空間不足,用戶也不能使用內核空間?如果不是,爲什麼?爲什麼不能將他們的頁面映射到用戶空間?linux內核和用戶地址空間
-1
A
回答
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中需要重新編譯)。
相關問題
- 1. Linux內核空間和用戶空間
- 2. linux內核的內核地址空間的佈局是什麼?
- 3. 從內核空間傳遞地址到用戶空間
- 4. Linux用戶空間和內核空間調度
- 5. 使用qemu for i386 linux內核的地址空間標識符
- 6. 64位Linux內核佔用了哪個地址空間?
- 7. Linux內核:從內核空間調用用戶空間的回調函數
- 8. 處理虛擬地址空間和內核地址空間?怎麼樣?
- 9. 內存映射文件被裝入用戶態地址空間或進程內核地址空間?
- 10. Linux ioctl命令在用戶空間和內核空間之間變化
- 11. Linux的跨定時內核和用戶空間
- 12. 對於arm Linux,用戶空間中的線程是否可以訪問內核空間的虛擬地址?
- 13. 爲什麼OS地址空間必須拆分用戶空間和內核空間?
- 14. 將內核空間虛擬地址映射到Windows 10驅動程序中的用戶空間虛擬地址
- 15. 內存分配內核空間和用戶空間進程
- 16. UNIX,Linux和Windows的進程內存限制和地址空間
- 17. 如何從Linux內核訪問用戶空間內存?
- 18. 檢查是否可以從linux內核空間訪問內存地址
- 19. 內核空間和用戶空間的時間差
- 20. 用戶空間和內核空間崩潰之間的區別
- 21. 內核/用戶地址空間之間共享的無鎖隊列
- 22. 4GB(VM)地址空間如何使用,而交換臺從/到用戶空間到內核空間
- 23. Linux內核 - 從用戶空間停止正在運行的內核定時器
- 24. 用戶內核地址分區
- 25. 在用戶空間和內核空間上執行進程
- 26. Netlink用戶空間和內核空間通信
- 27. 在內核空間和用戶空間中工作
- 28. 內核空間和用戶空間佈局
- 29. 如何從Linux內核空間獲取用戶名
- 30. 如何將Linux內核緩衝區映射到用戶空間?
好像你在混淆虛擬空間和物理空間 – tristan
這意味着每個用戶空間進程都有3GB的*虛擬內存空間*。一個用戶空間進程可映射2GB內存,另一個用戶空間進程可使用所有可用物理內存映射另一個(2GB至50MB)內存。 – Peter
該死的,沒錯,我混淆了這兩個,但現在出現了一個新問題:爲什麼?每個流程都有自己的VAS權利?爲什麼它限制爲3GB? –