歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux系統的中斷、系統調用和調度概述

Linux系統的中斷、系統調用和調度概述

日期:2017/3/1 10:06:55   编辑:Linux編程

最近學習Linux操作系統,關於中斷系統調用和進程的級別總是感覺有些模糊的地方,特在此做個小結,整理下思路。

所謂的中斷就是在計算機執行程序的過程中,由於出現了某些特殊事情,使得CPU暫停對程序的執行,轉而去執行處理這一事件的程序。等這些特殊事情處理完之後再回去執行之前的程序。中斷一般分為三類:1、由計算機硬件異常或故障引起的中斷,稱為內部異常中斷;2、由程序中執行了引起中斷的指令而造成的中斷,稱為軟中斷(這也是和我們將要說明的系統調用相關的中斷);3、由外部設備請求引起的中斷,稱為外部中斷。簡單來說,對中斷的理解就是對一些特殊事情的處理。

與中斷緊密相連的一個概念就是中斷處理程序了。當中斷發生的時候,系統需要去對中斷進行處理,對這些中斷的處理是由操作系統內核中的特定函數進行的,這些處理中斷的特定的函數就是我們所說的中斷處理程序了。

另一個與中斷緊密相連的概念就是中斷的優先級。中斷的優先級說明的是當一個中斷正在被處理的時候,處理器能接受的中斷的級別。中斷的優先級也表明了中斷需要被處理的緊急程度。每個中斷都有一個對應的優先級,當處理器在處理某一中斷的時候,只有比這個中斷優先級高的中斷可以被處理器接受並且被處理。優先級比這個當前正在被處理的中斷優先級要低的中斷將會被忽略。

典型的中斷級如下所示

當發生軟件中斷時,其他所有的中斷都可能發生並被處理;但當發生磁盤中斷時,就只有時鐘中斷和機器錯誤中斷能被處理了。

在講系統調用之前,先說下進程的執行在系統上的兩個級別:用戶級和核心級,也稱為用戶態和系統態(user mode and kernel mode)。程序的執行一般是在用戶態下執行的,但當程序需要使用操作系統提供的服務時,比如說打開某一設備、創建文件、讀寫文件等,就需要向操作系統發出調用服務的請求,這就是系統調用。Linux系統有專門的函數庫來提供這些請求操作系統服務的入口,這個函數庫中包含了操作系統說提供的對外服務的接口。當進程發出系統調用之後,它所處的運行狀態就會由用戶態變成核心態。但這個時候,進程本身其實並沒有做什麼事情,這個時候是由內核在做相應的操作,去完成進程所提出的這些請求。

系統調用和中斷的關系就在於,當進程發出系統調用申請的時候,會產生一個軟件中斷。產生這個軟件中斷以後,系統會去對這個軟中斷進行處理,這個時候進程就處於核心態了。

那麼用戶態和核心態之間的區別是什麼呢?(以下區別摘至《UNIX操作系統設計》)

1、用戶態的進程能存取它們自己的指令和數據,但不能存取內核指令和數據(或其他進程的指令和數據)。然而,核心態下的進程能夠存取內核和用戶地址

2、某些機器指令是特權指令,在用戶態下執行特權指令會引起錯誤

對此要理解的一個是,在系統中內核並不是作為一個與用戶進程平行的估計的進程的集合,內核是為用戶進程運行的。

Copyright © Linux教程網 All Rights Reserved