1、幾乎所有的程序都要切換到內(nèi)核態(tài)運行再返回用戶態(tài),用中斷完成的,因為在內(nèi)核下封裝了一些東西,用戶態(tài)下只是傳入某些參數(shù)后調(diào)用內(nèi)核態(tài)下的函數(shù)罷了,
2、進(jìn)程有三態(tài)(執(zhí)行態(tài),就緒態(tài),阻塞態(tài)),cpu任何時刻都只有一個進(jìn)程在執(zhí)行,so從用戶態(tài)切換到內(nèi)核態(tài)時,用戶態(tài)下的進(jìn)程就處于阻塞或就緒態(tài)了,至于從用戶態(tài)切換到內(nèi)核態(tài)執(zhí)行哪個函數(shù)那就看你在用戶態(tài)下執(zhí)行的是什么函數(shù)了,比如在用戶態(tài)下的lseek在內(nèi)核下就是llseek了,不一樣的。
3、這問題就是linux的內(nèi)存管理了,這里就得提到三種地址(邏輯地址、線性地址、物理地址),這里我們提到的4G地址是邏輯地址,不是我們實際的物理地址,linux中一個進(jìn)程用戶占0-3G對應(yīng)的內(nèi)核占3G-4G部分
說得不是很清楚,這是比較復(fù)雜的內(nèi)容,需要從頭看起,單就這幾個問題是不能搞懂linux的,最好還是系統(tǒng)的學(xué)習(xí),不斷的重復(fù)
2、進(jìn)程有三態(tài)(執(zhí)行態(tài),就緒態(tài),阻塞態(tài)),cpu任何時刻都只有一個進(jìn)程在執(zhí)行,so從用戶態(tài)切換到內(nèi)核態(tài)時,用戶態(tài)下的進(jìn)程就處于阻塞或就緒態(tài)了,至于從用戶態(tài)切換到內(nèi)核態(tài)執(zhí)行哪個函數(shù)那就看你在用戶態(tài)下執(zhí)行的是什么函數(shù)了,比如在用戶態(tài)下的lseek在內(nèi)核下就是llseek了,不一樣的。
3、這問題就是linux的內(nèi)存管理了,這里就得提到三種地址(邏輯地址、線性地址、物理地址),這里我們提到的4G地址是邏輯地址,不是我們實際的物理地址,linux中一個進(jìn)程用戶占0-3G對應(yīng)的內(nèi)核占3G-4G部分
說得不是很清楚,這是比較復(fù)雜的內(nèi)容,需要從頭看起,單就這幾個問題是不能搞懂linux的,最好還是系統(tǒng)的學(xué)習(xí),不斷的重復(fù)