第3章 用戶接口_第1頁(yè)
第3章 用戶接口_第2頁(yè)
第3章 用戶接口_第3頁(yè)
第3章 用戶接口_第4頁(yè)
第3章 用戶接口_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第3章操作系統(tǒng)的用戶接口操作系統(tǒng)的用戶接口用戶工作環(huán)境運(yùn)行一個(gè)應(yīng)用程序的過(guò)程操作系統(tǒng)用戶界面系統(tǒng)功能調(diào)用Linux系統(tǒng)功能調(diào)用1操作系統(tǒng)的用戶接口——主要內(nèi)容用戶工作環(huán)境操作系統(tǒng)的用戶接口——用戶工作環(huán)境2用戶身份合法性檢查用戶工作區(qū):操作命令語(yǔ)言操作系統(tǒng)的用戶接口——用戶工作環(huán)境1.如何形成用戶工作環(huán)境(1)系統(tǒng)提供各種硬件、軟件資源(2)設(shè)計(jì)并提供使用方便的命令集合(3)將OS裝入計(jì)算機(jī)并初始化,形成可供使用的工作環(huán)境2.兩種形式的用戶工作環(huán)境(1)交互工作環(huán)境(2)批量工作環(huán)境作業(yè)控制語(yǔ)言3將操作系統(tǒng)的必要部分裝入主存并對(duì)系統(tǒng)進(jìn)行初始化工作,最終使系統(tǒng)處于命令接收狀態(tài)。操作系統(tǒng)的用戶接口——用戶工作環(huán)境3.系統(tǒng)生成(1)系統(tǒng)生成是指在一臺(tái)裸機(jī)上(或者安裝新的操作系統(tǒng))安裝操作系統(tǒng)的過(guò)程。(2)一般情況下,系統(tǒng)生成的工作是由系統(tǒng)程序員來(lái)完成的,在系統(tǒng)生成的過(guò)程中涉及到機(jī)器的硬件配置和操作系統(tǒng)核心參數(shù)的設(shè)置。還涉及軟件系統(tǒng)的版權(quán)的問(wèn)題(3)在微機(jī)上的系統(tǒng)生成是用戶自己完成的,比如安裝WINDOWS98、LINUX、MINIX、UNIX。4.操作系統(tǒng)的初啟(1)系統(tǒng)引導(dǎo)的任務(wù)4OS核心文件存儲(chǔ)在系統(tǒng)本身的存儲(chǔ)設(shè)備中,由系統(tǒng)自己將OS核心程序讀入主存并運(yùn)行,建立一個(gè)操作環(huán)境。適用于微機(jī)和大多數(shù)系統(tǒng)OS主要文件不放在系統(tǒng)本身的存儲(chǔ)設(shè)備中,在系統(tǒng)啟動(dòng)后執(zhí)行下裝操作,從另外的計(jì)算機(jī)系統(tǒng)中將操作系統(tǒng)常駐部分傳送到該計(jì)算機(jī)中,使它形成一個(gè)操作環(huán)境。適用于多計(jì)算機(jī)系統(tǒng)、由主控機(jī)與前端機(jī)構(gòu)成的系統(tǒng)以及分布式系統(tǒng)。①現(xiàn)場(chǎng)獨(dú)立引導(dǎo)方式(滾雪球方式、bootup)

②輔助下裝方式

(download)(2)系統(tǒng)引導(dǎo)的方式操作系統(tǒng)的用戶接口——用戶工作環(huán)境5①初始引導(dǎo)系統(tǒng)加電,執(zhí)行系統(tǒng)初啟程序。(該程序存在非易失內(nèi)存中的指定位置。PC:0xffff:0000);初啟程序?qū)ο到y(tǒng)硬件和配置進(jìn)行自檢,保證系統(tǒng)沒(méi)有硬件錯(cuò)誤;從硬盤(pán)中讀入操作系統(tǒng)引導(dǎo)程序,并將控制權(quán)交給該程序模塊。0X7C00(3)獨(dú)立引導(dǎo)方式(滾雪球方式)的過(guò)程操作系統(tǒng)的用戶接口——用戶工作環(huán)境6主引導(dǎo)塊

磁盤(pán)的第一個(gè)物理塊。512byte的程序和數(shù)據(jù),確定活動(dòng)磁盤(pán)分區(qū)。這一部分代碼也可以是只負(fù)責(zé)裝入引導(dǎo)裝入程序(如lilo),再由后者裝入OS。引導(dǎo)塊

每個(gè)邏輯磁盤(pán)的第一個(gè)物理塊。②引導(dǎo)程序執(zhí)行引導(dǎo)程序執(zhí)行,將操作系統(tǒng)核心文件讀入內(nèi)存,并將控制交給核心的初始化程序。

操作系統(tǒng)引導(dǎo)程序操作系統(tǒng)的用戶接口——用戶工作環(huán)境7③核心初始化

初始化系統(tǒng)數(shù)據(jù)結(jié)構(gòu)及參數(shù)系統(tǒng)加電建立進(jìn)程有關(guān)的數(shù)據(jù)結(jié)構(gòu);獲得自由存儲(chǔ)空間的容量,建立存儲(chǔ)管理的數(shù)據(jù)結(jié)構(gòu)

;建立系統(tǒng)設(shè)備和文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu);初始化時(shí)鐘。④系統(tǒng)初始化完善OS的操作環(huán)境,裝載命令處理程序(或圖形用戶界面),并初始化;在多用戶系統(tǒng)中,為每個(gè)終端建立命令解釋進(jìn)程,使系統(tǒng)處于命令接收狀態(tài)。操作系統(tǒng)的用戶接口——用戶工作環(huán)境8ROMBIOS自檢運(yùn)行裝入系統(tǒng)盤(pán)中的主引導(dǎo)塊裝入活動(dòng)OS引導(dǎo)塊裝入OSOS初始化形成用戶界面(4)PC初啟操作系統(tǒng)的用戶接口——用戶工作環(huán)境9BIOS引導(dǎo)程序主引導(dǎo)塊IO.SYS(I/O初始化)DOS.SYS(文件系統(tǒng),簡(jiǎn)單內(nèi)存初始化)COMMAND.COM(簡(jiǎn)單任務(wù)管理)C:\>(5)DOS啟動(dòng)操作系統(tǒng)的用戶接口——用戶工作環(huán)境10Linux系統(tǒng)是以滾雪球的方式啟動(dòng)加電或復(fù)位→BIOS的啟動(dòng)→BootLoader→OS初始化①系統(tǒng)加電或復(fù)位上電自檢;對(duì)硬件設(shè)備進(jìn)行檢測(cè)和連接,并將測(cè)得的數(shù)據(jù)送入BIOS數(shù)據(jù)區(qū);對(duì)主存中所有的數(shù)據(jù)清零,對(duì)內(nèi)存進(jìn)行校驗(yàn),若無(wú)錯(cuò),BIOS入口→CS:IP。(6)Linux系統(tǒng)初啟操作系統(tǒng)的用戶接口——用戶工作環(huán)境11②BIOS啟動(dòng)

在ROM中的引導(dǎo)程序放在固定位置:FFFF:0000CPU從這里開(kāi)始執(zhí)行。從盤(pán)中讀入BootLoader(引導(dǎo)程序)。從硬盤(pán)啟動(dòng)時(shí),讀入零柱面零磁道1扇區(qū)MBR(MasterBootRecord),將控制權(quán)交BootLoader。③Loader(引導(dǎo)程序)功能:將OS讀入內(nèi)存,并將控制權(quán)交給OS的初始化程序。grub/lilo等操作系統(tǒng)的用戶接口——用戶工作環(huán)境12④系統(tǒng)核心初始化(Setup.s)

Setup的工作檢查調(diào)入內(nèi)存中的代碼;獲取內(nèi)存容量信息,設(shè)置設(shè)備模式;屏蔽中斷,準(zhǔn)備進(jìn)入保護(hù)模式;設(shè)置中斷描述符表(idt),全局描述符表(gdt);控制權(quán)交給Heads。Heads的工作對(duì)中斷向量表作準(zhǔn)備工作;檢查CPU類(lèi)型;調(diào)用Setup_paging進(jìn)行頁(yè)面初始化;調(diào)用main.c中的Start_kernel()。操作系統(tǒng)的用戶接口——用戶工作環(huán)境13Start_kernel()的工作對(duì)與CPU、內(nèi)存等最基本硬件相關(guān)部分進(jìn)行初始化;對(duì)中斷向量表進(jìn)行初始化;為進(jìn)程調(diào)度程序作準(zhǔn)備;設(shè)置基準(zhǔn)時(shí)鐘;內(nèi)核的內(nèi)存分配;對(duì)文件系統(tǒng)進(jìn)行初始化;建立init進(jìn)程。init進(jìn)程對(duì)每一個(gè)聯(lián)機(jī)終端建立“getty”進(jìn)程,getty在終端上顯示“l(fā)ogin”,等待用戶登錄。操作系統(tǒng)的用戶接口——用戶工作環(huán)境應(yīng)用程序的處理操作系統(tǒng)的用戶接口——應(yīng)用程序的處理141.作業(yè)、作業(yè)步

(1)作業(yè)計(jì)算機(jī)系統(tǒng)按指定步驟對(duì)初始數(shù)據(jù)進(jìn)行處理并得到計(jì)算結(jié)果的加工工作。

(2)作業(yè)步加工工作中的一個(gè)步驟稱(chēng)為作業(yè)步。操作系統(tǒng)的用戶接口——應(yīng)用程序的處理152.處理應(yīng)用程序的步驟

(1)編輯建立一個(gè)新文件,或?qū)σ延械奈募械腻e(cuò)誤進(jìn)行修改。

(2)編譯將源程序翻譯成浮動(dòng)的目標(biāo)代碼。操作系統(tǒng)的用戶接口——應(yīng)用程序的處理(3)連接主程序和其他所需要的子程序和例行程序連接裝配在一起,使之成為一個(gè)可執(zhí)行的、完整的主存映像文件。(4)運(yùn)行將主存映像文件調(diào)入主存,啟動(dòng)運(yùn)行,得出計(jì)算結(jié)果。16編譯器或匯編器目標(biāo)模塊源程序其他目標(biāo)模塊主存中運(yùn)行動(dòng)態(tài)裝入的系統(tǒng)庫(kù)編譯時(shí)間連接裝配時(shí)間動(dòng)態(tài)鏈接加載運(yùn)行時(shí)間連接裝配程序主存映像文件應(yīng)用程序處理步驟示意圖應(yīng)用程序處理步驟操作系統(tǒng)的用戶接口——應(yīng)用程序的處理172.連接類(lèi)型(1)靜態(tài)連接一個(gè)源程序經(jīng)編譯后,生成一個(gè)可重定位的目標(biāo)模塊,并產(chǎn)生內(nèi)部符號(hào)表和外部符號(hào)表,供連接程序(Link)使用。①內(nèi)部符號(hào)表本模塊可以被其他程序調(diào)用的入口點(diǎn)。②外部調(diào)用表本模塊要調(diào)用的外部的程序模塊名。操作系統(tǒng)的用戶接口——應(yīng)用程序的處理18③連接需要做的工作將各模塊連接成為一個(gè)整體;構(gòu)造全程符號(hào)表,在其中填寫(xiě)模塊的邏輯地址;查找各程序段的外部調(diào)用表,填入對(duì)應(yīng)調(diào)用函數(shù)的地址。④靜態(tài)連接的缺點(diǎn)靜態(tài)連接將所需的外部函數(shù)鏈接到目標(biāo)文件中形成為一個(gè)可執(zhí)行文件。若多個(gè)應(yīng)用程序都調(diào)用了同一個(gè)庫(kù)中的外部函數(shù),那么,多個(gè)應(yīng)用程序的目標(biāo)文件中都會(huì)包含這個(gè)外部函數(shù)對(duì)應(yīng)的代碼。操作系統(tǒng)的用戶接口——應(yīng)用程序的處理19(2)動(dòng)態(tài)連接

動(dòng)態(tài)連接不需要將外部函數(shù)鏈接到目標(biāo)文件中。而是在應(yīng)用程序中需要調(diào)用外部函數(shù)的地方作記錄,并說(shuō)明要使用的外部函數(shù)名和引用入口號(hào)?!纬珊瘮?shù)調(diào)用鏈表

所需支持——DLL(動(dòng)態(tài)鏈接庫(kù))當(dāng)Windows的裝載程序?qū)?yīng)用程序和DLL裝入主存后,裝載程序會(huì)遍歷函數(shù)調(diào)用鏈表,將DLL中函數(shù)在主存的入口(段:偏移)填入鏈表中的每個(gè)結(jié)點(diǎn)。操作系統(tǒng)的用戶接口——應(yīng)用程序的處理用戶接口操作系統(tǒng)的用戶接口——用戶接口201.什么是操作系統(tǒng)的用戶界面操作系統(tǒng)的用戶界面(或稱(chēng)接口)是操作系統(tǒng)提供給用戶與計(jì)算機(jī)打交道的外部機(jī)制。用戶能夠借助這種機(jī)制和系統(tǒng)提供的手段來(lái)控制用戶所在的系統(tǒng)。

操作系統(tǒng)的用戶接口——用戶接口

操作系統(tǒng)用戶通過(guò)操作系統(tǒng)使用計(jì)算機(jī)示意圖212.操作系統(tǒng)提供的用戶界面(1)操作界面(命令接口)用戶使用操作界面來(lái)組織工作流程和控制程序的運(yùn)行。

(2)

系統(tǒng)功能服務(wù)界面(程序接口)用戶程序在其運(yùn)行過(guò)程中,使用系統(tǒng)功能調(diào)用來(lái)請(qǐng)求操作系統(tǒng)的服務(wù)。

操作命令:

作業(yè)控制語(yǔ)言鍵盤(pán)命令圖形界面

操作系統(tǒng)系統(tǒng)功能調(diào)用操作系統(tǒng)提供的用戶接口示意圖操作系統(tǒng)的用戶接口——用戶接口223.操作命令與操作系統(tǒng)類(lèi)型的關(guān)系(1)作業(yè)控制語(yǔ)言──

批處理操作系統(tǒng)(2)鍵盤(pán)命令──

分時(shí)操作系統(tǒng)

個(gè)人計(jì)算機(jī)操作系統(tǒng)(3)圖形用戶界面──

分時(shí)操作系統(tǒng)

個(gè)人計(jì)算機(jī)操作系統(tǒng)

實(shí)際操作系統(tǒng):MS-DOSWindowsLinux(UNIX)提供什么樣的用戶界面?操作系統(tǒng)的用戶接口——用戶接口234.實(shí)例操作系統(tǒng)提供的用戶界面

(1)MS-DOS──

鍵盤(pán)命令系統(tǒng)功能調(diào)用

(2)Windows

──

圖形用戶界面系統(tǒng)功能調(diào)用

(3)Linux(UNIX)─

鍵盤(pán)命令(XWindow)系統(tǒng)功能調(diào)用操作系統(tǒng)的用戶接口——用戶接口系統(tǒng)功能調(diào)用操作系統(tǒng)的用戶接口——系統(tǒng)功能調(diào)用241.什么是系統(tǒng)功能調(diào)用(1)操作如何為用戶提供服務(wù)

操作系統(tǒng)提供實(shí)現(xiàn)各種功能的例行子程序。應(yīng)用程序i

系統(tǒng)調(diào)用

中央處理機(jī)存儲(chǔ)器外部設(shè)備應(yīng)用程序計(jì)算機(jī)系統(tǒng)部件系統(tǒng)功能調(diào)用示意圖操作系統(tǒng)的用戶接口——系統(tǒng)功能調(diào)用25(2)如何調(diào)用操作服務(wù)功能

①采用統(tǒng)一進(jìn)管方式——

系統(tǒng)提供訪管指令、訪管中斷

顯示一個(gè)字符串讀文件

應(yīng)用程序j

read();

操作系統(tǒng)統(tǒng)功能模塊②訪管指令(自愿進(jìn)管指令)

svcn

svc表示機(jī)器訪管指令的操作碼記憶符,n為地址碼(功能號(hào))系統(tǒng)功能調(diào)用示意圖操作系統(tǒng)的用戶接口——系統(tǒng)功能調(diào)用26③訪管中斷

當(dāng)處理機(jī)執(zhí)行到訪管指令時(shí)發(fā)生中斷,該中斷稱(chēng)為訪管中斷,它表示正在運(yùn)行的程序?qū)Σ僮飨到y(tǒng)的某種需求。

操作系統(tǒng)提供實(shí)現(xiàn)各種功能的例行子程序,其中的每一個(gè)功能對(duì)應(yīng)訪管指令的一個(gè)功能號(hào)。例如:

svc0顯示一個(gè)字符

svc1打印一個(gè)字符串

(3)什么是系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用是用戶在程序一級(jí)請(qǐng)求操作系統(tǒng)服務(wù)的一種手段,它是帶有一定功能號(hào)的“訪管指令”。其功能是由操作系統(tǒng)中的程序完成的,即由軟件方法實(shí)現(xiàn)的。操作系統(tǒng)的用戶接口——系統(tǒng)功能調(diào)用274.系統(tǒng)調(diào)用的實(shí)現(xiàn)

a1a0┇ai例行子程序入口地址表A+0A+1┇A+i保護(hù)現(xiàn)場(chǎng);取i值;按i值轉(zhuǎn)移;

恢復(fù)現(xiàn)場(chǎng);訪管中斷處理程序

svci

用戶程序+ASubmam例行子程序Sub0Sub1Subi┇a0a1ai┇系統(tǒng)調(diào)用的執(zhí)行過(guò)程操作系統(tǒng)的用戶接口——系統(tǒng)功能調(diào)用操作系統(tǒng)的用戶接口——系統(tǒng)功能調(diào)用(1)實(shí)現(xiàn)系統(tǒng)調(diào)用必須完成的工作

編寫(xiě)各服務(wù)功能的例行子程序訪管中斷處理程序:保護(hù)現(xiàn)場(chǎng)、調(diào)用例行子程序、恢復(fù)現(xiàn)場(chǎng)構(gòu)造例行子程序的入口地址表

:功能號(hào)與例行服務(wù)子程序一一對(duì)應(yīng)。用戶程序中安排訪管指令

:intn

(2)參數(shù)傳遞問(wèn)題由陷入指令自帶參數(shù):陷入指令的長(zhǎng)度有限,且還要攜帶系統(tǒng)調(diào)用功能號(hào),只能自帶有限的參數(shù)通過(guò)有關(guān)通用寄存器來(lái)傳遞參數(shù):這些寄存器應(yīng)是系統(tǒng)程序和用戶程序都能訪問(wèn)的,由于寄存器個(gè)數(shù)限制,無(wú)法傳遞較多的參數(shù)在內(nèi)存中開(kāi)辟專(zhuān)用堆棧區(qū)來(lái)傳遞參數(shù)28操作系統(tǒng)的用戶接口——系統(tǒng)功能調(diào)用(3)系統(tǒng)調(diào)用與一般過(guò)程調(diào)用的區(qū)別

系統(tǒng)調(diào)用方式(INT)與程序中一般的調(diào)用方式的相同點(diǎn)改變指令流程重復(fù)執(zhí)行和公用改變指令流程后需要返回原處系統(tǒng)調(diào)用方式(INT)與程序中一般的調(diào)用方式的不同點(diǎn)運(yùn)行在不同的系統(tǒng)狀態(tài) 過(guò)程調(diào)用:調(diào)用前后狀態(tài)相同,用戶態(tài)或核態(tài) 系統(tǒng)調(diào)用:INT指令,用戶態(tài)→核態(tài)返回問(wèn)題

過(guò)程調(diào)用:正常返回調(diào)用過(guò)程 系統(tǒng)調(diào)用:可能引起進(jìn)程調(diào)度系統(tǒng)調(diào)用命令中,同一程序中不包含被調(diào)用代碼:好處?系統(tǒng)調(diào)用涉及到PSW:狀態(tài)管理、標(biāo)志寄存器29操作系統(tǒng)的用戶接口——系統(tǒng)功能調(diào)用(4)系統(tǒng)調(diào)用與庫(kù)函數(shù)

系統(tǒng)調(diào)用代碼屬于OS,庫(kù)函數(shù)由軟件開(kāi)發(fā)商提供,由編譯工具鏈入用戶程序。系統(tǒng)調(diào)用代碼的執(zhí)行引起CPU狀態(tài)的變化:用戶態(tài)核心態(tài)庫(kù)函數(shù)的執(zhí)行不會(huì)引起CPU狀態(tài)的變化:用戶態(tài)30Linux的系統(tǒng)功能調(diào)用Linux系統(tǒng)——Linux系統(tǒng)功能調(diào)用311.Linux系統(tǒng)功能調(diào)用的過(guò)程在Linux系統(tǒng)中,系統(tǒng)調(diào)用通過(guò)異常類(lèi)型實(shí)現(xiàn);當(dāng)執(zhí)行了int0x80指令而發(fā)生的軟件中斷;系統(tǒng)自動(dòng)將用戶態(tài)切換為核心態(tài)來(lái)處理該事件,執(zhí)行自陷處理程序(系統(tǒng)調(diào)用處理程序)。Linux系統(tǒng)——Linux系統(tǒng)功能調(diào)用32(1)系統(tǒng)功能調(diào)用過(guò)程abc();

abc();

{syscall;

}system_call:sys_abc

SYSEXITsysabc(){

}用戶態(tài)核心態(tài)用戶程序系統(tǒng)調(diào)用

在libc標(biāo)準(zhǔn)庫(kù)中的封裝例程系統(tǒng)調(diào)用處理程序系統(tǒng)調(diào)用服務(wù)例程Linux系統(tǒng)調(diào)用過(guò)程Linux系統(tǒng)——Linux系統(tǒng)功能調(diào)用33(2)例:getuid系統(tǒng)調(diào)用過(guò)程intmain(){getuid();

}intgetuid(void)

{long_res;int$0x80;

}ENTRY(system_call)pushl%esxSAVE_ALLGET_CURRENT(%ebx)

callsys_getuid16

RESTORE_ALLasmlinkagelongsys_getuid16(void){returnhigh2lowuid(current_uid);}用戶程序系統(tǒng)調(diào)用處理程序標(biāo)準(zhǔn)C庫(kù)內(nèi)核例程getuid系統(tǒng)調(diào)用過(guò)程Linux系統(tǒng)——Linux系統(tǒng)功能調(diào)用例:sethostname函數(shù)原型:

sethostname(constchar*name,size_tlen);功能:設(shè)置計(jì)算機(jī)的主機(jī)名。參數(shù):

name:主機(jī)名

len:name字符串的長(zhǎng)度

返回:0,成功;-1,失敗。

副作用34用戶空間調(diào)用情況

sethostname是libc庫(kù)中的一個(gè)庫(kù)函數(shù),實(shí)際的系統(tǒng)調(diào)用在該函數(shù)中發(fā)出。libc.a反匯編35進(jìn)入函數(shù)sethostname后堆棧指針%esp情況:指向返回地址%esp+8:參數(shù)name %esp+4:參數(shù)len0x4a:sethostname的系統(tǒng)調(diào)用號(hào)36系統(tǒng)內(nèi)核情況

通過(guò)寄存器傳送參數(shù)

INT80執(zhí)行時(shí)引出中斷處理程序system_call();

代碼在arch/i386/kernel/entry.S中37

ENTRY(system_call) pushl%eax#saveorig_eax系統(tǒng)調(diào)用號(hào)進(jìn)堆棧 SAVE_ALL #保留現(xiàn)場(chǎng) GET_CURRENT(%ebx)#%ebx指向當(dāng)前PCB testb$0x02,tsk_ptrace(%ebx)#檢查標(biāo)志位 jnetracesys cmpl$(NR_syscalls),%eax #功能號(hào)是否合法? jaebadsys callSYMBOL_NAME(sys_call_table)(,%eax,4) #調(diào)用跳轉(zhuǎn)表中相應(yīng)函數(shù) movl%eax,EAX(%esp)#savethereturnvalue38392.Linux系統(tǒng)功能調(diào)用的實(shí)現(xiàn)機(jī)制(1)Linux系統(tǒng)調(diào)用的進(jìn)入 ①Linux系統(tǒng)的軟中斷指令是int0x80匯編語(yǔ)言指令②該指令的執(zhí)行會(huì)發(fā)生中斷③處理機(jī)的狀態(tài)由用戶態(tài)自陷到內(nèi)核態(tài)④從system_call()開(kāi)始執(zhí)行系統(tǒng)調(diào)用處理程序。⑤當(dāng)系統(tǒng)調(diào)用處理完畢后,通過(guò)iret匯編語(yǔ)言指令返回到用戶態(tài)。Linux系統(tǒng)——Linux系統(tǒng)功能調(diào)用40(2)系統(tǒng)調(diào)用號(hào) ①linux中,每個(gè)系統(tǒng)調(diào)用被賦予一個(gè)唯一的系統(tǒng)調(diào)用號(hào)

②系統(tǒng)調(diào)用號(hào)定義在include/asm-i386/unistd.h頭文件中

③系統(tǒng)調(diào)用號(hào)格式如下

#define__NR_restart_syscall0#define__NR_exit 1#define__NR_fork 2#define__NR_read 3#define__NR_write 4#define__NR_open 5……………………#define__NR_mq_getsetattr282

Linux系統(tǒng)——Linux系統(tǒng)功能調(diào)用41(3)系統(tǒng)調(diào)用表 ①

系統(tǒng)調(diào)用表記錄了內(nèi)核中所有已注冊(cè)過(guò)的系統(tǒng)調(diào)用,它是系統(tǒng)調(diào)用的跳轉(zhuǎn)表。

系統(tǒng)調(diào)用表是一個(gè)函數(shù)指針數(shù)組,表中依次保存所有系統(tǒng)調(diào)用的函數(shù)指針③

Linux系統(tǒng)調(diào)用表保存在arch/i386/kernel/下的entry.S中或arch/x86/kernel/syscall_table_32.s中Linux系統(tǒng)——Linux系統(tǒng)功能調(diào)用42④

系統(tǒng)調(diào)用表格式如下

ENTRY(sys_call_table) .longsys_restart_syscall/*0*/ .longsys_exit/*1*/ .longsys_fork /*2*/ .longsys_read /*3*/ .longsys_write /*4*/ .longsys_open /*5*/…………………… .longsys_mq_getsetattr/*282*/Linux系統(tǒng)——Linux系統(tǒng)功能調(diào)用43(4)系統(tǒng)調(diào)用處理程序

系統(tǒng)調(diào)用處理程序是system_call(),主要工作如下宏SAVE_ALL保護(hù)現(xiàn)場(chǎng);正確性檢查;依eax中所包含的系統(tǒng)調(diào)用號(hào),調(diào)用其對(duì)應(yīng)的服務(wù)例程;系統(tǒng)服務(wù)例程結(jié)束時(shí),通過(guò)宏RESTORE_ALL恢復(fù)寄存器;最后通過(guò)iret指令返回。Linux系統(tǒng)——Linux系統(tǒng)功能調(diào)用443.增加一個(gè)新的系統(tǒng)功能調(diào)用的方法(1)添加新的服務(wù)例程

在/usr/src/linux/kernel/sys.c文件中增加一個(gè)新的函數(shù),該函數(shù)的名字是sys_mysyscall②例:一個(gè)簡(jiǎn)單的系統(tǒng)調(diào)用,其功能是返回一個(gè)整型值asmlinkageintsys_mycall(intnumber){returnnumber;}Linux系統(tǒng)——Linux系統(tǒng)功能調(diào)用45(2)增加新的系統(tǒng)功能調(diào)用號(hào)

①在文件include/asm-i386/unistd.h中添加一項(xiàng)#define__NR_mysyscallXX②XX為新增加的系統(tǒng)調(diào)用號(hào),此數(shù)字選一未用值。③例#define__NR_restart_syscall0#define__NR_exit 1……………………#define__NR_mq_ge

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論