操作系統(tǒng)會將內(nèi)存分配為內(nèi)核空間和用戶空間
內(nèi)核空間是由所有進(jìn)程共享,每個進(jìn)程通過系統(tǒng)調(diào)用進(jìn)入內(nèi)核
用戶空間中各個進(jìn)程相互獨(dú)立,無法實(shí)現(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í)行運(yùn)行在用戶態(tài)的程序時陋率,發(fā)現(xiàn)了某些事件不可知的異常球化,這是會觸發(fā)由當(dāng)前運(yùn)行進(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ù)操作等。