




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第第1章章 操作系統(tǒng)運(yùn)行的硬件基礎(chǔ)操作系統(tǒng)運(yùn)行的硬件基礎(chǔ)1.1 1.1 中央處理器(中央處理器(CPUCPU)1.2 1.2 中斷技術(shù)中斷技術(shù)1.3 1.3 系統(tǒng)調(diào)用系統(tǒng)調(diào)用1.4 1.4 存儲器存儲器1.5 I/O1.5 I/O端口尋址與訪問控制端口尋址與訪問控制1.1 中央處理器(中央處理器(CPU)1.單處理器與多處理器系統(tǒng)單處理器與多處理器系統(tǒng)一個(gè)計(jì)算機(jī)系統(tǒng)只有一個(gè)處理器,稱之為單處一個(gè)計(jì)算機(jī)系統(tǒng)只有一個(gè)處理器,稱之為單處理器系統(tǒng)理器系統(tǒng)如果有多個(gè)處理器稱之為多處理器系統(tǒng)如果有多個(gè)處理器稱之為多處理器系統(tǒng)處理器由運(yùn)算器、處理器由運(yùn)算器、控制器控制器、一組寄存器和高速緩存構(gòu)成。、一組寄存
2、器和高速緩存構(gòu)成。程序計(jì)數(shù)器程序計(jì)數(shù)器 PC指令寄存器指令寄存器 IR 處理器狀態(tài)字處理器狀態(tài)字PSW堆棧指示器堆棧指示器 SP指令譯碼器指令譯碼器 IDI/O控制邏輯控制邏輯工作寄存器工作寄存器地址寄存器地址寄存器數(shù)據(jù)寄存器數(shù)據(jù)寄存器 ALU控制器控制器CU1.1 中央處理器(中央處理器(CPU)指令譯碼器指令譯碼器IDID:是:是控制器控制器中的主要部件之一中的主要部件之一,分析指令操作碼,以決定分析指令操作碼,以決定執(zhí)執(zhí)行的操作行的操作。程序計(jì)數(shù)器程序計(jì)數(shù)器PCPC:程序計(jì)數(shù)器是用于存放下一條指令的主存單元地址。單片:程序計(jì)數(shù)器是用于存放下一條指令的主存單元地址。單片機(jī)及匯編語言中常稱作
3、機(jī)及匯編語言中常稱作PCPC(Program CounterProgram Counter)。程序開始執(zhí)行前,必須將)。程序開始執(zhí)行前,必須將它的起始地址,即程序開始執(zhí)行指令的內(nèi)存單元地址送入它的起始地址,即程序開始執(zhí)行指令的內(nèi)存單元地址送入PC PC PSWPSW:狀態(tài)寄存器:狀態(tài)寄存器, ,存放指令的執(zhí)行狀態(tài):存放指令的執(zhí)行狀態(tài):CPUCPU執(zhí)行狀態(tài)、溢出、中斷屏蔽碼執(zhí)行狀態(tài)、溢出、中斷屏蔽碼等。等。例:例:32位機(jī)器的位機(jī)器的CPU寄存器寄存器2. 寄存器分類寄存器分類兩類寄存器:兩類寄存器:用戶可見寄存器(工作寄存器):用戶可見寄存器(工作寄存器):對所有程序?qū)λ谐绦蚨际强捎玫?,包?/p>
4、系統(tǒng)程序和用戶程序。都是可用的,包括系統(tǒng)程序和用戶程序??刂坪蜖顟B(tài)寄存器控制和狀態(tài)寄存器:用于控制處理器的操作,:用于控制處理器的操作,大部分對用戶不可見,大部分對用戶不可見, 由由OS的特權(quán)代碼使用。的特權(quán)代碼使用。1.1 中央處理器(中央處理器(CPU)(1)用戶可見寄存器)用戶可見寄存器用戶程序可以訪問到的寄存器,包括數(shù)據(jù)寄存用戶程序可以訪問到的寄存器,包括數(shù)據(jù)寄存器、地址寄存器等。器、地址寄存器等。數(shù)據(jù)寄存器數(shù)據(jù)寄存器(data register)又稱通用寄存器,又稱通用寄存器,主要用于各種算術(shù)邏輯指令和訪存指令。主要用于各種算術(shù)邏輯指令和訪存指令。地址寄存器地址寄存器(address
5、 registeraddress register)用于存儲指)用于存儲指令或數(shù)據(jù)的內(nèi)存地址。令或數(shù)據(jù)的內(nèi)存地址。變址寄存器變址寄存器段寄存器段寄存器棧指針棧指針(2)控制和狀態(tài)寄存器)控制和狀態(tài)寄存器 用于控制處理器的操作,對于用戶不可見的(用戶不可以使用于控制處理器的操作,對于用戶不可見的(用戶不可以使用)。常見的控制和狀態(tài)寄存器用)。常見的控制和狀態(tài)寄存器: :程序計(jì)數(shù)器程序計(jì)數(shù)器(PC:Program Counter),記錄將要取出,記錄將要取出的指令的地址。的指令的地址。指令寄存器指令寄存器(IR:Instruction Register),包含最近取,包含最近取出的指令。出的指令。
6、程序狀態(tài)字程序狀態(tài)字(PSW:Program Status Word),記錄處,記錄處理器的運(yùn)行模式信息。理器的運(yùn)行模式信息。條件碼寄存器:條件碼寄存器:保存保存CPU操作結(jié)果的各種標(biāo)記位,如算術(shù)操作結(jié)果的各種標(biāo)記位,如算術(shù)運(yùn)算產(chǎn)生的溢出、符號等等。機(jī)器指令只能通過隱式訪問運(yùn)算產(chǎn)生的溢出、符號等等。機(jī)器指令只能通過隱式訪問來讀取該寄存器的各個(gè)位,不能顯示訪問修改。)來讀取該寄存器的各個(gè)位,不能顯示訪問修改。)中斷寄存器中斷寄存器3.處理器狀態(tài)處理器狀態(tài) 根據(jù)運(yùn)行程序?qū)Y源和機(jī)器指令的使用權(quán)限,將處理器設(shè)根據(jù)運(yùn)行程序?qū)Y源和機(jī)器指令的使用權(quán)限,將處理器設(shè)置為不同的工作狀態(tài)。置為不同的工作狀態(tài)。多
7、數(shù)系統(tǒng)將處理器工作狀態(tài)劃分為多數(shù)系統(tǒng)將處理器工作狀態(tài)劃分為內(nèi)核內(nèi)核態(tài)態(tài)和和用戶用戶態(tài)態(tài):內(nèi)核態(tài)內(nèi)核態(tài):操作系統(tǒng)管理(核心)程序運(yùn)行時(shí)的:操作系統(tǒng)管理(核心)程序運(yùn)行時(shí)的CPU狀態(tài),狀態(tài),又稱為又稱為特權(quán)特權(quán)態(tài)態(tài)、系統(tǒng)系統(tǒng)態(tài)態(tài)、管管態(tài)態(tài)或或核心核心態(tài)態(tài)用戶態(tài)用戶態(tài):用戶程序運(yùn)行時(shí)的:用戶程序運(yùn)行時(shí)的CPU狀態(tài),又稱為狀態(tài),又稱為普通態(tài)普通態(tài)或或目目態(tài)態(tài)。有些系統(tǒng)將處理器狀態(tài)劃分有些系統(tǒng)將處理器狀態(tài)劃分核心狀態(tài)核心狀態(tài),管理狀態(tài)管理狀態(tài)和和用戶程序用戶程序狀態(tài)狀態(tài)三種。三種。實(shí)例:實(shí)例:x86系列系列CPU386、486、Pentium系列都支持系列都支持4個(gè)處理器特個(gè)處理器特權(quán)級別(特權(quán)環(huán):權(quán)級
8、別(特權(quán)環(huán):R0、R1、R2和和R3)從從R0到到R3特權(quán)能力依次降低特權(quán)能力依次降低R0相當(dāng)于雙狀態(tài)系統(tǒng)的內(nèi)核態(tài)相當(dāng)于雙狀態(tài)系統(tǒng)的內(nèi)核態(tài)R3相當(dāng)于用戶態(tài)相當(dāng)于用戶態(tài)R1和和R2則介于兩者之間,它們能夠運(yùn)行的指令則介于兩者之間,它們能夠運(yùn)行的指令集合具有包含關(guān)系:集合具有包含關(guān)系:3210RRRRIIII各個(gè)級別有保護(hù)性檢查(地址校驗(yàn)、各個(gè)級別有保護(hù)性檢查(地址校驗(yàn)、I/O限制),并分限制),并分別運(yùn)行不同級別的程序:別運(yùn)行不同級別的程序:R0- -運(yùn)行操作系統(tǒng)核心代碼運(yùn)行操作系統(tǒng)核心代碼R1- -運(yùn)行關(guān)鍵設(shè)備驅(qū)動程序和運(yùn)行關(guān)鍵設(shè)備驅(qū)動程序和I/O處理例程處理例程R2- -運(yùn)行其它受保護(hù)共享代
9、碼,如語言系統(tǒng)運(yùn)行環(huán)境運(yùn)行其它受保護(hù)共享代碼,如語言系統(tǒng)運(yùn)行環(huán)境R3- -運(yùn)行各種用戶程序運(yùn)行各種用戶程序現(xiàn)有基于現(xiàn)有基于x86處理器的操作系統(tǒng),多數(shù)處理器的操作系統(tǒng),多數(shù)UNIX、Linux以及以及Windows系列大都只用了系列大都只用了R0和和R3兩個(gè)特權(quán)級兩個(gè)特權(quán)級別別實(shí)例:實(shí)例:x86系列處理器系列處理器4.特權(quán)指令和非特權(quán)指令特權(quán)指令和非特權(quán)指令特權(quán)指令特權(quán)指令:只能由操作系統(tǒng):只能由操作系統(tǒng)內(nèi)核執(zhí)行內(nèi)核執(zhí)行的指令的指令,如,如:I/OI/O設(shè)備使用指令:如啟動設(shè)備使用指令:如啟動I/OI/O設(shè)備、測試設(shè)備、測試I/OI/O設(shè)備工作狀態(tài)、設(shè)備工作狀態(tài)、控制控制I/OI/O設(shè)備動作的
10、指令設(shè)備動作的指令 系統(tǒng)資源的分配和管理指令:包括改變系統(tǒng)工作方式,檢測系統(tǒng)資源的分配和管理指令:包括改變系統(tǒng)工作方式,檢測用戶的訪問權(quán)限,修改主存管理的段表、頁表,清內(nèi)存和建立用戶的訪問權(quán)限,修改主存管理的段表、頁表,清內(nèi)存和建立存儲保護(hù)指令存儲保護(hù)指令任務(wù)的創(chuàng)建和切換指令任務(wù)的創(chuàng)建和切換指令存取特殊寄存器存取特殊寄存器的的指令指令:如存取如存取IDTRIDTR、GDTRGDTR、LDTRLDTR、時(shí)鐘寄時(shí)鐘寄存器(脈沖計(jì)數(shù))等指令存器(脈沖計(jì)數(shù))等指令 。非特權(quán)指令非特權(quán)指令:系統(tǒng)程序和應(yīng)用程序都可以執(zhí)行的指令。:系統(tǒng)程序和應(yīng)用程序都可以執(zhí)行的指令。在單用戶單任務(wù)的計(jì)算機(jī)系統(tǒng),可以不區(qū)分特
11、權(quán)指令和非特權(quán)在單用戶單任務(wù)的計(jì)算機(jī)系統(tǒng),可以不區(qū)分特權(quán)指令和非特權(quán)指令,一般用戶可以使用指令系統(tǒng)中的全部指令。但是,在指令,一般用戶可以使用指令系統(tǒng)中的全部指令。但是,在使用多道程序設(shè)計(jì)技術(shù)的計(jì)算機(jī)系統(tǒng)必須要區(qū)分為特權(quán)指令使用多道程序設(shè)計(jì)技術(shù)的計(jì)算機(jī)系統(tǒng)必須要區(qū)分為特權(quán)指令和非特權(quán)指令(和非特權(quán)指令(why?why?)內(nèi)核態(tài)和用戶態(tài)的比較內(nèi)核態(tài)和用戶態(tài)的比較處理器處于內(nèi)核態(tài)時(shí)處理器處于內(nèi)核態(tài)時(shí)可以執(zhí)行全部指令(包括特權(quán)指令)可以執(zhí)行全部指令(包括特權(quán)指令)可使用系統(tǒng)所有資源可使用系統(tǒng)所有資源具有改變具有改變cpu狀態(tài)的能力狀態(tài)的能力處理器處于用戶態(tài)時(shí)處理器處于用戶態(tài)時(shí)只能執(zhí)行非特權(quán)指令只能執(zhí)
12、行非特權(quán)指令特權(quán)級別不同,可運(yùn)行的指令集合也不同特權(quán)級別不同,可運(yùn)行的指令集合也不同特權(quán)級別越高,可以運(yùn)行的指令集合越大,高特權(quán)級特權(quán)級別越高,可以運(yùn)行的指令集合越大,高特權(quán)級別可運(yùn)行指令集合包含低特權(quán)級的可運(yùn)行指令。別可運(yùn)行指令集合包含低特權(quán)級的可運(yùn)行指令。1.1 中央處理器(中央處理器(CPU)操作系統(tǒng)內(nèi)核功能主要包括:操作系統(tǒng)內(nèi)核功能主要包括:時(shí)鐘管理:脈沖計(jì)數(shù),指令周期生成時(shí)鐘管理:脈沖計(jì)數(shù),指令周期生成中斷機(jī)制:中斷向量中斷機(jī)制:中斷向量表維護(hù)表維護(hù)和和中斷中斷響應(yīng)響應(yīng)原語:由若干條機(jī)器指令構(gòu)成,用于完成特定功能的原語:由若干條機(jī)器指令構(gòu)成,用于完成特定功能的一段程序。原語具有不可分
13、割性,即原語在執(zhí)行過程一段程序。原語具有不可分割性,即原語在執(zhí)行過程中不允許被中斷中不允許被中斷 。 由系統(tǒng)控制的數(shù)據(jù)結(jié)構(gòu)管理,如主存頁表、進(jìn)程控制由系統(tǒng)控制的數(shù)據(jù)結(jié)構(gòu)管理,如主存頁表、進(jìn)程控制塊表、消息隊(duì)列、緩沖隊(duì)列等。塊表、消息隊(duì)列、緩沖隊(duì)列等。1.1 中央處理器(中央處理器(CPU)5.程序狀態(tài)字程序狀態(tài)字PSW程序狀態(tài)字(程序狀態(tài)字(PSWPSW):用來指示處理器執(zhí)行條件和狀態(tài)的寄存:用來指示處理器執(zhí)行條件和狀態(tài)的寄存器。不同機(jī)器的器。不同機(jī)器的PSWPSW格式和信息不完全相同。格式和信息不完全相同。PSWPSW的信息一的信息一般包括:般包括:CPUCPU工作狀態(tài)碼工作狀態(tài)碼指明內(nèi)核態(tài)
14、還是用戶態(tài)。指明內(nèi)核態(tài)還是用戶態(tài)。條件碼條件碼條件碼是條件碼是CPUCPU根據(jù)運(yùn)算結(jié)果由硬件設(shè)置的位根據(jù)運(yùn)算結(jié)果由硬件設(shè)置的位(或位段),指示當(dāng)前指令執(zhí)行結(jié)果的各種狀態(tài)信息,如:(或位段),指示當(dāng)前指令執(zhí)行結(jié)果的各種狀態(tài)信息,如:算術(shù)運(yùn)算產(chǎn)生的正、負(fù)、零或溢出等的結(jié)果算術(shù)運(yùn)算產(chǎn)生的正、負(fù)、零或溢出等的結(jié)果中斷屏蔽碼中斷屏蔽碼指出是否允許中斷指出是否允許中斷用戶態(tài)用戶態(tài)內(nèi)核態(tài)內(nèi)核態(tài) :轉(zhuǎn)換的唯一途徑是通過中斷。:轉(zhuǎn)換的唯一途徑是通過中斷。內(nèi)核態(tài)內(nèi)核態(tài)用戶態(tài)用戶態(tài) :通過修改:通過修改PSWPSW中的中的CPUCPU工作狀態(tài)工作狀態(tài)碼來實(shí)現(xiàn)。碼來實(shí)現(xiàn)。系統(tǒng)屏蔽系統(tǒng)屏蔽鑰鑰EMWP中斷碼中斷碼ILC
15、CC程序屏蔽程序屏蔽指令地址指令地址0711153133353963例:例:IBM370的的PSW鑰:用于存儲保護(hù)鑰:用于存儲保護(hù)EMWP:E表示機(jī)器控制方式(同步控制、異步控制表示機(jī)器控制方式(同步控制、異步控制 ),),M表示機(jī)器表示機(jī)器校驗(yàn)方式(奇偶、校驗(yàn)方式(奇偶、CRC),),W表示等待狀態(tài)位,表示等待狀態(tài)位,P表示處理器的工作表示處理器的工作狀態(tài)。狀態(tài)。ILC:上一次執(zhí)行指令的長度。:上一次執(zhí)行指令的長度。CC:條件值。:條件值。系統(tǒng)屏蔽:指出系統(tǒng)屏蔽:指出CPU是否接受特定通道的中斷(是否接受特定通道的中斷(I/O設(shè)備)。設(shè)備)。程序屏蔽:指示程序屏蔽:指示CPU是否接受某種程序
16、性中斷是否接受某種程序性中斷(系統(tǒng)調(diào)用系統(tǒng)調(diào)用)。1.2 中斷技術(shù)中斷技術(shù)操作系統(tǒng)是操作系統(tǒng)是 “中斷驅(qū)動中斷驅(qū)動” 的。中斷對操作系的。中斷對操作系統(tǒng)的重要性相當(dāng)于機(jī)械系統(tǒng)中的驅(qū)動齒輪。統(tǒng)的重要性相當(dāng)于機(jī)械系統(tǒng)中的驅(qū)動齒輪。中斷中斷協(xié)調(diào)計(jì)算機(jī)系統(tǒng)對各種外部事件的響協(xié)調(diào)計(jì)算機(jī)系統(tǒng)對各種外部事件的響應(yīng)和處理。應(yīng)和處理。中斷中斷是多任務(wù)實(shí)現(xiàn)的是多任務(wù)實(shí)現(xiàn)的必要條件。必要條件。什么是中斷?為什么要引入中斷?中斷是如何響應(yīng)和執(zhí)什么是中斷?為什么要引入中斷?中斷是如何響應(yīng)和執(zhí)行的?行的?為什么要引入中斷?為什么要引入中斷?解決主機(jī)與解決主機(jī)與I/O設(shè)備并行工作的問題設(shè)備并行工作的問題提高系統(tǒng)可靠性提高系
17、統(tǒng)可靠性實(shí)現(xiàn)多機(jī)聯(lián)系實(shí)現(xiàn)多機(jī)聯(lián)系方便應(yīng)用程序,方便應(yīng)用程序,實(shí)現(xiàn)實(shí)時(shí)控制實(shí)現(xiàn)實(shí)時(shí)控制 中斷:中斷:CPUCPU對系統(tǒng)內(nèi)外發(fā)生的異步事件的響應(yīng)過程。對系統(tǒng)內(nèi)外發(fā)生的異步事件的響應(yīng)過程。 中斷源中斷源(中斷事件):引起中斷發(fā)生的事件。(中斷事件):引起中斷發(fā)生的事件。 中斷處理程序中斷處理程序:處理中斷的程序代碼,也稱中斷例程,:處理中斷的程序代碼,也稱中斷例程,如:如:l鍵盤輸入鍵盤輸入l除溢出錯(cuò)誤的處理程序除溢出錯(cuò)誤的處理程序l設(shè)備故障處理程序設(shè)備故障處理程序l缺頁中斷處理程序等缺頁中斷處理程序等1.基本概念基本概念異步事件是指無一定時(shí)序關(guān)系隨機(jī)發(fā)生的事件。異步事件是指無一定時(shí)序關(guān)系隨機(jī)發(fā)生的
18、事件。2.中斷分類中斷分類(1 1)中斷:)中斷:又稱又稱I/OI/O中斷或異步中斷,由來自處中斷或異步中斷,由來自處理器和主存之外的中斷源引起的中斷,如時(shí)鐘中理器和主存之外的中斷源引起的中斷,如時(shí)鐘中斷,鍵盤中斷等來自于外部設(shè)備的中斷都屬于外斷,鍵盤中斷等來自于外部設(shè)備的中斷都屬于外中斷。外中斷是一種強(qiáng)迫性中斷,可屏蔽。中斷。外中斷是一種強(qiáng)迫性中斷,可屏蔽。(2 2)異常:)異常:也成同步中斷,應(yīng)用程序執(zhí)行過程中也成同步中斷,應(yīng)用程序執(zhí)行過程中發(fā)生的意想不到的行為,不可屏蔽。如:非法指發(fā)生的意想不到的行為,不可屏蔽。如:非法指令或內(nèi)存出錯(cuò)導(dǎo)致當(dāng)前指令執(zhí)行失敗令或內(nèi)存出錯(cuò)導(dǎo)致當(dāng)前指令執(zhí)行失?。?/p>
19、3 3)系統(tǒng)調(diào)用:)系統(tǒng)調(diào)用:應(yīng)用程序主動向操作系統(tǒng)發(fā)出的應(yīng)用程序主動向操作系統(tǒng)發(fā)出的服務(wù)請求,是戰(zhàn)役中自愿性中斷,可同步或異步服務(wù)請求,是戰(zhàn)役中自愿性中斷,可同步或異步響應(yīng)。如讀文件等。響應(yīng)。如讀文件等。3.中斷系統(tǒng)中斷系統(tǒng) 中斷系統(tǒng)中斷系統(tǒng)= =中斷硬件中斷硬件+ +中斷中斷軟件軟件中斷硬件中斷硬件中斷系統(tǒng)的機(jī)制部分,負(fù)責(zé)中斷掃描和響應(yīng)。中斷系統(tǒng)的機(jī)制部分,負(fù)責(zé)中斷掃描和響應(yīng)。l在在CPUCPU初始化時(shí)設(shè)置中斷使能標(biāo)志初始化時(shí)設(shè)置中斷使能標(biāo)志l根據(jù)中斷事件設(shè)置中斷標(biāo)志(獲取中斷號)根據(jù)中斷事件設(shè)置中斷標(biāo)志(獲取中斷號)l訪問中斷向量表,調(diào)用相應(yīng)的中斷服務(wù)例程訪問中斷向量表,調(diào)用相應(yīng)的中斷服
20、務(wù)例程 中斷中斷軟件軟件中斷系統(tǒng)的策略部分,執(zhí)行相應(yīng)的中斷處理中斷系統(tǒng)的策略部分,執(zhí)行相應(yīng)的中斷處理指令。指令。 現(xiàn)場保存現(xiàn)場保存 中斷服務(wù)處理(中斷服務(wù)例程)中斷服務(wù)處理(中斷服務(wù)例程) 清除中斷標(biāo)記(中斷服務(wù)例程)清除中斷標(biāo)記(中斷服務(wù)例程) 現(xiàn)場恢復(fù)現(xiàn)場恢復(fù)中斷處理過程中斷處理過程中斷請求中斷請求中斷判優(yōu)中斷判優(yōu)中斷響應(yīng)中斷響應(yīng)中斷服務(wù)中斷服務(wù)中斷返回中斷返回中斷硬件中斷硬件中斷處理程序中斷處理程序中斷處理過程中斷處理過程t=0t=7一一一一一一一一一一一一打印機(jī)中斷打印機(jī)中斷服務(wù)程序服務(wù)程序用戶程序用戶程序t=40中斷中斷響應(yīng)響應(yīng)中斷返中斷返回回(1)中斷硬件的基本功能)中斷硬件的基本
21、功能識別中斷源識別中斷源:通常用一個(gè)寄存器來存儲每個(gè)中:通常用一個(gè)寄存器來存儲每個(gè)中斷源的狀態(tài)信息,該寄存器的內(nèi)容稱為斷源的狀態(tài)信息,該寄存器的內(nèi)容稱為中斷字中斷字。斷點(diǎn)保護(hù)斷點(diǎn)保護(hù):程序計(jì)數(shù)器和:程序計(jì)數(shù)器和PSW的內(nèi)容入棧。的內(nèi)容入棧。why?提供中斷處理程序入口地址映射表提供中斷處理程序入口地址映射表(中斷向量(中斷向量表)等數(shù)據(jù)結(jié)構(gòu)。表)等數(shù)據(jù)結(jié)構(gòu)。非屏蔽中斷請求非屏蔽中斷請求中斷邏輯中斷邏輯中斷指令中斷指令I(lǐng)NTn溢出中斷溢出中斷INT0除法錯(cuò)除法錯(cuò)中斷中斷單步中斷單步中斷TF=1中斷控中斷控制器制器8259A可屏蔽性中斷請求可屏蔽性中斷請求INTRNMIIBM-PC中斷邏輯和中斷源
22、示意圖中斷邏輯和中斷源示意圖(2)中斷邏輯)中斷邏輯當(dāng)多個(gè)中斷源請求同時(shí)發(fā)生時(shí),由當(dāng)多個(gè)中斷源請求同時(shí)發(fā)生時(shí),由中斷邏輯電路中斷邏輯電路按中斷優(yōu)先級按中斷優(yōu)先級的高低來判定應(yīng)響應(yīng)哪個(gè)中斷請求。的高低來判定應(yīng)響應(yīng)哪個(gè)中斷請求。一次一次只能響應(yīng)當(dāng)前優(yōu)先級只能響應(yīng)當(dāng)前優(yōu)先級最高的最高的一個(gè)中斷一個(gè)中斷。(2)中斷邏輯)中斷邏輯接受和響應(yīng)中斷源的中斷請求的方法因機(jī)器而異接受和響應(yīng)中斷源的中斷請求的方法因機(jī)器而異,在在PCPC中:中:可屏蔽中斷請求可屏蔽中斷請求INTRINTR: :來自輸入輸出設(shè)備的來自輸入輸出設(shè)備的I/O中斷中斷, , 通過通過對對PSWPSW中的中斷屏蔽位可以屏蔽所有的中的中斷屏蔽
23、位可以屏蔽所有的I/O中斷。中斷。不可屏蔽中斷請求不可屏蔽中斷請求: :屬于機(jī)器故障中斷,包括內(nèi)存奇偶校驗(yàn)屬于機(jī)器故障中斷,包括內(nèi)存奇偶校驗(yàn)錯(cuò)以及掉電等中斷源產(chǎn)生的中斷。錯(cuò)以及掉電等中斷源產(chǎn)生的中斷。程序性中斷程序性中斷(如溢出、除法錯(cuò)都可以引起中斷)和軟件中(如溢出、除法錯(cuò)都可以引起中斷)和軟件中斷等。斷等。為了區(qū)分和不丟失中斷信號,用固定為了區(qū)分和不丟失中斷信號,用固定觸發(fā)器觸發(fā)器來來寄存每個(gè)寄存每個(gè)中斷源的中斷源的中斷信號。一般規(guī)定:值為中斷信號。一般規(guī)定:值為1 1時(shí),表示有中斷信號,為時(shí),表示有中斷信號,為0 0時(shí)表示無中斷信號。時(shí)表示無中斷信號。所有中斷源的觸發(fā)器組成中斷寄存器,每
24、個(gè)觸所有中斷源的觸發(fā)器組成中斷寄存器,每個(gè)觸發(fā)器對應(yīng)中斷寄存器中的一個(gè)中斷位。發(fā)器對應(yīng)中斷寄存器中的一個(gè)中斷位。(3)中斷寄存器)中斷寄存器集成于集成于CPU控制部件中,用于檢測是否有中斷發(fā)生的機(jī)構(gòu)??刂撇考校糜跈z測是否有中斷發(fā)生的機(jī)構(gòu)。在每條指令執(zhí)行周期的在每條指令執(zhí)行周期的最后時(shí)刻(中斷周期)最后時(shí)刻(中斷周期)掃描中斷寄存掃描中斷寄存器,詢問是否有中斷信號。若無中斷信號,繼續(xù)執(zhí)行下一條器,詢問是否有中斷信號。若無中斷信號,繼續(xù)執(zhí)行下一條指令;否則,中斷硬件將該中斷觸發(fā)器內(nèi)容按規(guī)定編碼送入指令;否則,中斷硬件將該中斷觸發(fā)器內(nèi)容按規(guī)定編碼送入PSWPSW的相應(yīng)位(中斷碼)。的相應(yīng)位(中斷
25、碼)。 (4)中斷掃描機(jī)構(gòu)中斷掃描機(jī)構(gòu)允許允許中斷中斷開始開始取下一條指令取下一條指令執(zhí)行指令執(zhí)行指令停止停止檢查處理中斷檢查處理中斷不允許中斷不允許中斷中斷周期中斷周期執(zhí)行周期執(zhí)行周期取指周期取指周期(5)中斷響應(yīng))中斷響應(yīng)CPU接收到來自于不同中斷源的中斷請求后,接收到來自于不同中斷源的中斷請求后,需要及時(shí)地響應(yīng)中斷。需要及時(shí)地響應(yīng)中斷。中斷響應(yīng)是中斷硬件對中斷事件做出響應(yīng)的過中斷響應(yīng)是中斷硬件對中斷事件做出響應(yīng)的過程程 。任一時(shí)刻,任一時(shí)刻,CPU只能響應(yīng)一個(gè)中斷只能響應(yīng)一個(gè)中斷。中斷系統(tǒng)。中斷系統(tǒng)需要按照各個(gè)中斷源的優(yōu)先級,選擇具有最高需要按照各個(gè)中斷源的優(yōu)先級,選擇具有最高優(yōu)先級的中
26、斷進(jìn)行響應(yīng),這個(gè)過程稱為中斷判優(yōu)先級的中斷進(jìn)行響應(yīng),這個(gè)過程稱為中斷判優(yōu)。優(yōu)。 如何響應(yīng)當(dāng)前選擇的中斷,執(zhí)行相應(yīng)的中斷服務(wù)例程?如何響應(yīng)當(dāng)前選擇的中斷,執(zhí)行相應(yīng)的中斷服務(wù)例程?(5)中斷響應(yīng)中斷響應(yīng)CPUCPU如何響應(yīng)中斷如何響應(yīng)中斷, , 兩個(gè)問題:兩個(gè)問題: CPUCPU何時(shí)響應(yīng)中斷?何時(shí)響應(yīng)中斷? 通常在通常在CPUCPU執(zhí)行了一條指令以后,更確切地,在執(zhí)行了一條指令以后,更確切地,在指令周期指令周期最后時(shí)刻最后時(shí)刻掃描中斷寄存器,接受中斷請求掃描中斷寄存器,接受中斷請求 。 如何獲知提出中斷請求的設(shè)備或中斷源?如何獲知提出中斷請求的設(shè)備或中斷源?l用用軟件指令軟件指令去查詢各設(shè)備接口,
27、比較費(fèi)時(shí)(非向量中去查詢各設(shè)備接口,比較費(fèi)時(shí)(非向量中斷)。斷)。l使用使用 “中斷向量表中斷向量表” (向量中斷)。(向量中斷)。非向量中斷非向量中斷:總是轉(zhuǎn)向中斷查詢程序的入口地址,執(zhí)行終端:總是轉(zhuǎn)向中斷查詢程序的入口地址,執(zhí)行終端查詢程序,以確定被優(yōu)先批準(zhǔn)的中斷源,然后分支進(jìn)入相應(yīng)查詢程序,以確定被優(yōu)先批準(zhǔn)的中斷源,然后分支進(jìn)入相應(yīng)的中斷服務(wù)程序。的中斷服務(wù)程序。每個(gè)中斷有一個(gè)唯一的每個(gè)中斷有一個(gè)唯一的中斷向量號中斷向量號(通常(通常為中斷類型號)。中斷向量號通常按照從為中斷類型號)。中斷向量號通常按照從小到大的順序存放在中斷向量表中小到大的順序存放在中斷向量表中 。中斷向量表一般存放在
28、主存儲器的固定區(qū)中斷向量表一般存放在主存儲器的固定區(qū)域中。域中。(6)中斷向量)中斷向量(6)中斷向量)中斷向量向量地址向量地址排隊(duì)器輸出排隊(duì)器輸出 顯示器服務(wù)程序顯示器服務(wù)程序 打印機(jī)服務(wù)程序打印機(jī)服務(wù)程序JMP 400JMP 300JMP 200主存主存12H13H14H200300向量地址向量地址入口地址入口地址入口地址入口地址 設(shè)備設(shè)備編碼器編碼器1 0 0 0000100100 1 0 000010011由由 硬件產(chǎn)生中斷向量地址,硬件產(chǎn)生中斷向量地址,再由中斷向量地址找到中斷服再由中斷向量地址找到中斷服務(wù)程序的入口地址。務(wù)程序的入口地址。例:例: 8088的中斷向量表的中斷向量表2
29、55255號向量號向量 3232號向量號向量3131號向量號向量 5 5號向量號向量 4 4號向量(溢出)號向量(溢出)3 3號向量(斷點(diǎn))號向量(斷點(diǎn))2 2號向量(號向量(NMINMI) 1 1號向量(單步)號向量(單步) 0 0號向量(除法錯(cuò))號向量(除法錯(cuò)) 003FFH003FFH003FCH003FCH00080H00080H0007CH0007CH00014H00014H 00012H00012H 0000CH0000CH 00008H00008H 00004H00004H 00000H00000H 專用專用 中斷向量中斷向量(5 5個(gè))個(gè))系統(tǒng)保留系統(tǒng)保留 中斷向量中斷向量(2
30、727個(gè))個(gè))用戶可用用戶可用 中斷向量中斷向量(224224個(gè))個(gè))8088系統(tǒng)的中斷系統(tǒng)的中斷向量表占用了系向量表占用了系統(tǒng)主存最低端的統(tǒng)主存最低端的1KB的空間,共的空間,共存儲了存儲了256個(gè)中斷個(gè)中斷向量向量 (7)中斷處理過程)中斷處理過程中斷源發(fā)出一個(gè)中斷信號中斷源發(fā)出一個(gè)中斷信號CPU完成當(dāng)前指令的執(zhí)行,掃完成當(dāng)前指令的執(zhí)行,掃描中斷信號描中斷信號CPU發(fā)送中斷應(yīng)答信號發(fā)送中斷應(yīng)答信號CPU將將PSW、IP和和CS壓入棧中壓入棧中(斷點(diǎn))(斷點(diǎn))保存剩余的處理器保存剩余的處理器狀態(tài)信息狀態(tài)信息恢復(fù)中斷前的恢復(fù)中斷前的PSW、IP和和CS開中斷開中斷處理中斷處理中斷中斷服務(wù)程序的
31、入口地址送入中斷服務(wù)程序的入口地址送入IP和和CS硬件操作硬件操作中斷處理子程序中斷處理子程序關(guān)閉中斷關(guān)閉中斷恢復(fù)處理器狀態(tài)信息恢復(fù)處理器狀態(tài)信息中斷隱指令中斷隱指令-CPU響應(yīng)中斷之后,經(jīng)過響應(yīng)中斷之后,經(jīng)過某些操作某些操作轉(zhuǎn)去執(zhí)行轉(zhuǎn)去執(zhí)行中斷服務(wù)程序,這些操作是由硬件直接實(shí)現(xiàn),稱為中斷隱指令。中斷服務(wù)程序,這些操作是由硬件直接實(shí)現(xiàn),稱為中斷隱指令。中斷隱指令是指中斷隱指令是指不在指令系統(tǒng)中的指令,其功能包括保護(hù)程序不在指令系統(tǒng)中的指令,其功能包括保護(hù)程序斷點(diǎn)、硬件關(guān)中斷、向量地址送斷點(diǎn)、硬件關(guān)中斷、向量地址送PCPC(硬件向量法)或中斷識別(硬件向量法)或中斷識別程序入口地址送程序入口地址
32、送PCPC(軟件查詢法)。(軟件查詢法)。 例:匯編中例:匯編中int指令的執(zhí)行過程指令的執(zhí)行過程CPU 執(zhí)行執(zhí)行int n指令,相當(dāng)于引發(fā)一個(gè)指令,相當(dāng)于引發(fā)一個(gè) n號中斷的號中斷的中斷過程,執(zhí)行過程如下:中斷過程,執(zhí)行過程如下:n(1)取中斷類型碼)取中斷類型碼n;n(2)標(biāo)志寄存器入棧,)標(biāo)志寄存器入棧,IF = 0,TF = 0;/* IF=0 CPU關(guān)閉關(guān)閉中斷;中斷;TF 單步調(diào)試單步調(diào)試標(biāo)記,標(biāo)記,TF=0機(jī)器處在連續(xù)工作方式機(jī)器處在連續(xù)工作方式*/n(3)CS、IP入棧;入棧;n(4)(IP) = (n*4),(CS) = (n*4+2)。IPCS低低高高5.多級中斷(多重中斷
33、)多級中斷(多重中斷)多數(shù)微型多數(shù)微型CPUCPU支持多級中斷系統(tǒng),可以有多根中斷請求線支持多級中斷系統(tǒng),可以有多根中斷請求線(級)從不同設(shè)備連接到中斷邏輯電路上。(級)從不同設(shè)備連接到中斷邏輯電路上。具有相同特性和優(yōu)先級的設(shè)備可連到同一中斷級上,由中具有相同特性和優(yōu)先級的設(shè)備可連到同一中斷級上,由中斷排隊(duì)器(硬件)決定當(dāng)前響應(yīng)哪個(gè)中斷源。斷排隊(duì)器(硬件)決定當(dāng)前響應(yīng)哪個(gè)中斷源。在多級中斷系統(tǒng)中,可能同時(shí)有多個(gè)中斷請求,這時(shí)在多級中斷系統(tǒng)中,可能同時(shí)有多個(gè)中斷請求,這時(shí)CPUCPU接受中斷優(yōu)先級最高的中斷,忽略較低優(yōu)先級的中斷。接受中斷優(yōu)先級最高的中斷,忽略較低優(yōu)先級的中斷。高高優(yōu)先級的中斷可
34、以打斷優(yōu)先級的中斷可以打斷低低優(yōu)先級的中斷。優(yōu)先級的中斷。例:例:假設(shè)某系統(tǒng)中有兩個(gè)設(shè)備:打印機(jī)和磁盤,它們的中斷優(yōu)假設(shè)某系統(tǒng)中有兩個(gè)設(shè)備:打印機(jī)和磁盤,它們的中斷優(yōu)先級分別為先級分別為2 2和和4 4,若打印機(jī)的中斷請求先到達(dá),若打印機(jī)的中斷請求先到達(dá),且且打印機(jī)中斷打印機(jī)中斷服務(wù)程序在運(yùn)行過程中,服務(wù)程序在運(yùn)行過程中,來了來了一個(gè)磁盤中斷請求。一個(gè)磁盤中斷請求。 t=0t=7t=15一一一一一一一一一一一一一一一一一一一磁盤中斷服務(wù)磁盤中斷服務(wù)程序程序打印機(jī)中斷打印機(jī)中斷服務(wù)程序服務(wù)程序用戶程序用戶程序t=25t=40產(chǎn)生的中斷嵌套如下圖:產(chǎn)生的中斷嵌套如下圖:1.3 系統(tǒng)調(diào)用系統(tǒng)調(diào)用1.
35、為什么要為什么要引入引入系統(tǒng)調(diào)用功能?系統(tǒng)調(diào)用功能?只有操作系統(tǒng)內(nèi)核執(zhí)行特權(quán)指令,訪問操作系統(tǒng)內(nèi)核數(shù)據(jù)。只有操作系統(tǒng)內(nèi)核執(zhí)行特權(quán)指令,訪問操作系統(tǒng)內(nèi)核數(shù)據(jù)。在在多任務(wù)系統(tǒng)中,程序的運(yùn)行空間分為多任務(wù)系統(tǒng)中,程序的運(yùn)行空間分為用戶空間用戶空間和和內(nèi)核空間內(nèi)核空間,它們在邏輯上是相互隔離的,用戶程序不能訪問內(nèi)核數(shù)據(jù),它們在邏輯上是相互隔離的,用戶程序不能訪問內(nèi)核數(shù)據(jù),也無法,也無法訪問訪問內(nèi)核函數(shù)。內(nèi)核函數(shù)。系統(tǒng)調(diào)用是操作系統(tǒng)系統(tǒng)調(diào)用是操作系統(tǒng)服務(wù)的編程接口服務(wù)的編程接口,應(yīng)用程序應(yīng)用程序通過系統(tǒng)調(diào)通過系統(tǒng)調(diào)用可以進(jìn)入用可以進(jìn)入內(nèi)核內(nèi)核態(tài),調(diào)用內(nèi)核函數(shù),訪問內(nèi)核數(shù)據(jù)。態(tài),調(diào)用內(nèi)核函數(shù),訪問內(nèi)核數(shù)據(jù)
36、。 系統(tǒng)調(diào)用依賴于計(jì)算機(jī)硬件,一般用匯編代碼編寫,并系統(tǒng)調(diào)用依賴于計(jì)算機(jī)硬件,一般用匯編代碼編寫,并以庫函數(shù)形式提供給應(yīng)用程序(如以庫函數(shù)形式提供給應(yīng)用程序(如C語言程序)使用。語言程序)使用。所有的庫函數(shù)都是系統(tǒng)調(diào)用嗎?所有的庫函數(shù)都是系統(tǒng)調(diào)用嗎?1.3 系統(tǒng)調(diào)用系統(tǒng)調(diào)用2.什么是系統(tǒng)調(diào)用?什么是系統(tǒng)調(diào)用? 系統(tǒng)調(diào)用是操作系統(tǒng)內(nèi)核提供的用于實(shí)現(xiàn)各種系統(tǒng)功能系統(tǒng)調(diào)用是操作系統(tǒng)內(nèi)核提供的用于實(shí)現(xiàn)各種系統(tǒng)功能的一組子程序的一組子程序(用戶程序?qū)Σ僮飨到y(tǒng)內(nèi)核模塊的調(diào)用用戶程序?qū)Σ僮飨到y(tǒng)內(nèi)核模塊的調(diào)用):應(yīng)用程序通過系統(tǒng)調(diào)用訪問系統(tǒng)硬件和其他操作系統(tǒng)資應(yīng)用程序通過系統(tǒng)調(diào)用訪問系統(tǒng)硬件和其他操作系統(tǒng)資源
37、,如:源,如:l外存文件與目錄的讀寫。外存文件與目錄的讀寫。l各種各種I/O設(shè)備的使用設(shè)備的使用l在一個(gè)應(yīng)用程序中啟動另一個(gè)應(yīng)用程序在一個(gè)應(yīng)用程序中啟動另一個(gè)應(yīng)用程序l查詢和統(tǒng)計(jì)系統(tǒng)資源使用情查詢和統(tǒng)計(jì)系統(tǒng)資源使用情完成對硬件和資源的訪問控制。完成對硬件和資源的訪問控制。硬件設(shè)備的抽象(提供設(shè)備獨(dú)立性)。硬件設(shè)備的抽象(提供設(shè)備獨(dú)立性)。例:UNIX/Linux的系統(tǒng)結(jié)構(gòu)系統(tǒng)調(diào)用接口通過庫把函數(shù)調(diào)用映射成進(jìn)入操作系統(tǒng)核心所系統(tǒng)調(diào)用接口通過庫把函數(shù)調(diào)用映射成進(jìn)入操作系統(tǒng)核心所需要的原語。需要的原語。 POSIX( Portable Operating System Interface) )中的進(jìn)
38、程和文件管理的主要系統(tǒng)調(diào)用)中的進(jìn)程和文件管理的主要系統(tǒng)調(diào)用 例例2:LINUX系統(tǒng)調(diào)用簡介系統(tǒng)調(diào)用簡介n已經(jīng)提到的系統(tǒng)調(diào)用已經(jīng)提到的系統(tǒng)調(diào)用fork(), exec(),open(),read(),write(),close()Linux系統(tǒng)調(diào)用有二百五十多個(gè)系統(tǒng)調(diào)用有二百五十多個(gè)n應(yīng)用程序及系統(tǒng)調(diào)用的層次關(guān)系應(yīng)用程序及系統(tǒng)調(diào)用的層次關(guān)系 應(yīng)用程序應(yīng)用程序 C庫庫(libc.a) 系統(tǒng)調(diào)用系統(tǒng)調(diào)用 調(diào)用調(diào)用 printf() write() printf(); write () 系統(tǒng)調(diào)用與普通的函數(shù)調(diào)用很相似,但普通函數(shù)調(diào)用不能系統(tǒng)調(diào)用與普通的函數(shù)調(diào)用很相似,但普通函數(shù)調(diào)用不能引起進(jìn)程從用戶
39、態(tài)到核心態(tài)的轉(zhuǎn)換。引起進(jìn)程從用戶態(tài)到核心態(tài)的轉(zhuǎn)換。這個(gè)過程是如何實(shí)現(xiàn)的呢?這個(gè)過程是如何實(shí)現(xiàn)的呢?中斷!中斷!應(yīng)用程序?qū)Σ僮飨到y(tǒng)的間接調(diào)用過程應(yīng)用程序?qū)Σ僮飨到y(tǒng)的間接調(diào)用過程嵌入嵌入形成形成A=A+1printf()B=B+AINTA=A+1INTB=B+AINOUT用戶用戶程序段程序段源程序段源程序段目標(biāo)代碼目標(biāo)代碼printf的操作系統(tǒng)的操作系統(tǒng) 內(nèi)核代碼內(nèi)核代碼庫函數(shù)庫函數(shù)printf目標(biāo)目標(biāo) 代碼代碼陷入指令陷入指令系統(tǒng)調(diào)用的實(shí)現(xiàn)系統(tǒng)調(diào)用的實(shí)現(xiàn)LINUX系統(tǒng)調(diào)用加載系統(tǒng)調(diào)用加載n操作系統(tǒng)加載時(shí)與系統(tǒng)調(diào)用有關(guān)的處理操作系統(tǒng)加載時(shí)與系統(tǒng)調(diào)用有關(guān)的處理(int 80h 是是 unix/lin
40、ux 類操作系統(tǒng)內(nèi)核在類操作系統(tǒng)內(nèi)核在 Intel CPU架構(gòu)上作架構(gòu)上作為系統(tǒng)調(diào)用為系統(tǒng)調(diào)用 使用的中斷號使用的中斷號 )int 80h 中斷處理程序地址的加載中斷處理程序地址的加載start_kernel() - trap_init() /硬件中斷向量初始函數(shù)硬件中斷向量初始函數(shù) -set_system_gate(SYSCALL_VECTOR.&system_call) / 參見參見http:/lxr.linux.no各系統(tǒng)調(diào)用處理程序的加載各系統(tǒng)調(diào)用處理程序的加載 系統(tǒng)調(diào)用總控程序系統(tǒng)調(diào)用總控程序 System_call在在Entry.S中(中(arch/i386/kernel)
41、系統(tǒng)調(diào)用表在啟動時(shí)加載(系統(tǒng)調(diào)用表在啟動時(shí)加載(unistd.h中定義中定義系統(tǒng)調(diào)用系統(tǒng)調(diào)用號)號)系統(tǒng)一般系統(tǒng)一般都都配置配置有特定指令有特定指令,使進(jìn)程的執(zhí)行由用戶態(tài)轉(zhuǎn)換為核使進(jìn)程的執(zhí)行由用戶態(tài)轉(zhuǎn)換為核心態(tài),這種指令心態(tài),這種指令通常通常稱作陷入(稱作陷入( trap)指令指令。進(jìn)程通過執(zhí)行陷。進(jìn)程通過執(zhí)行陷入指令,便可入指令,便可進(jìn)入進(jìn)入核心態(tài)核心態(tài)運(yùn)行運(yùn)行系統(tǒng)調(diào)用代碼。系統(tǒng)調(diào)用代碼。Linux 的的x86平平臺臺上的這條陷入上的這條陷入指令是指令是int 0 x80h.LINUX系統(tǒng)調(diào)用實(shí)現(xiàn)原理系統(tǒng)調(diào)用實(shí)現(xiàn)原理 | | | -| -| System Call iSystem Call
42、i | | 訪問設(shè)備訪問設(shè)備 | | | sys_read() | | | | sys_read() | . i . i3 | | | |3 | | | | system_call(i) |- | | system_call(i) |- | | 訪問內(nèi)部函訪問內(nèi)部函數(shù)數(shù) read() | | | read() | | | . j . j20 | | |20 | | | system_call(j) |- | | system_call(j) |- | | get_pid() | | | | get_pid() | | | | . | -| . | -| System Call jSystem
43、Call j | | 訪問內(nèi)核數(shù)訪問內(nèi)核數(shù)據(jù)結(jié)構(gòu)據(jù)結(jié)構(gòu) | | sys_getpid()| | | sys_getpid()|LINUX系統(tǒng)調(diào)用實(shí)現(xiàn)代碼系統(tǒng)調(diào)用實(shí)現(xiàn)代碼1int80h in 2.4.xn202 ENTRY(system_call) n203 pushl %eax # save orig_eax,eax存放系 #統(tǒng)調(diào)用序號 n204 SAVE_ALL n205 GET_CURRENT(%ebx) n206 testb $0 x02,tsk_ptrace(%ebx) # PT_TRACESYS n207 jne tracesys n208 cmpl $(NR_syscalls),%
44、eax n209 jae badsys n210 call *SYMBOL_NAME(sys_call_table)(,%eax,4) n211 movl %eax,EAX(%esp) # save the return value n212 ENTRY(ret_from_sys_call) #define _syscall0(type,name) 298 type name(void) 299 300 long _res; 301 _asm_ volatile (int $0 x80 302 : =a (_res) 303 : (_NR_#name); 304 _syscall_return
45、(type,_res); 305 _syscall0(int,fork) int fork(void) “int 80 with _NR_fork” / 2 LINUX系統(tǒng)調(diào)用實(shí)現(xiàn)系統(tǒng)調(diào)用實(shí)現(xiàn)_syscall0 代碼代碼系統(tǒng)調(diào)用與普系統(tǒng)調(diào)用與普通的函數(shù)調(diào)用通的函數(shù)調(diào)用過程很相似,過程很相似,只是被調(diào)用的只是被調(diào)用的代碼是操作系代碼是操作系統(tǒng)核心代碼,統(tǒng)核心代碼,需要在核心態(tài)需要在核心態(tài)下運(yùn)行。下運(yùn)行。2.系統(tǒng)調(diào)用處理過程系統(tǒng)調(diào)用處理過程read(fd,buffer,nbytes)的系統(tǒng)調(diào)用過程的系統(tǒng)調(diào)用過程內(nèi)內(nèi)核核空空間間保存現(xiàn)場和相關(guān)參數(shù),執(zhí)行系統(tǒng)調(diào)用處保存現(xiàn)場和相關(guān)參數(shù),執(zhí)行系統(tǒng)調(diào)用處理程
46、序理程序根據(jù)系統(tǒng)調(diào)用號和系統(tǒng)調(diào)用表,獲得系根據(jù)系統(tǒng)調(diào)用號和系統(tǒng)調(diào)用表,獲得系統(tǒng)調(diào)用處理程序的入口地址統(tǒng)調(diào)用處理程序的入口地址陷入內(nèi)核陷入內(nèi)核Trap把把read系統(tǒng)調(diào)用號存放到寄存器中系統(tǒng)調(diào)用號存放到寄存器中返回調(diào)用者返回調(diào)用者參數(shù)參數(shù)fd,buffer,nbytes入棧入棧調(diào)用調(diào)用read的用戶程序的用戶程序庫過程庫過程read用用戶戶空空間間調(diào)用庫過程調(diào)用庫過程read系統(tǒng)調(diào)用與函數(shù)調(diào)用的不同系統(tǒng)調(diào)用與函數(shù)調(diào)用的不同系統(tǒng)調(diào)用和函數(shù)庫的關(guān)系系統(tǒng)調(diào)用和函數(shù)庫的關(guān)系 系統(tǒng)調(diào)用系統(tǒng)調(diào)用能能引起進(jìn)程從用戶態(tài)到核心態(tài)的轉(zhuǎn)換引起進(jìn)程從用戶態(tài)到核心態(tài)的轉(zhuǎn)換,普,普通函數(shù)調(diào)用不能。通函數(shù)調(diào)用不能。 函數(shù)庫中
47、的函數(shù)可以不調(diào)用系統(tǒng)調(diào)用程序,也可以函數(shù)庫中的函數(shù)可以不調(diào)用系統(tǒng)調(diào)用程序,也可以調(diào)用多個(gè)系統(tǒng)調(diào)用。調(diào)用多個(gè)系統(tǒng)調(diào)用。 高級編程也可以直接高級編程也可以直接使用系統(tǒng)調(diào)用中斷(如,使用系統(tǒng)調(diào)用中斷(如,int 0 x80h)進(jìn)入系統(tǒng)調(diào)用,而不必通過函數(shù)庫作為進(jìn)入系統(tǒng)調(diào)用,而不必通過函數(shù)庫作為中介。中介。 在核心編程可以使用系統(tǒng)調(diào)用中斷進(jìn)入系統(tǒng)調(diào)用,在核心編程可以使用系統(tǒng)調(diào)用中斷進(jìn)入系統(tǒng)調(diào)用,此時(shí)不能使用函數(shù)庫。此時(shí)不能使用函數(shù)庫。3.系統(tǒng)調(diào)用表系統(tǒng)調(diào)用表系統(tǒng)調(diào)用表記錄了所有系統(tǒng)系統(tǒng)調(diào)用表記錄了所有系統(tǒng)調(diào)用處理函數(shù)的入口地址,調(diào)用處理函數(shù)的入口地址,通過系統(tǒng)調(diào)用號查看系統(tǒng)調(diào)通過系統(tǒng)調(diào)用號查看系統(tǒng)調(diào)用
48、表就能用表就能獲得相應(yīng)的獲得相應(yīng)的內(nèi)核函內(nèi)核函數(shù)入口地址。數(shù)入口地址。 與中斷一樣,每個(gè)系統(tǒng)調(diào)用與中斷一樣,每個(gè)系統(tǒng)調(diào)用都都擁有一個(gè)唯一的系統(tǒng)調(diào)用擁有一個(gè)唯一的系統(tǒng)調(diào)用號。號。 系統(tǒng)調(diào)用通常是通過特殊的系統(tǒng)調(diào)用通常是通過特殊的硬件指令和中斷來實(shí)現(xiàn)的。硬件指令和中斷來實(shí)現(xiàn)的。操作系統(tǒng)通常用一個(gè)或少數(shù)操作系統(tǒng)通常用一個(gè)或少數(shù)幾個(gè)中斷號來幾個(gè)中斷號來映射映射系統(tǒng)中所系統(tǒng)中所有的系統(tǒng)調(diào)用。如有的系統(tǒng)調(diào)用。如LinuxLinux系系統(tǒng)使用統(tǒng)使用0 x800 x80號中斷作為所有號中斷作為所有系統(tǒng)調(diào)用的入口;系統(tǒng)調(diào)用的入口;i386i386的的Windows Windows 系統(tǒng)使用系統(tǒng)使用0 x2E0
49、x2E號中號中斷作為大多數(shù)系統(tǒng)調(diào)用的入斷作為大多數(shù)系統(tǒng)調(diào)用的入口口。ENTRY(sys_call_table) ENTRY(sys_call_table) .long SYMBOL_NAME(sys_ni_syscall) .long SYMBOL_NAME(sys_ni_syscall) .long SYMBOL_NAME(sys_exit) .long SYMBOL_NAME(sys_exit) .long SYMBOL_NAME(sys_fork) .long SYMBOL_NAME(sys_fork) .long SYMBOL_NAME(sys_read) .long SYMBOL_N
50、AME(sys_read) .long SYMBOL_NAME(sys_write) .long SYMBOL_NAME(sys_write) . . . . . . . . . . .Linux的系統(tǒng)調(diào)用表的系統(tǒng)調(diào)用表4.應(yīng)用程序使用操作系統(tǒng)的方式應(yīng)用程序使用操作系統(tǒng)的方式三種:三種:系統(tǒng)調(diào)用系統(tǒng)調(diào)用中斷中斷獨(dú)立程序(不以任何方式使用操作系統(tǒng),包獨(dú)立程序(不以任何方式使用操作系統(tǒng),包括啟動和結(jié)束。)括啟動和結(jié)束。)存儲器層次存儲器層次主存儲器與主存儲器與MMU高速緩存高速緩存磁盤存儲器磁盤存儲器1.4 存儲器系統(tǒng)存儲器系統(tǒng)寄存器寄存器高速緩存高速緩存主存主存磁盤磁盤光盤光盤磁帶磁帶板上存儲器
51、板上存儲器板外存儲器板外存儲器1. 存儲器層次存儲器層次容量容量速度,價(jià)格速度,價(jià)格2. 主存儲器與主存儲器與MMU(1)主存儲器)主存儲器主存是主板上的一種存儲部件,是主存是主板上的一種存儲部件,是CPU可以直接訪問的唯一可以直接訪問的唯一的大容量存儲區(qū)域。的大容量存儲區(qū)域。 CPU訪問的指令和數(shù)據(jù)必須存放在的訪問的指令和數(shù)據(jù)必須存放在的主存中。主存中。字節(jié)是主存的最小編址單位,主存由一個(gè)存儲字的陣列組成字節(jié)是主存的最小編址單位,主存由一個(gè)存儲字的陣列組成,每個(gè)字由一個(gè)唯一的地址。,每個(gè)字由一個(gè)唯一的地址。為簡化主存的分配和管理,現(xiàn)代計(jì)算機(jī)系統(tǒng)通常把主存儲器為簡化主存的分配和管理,現(xiàn)代計(jì)算機(jī)
52、系統(tǒng)通常把主存儲器分成若干個(gè)存儲塊,并以存儲塊作為主存分配單位。分成若干個(gè)存儲塊,并以存儲塊作為主存分配單位。 (2)存儲訪問的局部性原理)存儲訪問的局部性原理存儲器訪問局部性是引入多層次存儲器系統(tǒng)的重要基礎(chǔ)存儲器訪問局部性是引入多層次存儲器系統(tǒng)的重要基礎(chǔ) ,表現(xiàn)為表現(xiàn)為時(shí)間局部性時(shí)間局部性和和空間局部性空間局部性。程序執(zhí)行時(shí),通常會有循環(huán)和子程序調(diào)用,一旦進(jìn)入這樣程序執(zhí)行時(shí),通常會有循環(huán)和子程序調(diào)用,一旦進(jìn)入這樣的程序段,就會重復(fù)存取相同的指令集合。的程序段,就會重復(fù)存取相同的指令集合。數(shù)據(jù)存取也有局部性。如訪問一個(gè)較大規(guī)模的數(shù)組,在較數(shù)據(jù)存取也有局部性。如訪問一個(gè)較大規(guī)模的數(shù)組,在較短的時(shí)
53、間內(nèi),數(shù)據(jù)的讀取穩(wěn)定地保持在存儲器的一個(gè)局部區(qū)短的時(shí)間內(nèi),數(shù)據(jù)的讀取穩(wěn)定地保持在存儲器的一個(gè)局部區(qū)域內(nèi)。域內(nèi)。2. 主存儲器與主存儲器與MMUMMU(3 3)存儲保護(hù))存儲保護(hù)為使多個(gè)程序同時(shí)運(yùn)行時(shí)為使多個(gè)程序同時(shí)運(yùn)行時(shí)在主存空間上在主存空間上互不侵犯,互不侵犯,需要對主存中的信息加以嚴(yán)格保護(hù)。常用的存需要對主存中的信息加以嚴(yán)格保護(hù)。常用的存儲保護(hù)方式有兩種:儲保護(hù)方式有兩種:地址寄存器(界限寄存器)地址寄存器(界限寄存器)存儲鍵存儲鍵2. 主存儲器與主存儲器與MMUMMU(1)界地址寄存器(界限寄存器)界地址寄存器(界限寄存器)界地址寄存器界地址寄存器是廣泛使用的一種存儲保護(hù)技術(shù)。是廣泛使用
54、的一種存儲保護(hù)技術(shù)。通過在通過在CPUCPU中設(shè)置一對界限寄存器:中設(shè)置一對界限寄存器:下限寄存器下限寄存器和和上限寄上限寄存器,存器,來存放用戶作業(yè)在主存中的下限地址和上限地址。來存放用戶作業(yè)在主存中的下限地址和上限地址。每當(dāng)每當(dāng)CPUCPU要訪問主存,硬件自動將被當(dāng)前訪問地址與界限要訪問主存,硬件自動將被當(dāng)前訪問地址與界限寄存器的內(nèi)容進(jìn)行比較,以判斷是否越界,如果未越界,寄存器的內(nèi)容進(jìn)行比較,以判斷是否越界,如果未越界,則按此地址訪問主存,否則將產(chǎn)生越界中斷則按此地址訪問主存,否則將產(chǎn)生越界中斷越界中斷越界中斷(存儲保護(hù)中斷)。(存儲保護(hù)中斷)。也可將也可將界地址寄存器中的界地址寄存器中的
55、一個(gè)寄存器作為基址寄存器,另一一個(gè)寄存器作為基址寄存器,另一寄存器作為限長寄存器(指示存儲區(qū)長度)。寄存器作為限長寄存器(指示存儲區(qū)長度)。界地址寄存器界地址寄存器存儲保護(hù)技術(shù)存儲保護(hù)技術(shù)(2)存儲鍵)存儲鍵每個(gè)存儲塊分配一個(gè)由二進(jìn)位組成的每個(gè)存儲塊分配一個(gè)由二進(jìn)位組成的存儲保護(hù)鍵。存儲保護(hù)鍵。作業(yè)被允許進(jìn)入主存時(shí),作業(yè)被允許進(jìn)入主存時(shí),OSOS分為它分配一個(gè)唯一的存儲鍵分為它分配一個(gè)唯一的存儲鍵號。號。分配給作業(yè)存儲塊的存儲鍵與作業(yè)的存儲鍵號相同。分配給作業(yè)存儲塊的存儲鍵與作業(yè)的存儲鍵號相同。運(yùn)行一個(gè)作業(yè)時(shí),運(yùn)行一個(gè)作業(yè)時(shí), OS OS將將當(dāng)前當(dāng)前作業(yè)的存儲鍵號存入作業(yè)的存儲鍵號存入PSWP
56、SW的存的存儲鍵(儲鍵(“鑰匙鑰匙”)域中。當(dāng))域中。當(dāng)CPUCPU訪問主存時(shí),將該主存塊的存訪問主存時(shí),將該主存塊的存儲鍵與儲鍵與PSWPSW中的中的“鑰匙鑰匙”進(jìn)行比較,如果匹配,則允許訪問,進(jìn)行比較,如果匹配,則允許訪問,否則,拒絕并報(bào)警。否則,拒絕并報(bào)警。(3 3)MMUMMUMMU (Memory Management Unit,主存管理單元)是,主存管理單元)是CPU中用來管理虛擬存儲器、物理存儲器的控制線路,負(fù)責(zé)中用來管理虛擬存儲器、物理存儲器的控制線路,負(fù)責(zé)將虛擬地址映射為物理地址將虛擬地址映射為物理地址的硬件部件。的硬件部件。由由CPUCPU位數(shù)決定的地址范圍稱為虛擬地址空間
57、。位數(shù)決定的地址范圍稱為虛擬地址空間。大多數(shù)時(shí)候計(jì)算機(jī)系統(tǒng)的物理地址空間只是虛擬地址空間的大多數(shù)時(shí)候計(jì)算機(jī)系統(tǒng)的物理地址空間只是虛擬地址空間的一個(gè)子集一個(gè)子集 。如,。如,256M的的32bit x86的機(jī)器的機(jī)器 ,其虛擬地址空間,其虛擬地址空間是是00 xFFFFFFFF,而物理地址空間是,而物理地址空間是0 x0000000000 x0FFFFFFF。在使用了虛擬存儲器的計(jì)算機(jī)系統(tǒng)中,虛擬地址不是被直接在使用了虛擬存儲器的計(jì)算機(jī)系統(tǒng)中,虛擬地址不是被直接送到主存地址線上,而是送到送到主存地址線上,而是送到MMU,由,由MMU將虛擬地址映將虛擬地址映射為物理地址。射為物理地址。 2. 主存儲器與主存儲器與MMU3. 高速緩存高速緩存(1)概念概念高速緩存是計(jì)算機(jī)存儲系統(tǒng)中介于高速緩存是計(jì)算機(jī)存儲系統(tǒng)中介于CPU和主存儲器之和主存儲器之間的小容量存儲器,由靜態(tài)存儲芯片間的小容量存儲器,由靜態(tài)存儲芯片(SRAM)組成,速組成,速度接近于度接近于CPU的速度,用于保存從主存儲器讀取的指的速度,用于保存從主存儲器讀取的指令或數(shù)據(jù)的副本。令或數(shù)據(jù)的副本。高速緩存對操作系統(tǒng)不可見高速
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度企業(yè)導(dǎo)師制師帶徒培養(yǎng)合同
- 2025年度人合作合伙合同:清潔能源項(xiàng)目投資合作框架
- 2025年度醫(yī)療護(hù)理勞務(wù)合同患者安全與權(quán)益保障合同
- 2025年度倉儲物流轉(zhuǎn)租服務(wù)合同
- 2025年度店面轉(zhuǎn)讓定金支付及品牌戰(zhàn)略合作協(xié)議
- 2025年度倉儲設(shè)施使用權(quán)及倉儲倉儲服務(wù)協(xié)議
- 2025年杭州醫(yī)學(xué)院單招職業(yè)適應(yīng)性測試題庫完整版
- 2025年度個(gè)人短期租房合同月付與租戶退租流程管理協(xié)議
- 2025年度合伙投資開中式餐廳合作協(xié)議
- 2025年度互聯(lián)網(wǎng)企業(yè)產(chǎn)品經(jīng)理崗位聘用合同
- 2024年西安電力高等??茖W(xué)校高職單招職業(yè)技能測驗(yàn)歷年參考題庫(頻考版)含答案解析
- 2024年湖南鐵路科技職業(yè)技術(shù)學(xué)院高職單招語文歷年參考題庫含答案解析
- 祖沖之的平生與貢獻(xiàn)
- 2025年版護(hù)理法律法規(guī)
- DB3305T 261-2023 湖州湖羊種羊等級評定
- 房屋市政工程生產(chǎn)安全重大事故隱患排查表(2024版)
- 2024年牡丹江大學(xué)單招職業(yè)適應(yīng)性測試題庫帶答案
- 統(tǒng)編版(2024新版)七年級下冊道德與法治期末復(fù)習(xí)背誦知識點(diǎn)提綱
- 健康體檢報(bào)告解讀頁課件
- (高清版)DB43∕T 1147-2015 太陽能果蔬烘干機(jī)
- 項(xiàng)目合作分潤合同范例
評論
0/150
提交評論