版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第7章中斷、陷入和信號機構(gòu)第7章中斷、陷入和信號機構(gòu)概述UNIX系統(tǒng)對中斷和陷入的處理系統(tǒng)調(diào)用的實施舉例UNIX信號機構(gòu)習(xí)題第7章中斷、陷入和信號機構(gòu)7.1
概
述7.1.1中斷及其一般處理過程所謂中斷是指CPU對系統(tǒng)發(fā)生的某個事件作出的一種反應(yīng):CPU暫停正在執(zhí)行的程序,保留現(xiàn)場后自動地轉(zhuǎn)去執(zhí)行相應(yīng)的處理程序,處理完該事件后再返回斷點繼續(xù)執(zhí)行被“打斷”的程序。圖7-1所示為中斷時CPU活動的軌跡。第7章中斷、陷入和信號機構(gòu)圖7-1中斷示意圖第7章中斷、陷入和信號機構(gòu)1.中斷源分類現(xiàn)代計算機都根據(jù)實際需要配備有不同類型的中斷機構(gòu)。有的較簡單,有的則較復(fù)雜,下面介紹幾種常見的中斷源分類方法。1)按功能劃分這種分類法類似于IBM/360、370系統(tǒng)的分類法,所有中斷源分為五類:第7章中斷、陷入和信號機構(gòu)(1)機器故障中斷。(2)輸入/輸出中斷。
(3)外部中斷。(4)程序性中斷。
(5)訪管中斷。第7章中斷、陷入和信號機構(gòu)2)按產(chǎn)生中斷的方式劃分(1)強迫中斷。(2)自愿中斷。中斷進(jìn)行分類,其主要分為兩類:(1)中斷。(2)異常(Exception)。第7章中斷、陷入和信號機構(gòu)2.中斷的一般處理過程對中斷請求的整個處理過程是由硬件和軟件結(jié)合起來而形成的一套中斷機構(gòu)實施的。一般分為由硬件實施的中斷響應(yīng)和主要由操作系統(tǒng)實施的中斷處理兩大步驟。發(fā)生中斷時,CPU暫停執(zhí)行當(dāng)前的程序,而轉(zhuǎn)去處理中斷,這個由硬件對中斷請求作出反應(yīng)的過程,稱為中斷響應(yīng)。一般來說,中斷響應(yīng)順序執(zhí)行下述三步動作:第7章中斷、陷入和信號機構(gòu)中止當(dāng)前程序的運行;保存原程序的斷點信息(主要是程序計數(shù)器
PC和程序狀態(tài)寄存器PS的內(nèi)容);轉(zhuǎn)到相應(yīng)的處理程序。第7章中斷、陷入和信號機構(gòu)通常CPU在執(zhí)行完一條指令后,立即檢查有無中斷請求,如有,則立即作出響應(yīng)。中斷響應(yīng)后,就由軟件(中斷處理程序)進(jìn)行相應(yīng)處理。中斷處理過程大致分為四個階段:保存被中斷程序的現(xiàn)場、分析中斷原因、轉(zhuǎn)入相應(yīng)處理程序進(jìn)行處理、恢復(fù)被中斷程序的現(xiàn)場(即中斷返回)。中斷處理的一般過程如圖7-2所示。第7章中斷、陷入和信號機構(gòu)圖7-2中斷處理的一般過程第7章中斷、陷入和信號機構(gòu)1)保存現(xiàn)場保存被中斷程序的現(xiàn)場的目的是為了在中斷處理完之后,可以返回到原來被中斷的地方,在原有的運行環(huán)境下繼續(xù)正確地執(zhí)行下去。對現(xiàn)場信息的保存方式是多樣化的,常用方式有兩種:一種是集中式保存。另一種是分散式保存。第7章中斷、陷入和信號機構(gòu)2)分析中斷原因?qū)χ袛嗵幚淼闹饕ぷ魇歉鶕?jù)中斷源確定中斷原
因,然后轉(zhuǎn)入相應(yīng)處理程序去執(zhí)行。為此,應(yīng)確定“中斷源”或者查證中斷發(fā)生,識別中斷的類型(如時鐘中斷或者是盤中斷)和中斷的設(shè)備號(如哪個磁盤引起的中斷)。系統(tǒng)接到中斷后,就從機器那里得到一個中斷號,它是檢索中斷向量表的位移。中斷向量因機器而異,但通常包括相應(yīng)中斷處理程序入口地址和中斷處理時處理機狀態(tài)字。表7-1列出了示意性的中斷向量表。如果是終端發(fā)出的中斷,則核心從硬件那里得到的中斷號是2。利用它去查中斷向量表,得到終端中斷處理程序ttyintr的地址。第7章中斷、陷入和信號機構(gòu)表7-1中斷向量表第7章中斷、陷入和信號機構(gòu)3)處理中斷核心調(diào)用中斷處理程序?qū)χ袛噙M(jìn)行處理。4)恢復(fù)現(xiàn)場和退出中斷執(zhí)行完相應(yīng)中斷處理程序后,就要退出中斷。退出中斷的主要工作是:選取可以立即執(zhí)行的進(jìn)程?;謴?fù)工作現(xiàn)場。第7章中斷、陷入和信號機構(gòu)7.1.2中斷優(yōu)先級和多重中斷高級別中斷打斷低級別中斷的處理層次可以深入多層,從而形成多重中斷嵌套處理。此時,CPU的活動軌跡如圖7-3所示。第7章中斷、陷入和信號機構(gòu)圖7-3多重中斷嵌套處理第7章中斷、陷入和信號機構(gòu)7.1.3中斷屏蔽中斷屏蔽是指在提出中斷請求之后,CPU不予響應(yīng)的狀態(tài)。它常用來在處理某一中斷時防止同級別中斷的干擾或在處理一段不可分割的、必須連續(xù)執(zhí)行的程序時防止意外事件把它打斷。引入中斷屏蔽和禁止的原因主要有以下三個方面:(1)延遲或禁止對某些中斷的響應(yīng)。(2)協(xié)調(diào)中斷響應(yīng)與中斷處理的關(guān)系。(3)防止同類中斷的相互干擾。第7章中斷、陷入和信號機構(gòu)7.2
UNIX系統(tǒng)對中斷和陷入的處理7.2.1中斷處理當(dāng)發(fā)生中斷時,系統(tǒng)作出響應(yīng),不管它們是來自硬件(如來自時鐘或者外部設(shè)備)、程序性中斷(執(zhí)行指令導(dǎo)致“軟件中斷(Software
Interrupts)”),或者來自意外事件(如訪問頁面不在內(nèi)存)。第7章中斷、陷入和信號機構(gòu)核心對中斷處理的順序主要由以下動作完成:(1)保存正在運行進(jìn)程的各寄存器的內(nèi)容,把它們放入核心棧的新幀面中。表7-2中斷向量表第7章中斷、陷入和信號機構(gòu)(2)確定“中斷源”或者查證中斷發(fā)生,識別中斷的類型(如時鐘中斷或者是盤中斷)和中斷的設(shè)備號(如哪個磁盤引起的中斷)。系統(tǒng)接到中斷后,就從機器那里得到一個中斷號,它是檢索中斷向量表的位移。中斷向量因機器而異,但通常都包括相應(yīng)中斷處理程序入口地址和中斷處理時處理機的狀態(tài)字。表7-2列出示意性的中斷向量表。第7章中斷、陷入和信號機構(gòu)核心調(diào)用中斷處理程序,對中斷進(jìn)行處理。中斷處理完成并返回。執(zhí)行完中斷處理程序,核心便執(zhí)行與機器相關(guān)的特定指令序列,恢復(fù)中斷時寄存器內(nèi)容和執(zhí)行核心棧退棧,進(jìn)程回到用戶態(tài)。第7章中斷、陷入和信號機構(gòu)中斷處理算法輸入:無
輸出:無{保存(進(jìn)棧)當(dāng)前斷點現(xiàn)場;確定中斷來源;尋找中斷向量;調(diào)用中斷處理程序;恢復(fù)(退棧)先前保存的現(xiàn)場;}第7章中斷、陷入和信號機構(gòu)圖7-4示出一個多級中斷的例子。進(jìn)程在執(zhí)行系統(tǒng)調(diào)用期間接到盤中斷,而在執(zhí)行盤中斷處理子程序期間又接到時鐘中斷并對它進(jìn)行相應(yīng)處理。每次系統(tǒng)只接受一個中斷(或一個系統(tǒng)調(diào)用),建立一個新的映像幀面,在其中保存前一個處理子程序的寄存器內(nèi)容。第7章中斷、陷入和信號機構(gòu)圖7-4多級中斷時核心棧層次第7章中斷、陷入和信號機構(gòu)7.2.2陷入處理在UNIX系統(tǒng)中,對異常的處理稱為陷入(Trap)。因為各種異常事件經(jīng)過硬件處理,再統(tǒng)一進(jìn)入陷入處理程序trap。引起陷入的事件可分為兩組:一組是自愿進(jìn)入陷入,稱為自陷,如使用系統(tǒng)調(diào)用、斷點跟蹤;另一組是由于程序運行中出現(xiàn)軟、硬件故障或錯誤而進(jìn)入陷入,也稱為捕俘,如轉(zhuǎn)換無效、訪問違章、非法指令等。第7章中斷、陷入和信號機構(gòu)請求系統(tǒng)管理人員干預(yù)。按用戶規(guī)定方式進(jìn)行處理。用戶棧自動擴充。系統(tǒng)調(diào)用處理。多數(shù)系統(tǒng)調(diào)用帶有一個或幾個參數(shù)。傳遞參數(shù)的
方式一般有兩種:通過通用寄存器(如r0,r1)的直接傳送和在trap指令后自帶參數(shù)。第7章中斷、陷入和信號機構(gòu)系統(tǒng)調(diào)用入口表sysent的項數(shù)與系統(tǒng)調(diào)用編號一樣多,通常為64。每項有三個部分:自帶參數(shù)個數(shù)、標(biāo)志位(如果執(zhí)行setjmp函數(shù),則置為0,否則置為1)和相應(yīng)處理程序的入口地址。表7-3列出了sysent的結(jié)構(gòu)形式。第7章中斷、陷入和信號機構(gòu)表7-3系統(tǒng)調(diào)用入口表第7章中斷、陷入和信號機構(gòu)系統(tǒng)調(diào)用算法輸入:系統(tǒng)調(diào)用號碼輸出:系統(tǒng)調(diào)用執(zhí)行結(jié)果{根據(jù)系統(tǒng)調(diào)用號碼從入口表中檢索項;確定系統(tǒng)調(diào)用的參數(shù)個數(shù);把參數(shù)從用戶地址空間復(fù)制到user中;保存當(dāng)前映像,以便失敗時返回;調(diào)用核心的系統(tǒng)調(diào)用子程序進(jìn)行處理;第7章中斷、陷入和信號機構(gòu)if(在子程序執(zhí)行期間有錯){在保存用戶現(xiàn)場的0號寄存器中置出錯碼;在保存用戶現(xiàn)場的PS寄存器中置上進(jìn)位位;}else在保存用戶現(xiàn)場的0號和1號寄存器中設(shè)置從系統(tǒng)調(diào)用返回的值;if(檢測到信號)對信號作相應(yīng)處理}第7章中斷、陷入和信號機構(gòu)7.3系統(tǒng)調(diào)用的實施舉例設(shè)進(jìn)程A在運行中要向已打開的文件(fd)寫一批數(shù)據(jù)。在用戶的源程序中可使用系統(tǒng)調(diào)用語句:rw=write(fd,
buf,
count);第7章中斷、陷入和信號機構(gòu)這條語句經(jīng)編譯以后形成匯編指令形式:trap
4參數(shù)1參數(shù)2參數(shù)3k1:…第7章中斷、陷入和信號機構(gòu)其中,參數(shù)1、2、3分別對應(yīng)文件描述字fd,用戶信息所在始址buf及傳送字節(jié)數(shù)count。這個系統(tǒng)調(diào)用的執(zhí)行過程如下:(1)處理機執(zhí)行到trap
4指令時,產(chǎn)生陷入事件,硬件做出中斷響應(yīng):保留進(jìn)程A的PS和PC的值,取中斷向量并放入寄存器(PS和PC)中,控制轉(zhuǎn)向一段核心代碼,將進(jìn)程狀態(tài)改為核心態(tài),進(jìn)一步保留現(xiàn)場信息
(通用寄存器等),再進(jìn)入統(tǒng)一的處理程序。第7章中斷、陷入和信號機構(gòu)轉(zhuǎn)入文件系統(tǒng)管理,write調(diào)用rdwr程序。后者根據(jù)fd,經(jīng)由用戶打開文件表和系統(tǒng)打開文件表,找
到活動I節(jié)點。設(shè)原文件存儲塊的最后一塊未放滿信息,現(xiàn)在要擴充文件,所以第一次不是整塊傳送。第7章中斷、陷入和信號機構(gòu)由于進(jìn)程A等待I/O完成,進(jìn)程調(diào)度程序(swtch)選中另一進(jìn)程B運行,A睡眠。磁盤驅(qū)動程序根據(jù)bp給出的傳送要求,把信息從盤上讀到緩沖區(qū)。磁盤傳送完一塊信息,發(fā)出中斷。中斷造成進(jìn)程B的中止,硬件執(zhí)行中斷響應(yīng):保留進(jìn)程B的PS和PC,取盤中斷向量,控制轉(zhuǎn)向磁盤中斷處理程序入口。第7章中斷、陷入和信號機構(gòu)接著,控制轉(zhuǎn)向盤中斷處理程序,驗證是否是磁盤發(fā)出的中斷,如傳輸無錯,則調(diào)用iodone(bp),喚醒因調(diào)用iowait而睡眠的進(jìn)程A,并且繼續(xù)啟動I/O隊列中下一個傳送請求。設(shè)進(jìn)程A比進(jìn)程B更適于在CPU上運行,因而在喚醒進(jìn)程A時設(shè)置了重調(diào)度標(biāo)志(runrun)。中斷完成,核心發(fā)現(xiàn)runrun≠0,就調(diào)用swtch程序,選中優(yōu)先級高的進(jìn)程A投入運行。第7章中斷、陷入和信號機構(gòu)進(jìn)程A接著運行核心程序:調(diào)用iomove程序,把信息從指定用戶區(qū)傳送到前面申請且使用的那個緩沖區(qū)中,直至填滿,并且修改傳送字節(jié)數(shù)等。文件系統(tǒng)對有關(guān)信息項(如參數(shù)、Ⅰ節(jié)點信息)進(jìn)行修改,然后判別是否傳送完成。下面進(jìn)行成塊傳送,調(diào)用getblk,申請緩沖區(qū),重復(fù)(11)~(13)步。(14)寫到最后一塊,若是滿塊,則調(diào)用bawrite作異步寫;若沒有滿塊,則調(diào)用bdwrite,作延遲寫。第7章中斷、陷入和信號機構(gòu)(15)最后寫文件完成,控制從文件系統(tǒng)的程序返回到陷入程序,后者進(jìn)行退出系統(tǒng)調(diào)用的處理。進(jìn)程狀態(tài)回到用戶態(tài)(設(shè)沒有置上重調(diào)度標(biāo)志),則核心恢復(fù)進(jìn)程A的現(xiàn)場,繼續(xù)執(zhí)行A的用戶程序。至此,系統(tǒng)調(diào)用write完成。上述簡要過程示例如圖7-5所示。第7章中斷、陷入和信號機構(gòu)圖7-5系統(tǒng)調(diào)用實現(xiàn)過程示例第7章中斷、陷入和信號機構(gòu)7.4
UNIX信號機構(gòu)異步進(jìn)程可以通過彼此發(fā)送信號來實現(xiàn)簡單通信。系統(tǒng)預(yù)先規(guī)定若干個不同類型的信號(如UNIX
S_5中設(shè)置19種信號),各表示發(fā)生了不同的事件。當(dāng)運行進(jìn)程遇到相應(yīng)事件或出現(xiàn)特定要求時(如進(jìn)程終止或運行中出現(xiàn)某些錯誤——非法指令、地址越界等),就把一個信號寫到相應(yīng)進(jìn)程的PCB信號項中。第7章中斷、陷入和信號機構(gòu)接收信號的進(jìn)程在運行過程中要檢測自身是否收到了信號,如果已收到信號,則轉(zhuǎn)去執(zhí)行預(yù)先規(guī)定好的信號處理程序。處理完之后,再返回原先正在執(zhí)行的程序。進(jìn)程之間利用信號機制實現(xiàn)通信的過程如圖7-6所示。第7章中斷、陷入和信號機構(gòu)圖7-6利用信號實現(xiàn)進(jìn)程間通信第7章中斷、陷入和信號機構(gòu)這種處理方式與硬件中斷的處理方式有不少相似之處,大部分陷入都轉(zhuǎn)入信號機構(gòu)處理。但是,二者又是不同的,因為信號的設(shè)置、檢測等都是由軟件實現(xiàn)的,所以也稱為軟中斷。信號處理機構(gòu)是系統(tǒng)中圍繞信號的產(chǎn)生、傳送和處理而構(gòu)成的一套機構(gòu)。該機構(gòu)通常包括三個部分:①信號的分類、產(chǎn)生和傳送;②對各種信號預(yù)先規(guī)定處理方式;③信號的檢測和處理。第7章中斷、陷入和信號機構(gòu)7.4.1信號分類在不同系統(tǒng)中,信號分類是有差別的,有多有少。在UNIX
S_5中規(guī)定了19種信號,各對應(yīng)不同的情況,如電話掛起(遠(yuǎn)地用戶)、由鍵盤上按下“Delete”鍵、按下“Quit”鍵、非法指令、斷點或跟蹤指令、
IOT指令、EMT指令、浮點溢出、要求終止該進(jìn)程、總線超時、段違例、系統(tǒng)調(diào)用錯、Pipe文件只有寫者無讀者、報警信號、軟件終止信號、子進(jìn)程消亡、電源失效以及用戶定義的信號。表7-4列出了UNIX
System
V
Release
2中所定義的19種信號及其含義。第7章中斷、陷入和信號機構(gòu)表7-4
UNIX
SVR2的信號分類及其含義第7章中斷、陷入和信號機構(gòu)7.4.2信號處理方式在進(jìn)程user結(jié)構(gòu)(進(jìn)程的輔助控制結(jié)構(gòu))中有一個數(shù)組signal,信號的編號就對應(yīng)數(shù)組下標(biāo),其元素值規(guī)定了該進(jìn)程收到相應(yīng)信號時所采用的相應(yīng)動作。表
7-5列出了各數(shù)組元素的值及約定的動作。第7章中斷、陷入和信號機構(gòu)表7-5信號處理方式第7章中斷、陷入和信號機構(gòu)信號的處理方式可在特定情況下進(jìn)行修改,但是9號信號對應(yīng)的零值不要重置。因為終止進(jìn)程的信號(9號)不允許用戶改變,所以進(jìn)程一旦收到該信號后,總是終止自己。信號的處理方式可在以下五種情況下設(shè)置:第7章中斷、陷入和信號機構(gòu)執(zhí)行fork系統(tǒng)調(diào)用時,子進(jìn)程繼承父進(jìn)程signal數(shù)組的值。執(zhí)行exec系統(tǒng)調(diào)用時,進(jìn)程將該數(shù)組中所有非零偶數(shù)值改為0。用戶可用ssig系統(tǒng)調(diào)用改變該數(shù)組的內(nèi)容。執(zhí)行psig處理某些信號時,要將數(shù)組對應(yīng)項清0。執(zhí)行rexit終止自己時,該數(shù)組中所有項均置成1。第7章中斷、陷入和信號機構(gòu)7.4.3信號的檢測和處理信號機構(gòu)區(qū)別于中斷的一個主要方面是,只在適當(dāng)時機進(jìn)程才檢測它是否已接到信號。如果接到了,則按預(yù)定方式進(jìn)行信號處理。檢測信號的程序是issig。檢測的時機是以下三種情況:第7章中斷、陷入和信號機構(gòu)在陷入處理子程序trap的末尾;若用戶程序遇到時鐘中斷(每秒一次),則時鐘中斷處理結(jié)束之前檢測是否收到信號;進(jìn)程以低優(yōu)先級請求睡眠時,系統(tǒng)要檢查該進(jìn)程是否收到了信號。第7章中斷、陷入和信號機構(gòu)信號處理算法(psig)
/*檢測到信號后處理它們*/輸入:無輸出:無{在進(jìn)程表的p_sig中得到設(shè)置的信號號碼;在進(jìn)程表的p_sig中清除信號號碼;if(用戶已調(diào)用系統(tǒng)調(diào)用signal,用于忽略該信號)第7章中斷、陷入和信號機構(gòu)return;/*完成處理*/if(用戶定義了處理信號的函數(shù)){得到user中信號處理函數(shù)的用戶虛擬地址;清除user中存放信號處理函數(shù)地址的字段;修改用戶級環(huán)境:創(chuàng)建一個用戶棧元,用來模仿調(diào)用信號處理函數(shù);修改系統(tǒng)級環(huán)境:將信號處理函數(shù)的地址寫到寄存器PC中;第7章中斷、陷入和信號機構(gòu)return;}if(信號屬于要轉(zhuǎn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 風(fēng)景名勝區(qū)自行車租借協(xié)議
- 建筑安裝工程承包合作協(xié)議
- 廣告委托制作協(xié)議書
- 民間借款協(xié)議書的格式要求
- 私車出租給機構(gòu)協(xié)議
- 2024年加盟經(jīng)銷合同范本
- 建筑工程勞務(wù)擴大分包合同完整2024年
- 2024正規(guī)版私人借款合同樣本
- 吉林省農(nóng)業(yè)產(chǎn)品訂購協(xié)議
- 房產(chǎn)物業(yè)抵押借款協(xié)議
- 牛津深圳版(廣州沈陽通用)九年級英語上冊 期中復(fù)習(xí) Unit1-Unit4 詞匯練習(xí)(無答案)
- 禮儀與教化下外國篇
- 景物描寫作用及練習(xí)
- PPT模板:熱烈歡迎兄弟單位領(lǐng)導(dǎo)蒞臨指導(dǎo)工作匯報課件
- 西游記詹納爾英譯本鑒賞
- 保險基礎(chǔ)知識在線練習(xí)題庫-1講解
- 幼兒園小班繪本:《一步一步_走啊走》 PPT課件
- 高海拔地區(qū)電氣設(shè)備選型
- 九田回米-練字格(excel版本)
- 售后服務(wù)控制程序文件
- 管道壓力和壁厚對照表
評論
0/150
提交評論