操作系統(tǒng)會將內(nèi)存分配為內(nèi)核空間和用戶空間
內(nèi)核空間是由所有進(jìn)程共享,每個進(jìn)程通過系統(tǒng)調(diào)用進(jìn)入內(nèi)核
用戶空間中各個進(jìn)程相互獨立,無法實現(xiàn)共享
當(dāng)一個進(jìn)程工作在內(nèi)核空間的代碼中,就成為內(nèi)核態(tài)
工作在用戶空間的代碼中,就成為用戶態(tài)
工作在內(nèi)核態(tài)中的進(jìn)程具有最高的級別Ring0
工作在用戶態(tài)的進(jìn)程具有最低的級別Ring3
Ring3不能訪問Ring0中的數(shù)據(jù),也就是說,進(jìn)程在用戶態(tài)下是沒法訪問到內(nèi)核空間中的數(shù)據(jù)的
為了讓用戶安全的訪問內(nèi)核空間,操作系統(tǒng)提供了以下幾種方式:
1.系統(tǒng)調(diào)用進(jìn)入內(nèi)核態(tài):如調(diào)用write(),read(),send()等IO函數(shù)等操作,進(jìn)程就會進(jìn)入內(nèi)核態(tài)使用內(nèi)核代碼去完成操作。
2.異常:當(dāng)CPU在執(zhí)行運行在用戶態(tài)的程序時,發(fā)現(xiàn)了某些事件不可知的異常,這是會觸發(fā)由當(dāng)前運行進(jìn)程切換到處理此異常的內(nèi)核相關(guān)程序中,也就到了內(nèi)核態(tài),比如缺頁異常。
3.外圍設(shè)備的中斷:當(dāng)外圍設(shè)備完成用戶請求的操作之后,會向CPU發(fā)出相應(yīng)的中斷信號,這時CPU會暫停執(zhí)行下一條將要執(zhí)行的指令轉(zhuǎn)而去執(zhí)行中斷信號的處理程序,如果先執(zhí)行的指令是用戶態(tài)下的程序,那么這個轉(zhuǎn)換的過程自然也就發(fā)生了有用戶態(tài)到內(nèi)核態(tài)的切換。比如硬盤讀寫操作完成,系統(tǒng)會切換到硬盤讀寫的中斷處理程序中執(zhí)行后續(xù)操作等。