最近在看Linux用戶態和內核態,看的是一頭霧水,現在有幾個疑問,想要問問:
1. 在網上查到,“每個用戶行程,都映射在0-3GB的用戶地址,而上層的第4GB,則是映射著內核地址”。
那么對于一個行程,內核態和用戶態是相互對立的嗎?也就是說當該行程被OS呼叫中斷,要進入內核態處理時候,該行程就從用戶態跳出,進入內核態?或者說,本來代碼是映射在0-3GB的一段,此時進入內核態,地址映射到了4GB空間了,0-3GB就沒有該行程了,在4GB的內核空間執行完后,該行程再映射回去,是這樣嗎?
2. 網上查到的”所有用戶態的行程,都對應著同樣的內核段“,也可以說就那么一個內核空間,而用戶空間是對每個用戶態行程都有的虛擬的0-3GB。假如是這樣,那么假設有100個行程,全都發生中斷要進入內核段,那是不是就發生了阻塞,處理完一個,下一個再進入內核態?那這樣回圈往復,內核態不是在不停的處理中斷,內核態本來應該做的事情呢,不做了嗎?
3. 在不處理中斷時候,內核態在干嘛?
4. 從用戶態到內核態,有好幾種方式,例如可以通過呼叫ioctl函式。當使用此函式,將對應的module寫入fd,然后內核態讀取,處理。按照這種通信方式,讓我感覺用戶態和內核態好像又是獨立的,或許所有用戶態都是通過把中斷寫入ioctl檔案,內核在不停的讀取ioctl,當讀取到,就去執行對應的要求。是這樣嗎?
綜上4點疑問,其實主要對立的就是對內核態和用戶態的性質的疑問,他們到底是對立的還是共存的?
uj5u.com熱心網友回復:
1.內核態和用戶態就是行程的的狀態,需要呼叫作業系統的操作的時候,就是內核態,呼叫用戶程式的時候就是用戶態。0-4G的虛擬地址空間都是該行程的,所以不說在運行3-4G的內核代碼,0-3G就沒有行程了,這個理解是錯誤的。2.看你是什么中斷,一般來說中斷優先級最高,你所謂100個中斷全部發生中斷,對于cpu來說也是個一個一個處理的,由于cpu很快,用戶一般是體驗不到延遲的,
3.不處理中斷,運行作業系統在監聽
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/27897.html
標籤:驅動程序開發區
上一篇:黑蘋果安裝教程
