簡體   English   中英

linux內核和用戶地址空間

[英]linux kernel and user address spaces

在運行linux的4GB RAM系統中,給用戶空間分配了3gb,給內核分配了1gb,這是否意味着即使內核使用50MB且用戶空間不足,用戶也無法使用內核空間? 如果沒有,為什么? 為什么Linux無法將其頁面映射到用戶空間?

3/1分隔指虛擬內存。 但是,虛擬內存很少。 這意味着,即使有“紙上” 1 GB的空間,實際上也要使用比這少的很多。 只要有可能,“虛擬”內存都由物理頁支持(這意味着,如果您的虛擬內存占用量為50MB,則您正在使用50MB的物理內存),直到沒有更多的物理內存為止。如果您要么A)溢出進行交換,要么B)系統遇到內存不足的情況並以艱苦的方式釋放內存-通過殺死進程。

它變得更加復雜。 直到實際使用虛擬內存后,才真正使用(承諾)虛擬內存。 這意味着當您分配內存時,您將獲得“ IOU”或“承諾”的內存,但是只有在實際使用內存時才會消耗內存,例如在其中寫入一些值。 總體而言,您是正確的,因為內核和用戶模式之間在硬件級別存在隔離。 換句話說,在4GB的可尋址空間(假設為32位)中,即使位於您的地址空間中,最高的1GB也無法訪問,並且實際上屬於內核。 (4 GB的限制源於32位指針-對於64位,實際上是48位,這意味着256TB,btw,128TB用戶,128TB內核)。 此外,內核的這1GB空間在其他進程中也相同。 因此,無論您處於哪個進程中,當您“調用內核”(即系統調用)時,最終都會獲得最高的1GB內存,該內存在所有進程之間共享。

同樣,關鍵的一點是1GB並沒有真正用完。 內核的實際內存占用量要小得多-幾十MB。 從理論上講,內核可以使用高達1GB的內存,但這是假設它可以通過RAM或(很少)交換來備份。 您可以查看/ proc / meminfo。 至於上面的答案,關於更改3/1-實際上可以更改(在Windows中,就像boot.ini中的內核命令行選項一樣簡單,在Linux中,它需要重新編譯)。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM