2014-10-11 20 views
2

在32位Linux中,用戶空間爲3G,內核空間爲1G。從理論上講,內核和用戶可以佔用4G地址空間,當他們訪問地址時,他們可以通過他們的頁表訪問。 是可行的或爲什麼它無法執行?爲什麼OS地址空間必須拆分用戶空間和內核空間?

+0

StackOverflow不適用於有關計算機體系結構和操作系統設計的一般問題。這是針對實際的編程問題。 – Barmar 2014-10-11 03:25:28

回答

2

它大大簡化了內核與用戶共享地址空間。考慮一個系統調用,它希望將調用者提供的數據複製到內核緩衝區中。如果他們每一個都有自己的頁表,它必須切換從呼叫者的緩衝區中讀取一個字並將其寫入到內核緩衝區之間的頁表:

while (i < caller_buffer_length) { 
    switch_to_user_pt(); 
    register = caller_buffer[i]; 
    switch_to_kernel_pt(); 
    kernel_buffer[i] = register; 
    i++; 
} 

如果他們在相同的地址空間,它可以簡單地使用memcpy()

+1

雖然注意到內核具有特殊的用於處理用戶空間的memcpy函數,以防止惡意用戶空間生成的指向內核地址的指針以及分段錯誤。 – o11c 2014-10-11 04:11:19

+0

@ o11c誠然,但如果有單獨的地址空間,那麼這個特殊功能就必須寫在我的答案中。 – Barmar 2014-10-11 04:14:32

相關問題