操作系统原理:中断,异常,系统调用
系統(tǒng)調(diào)用(system call):為應(yīng)用程序請(qǐng)求操作提供服務(wù)。可異步和同步,對(duì)于返回值,同步會(huì)等待值返回再執(zhí)行下一步,異步發(fā)出系統(tǒng)調(diào)用請(qǐng)求后,緊接著就會(huì)執(zhí)行下一步操作。
異常 (Exception): 應(yīng)用程序產(chǎn)生的,在執(zhí)行過(guò)程中發(fā)生非法的指令,破壞其他程序的處理狀態(tài)。異常是同步的
中斷 (interrupt;): 來(lái)源于外設(shè),是異步的,外設(shè)不清楚什么時(shí)候中斷會(huì)發(fā)生。中斷時(shí)持續(xù)的。
?
?
當(dāng)發(fā)生中斷時(shí),硬件和軟件需要分別做一些事情
對(duì)于硬件來(lái)講,發(fā)生中斷時(shí)要設(shè)置中斷標(biāo)記,當(dāng)CPU知道了外設(shè)產(chǎn)生了中斷標(biāo)記,根據(jù)中斷標(biāo)記CPU可以得出產(chǎn)出一個(gè)中斷號(hào),將中斷號(hào)發(fā)送給操作系統(tǒng)后,由操作系統(tǒng)找到對(duì)應(yīng)的處理例程。
對(duì)于軟件來(lái)講(操作系統(tǒng)),當(dāng)發(fā)生中斷時(shí),需要保存中斷時(shí)的處理狀態(tài)。當(dāng)接收到中斷號(hào)時(shí),根據(jù)中斷號(hào)找到中斷處理例程的地址,跳轉(zhuǎn)到該地址執(zhí)行,中斷處理例程處理完之后會(huì)清除中斷標(biāo)記,之后將原先中斷前的狀態(tài)進(jìn)行恢復(fù)繼續(xù)處理。
?
當(dāng)一個(gè)些指令觸發(fā)了異常事件時(shí)
操作系統(tǒng)會(huì)獲得到產(chǎn)生異常指令的地址和寄存器內(nèi)容,之后對(duì)異常進(jìn)一步的處理,處理方式通常由兩種,一種是結(jié)束應(yīng)用程序的執(zhí)行,另一種是跳轉(zhuǎn)到異常處理指令,恢復(fù)寄存器等內(nèi)容并執(zhí)行處理指令。
?
系統(tǒng)調(diào)用來(lái)源于應(yīng)用程序,應(yīng)用程序需要操作系統(tǒng)提供一些服務(wù),例如C語(yǔ)言中的print方法,打印字符串到控制臺(tái),底層調(diào)用了操作系統(tǒng)的write接口,需要傳入需要寫(xiě)入的外設(shè),和需要寫(xiě)入的內(nèi)容這兩個(gè)參數(shù)。
?
為了更方便地使用接口,在系統(tǒng)調(diào)用基礎(chǔ)上建立了更高層次的API接口來(lái)供程序訪問(wèn)。例如 WIN32 API? ?,POSIX API , JAVA? API 等。
?
?
系統(tǒng)調(diào)用的實(shí)現(xiàn)思路:
通常應(yīng)用程序調(diào)用API來(lái)間接訪問(wèn)系統(tǒng)調(diào)用接口。當(dāng)調(diào)用系統(tǒng)調(diào)用時(shí)會(huì)觸發(fā)從用戶(hù)態(tài)到內(nèi)核態(tài)的轉(zhuǎn)換。所謂用戶(hù)態(tài)就是應(yīng)用程序在執(zhí)行過(guò)程中CPU所處于的一個(gè)特權(quán)級(jí)的狀態(tài),此特權(quán)級(jí)較低,在用戶(hù)態(tài)狀態(tài)下時(shí)沒(méi)有權(quán)利直接訪問(wèn)操作系統(tǒng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)、機(jī)器指令、IO等。而內(nèi)核態(tài)可以。操作系統(tǒng)通過(guò)特權(quán)級(jí)來(lái)保證訪問(wèn)安全。
實(shí)現(xiàn)特權(quán)級(jí)的切換后即從CPU的使用權(quán)從應(yīng)用程序切換到操作系統(tǒng)上。通過(guò)對(duì)系統(tǒng)調(diào)用的識(shí)別來(lái)完成具體的服務(wù)。除了特權(quán)級(jí)切換。還需要堆棧的切換,應(yīng)為操作系統(tǒng)并不和應(yīng)用程序共用相同的堆棧空間。
?
?
跨越操作系統(tǒng)邊界的開(kāi)銷(xiāo)是要比程序調(diào)用的開(kāi)銷(xiāo)要大,因?yàn)?/p>
操作系統(tǒng)需要建立 中斷/異常/系統(tǒng)調(diào)用 號(hào) 與服務(wù)例程的映射關(guān)系和初始化工作,還需要建立內(nèi)核堆棧。由于操作系統(tǒng)并不信任應(yīng)用程序,所以還需要對(duì)來(lái)自上級(jí)程序的輸入進(jìn)行檢查。內(nèi)核態(tài)需要建立獨(dú)立的內(nèi)存空間,當(dāng)處理完某些數(shù)據(jù)時(shí)操作需要把內(nèi)核態(tài)的內(nèi)存數(shù)據(jù)拷貝到用戶(hù)態(tài)的內(nèi)存空間中,此拷貝是深拷貝。
?
總結(jié)
以上是生活随笔為你收集整理的操作系统原理:中断,异常,系统调用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux C :Linux 下第一个C
- 下一篇: 操作系统原理: 计算机的体系结构、内存的