版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章操作系統(tǒng)運(yùn)行的硬件基礎(chǔ)1.1中央處理器(CPU)1.2中斷技術(shù)1.3系統(tǒng)調(diào)用1.4存儲(chǔ)器1.5I/O端口尋址與訪問控制1.1中央處理器(CPU)1.單處理器與多處理器系統(tǒng)一個(gè)計(jì)算機(jī)系統(tǒng)只有一個(gè)處理器,稱之為單處理器系統(tǒng)如果有多個(gè)處理器稱之為多處理器系統(tǒng)處理器由運(yùn)算器、控制器、一組寄存器和高速緩存構(gòu)成。程序計(jì)數(shù)器PC指令寄存器IR處理器狀態(tài)字PSW堆棧指示器SP指令譯碼器IDI/O控制邏輯工作寄存器地址寄存器數(shù)據(jù)寄存器
ALU控制器CU1.1中央處理器(CPU)指令譯碼器ID:是控制器中的主要部件之一,分析指令操作碼,以決定執(zhí)行的操作。程序計(jì)數(shù)器PC:程序計(jì)數(shù)器是用于存放下一條指令的主存單元地址。單片機(jī)及匯編語言中常稱作PC(ProgramCounter)。程序開始執(zhí)行前,必須將它的起始地址,即程序開始執(zhí)行指令的內(nèi)存單元地址送入PCPSW:狀態(tài)寄存器,存放指令的執(zhí)行狀態(tài):CPU執(zhí)行狀態(tài)、溢出、中斷屏蔽碼等。例:32位機(jī)器的CPU寄存器2.寄存器分類兩類寄存器:用戶可見寄存器(工作寄存器):對(duì)所有程序都是可用的,包括系統(tǒng)程序和用戶程序??刂坪蜖顟B(tài)寄存器:用于控制處理器的操作,大部分對(duì)用戶不可見,由OS的特權(quán)代碼使用。1.1中央處理器(CPU)(1)用戶可見寄存器用戶程序可以訪問到的寄存器,包括數(shù)據(jù)寄存器、地址寄存器等。數(shù)據(jù)寄存器(dataregister)又稱通用寄存器,主要用于各種算術(shù)邏輯指令和訪存指令。地址寄存器(addressregister)用于存儲(chǔ)指令或數(shù)據(jù)的內(nèi)存地址。變址寄存器段寄存器棧指針(2)控制和狀態(tài)寄存器用于控制處理器的操作,對(duì)于用戶不可見的(用戶不可以使用)。常見的控制和狀態(tài)寄存器:程序計(jì)數(shù)器(PC:ProgramCounter),記錄將要取出的指令的地址。指令寄存器(IR:InstructionRegister),包含最近取出的指令。程序狀態(tài)字(PSW:ProgramStatusWord),記錄處理器的運(yùn)行模式信息。條件碼寄存器:保存CPU操作結(jié)果的各種標(biāo)記位,如算術(shù)運(yùn)算產(chǎn)生的溢出、符號(hào)等等。機(jī)器指令只能通過隱式訪問來讀取該寄存器的各個(gè)位,不能顯示訪問修改。)中斷寄存器3.處理器狀態(tài)根據(jù)運(yùn)行程序?qū)Y源和機(jī)器指令的使用權(quán)限,將處理器設(shè)置為不同的工作狀態(tài)。多數(shù)系統(tǒng)將處理器工作狀態(tài)劃分為內(nèi)核態(tài)和用戶態(tài):內(nèi)核態(tài):操作系統(tǒng)管理(核心)程序運(yùn)行時(shí)的CPU狀態(tài),又稱為特權(quán)態(tài)、系統(tǒng)態(tài)、管態(tài)或核心態(tài)用戶態(tài):用戶程序運(yùn)行時(shí)的CPU狀態(tài),又稱為普通態(tài)或目態(tài)。有些系統(tǒng)將處理器狀態(tài)劃分核心狀態(tài),管理狀態(tài)和用戶程序狀態(tài)三種。實(shí)例:x86系列CPU386、486、Pentium系列都支持4個(gè)處理器特權(quán)級(jí)別(特權(quán)環(huán):R0、R1、R2和R3)從R0到R3特權(quán)能力依次降低R0相當(dāng)于雙狀態(tài)系統(tǒng)的內(nèi)核態(tài)R3相當(dāng)于用戶態(tài)R1和R2則介于兩者之間,它們能夠運(yùn)行的指令集合具有包含關(guān)系:各個(gè)級(jí)別有保護(hù)性檢查(地址校驗(yàn)、I/O限制),并分別運(yùn)行不同級(jí)別的程序:R0-運(yùn)行操作系統(tǒng)核心代碼R1-運(yùn)行關(guān)鍵設(shè)備驅(qū)動(dòng)程序和I/O處理例程R2-運(yùn)行其它受保護(hù)共享代碼,如語言系統(tǒng)運(yùn)行環(huán)境R3-運(yùn)行各種用戶程序現(xiàn)有基于x86處理器的操作系統(tǒng),多數(shù)UNIX、Linux以及Windows系列大都只用了R0和R3兩個(gè)特權(quán)級(jí)別實(shí)例:x86系列處理器4.特權(quán)指令和非特權(quán)指令特權(quán)指令:只能由操作系統(tǒng)內(nèi)核執(zhí)行的指令,如:I/O設(shè)備使用指令:如啟動(dòng)I/O設(shè)備、測(cè)試I/O設(shè)備工作狀態(tài)、控制I/O設(shè)備動(dòng)作的指令系統(tǒng)資源的分配和管理指令:包括改變系統(tǒng)工作方式,檢測(cè)用戶的訪問權(quán)限,修改主存管理的段表、頁表,清內(nèi)存和建立存儲(chǔ)保護(hù)指令任務(wù)的創(chuàng)建和切換指令存取特殊寄存器的指令:如存取IDTR、GDTR、LDTR、時(shí)鐘寄存器(脈沖計(jì)數(shù))等指令。非特權(quán)指令:系統(tǒng)程序和應(yīng)用程序都可以執(zhí)行的指令。在單用戶單任務(wù)的計(jì)算機(jī)系統(tǒng),可以不區(qū)分特權(quán)指令和非特權(quán)指令,一般用戶可以使用指令系統(tǒng)中的全部指令。但是,在使用多道程序設(shè)計(jì)技術(shù)的計(jì)算機(jī)系統(tǒng)必須要區(qū)分為特權(quán)指令和非特權(quán)指令(why?)內(nèi)核態(tài)和用戶態(tài)的比較處理器處于內(nèi)核態(tài)時(shí)可以執(zhí)行全部指令(包括特權(quán)指令)可使用系統(tǒng)所有資源具有改變cpu狀態(tài)的能力處理器處于用戶態(tài)時(shí)只能執(zhí)行非特權(quán)指令特權(quán)級(jí)別不同,可運(yùn)行的指令集合也不同特權(quán)級(jí)別越高,可以運(yùn)行的指令集合越大,高特權(quán)級(jí)別可運(yùn)行指令集合包含低特權(quán)級(jí)的可運(yùn)行指令。1.1中央處理器(CPU)操作系統(tǒng)內(nèi)核功能主要包括:時(shí)鐘管理:脈沖計(jì)數(shù),指令周期生成中斷機(jī)制:中斷向量表維護(hù)和中斷響應(yīng)原語:由若干條機(jī)器指令構(gòu)成,用于完成特定功能的一段程序。原語具有不可分割性,即原語在執(zhí)行過程中不允許被中斷。
由系統(tǒng)控制的數(shù)據(jù)結(jié)構(gòu)管理,如主存頁表、進(jìn)程控制塊表、消息隊(duì)列、緩沖隊(duì)列等。1.1中央處理器(CPU)5.程序狀態(tài)字PSW程序狀態(tài)字(PSW):用來指示處理器執(zhí)行條件和狀態(tài)的寄存器。不同機(jī)器的PSW格式和信息不完全相同。PSW的信息一般包括:CPU工作狀態(tài)碼——指明內(nèi)核態(tài)還是用戶態(tài)。條件碼——條件碼是CPU根據(jù)運(yùn)算結(jié)果由硬件設(shè)置的位(或位段),指示當(dāng)前指令執(zhí)行結(jié)果的各種狀態(tài)信息,如:算術(shù)運(yùn)算產(chǎn)生的正、負(fù)、零或溢出等的結(jié)果中斷屏蔽碼——指出是否允許中斷用戶態(tài)→內(nèi)核態(tài):轉(zhuǎn)換的唯一途徑是通過中斷。內(nèi)核態(tài)→用戶態(tài):通過修改PSW中的CPU工作狀態(tài)碼來實(shí)現(xiàn)。系統(tǒng)屏蔽鑰EMWP中斷碼ILCCC程序屏蔽指令地址0711153133353963例:IBM370的PSW鑰:用于存儲(chǔ)保護(hù)EMWP:E表示機(jī)器控制方式(同步控制、異步控制
),M表示機(jī)器校驗(yàn)方式(奇偶、CRC),W表示等待狀態(tài)位,P表示處理器的工作狀態(tài)。ILC:上一次執(zhí)行指令的長(zhǎng)度。CC:條件值。系統(tǒng)屏蔽:指出CPU是否接受特定通道的中斷(I/O設(shè)備)。程序屏蔽:指示CPU是否接受某種程序性中斷(系統(tǒng)調(diào)用)。1.2中斷技術(shù)操作系統(tǒng)是“中斷驅(qū)動(dòng)”的。中斷對(duì)操作系統(tǒng)的重要性相當(dāng)于機(jī)械系統(tǒng)中的驅(qū)動(dòng)齒輪。中斷協(xié)調(diào)計(jì)算機(jī)系統(tǒng)對(duì)各種外部事件的響應(yīng)和處理。中斷是多任務(wù)實(shí)現(xiàn)的必要條件。什么是中斷?為什么要引入中斷?中斷是如何響應(yīng)和執(zhí)行的?為什么要引入中斷?解決主機(jī)與I/O設(shè)備并行工作的問題提高系統(tǒng)可靠性實(shí)現(xiàn)多機(jī)聯(lián)系方便應(yīng)用程序,實(shí)現(xiàn)實(shí)時(shí)控制中斷:CPU對(duì)系統(tǒng)內(nèi)外發(fā)生的異步事件的響應(yīng)過程。中斷源(中斷事件):引起中斷發(fā)生的事件。中斷處理程序:處理中斷的程序代碼,也稱中斷例程,如:鍵盤輸入除溢出錯(cuò)誤的處理程序設(shè)備故障處理程序缺頁中斷處理程序等1.基本概念異步事件是指無一定時(shí)序關(guān)系隨機(jī)發(fā)生的事件。2.中斷分類(1)中斷:又稱I/O中斷或異步中斷,由來自處理器和主存之外的中斷源引起的中斷,如時(shí)鐘中斷,鍵盤中斷等來自于外部設(shè)備的中斷都屬于外中斷。外中斷是一種強(qiáng)迫性中斷,可屏蔽。(2)異常:也成同步中斷,應(yīng)用程序執(zhí)行過程中發(fā)生的意想不到的行為,不可屏蔽。如:非法指令或內(nèi)存出錯(cuò)導(dǎo)致當(dāng)前指令執(zhí)行失?。?)系統(tǒng)調(diào)用:應(yīng)用程序主動(dòng)向操作系統(tǒng)發(fā)出的服務(wù)請(qǐng)求,是戰(zhàn)役中自愿性中斷,可同步或異步響應(yīng)。如讀文件等。3.中斷系統(tǒng)
中斷系統(tǒng)=中斷硬件+中斷軟件中斷硬件——中斷系統(tǒng)的機(jī)制部分,負(fù)責(zé)中斷掃描和響應(yīng)。在CPU初始化時(shí)設(shè)置中斷使能標(biāo)志根據(jù)中斷事件設(shè)置中斷標(biāo)志(獲取中斷號(hào))訪問中斷向量表,調(diào)用相應(yīng)的中斷服務(wù)例程中斷軟件——中斷系統(tǒng)的策略部分,執(zhí)行相應(yīng)的中斷處理指令?,F(xiàn)場(chǎng)保存中斷服務(wù)處理(中斷服務(wù)例程)清除中斷標(biāo)記(中斷服務(wù)例程)現(xiàn)場(chǎng)恢復(fù)中斷處理過程中斷請(qǐng)求中斷判優(yōu)中斷響應(yīng)中斷服務(wù)中斷返回中斷硬件中斷處理程序中斷處理過程t=0t=7一一一一一一一一一一一一打印機(jī)中斷服務(wù)程序用戶程序t=40中斷響應(yīng)中斷返回(1)中斷硬件的基本功能識(shí)別中斷源:通常用一個(gè)寄存器來存儲(chǔ)每個(gè)中斷源的狀態(tài)信息,該寄存器的內(nèi)容稱為中斷字。斷點(diǎn)保護(hù):程序計(jì)數(shù)器和PSW的內(nèi)容入棧。why?提供中斷處理程序入口地址映射表(中斷向量表)等數(shù)據(jù)結(jié)構(gòu)。非屏蔽中斷請(qǐng)求中斷邏輯中斷指令I(lǐng)NTn溢出中斷INT0除法錯(cuò)中斷單步中斷TF=1中斷控制器8259A可屏蔽性中斷請(qǐng)求…INTRNMIIBM-PC中斷邏輯和中斷源示意圖(2)中斷邏輯當(dāng)多個(gè)中斷源請(qǐng)求同時(shí)發(fā)生時(shí),由中斷邏輯電路按中斷優(yōu)先級(jí)的高低來判定應(yīng)響應(yīng)哪個(gè)中斷請(qǐng)求。一次只能響應(yīng)當(dāng)前優(yōu)先級(jí)最高的一個(gè)中斷。(2)中斷邏輯接受和響應(yīng)中斷源的中斷請(qǐng)求的方法因機(jī)器而異,在PC中:可屏蔽中斷請(qǐng)求INTR:來自輸入輸出設(shè)備的I/O中斷,通過對(duì)PSW中的中斷屏蔽位可以屏蔽所有的I/O中斷。不可屏蔽中斷請(qǐng)求:屬于機(jī)器故障中斷,包括內(nèi)存奇偶校驗(yàn)錯(cuò)以及掉電等中斷源產(chǎn)生的中斷。程序性中斷(如溢出、除法錯(cuò)都可以引起中斷)和軟件中斷等。為了區(qū)分和不丟失中斷信號(hào),用固定觸發(fā)器來寄存每個(gè)中斷源的中斷信號(hào)。一般規(guī)定:值為1時(shí),表示有中斷信號(hào),為0時(shí)表示無中斷信號(hào)。所有中斷源的觸發(fā)器組成中斷寄存器,每個(gè)觸發(fā)器對(duì)應(yīng)中斷寄存器中的一個(gè)中斷位。(3)中斷寄存器集成于CPU控制部件中,用于檢測(cè)是否有中斷發(fā)生的機(jī)構(gòu)。在每條指令執(zhí)行周期的最后時(shí)刻(中斷周期)掃描中斷寄存器,詢問是否有中斷信號(hào)。若無中斷信號(hào),繼續(xù)執(zhí)行下一條指令;否則,中斷硬件將該中斷觸發(fā)器內(nèi)容按規(guī)定編碼送入PSW的相應(yīng)位(中斷碼)。(4)中斷掃描機(jī)構(gòu)允許中斷開始取下一條指令執(zhí)行指令停止檢查處理中斷不允許中斷中斷周期執(zhí)行周期取指周期(5)中斷響應(yīng)CPU接收到來自于不同中斷源的中斷請(qǐng)求后,需要及時(shí)地響應(yīng)中斷。中斷響應(yīng)是中斷硬件對(duì)中斷事件做出響應(yīng)的過程。任一時(shí)刻,CPU只能響應(yīng)一個(gè)中斷。中斷系統(tǒng)需要按照各個(gè)中斷源的優(yōu)先級(jí),選擇具有最高優(yōu)先級(jí)的中斷進(jìn)行響應(yīng),這個(gè)過程稱為中斷判優(yōu)。如何響應(yīng)當(dāng)前選擇的中斷,執(zhí)行相應(yīng)的中斷服務(wù)例程?(5)中斷響應(yīng)
CPU如何響應(yīng)中斷,兩個(gè)問題:CPU何時(shí)響應(yīng)中斷?通常在CPU執(zhí)行了一條指令以后,更確切地,在指令周期最后時(shí)刻掃描中斷寄存器,接受中斷請(qǐng)求。如何獲知提出中斷請(qǐng)求的設(shè)備或中斷源?用軟件指令去查詢各設(shè)備接口,比較費(fèi)時(shí)(非向量中斷)。使用“中斷向量表”(向量中斷)。非向量中斷:總是轉(zhuǎn)向中斷查詢程序的入口地址,執(zhí)行終端查詢程序,以確定被優(yōu)先批準(zhǔn)的中斷源,然后分支進(jìn)入相應(yīng)的中斷服務(wù)程序。每個(gè)中斷有一個(gè)唯一的中斷向量號(hào)(通常為中斷類型號(hào))。中斷向量號(hào)通常按照從小到大的順序存放在中斷向量表中。中斷向量表一般存放在主存儲(chǔ)器的固定區(qū)域中。(6)中斷向量(6)中斷向量…向量地址…排隊(duì)器輸出
顯示器服務(wù)程序
打印機(jī)服務(wù)程序JMP400JMP300JMP200…………主存12H13H14H200300向量地址入口地址入口地址設(shè)備編碼器1000…000100100100…00010011由硬件產(chǎn)生中斷向量地址,再由中斷向量地址找到中斷服務(wù)程序的入口地址。例:8088的中斷向量表255號(hào)向量
…
32號(hào)向量31號(hào)向量
5號(hào)向量
4號(hào)向量(溢出)3號(hào)向量(斷點(diǎn))2號(hào)向量(NMI)
1號(hào)向量(單步)
0號(hào)向量(除法錯(cuò))
…003FFH003FCH00080H0007CH00014H
00012H
0000CH
00008H
00004H
00000H
專用
中斷向量(5個(gè))系統(tǒng)保留
中斷向量(27個(gè))用戶可用
中斷向量(224個(gè))8088系統(tǒng)的中斷向量表占用了系統(tǒng)主存最低端的1KB的空間,共存儲(chǔ)了256個(gè)中斷向量(7)中斷處理過程中斷源發(fā)出一個(gè)中斷信號(hào)CPU完成當(dāng)前指令的執(zhí)行,掃描中斷信號(hào)CPU發(fā)送中斷應(yīng)答信號(hào)CPU將PSW、IP和CS壓入棧中(斷點(diǎn))保存剩余的處理器狀態(tài)信息恢復(fù)中斷前的PSW、IP和CS開中斷處理中斷中斷服務(wù)程序的入口地址送入IP和CS硬件操作中斷處理子程序關(guān)閉中斷恢復(fù)處理器狀態(tài)信息中斷隱指令----CPU響應(yīng)中斷之后,經(jīng)過某些操作轉(zhuǎn)去執(zhí)行中斷服務(wù)程序,這些操作是由硬件直接實(shí)現(xiàn),稱為中斷隱指令。中斷隱指令是指不在指令系統(tǒng)中的指令,其功能包括保護(hù)程序斷點(diǎn)、硬件關(guān)中斷、向量地址送PC(硬件向量法)或中斷識(shí)別程序入口地址送PC(軟件查詢法)。例:匯編中int指令的執(zhí)行過程CPU執(zhí)行intn指令,相當(dāng)于引發(fā)一個(gè)n號(hào)中斷的中斷過程,執(zhí)行過程如下:(1)取中斷類型碼n;(2)標(biāo)志寄存器入棧,IF=0,TF=0;/*IF=0CPU關(guān)閉中斷;TF單步調(diào)試標(biāo)記,TF=0機(jī)器處在連續(xù)工作方式*/(3)CS、IP入棧;(4)(IP)=(n*4),(CS)=(n*4+2)。IPCS低高5.多級(jí)中斷(多重中斷)多數(shù)微型CPU支持多級(jí)中斷系統(tǒng),可以有多根中斷請(qǐng)求線(級(jí))從不同設(shè)備連接到中斷邏輯電路上。具有相同特性和優(yōu)先級(jí)的設(shè)備可連到同一中斷級(jí)上,由中斷排隊(duì)器(硬件)決定當(dāng)前響應(yīng)哪個(gè)中斷源。在多級(jí)中斷系統(tǒng)中,可能同時(shí)有多個(gè)中斷請(qǐng)求,這時(shí)CPU接受中斷優(yōu)先級(jí)最高的中斷,忽略較低優(yōu)先級(jí)的中斷。高優(yōu)先級(jí)的中斷可以打斷低優(yōu)先級(jí)的中斷。例:假設(shè)某系統(tǒng)中有兩個(gè)設(shè)備:打印機(jī)和磁盤,它們的中斷優(yōu)先級(jí)分別為2和4,若打印機(jī)的中斷請(qǐng)求先到達(dá),且打印機(jī)中斷服務(wù)程序在運(yùn)行過程中,來了一個(gè)磁盤中斷請(qǐng)求。t=0t=7t=15一一一一一一一一一一一一一一一一一一一磁盤中斷服務(wù)程序打印機(jī)中斷服務(wù)程序用戶程序t=25t=40產(chǎn)生的中斷嵌套如下圖:1.3系統(tǒng)調(diào)用1.為什么要引入系統(tǒng)調(diào)用功能?只有操作系統(tǒng)內(nèi)核執(zhí)行特權(quán)指令,訪問操作系統(tǒng)內(nèi)核數(shù)據(jù)。在多任務(wù)系統(tǒng)中,程序的運(yùn)行空間分為用戶空間和內(nèi)核空間,它們?cè)谶壿嬌鲜窍嗷ジ綦x的,用戶程序不能訪問內(nèi)核數(shù)據(jù),也無法訪問內(nèi)核函數(shù)。系統(tǒng)調(diào)用是操作系統(tǒng)服務(wù)的編程接口,應(yīng)用程序通過系統(tǒng)調(diào)用可以進(jìn)入內(nèi)核態(tài),調(diào)用內(nèi)核函數(shù),訪問內(nèi)核數(shù)據(jù)。系統(tǒng)調(diào)用依賴于計(jì)算機(jī)硬件,一般用匯編代碼編寫,并以庫函數(shù)形式提供給應(yīng)用程序(如C語言程序)使用。所有的庫函數(shù)都是系統(tǒng)調(diào)用嗎?1.3系統(tǒng)調(diào)用2.什么是系統(tǒng)調(diào)用?系統(tǒng)調(diào)用是操作系統(tǒng)內(nèi)核提供的用于實(shí)現(xiàn)各種系統(tǒng)功能的一組子程序(用戶程序?qū)Σ僮飨到y(tǒng)內(nèi)核模塊的調(diào)用):應(yīng)用程序通過系統(tǒng)調(diào)用訪問系統(tǒng)硬件和其他操作系統(tǒng)資源,如:外存文件與目錄的讀寫。各種I/O設(shè)備的使用在一個(gè)應(yīng)用程序中啟動(dòng)另一個(gè)應(yīng)用程序查詢和統(tǒng)計(jì)系統(tǒng)資源使用情完成對(duì)硬件和資源的訪問控制。硬件設(shè)備的抽象(提供設(shè)備獨(dú)立性)。例:UNIX/Linux的系統(tǒng)結(jié)構(gòu)系統(tǒng)調(diào)用接口通過庫把函數(shù)調(diào)用映射成進(jìn)入操作系統(tǒng)核心所需要的原語。POSIX(PortableOperatingSystemInterface))中的進(jìn)程和文件管理的主要系統(tǒng)調(diào)用例2:LINUX系統(tǒng)調(diào)用簡(jiǎn)介已經(jīng)提到的系統(tǒng)調(diào)用fork(),exec(),open(),read(),write(),close()…Linux系統(tǒng)調(diào)用有二百五十多個(gè)應(yīng)用程序及系統(tǒng)調(diào)用的層次關(guān)系應(yīng)用程序C庫(libc.a)系統(tǒng)調(diào)用 調(diào)用printf(){}write(){}printf(…);write(){}
系統(tǒng)調(diào)用與普通的函數(shù)調(diào)用很相似,但普通函數(shù)調(diào)用不能引起進(jìn)程從用戶態(tài)到核心態(tài)的轉(zhuǎn)換。這個(gè)過程是如何實(shí)現(xiàn)的呢?中斷??!應(yīng)用程序?qū)Σ僮飨到y(tǒng)的間接調(diào)用過程嵌入形成…A=A+1printf(…)B=B+A……INT…A=A+1…INT…B=B+A…IN…OUT…用戶程序段源程序段目標(biāo)代碼printf的操作系統(tǒng)內(nèi)核代碼庫函數(shù)printf目標(biāo)代碼陷入指令系統(tǒng)調(diào)用的實(shí)現(xiàn)LINUX系統(tǒng)調(diào)用加載操作系統(tǒng)加載時(shí)與系統(tǒng)調(diào)用有關(guān)的處理(int
80h是unix/linux類操作系統(tǒng)內(nèi)核在Intel
CPU架構(gòu)上作為系統(tǒng)調(diào)用使用的中斷號(hào)
)int80h中斷處理程序地址的加載start_kernel()->trap_init()//硬件中斷向量初始函數(shù)->set_system_gate(SYSCALL_VECTOR.&system_call)//參見http://lxr.linux.no各系統(tǒng)調(diào)用處理程序的加載系統(tǒng)調(diào)用總控程序System_call在Entry.S中(arch/i386/kernel)系統(tǒng)調(diào)用表在啟動(dòng)時(shí)加載(unistd.h中定義系統(tǒng)調(diào)用號(hào))系統(tǒng)一般都配置有特定指令,使進(jìn)程的執(zhí)行由用戶態(tài)轉(zhuǎn)換為核心態(tài),這種指令通常稱作陷入(trap)指令。進(jìn)程通過執(zhí)行陷入指令,便可進(jìn)入核心態(tài)運(yùn)行系統(tǒng)調(diào)用代碼。Linux的x86平臺(tái)上的這條陷入指令是int0x80h.LINUX系統(tǒng)調(diào)用實(shí)現(xiàn)原理
||------>|SystemCalli|訪問設(shè)備|||[sys_read()]|...i=3||||system_call(i)|--------||訪問內(nèi)部函數(shù)[read()]|||...j=20|||system_call(j)|--------||[get_pid()]||||...|------->|SystemCallj|訪問內(nèi)核數(shù)據(jù)結(jié)構(gòu)||[sys_getpid()]|LINUX系統(tǒng)調(diào)用實(shí)現(xiàn)代碼1int80hin2.4.x202ENTRY(system_call)203pushl%eax #saveorig_eax,eax存放系#統(tǒng)調(diào)用序號(hào)204SAVE_ALL205GET_CURRENT(%ebx)206testb$0x02,tsk_ptrace(%ebx)#PT_TRACESYS207jnetracesys208cmpl$(NR_syscalls),%eax209jaebadsys210call*SYMBOL_NAME(sys_call_table)(,%eax,4)211movl%eax,EAX(%esp)#savethereturnvalue212ENTRY(ret_from_sys_call)#define_syscall0(type,name)\298typename(void)\299{\300long__res;\301__asm__volatile("int$0x80"\302:"=a"(__res)\303:""(__NR_##name));\304__syscall_return(type,__res);\305}_syscall0(int,fork)intfork(void){ “int80with_NR_fork”//2}LINUX系統(tǒng)調(diào)用實(shí)現(xiàn)_syscall0代碼系統(tǒng)調(diào)用與普通的函數(shù)調(diào)用過程很相似,只是被調(diào)用的代碼是操作系統(tǒng)核心代碼,需要在核心態(tài)下運(yùn)行。
2.系統(tǒng)調(diào)用處理過程read(fd,buffer,nbytes)的系統(tǒng)調(diào)用過程內(nèi)核空間保存現(xiàn)場(chǎng)和相關(guān)參數(shù),執(zhí)行系統(tǒng)調(diào)用處理程序根據(jù)系統(tǒng)調(diào)用號(hào)和系統(tǒng)調(diào)用表,獲得系統(tǒng)調(diào)用處理程序的入口地址陷入內(nèi)核Trap把read系統(tǒng)調(diào)用號(hào)存放到寄存器中返回調(diào)用者參數(shù)fd,buffer,nbytes入棧調(diào)用read的用戶程序庫過程read用戶空間調(diào)用庫過程read系統(tǒng)調(diào)用與函數(shù)調(diào)用的不同系統(tǒng)調(diào)用和函數(shù)庫的關(guān)系系統(tǒng)調(diào)用能引起進(jìn)程從用戶態(tài)到核心態(tài)的轉(zhuǎn)換,普通函數(shù)調(diào)用不能。函數(shù)庫中的函數(shù)可以不調(diào)用系統(tǒng)調(diào)用程序,也可以調(diào)用多個(gè)系統(tǒng)調(diào)用。高級(jí)編程也可以直接使用系統(tǒng)調(diào)用中斷(如,int0x80h)進(jìn)入系統(tǒng)調(diào)用,而不必通過函數(shù)庫作為中介。在核心編程可以使用系統(tǒng)調(diào)用中斷進(jìn)入系統(tǒng)調(diào)用,此時(shí)不能使用函數(shù)庫。3.系統(tǒng)調(diào)用表系統(tǒng)調(diào)用表記錄了所有系統(tǒng)調(diào)用處理函數(shù)的入口地址,通過系統(tǒng)調(diào)用號(hào)查看系統(tǒng)調(diào)用表就能獲得相應(yīng)的內(nèi)核函數(shù)入口地址。與中斷一樣,每個(gè)系統(tǒng)調(diào)用都擁有一個(gè)唯一的系統(tǒng)調(diào)用號(hào)。系統(tǒng)調(diào)用通常是通過特殊的硬件指令和中斷來實(shí)現(xiàn)的。操作系統(tǒng)通常用一個(gè)或少數(shù)幾個(gè)中斷號(hào)來映射系統(tǒng)中所有的系統(tǒng)調(diào)用。如Linux系統(tǒng)使用0x80號(hào)中斷作為所有系統(tǒng)調(diào)用的入口;i386的Windows系統(tǒng)使用0x2E號(hào)中斷作為大多數(shù)系統(tǒng)調(diào)用的入口。ENTRY(sys_call_table).longSYMBOL_NAME(sys_ni_syscall).longSYMBOL_NAME(sys_exit).longSYMBOL_NAME(sys_fork).longSYMBOL_NAME(sys_read).longSYMBOL_NAME(sys_write)......Linux的系統(tǒng)調(diào)用表4.應(yīng)用程序使用操作系統(tǒng)的方式三種:系統(tǒng)調(diào)用中斷獨(dú)立程序(不以任何方式使用操作系統(tǒng),包括啟動(dòng)和結(jié)束。)存儲(chǔ)器層次主存儲(chǔ)器與MMU高速緩存磁盤存儲(chǔ)器1.4存儲(chǔ)器系統(tǒng)寄存器高速緩存主存磁盤光盤磁帶板上存儲(chǔ)器板外存儲(chǔ)器1.存儲(chǔ)器層次容量速度,價(jià)格2.主存儲(chǔ)器與MMU(1)主存儲(chǔ)器主存是主板上的一種存儲(chǔ)部件,是CPU可以直接訪問的唯一的大容量存儲(chǔ)區(qū)域。CPU訪問的指令和數(shù)據(jù)必須存放在的主存中。字節(jié)是主存的最小編址單位,主存由一個(gè)存儲(chǔ)字的陣列組成,每個(gè)字由一個(gè)唯一的地址。為簡(jiǎn)化主存的分配和管理,現(xiàn)代計(jì)算機(jī)系統(tǒng)通常把主存儲(chǔ)器分成若干個(gè)存儲(chǔ)塊,并以存儲(chǔ)塊作為主存分配單位。(2)存儲(chǔ)訪問的局部性原理存儲(chǔ)器訪問局部性是引入多層次存儲(chǔ)器系統(tǒng)的重要基礎(chǔ),表現(xiàn)為時(shí)間局部性和空間局部性。程序執(zhí)行時(shí),通常會(huì)有循環(huán)和子程序調(diào)用,一旦進(jìn)入這樣的程序段,就會(huì)重復(fù)存取相同的指令集合。數(shù)據(jù)存取也有局部性。如訪問一個(gè)較大規(guī)模的數(shù)組,在較短的時(shí)間內(nèi),數(shù)據(jù)的讀取穩(wěn)定地保持在存儲(chǔ)器的一個(gè)局部區(qū)域內(nèi)。2.主存儲(chǔ)器與MMU(3)存儲(chǔ)保護(hù)為使多個(gè)程序同時(shí)運(yùn)行時(shí)在主存空間上互不侵犯,需要對(duì)主存中的信息加以嚴(yán)格保護(hù)。常用的存儲(chǔ)保護(hù)方式有兩種:地址寄存器(界限寄存器)存儲(chǔ)鍵2.主存儲(chǔ)器與MMU(1)界地址寄存器(界限寄存器)界地址寄存器是廣泛使用的一種存儲(chǔ)保護(hù)技術(shù)。通過在CPU中設(shè)置一對(duì)界限寄存器:下限寄存器和上限寄存器,來存放用戶作業(yè)在主存中的下限地址和上限地址。每當(dāng)CPU要訪問主存,硬件自動(dòng)將被當(dāng)前訪問地址與界限寄存器的內(nèi)容進(jìn)行比較,以判斷是否越界,如果未越界,則按此地址訪問主存,否則將產(chǎn)生越界中斷——越界中斷(存儲(chǔ)保護(hù)中斷)。也可將界地址寄存器中的一個(gè)寄存器作為基址寄存器,另一寄存器作為限長(zhǎng)寄存器(指示存儲(chǔ)區(qū)長(zhǎng)度)。界地址寄存器存儲(chǔ)保護(hù)技術(shù)(2)存儲(chǔ)鍵每個(gè)存儲(chǔ)塊分配一個(gè)由二進(jìn)位組成的存儲(chǔ)保護(hù)鍵。作業(yè)被允許進(jìn)入主存時(shí),OS分為它分配一個(gè)唯一的存儲(chǔ)鍵號(hào)。分配給作業(yè)存儲(chǔ)塊的存儲(chǔ)鍵與作業(yè)的存儲(chǔ)鍵號(hào)相同。運(yùn)行一個(gè)作業(yè)時(shí),OS將當(dāng)前作業(yè)的存儲(chǔ)鍵號(hào)存入PSW的存儲(chǔ)鍵(“鑰匙”)域中。當(dāng)CPU訪問主存時(shí),將該主存塊的存儲(chǔ)鍵與PSW中的“鑰匙”進(jìn)行比較,如果匹配,則允許訪問,否則,拒絕并報(bào)警。(3)MMUMMU(MemoryManagementUnit,主存管理單元)是CPU中用來管理虛擬存儲(chǔ)器、物理存儲(chǔ)器的控制線路,負(fù)責(zé)將虛擬地址映射為物理地址的硬件部件。由CPU位數(shù)決定的地址范圍稱為虛擬地址空間。大多數(shù)時(shí)候計(jì)算機(jī)系統(tǒng)的物理地址空間只是虛擬地址空間的一個(gè)子集。如,256M的32bitx86的機(jī)器,其虛擬地址空間是0~0xFFFFFFFF,而物理地址空間是0x000000000~0x0FFFFFFF。在使用了虛擬存儲(chǔ)器的計(jì)算機(jī)系統(tǒng)中,虛擬地址不是被直接送到主存地址線上,而是送到MMU,由MMU將虛擬地址映射為物理地址。2.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 虛擬現(xiàn)實(shí)應(yīng)用開發(fā)合作合同
- 大二上海復(fù)旦數(shù)學(xué)試卷
- 高端精密儀器制造銷售合同
- 北京小升初中考數(shù)學(xué)試卷
- 初二暑假預(yù)習(xí)數(shù)學(xué)試卷
- 安岳2024年中考數(shù)學(xué)試卷
- 百色市高二數(shù)學(xué)試卷
- 社會(huì)服務(wù)行業(yè)社會(huì)工作服務(wù)體系方案
- 畢業(yè)生挑戰(zhàn)高考數(shù)學(xué)試卷
- 2024-2025年歷年程序員試題
- 2023年小學(xué)五年級(jí)數(shù)學(xué)上學(xué)期期末水平測(cè)試試卷(天河區(qū))
- 中考數(shù)學(xué)計(jì)算題100道
- 高壓變頻器整流變壓器
- 集團(tuán)資產(chǎn)重組實(shí)施方案
- 《新唯識(shí)論》儒佛會(huì)通思想研究
- 《減法教育》讀書筆記思維導(dǎo)圖PPT模板下載
- 慢性阻塞性肺疾病全球倡議(GOLD)
- 工程項(xiàng)目管理(第五版)叢培經(jīng) 第七章
- GB/T 33195-2016道路交通事故車輛速度鑒定
- GB/T 15176-1994插入式電子元器件用插座及其附件總規(guī)范
- GB/T 14383-2008鍛制承插焊和螺紋管件
評(píng)論
0/150
提交評(píng)論