寫在前面 本系列的文章是博主邊學邊記錄的,可能不是特別的正確,因為會加上博主自己的理解,僅供參考。 正文 應用程式是軟體,操作系統也是軟體。這樣說的話,cpu會將他們一視同仁。其實,cpu不知道自己在執行的程式是操作系統,還是一般的應用軟體,cpu是根據起存其中指向的記憶體取出執行並執行。想起來大二的 ...
寫在前面
本系列的文章是博主邊學邊記錄的,可能不是特別的正確,因為會加上博主自己的理解,僅供參考。
正文
應用程式是軟體,操作系統也是軟體。這樣說的話,cpu會將他們一視同仁。其實,cpu不知道自己在執行的程式是操作系統,還是一般的應用軟體,cpu是根據起存其中指向的記憶體取出執行並執行。想起來大二的時候,老師說cpu的工作就是 取指令、分析指令、運行指令。
說到應用程式,那也會涉及到cpu的內核態和用戶態。這又是什麼?
內核態和用戶態的區別就是許可權不同,內核態處於許可權0,許可權較高,用戶態處於許可權3,許可權較低。而應用程式運行在用戶態。當發生系統調用的時候,會切換到內核態,然後內核態經過一些處理,處理完畢後,切換回用戶態。
關於內核態到用戶態的轉換還有一段比較官方的解釋,如下:
由於內部或者外部中斷發生,當前進程被暫時終止執行,其上下文被內核的中斷程式保存起來後,開始執行一段內核的代碼。是內核代碼。不是用戶程式在內核的代碼。
當程式陷入內核後,該程式已經不具備cpu的使用權,以後發生的事情,應用程式完全不知道,它的上下文環境已經被保存到自己的0特權棧中,那時cpu上運行的程式已經是內核程式。
這裡補充下內部中斷和外部中斷:
內部中斷:
cpu內部事件所引起的中斷,比如發生了移除或者非法指令等。把這類中斷稱為內中斷或者陷入。
若系統發生了陷入事件,cpu將暫停正在執行的程式,轉入執行改陷入事件的處理程式。一般內核切換也稱為陷入內核
外部中斷:
外中斷主要指的是cpu對IO設備發來中斷信號的一種響應。發生外部中斷時,cpu暫停正在執行的程式,保留cpu環境後,自動轉去執行IO設備的中斷處理程式,處理完後,再回到斷點,繼續執行原來的程式。
不驕不躁,持續學習