2012-11-17 111 views

回答

3

用戶進程和內核在完全不同的地址空間上工作(除了內核在處理用戶進程的系統調用時必須使用的區域之外),假定可以「嘗試訪問內核空間中的虛擬地址」是無效的。

+0

我的意思是虛擬地址空間。我們知道用戶進程佔用虛擬地址空間0G-3G,而內核佔用3G-4G。也就是說,在我們自己的應用中,我們試圖直接調用內核空間中的函數而不是系統調用,會發生什麼? – davenkin

+0

@davenkin你是正確的,用戶進程只佔用前3GB,但這不是因爲內核共享相同的地址空間。每當用戶進程嘗試訪問虛擬內存中的某個位置時,內存管理器將只**查看特定於該進程的頁表。 – JosephH

+0

另一方面,內核代碼可以查找它想要的任何內存位置。例如,當內核想要在進程A中查找0x400000中的值時,它將使用進程A的頁表從內核訪問該地址。現在,如果它想要在過程B中查找0x400000中的值,它將使用過程B的頁表來訪問該地址。該用戶進程只佔用前3GB的原因是爲了避免每當內核爲每個進程切換頁表時都移動內核的位置。我希望現在更清楚。 – JosephH

相關問題