2014-10-09 97 views
0

試圖理解用戶空間和內核空間之間的關係。 用戶空間程序使用系統調用與內核進行交互。如果我有一個程序從文件中讀取數據。然後執行用戶空間中的二進制文件以及內核空間。難道我們有兩個進程在內核上執行一個進程,另一個進程在用戶空間執行,或者它是在用戶和內核上運行的單個進程。在用戶空間和內核空間上執行進程

回答

1

只有相同的過程。但該流程的基礎操作是在user modekernel mode中運行。

現代處理器體系結構通常允許CPU以至少兩種不同 模式操作:user modekernel mode(有時也被稱爲supervisor mode)。

硬件指令允許從一種模式切換到另一種模式。相應地,虛擬內存的區域可以標記爲user spacekernel space的一部分。在user mode中運行時,CPU只能訪問標記爲user space中的內存;嘗試訪問kernel space中的內存會導致硬件異常。在kernel mode中運行時,CPU可以訪問用戶和內核內存空間。

某些操作只能在處理器在kernel mode中運行時執行。例子包括執行暫停指令來停止系統,訪問內存管理硬件以及啓動設備I/O操作。通過利用這種硬件設計將操作系統置於內核空間中,操作系統實施者可以確保用戶進程不能訪問內核的指令和數據結構,或者執行會對操作系統的操作產生不利影響的操作系統。

內核模式:

模式,所有的內核程序執行(不同的驅動程序)。它可以訪問每個資源和底層硬件。任何CPU指令都可以執行,並且每個存儲器地址都可以被訪問。此模式被保留用於其上的最低水平

用戶模式運行驅動程序:

模式,所有的用戶程序執行。它無法訪問RAM和硬件。原因是因爲如果所有程序都以內核模式運行,它們將能夠覆蓋對方的內存。如果它需要訪問任何這些功能 - 它會調用底層API。除了系統進程在用戶模式下運行外,每個進程都由Windows啓動。

交換的B/W內核和用戶模式:

從用戶模式到內核模式的切換不是由CPU自動完成。 CPU被中斷(定時器,鍵盤,I/O)中斷。當發生中斷時,CPU停止執行當前正在運行的程序,切換到內核模式,執行中斷處理程序。該處理程序保存CPU的狀態,執行其操作,恢復狀態並返回到用戶模式。

http://en.wikibooks.org/wiki/Windows_Programming/User_Mode_vs_Kernel_Mode

http://en.wikipedia.org/wiki/Direct_memory_access

http://en.wikipedia.org/wiki/Interrupt_request

+0

因此,我們必須當一個進程運行時創建了兩個棧。一個在用戶空間,另一個在內核空間。用戶模式切換到內核模式由中斷x80完成。如何將用戶級別的堆棧內容傳遞到內核空間。系統調用對此負責? 。但是我們的名字是在用戶空間進行數字映射,並且在內核空間[2 - sys_fork()]處有名稱映射的名稱爲[fork() - 2]。 – Angus 2014-10-09 05:10:27

+0

如何將用戶級別的內容傳遞給內核空間。例如:將文件從用戶級別打開到內核級別的流程是什麼。 – Angus 2014-10-09 05:15:03

+0

請參閱http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-3.html – 2014-10-09 05:23:11

相關問題