2011-09-01 35 views
12

這可能是一個愚蠢的問題,但它只是彈出在我的腦海。所有關於進程地址空間和虛擬內存佈局的文本都提到進程地址空間爲內核預留了空間。對於例如在32位系統上,進程地址空間爲4GB,其中1GB用於Linux內核(可能與其他操作系統不同)。爲什麼內核說在進程地址空間?

我只是想知道爲什麼當進程無法直接訪問內核時,爲什麼內核被說成是在進程地址空間中。我們爲什麼不說,內核具有比進程獨立的地址空間,爲什麼我們不能有內核本身不同的頁表是從進程的頁表分開?

+0

你能確定它描述瞭如何進程的地址空間已預留空間爲內核的一個或多個特定的網址?它當然不是普遍的;我容忍一定會出現在一個單一的過程,它不會留下1吉布爲內核使用共享存儲器的多於3吉布32位系統(不一定基於Linux)。 –

+0

我只是舉了一個例子,一些空間是爲內核預留的。具體問題對於這個問題並不重要。 – vjain27

回答

13

當過程進行系統調用,我們不需要切換頁表(從進程的地址空間頁表內核地址空間頁表)用於維修的系統調用(應該僅在內核模式下進行)。據說這是內核在進程上下文中運行。

某些不會在進程上下文中運行的內核事件將僅爲內核加載頁表。

Got it?

相關問題