想象用戶空間線程(通過WinApi創建)。用戶線程(OS Windows)的內核模式堆棧是什麼?
旁邊:
- 線程環境塊
- GDI處理,OpenGL的處理
- 用戶空間的棧
- Therad內核(寄存器)
聽說其持有的堆棧內核模式 - 12 KB - x86,24 KB - x64
q1:什麼是內核堆棧的問題?
據我瞭解,當我們執行系統調用我們:
填入值,或在我們的上下文指針
啓動寄存器通過INT中斷甚至CALL(遠調用保護模式)
在這裏,我們是在內核中斷服務例程。
Q2:我覺得 OS阻止用戶線程,直到OS未完成的任務。是這樣嗎?
也許我們現在是在其中設備I/O控制管理器(如果我們發送IRP包)的一部分。也許在其他一些(如果我們決定創建信號量)。如果這段代碼是可重入的,那麼我認爲系統可以從池中獲得一個內核線程。
Q3:我認爲,內核線程共享任何用戶空間線程誰發起這一切工作。我錯了嗎?
你的第(3)步是錯誤的 - 線程沒有被阻止,它繼續運行在內核模式,使用它的內核模式堆棧。如果操作需要I/O或不能立即完成的IPC,則*線程將被阻塞。但在很多情況下,線程會自行執行請求的操作,並在完成時轉換回用戶模式。 (對於每次轉換到內核模式,要求上下文切換到另一個線程的速度要慢得多)。 –
謝謝,但對我來說,內核由4個線程(kerels數)組成,用戶空間可以由10個進程組成每個100個線程....爲什麼os需要在內核上存儲1000個內核?我認爲操作系統可以推動任務到隊列中,阻止你的線程...... – bruziuz
我在內核模式下工作,但我沒有創建線程他們....所以我不能說精確 – bruziuz