2012-10-05 41 views
0

1.每個進程都有自己的虛擬地址空間,內核也有自己的內核,內核是一堆進程,這是否意味着每個內核進程都有自己的虛擬地址空間?關於內核空間的問題

2.在32位架構系統中,每個進程都有4GB的虛擬地址空間,內核空間的大小是多少?

用戶空間的3.0x00000000-0xffffffff被內核佔用,但它們是不同的空間,這是如何實現的?

4.爲什麼內核需要將東西拷貝到自己的空間中?

回答

3

每個進程都有自己的虛擬地址空間和內核都有自己的過了,內核是一堆的過程,這是否意味着每一個內核進程都有自己的虛擬地址空間?

內核也許沒有什麼特殊內核進程。它甚至可能沒有特殊的內核線程。例如,MSDOS中沒有任何操作系統,但是它基本上是一個操作系統。它所擁有的只是ISR,爲各種事物(例如文件系統驅動程序,內存管理器等)提供了大量的內部代碼,以及用於應用程序的系統調用API。

操作系統可以具有由用戶進程提供的一些功能(或者,IOW,委託給)用戶進程。這是微內核的想法。與常規流程相比,這些專用流程可能具有額外的權限。

在這種情況下,內核是一個很值得用戶設定的流程子程序以某種方式調用的(DOS是正義的,但沒有流程,有一切一個地址空間)。內核仍然必須能夠被所有人訪問,因此它駐留的內存在所有地址空間中共享(例如,通過頁面轉換)。每個內核都有這樣的共同/共享部分。

在32位架構的系統中,每個進程都有一個4GB的虛擬地址空間,這有什麼的內核空間的大小?

這取決於CPU和內核實現的。 32位Windows通常爲地址空間的用戶和內核部分保留2GB。如果需要的話,這可能會被覆蓋爲3GB的用戶和1GB的內核。

0x00000000-0xffffffff用戶空間被內核佔用,但它們是不同的空間,這是如何實現的?

這取決於CPU的MMU。使用x86上的頁表,您可以組織整個虛擬地址空間,以便在進程/線程切換期間,其中只有一部分映射改變爲物理內存(這是用戶部分),而另一部分仍然是相同(這是共享的內核部分)。

從CPU的角度來看,通常只有一個虛擬地址空間。但通常將其部件稱爲單獨的用戶和內核虛擬地址空間。

爲什麼內核需要的東西拷貝到自己的空間?

它是如何將採取從流程的輸入,例如系統調用參數?但最重要的是,如果它需要異步執行一些長時間的輸入處理,只需要輸入,讓調用者繼續,然後在工作完成時發信號給調用者呢?調用進程可以自由修改或釋放剛剛傳遞給內核的數據緩衝區。內核可能不會非常「高興」地觀察它正在改變或消失的數據。如果進程中有多個線程,即使使用同步調用也會發生此問題,因爲在內核正在使用它時,另一個線程可以更改緩衝區。

將數據複製或保留在地址空間的內核部分還有其他原因。

+0

好工作!謝謝 – user1657564