版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、哈工大計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院哈工大計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院軟件基礎(chǔ)教研室軟件基礎(chǔ)教研室操作系統(tǒng)操作系統(tǒng)Operating System第第2 2章章 系統(tǒng)接口系統(tǒng)接口Chapter 2: Interface- 2 -Operating System系統(tǒng)接口系統(tǒng)接口用戶通過(guò)它來(lái)使用操作系統(tǒng)用戶通過(guò)它來(lái)使用操作系統(tǒng)n對(duì)大多數(shù)用戶來(lái)說(shuō),操作系統(tǒng)是一個(gè)對(duì)大多數(shù)用戶來(lái)說(shuō),操作系統(tǒng)是一個(gè)“黑盒子黑盒子”操作系統(tǒng)操作系統(tǒng)鍵盤(pán)命令鍵盤(pán)命令 鼠標(biāo)點(diǎn)擊鼠標(biāo)點(diǎn)擊網(wǎng)絡(luò)數(shù)據(jù)網(wǎng)絡(luò)數(shù)據(jù)屏幕輸出屏幕輸出文件改變文件改變引導(dǎo)告訴了我們這個(gè)盒子是怎么放入內(nèi)存的引導(dǎo)告訴了我們這個(gè)盒子是怎么放入內(nèi)存的?在在“打開(kāi)這個(gè)盒子打開(kāi)這個(gè)盒子”之前
2、要之前要“了解盒子的入口了解盒子的入口”- 3 -Operating System操作系統(tǒng)接口操作系統(tǒng)接口nInterface: electrical circuit linking one device with another and enabling data coded in one format to be transmitted in another(出自牛津辭典出自牛津辭典) OS為什么要執(zhí)行這些轉(zhuǎn)換為什么要執(zhí)行這些轉(zhuǎn)換?用戶用戶操作系統(tǒng)操作系統(tǒng)保護(hù)操作系統(tǒng)、應(yīng)用程序可以移植、讓用戶覺(jué)得保護(hù)操作系統(tǒng)、應(yīng)用程序可以移植、讓用戶覺(jué)得簡(jiǎn)單方便簡(jiǎn)單方便這也是這也是“接口接口”(將復(fù)雜轉(zhuǎn)換
3、將復(fù)雜轉(zhuǎn)換為簡(jiǎn)單為簡(jiǎn)單)普遍具有的優(yōu)點(diǎn)普遍具有的優(yōu)點(diǎn)- 4 -Operating System學(xué)習(xí)轉(zhuǎn)換學(xué)習(xí)轉(zhuǎn)換從轉(zhuǎn)換之前開(kāi)始從轉(zhuǎn)換之前開(kāi)始n用戶使用操作系統(tǒng)用戶使用操作系統(tǒng)(計(jì)算機(jī)系統(tǒng)計(jì)算機(jī)系統(tǒng))基本方式基本方式 命令行命令行圖形用戶接口圖形用戶接口(GUI)應(yīng)用程序應(yīng)用程序- 5 -Operating System命令行是怎么回事命令行是怎么回事?n命令是什么命令是什么? 命令輸入后發(fā)生了什么命令輸入后發(fā)生了什么? #include int main(int argc, char * argv) printf(“ECHO:%sn”, argv1); gcc o output output.c
4、 ./output “hello” 命令,一段程序而已命令,一段程序而已int main(int argc, char * argv) char cmd20; while(1) scanf(“%s”, cmd); if(!fork() exec(cmd); else wait(); /while(1)也是一段程序也是一段程序: shell,即即/bin/sh命令得以工作的原因命令得以工作的原因:OS提供了提供了printf,fork,exec等函數(shù)等函數(shù)(接口接口)- 6 -Operating System使使GUI工作,工作,OS提供提供消息框架和相關(guān)消息框架和相關(guān)API硬件輸入硬件輸入Wi
5、ndows應(yīng)用程序應(yīng)用程序iGUI是怎么回事是怎么回事?n鼠標(biāo)點(diǎn)擊鼠標(biāo)點(diǎn)擊OUTPUT以后以后 void COutputDlg:OnOK() GetDlgItemText(IDC_EDIT1,m_outStr); FILE *fp=fopen(d:out.txt,w); fprintf(fp,m_outStr,m_outStr.GetLength(); fclose(fp); 系統(tǒng)消息隊(duì)列系統(tǒng)消息隊(duì)列消息循環(huán)消息循環(huán)WinMain()WM_MOUSEDOWN應(yīng)用消息隊(duì)列應(yīng)用消息隊(duì)列iWinProc1WinProc2OUTPUT按鈕的按鈕的WinProc()case WM_MOUSEDOWN:
6、OnOK(); - 7 -Operating System總結(jié)其中最重要的概念總結(jié)其中最重要的概念 系統(tǒng)調(diào)用系統(tǒng)調(diào)用n用戶使用計(jì)算機(jī)總結(jié):用戶使用計(jì)算機(jī)總結(jié):應(yīng)用操作系統(tǒng)提供的接口應(yīng)用操作系統(tǒng)提供的接口編寫(xiě)程序;應(yīng)用這些程序解決問(wèn)題編寫(xiě)程序;應(yīng)用這些程序解決問(wèn)題命令行命令行: 命令程序命令程序+shell+字符顯示字符顯示GUI: 消息處理程序消息處理程序+消息框架消息框架+圖形顯示圖形顯示應(yīng)用程序應(yīng)用程序: 將上述部分組成一個(gè)整體將上述部分組成一個(gè)整體因此:用戶通過(guò)因此:用戶通過(guò)OS接口使用計(jì)算機(jī);接口使用計(jì)算機(jī);OS接口影響計(jì)接口影響計(jì)算機(jī)的使用方式算機(jī)的使用方式這么重要,得起個(gè)名字:這么
7、重要,得起個(gè)名字: 接口表現(xiàn)為函接口表現(xiàn)為函數(shù)調(diào)用,又由數(shù)調(diào)用,又由OS提供,叫系統(tǒng)調(diào)用提供,叫系統(tǒng)調(diào)用系統(tǒng)調(diào)用是學(xué)習(xí)操作系統(tǒng)的首要任務(wù)系統(tǒng)調(diào)用是學(xué)習(xí)操作系統(tǒng)的首要任務(wù)系統(tǒng)調(diào)用系統(tǒng)調(diào)用- 8 -Operating System學(xué)習(xí)轉(zhuǎn)換學(xué)習(xí)轉(zhuǎn)換提供哪些系統(tǒng)調(diào)用提供哪些系統(tǒng)調(diào)用?nPOSIX: 將接口統(tǒng)一比較好將接口統(tǒng)一比較好!Portable Operating System Interface of Unix 系統(tǒng)調(diào)用系統(tǒng)調(diào)用由由IEEE開(kāi)發(fā),是一個(gè)標(biāo)準(zhǔn)族開(kāi)發(fā),是一個(gè)標(biāo)準(zhǔn)族: 1003.1, 2003分類分類POSIX定義定義描述描述任務(wù)管理任務(wù)管理forkexecl創(chuàng)建一個(gè)進(jìn)程創(chuàng)建一個(gè)進(jìn)程運(yùn)
8、行一個(gè)可執(zhí)行程序運(yùn)行一個(gè)可執(zhí)行程序pthread_create創(chuàng)建一個(gè)線程創(chuàng)建一個(gè)線程文件系統(tǒng)文件系統(tǒng)open打開(kāi)一個(gè)文件或目錄打開(kāi)一個(gè)文件或目錄EACCES返回值,表示沒(méi)有權(quán)限返回值,表示沒(méi)有權(quán)限mode_t st_mode文件頭結(jié)構(gòu)文件頭結(jié)構(gòu): 文件屬性文件屬性S_ISDIR(m)宏展開(kāi),是否為目錄文件宏展開(kāi),是否為目錄文件- 9 -Operating System對(duì)于指令跳轉(zhuǎn)也一樣對(duì)于指令跳轉(zhuǎn)也一樣實(shí)現(xiàn)了隔離實(shí)現(xiàn)了隔離學(xué)習(xí)轉(zhuǎn)換學(xué)習(xí)轉(zhuǎn)換怎么實(shí)現(xiàn)系統(tǒng)調(diào)用怎么實(shí)現(xiàn)系統(tǒng)調(diào)用?n將內(nèi)核程序和用戶程序?qū)?nèi)核程序和用戶程序隔離隔離比較好比較好! 區(qū)分區(qū)分內(nèi)核態(tài)和用戶態(tài)內(nèi)核態(tài)和用戶態(tài):一種處理器:一種處
9、理器“硬件設(shè)計(jì)硬件設(shè)計(jì)”系統(tǒng)調(diào)用系統(tǒng)調(diào)用處理器保護(hù)環(huán)處理器保護(hù)環(huán)0 1 2 3核心態(tài)核心態(tài)OS服務(wù)服務(wù)用戶態(tài)用戶態(tài)CPL(CS)RPL(DS)DPL檢查檢查DPL CPLDPL RPL當(dāng)前程序執(zhí)行在什么態(tài)當(dāng)前程序執(zhí)行在什么態(tài)(哪層哪層環(huán)環(huán))?由于由于CS:IP是當(dāng)前指令,是當(dāng)前指令,所以用所以用CS的最低兩位來(lái)表示的最低兩位來(lái)表示: 0是內(nèi)核態(tài),是內(nèi)核態(tài),3是用戶態(tài)是用戶態(tài)訪問(wèn)的數(shù)訪問(wèn)的數(shù)據(jù)段據(jù)段DS的的最低兩位最低兩位內(nèi)核態(tài)可以訪問(wèn)任何內(nèi)核態(tài)可以訪問(wèn)任何數(shù)據(jù),用戶態(tài)不能訪數(shù)據(jù),用戶態(tài)不能訪問(wèn)內(nèi)核數(shù)據(jù)問(wèn)內(nèi)核數(shù)據(jù)- 10 -Operating System硬件提供了硬件提供了“主動(dòng)進(jìn)入內(nèi)核的方法
10、主動(dòng)進(jìn)入內(nèi)核的方法”n對(duì)于對(duì)于Intel x86,那就是中斷指令,那就是中斷指令intint指令將使指令將使CS中的中的CPL改成改成0,“進(jìn)入內(nèi)核進(jìn)入內(nèi)核”這是用戶程序發(fā)起的調(diào)用內(nèi)核代碼的唯一方式這是用戶程序發(fā)起的調(diào)用內(nèi)核代碼的唯一方式此時(shí),此時(shí),CPL=3而而DPL=0若用戶程序想調(diào)內(nèi)核代碼若用戶程序想調(diào)內(nèi)核代碼: 寫(xiě)一段包含寫(xiě)一段包含int指令的代指令的代碼碼系統(tǒng)調(diào)用的實(shí)現(xiàn)系統(tǒng)調(diào)用的實(shí)現(xiàn):(1) 用戶程序中寫(xiě)上一段包含用戶程序中寫(xiě)上一段包含int指令的代碼指令的代碼(2) OS寫(xiě)中斷處理代碼,獲取想調(diào)程序的編號(hào)寫(xiě)中斷處理代碼,獲取想調(diào)程序的編號(hào)(3) OS根據(jù)編號(hào)轉(zhuǎn)去執(zhí)行相應(yīng)的代碼根據(jù)編
11、號(hào)轉(zhuǎn)去執(zhí)行相應(yīng)的代碼由誰(shuí)做由誰(shuí)做? 庫(kù)函數(shù)庫(kù)函數(shù)!系統(tǒng)調(diào)用編號(hào)系統(tǒng)調(diào)用編號(hào)- 11 -Operating System系統(tǒng)調(diào)用的實(shí)現(xiàn)系統(tǒng)調(diào)用的實(shí)現(xiàn)調(diào)用調(diào)用printf()應(yīng)用程序應(yīng)用程序庫(kù)函數(shù)庫(kù)函數(shù)printf()C函數(shù)庫(kù)函數(shù)庫(kù)庫(kù)函數(shù)庫(kù)函數(shù)write()系統(tǒng)調(diào)用系統(tǒng)調(diào)用write()OS內(nèi)核內(nèi)核n顯然,庫(kù)函數(shù)顯然,庫(kù)函數(shù)write是本圖是本圖的關(guān)鍵的關(guān)鍵在在linux/lib/write.c中中#include _syscall3(int, write, int, fd, const char *buf, off_t, count)在在linux/include/unistd.h中中#defi
12、ne _syscall3(type, name, .) type name(.) _asm_ volatile(“int 0 x80” :”=a”(_res).- 12 -Operating SystemLinuxLinux系統(tǒng)調(diào)用的實(shí)現(xiàn)細(xì)節(jié)系統(tǒng)調(diào)用的實(shí)現(xiàn)細(xì)節(jié)! !- 13 -Operating System將關(guān)于將關(guān)于write的故事完整的講完的故事完整的講完 在在linux/include/unistd.h中中#define _syscall3(type,name,atype,a,btype,b,ctype,c)type name(atype a, btype b, ctype c) lo
13、ng _res; _asm_ volatile(“int 0 x80”:”=a”(_res) :”(_NR_#name),”b”(long)(a),”c”(long)(b), “d”(long)(c); if(_res=0) return (type)_res; errno=-_res; return -1;顯然,顯然,_NR_write是系統(tǒng)調(diào)用號(hào),放在是系統(tǒng)調(diào)用號(hào),放在eax中中在在linux/include/unistd.h中中#define _NR_write 4 /一堆連續(xù)正整數(shù)一堆連續(xù)正整數(shù)(數(shù)組下標(biāo)數(shù)組下標(biāo),函數(shù)表索引函數(shù)表索引)同時(shí)同時(shí)eax也存放返回值,也存放返回值,ebx,
14、ecx,edx存放存放3個(gè)參數(shù)個(gè)參數(shù)_syscall3表示有表示有3個(gè)參數(shù)個(gè)參數(shù)- 14 -Operating Systemint 0 x80中斷的處理中斷的處理 void sched_init(void) set_system_gate(0 x80,&system_call); 顯然,顯然,set_system_gate用來(lái)設(shè)置用來(lái)設(shè)置0 x80的中斷處理的中斷處理在在linux/include/asm/system.h中中#define set_system_gate(n, addr) _set_gate(&idtn,15,3,addr); /idt是中斷向量表基址是中斷向
15、量表基址#define _set_gate(gate_addr, type, dpl, addr)_asm_(“movw %dx,%axnt” “movw %0,%dxnt”“movl %eax,%1nt” “movl %edx,%2”:”i”(short)(0 x8000+(dpl13)+type8),“o”(*( char*)(gate_addr),”o”(*(4+(char*)(gate_addr),“d”(char*)(addr),”a”(0 x00080000)段選擇符段選擇符處理函數(shù)入口點(diǎn)偏移處理函數(shù)入口點(diǎn)偏移04處理函數(shù)入口點(diǎn)偏移處理函數(shù)入口點(diǎn)偏移P DPL01110- 15 -
16、Operating System中斷處理程序中斷處理程序: system_call _sys_call_table+4*%eax就是相應(yīng)系統(tǒng)調(diào)用處理函數(shù)入口就是相應(yīng)系統(tǒng)調(diào)用處理函數(shù)入口在在linux/kernel/system_call.s中中nr_system_calls=72.globl _system_call_system_call: cmpl $nr_system_calls-1,%eax ja bad_sys_call push %ds push %es push %fs pushl %edx pushl %ecx pushl %ebx /調(diào)用的參數(shù)調(diào)用的參數(shù) movl $0 x1
17、0,%edx mov %dx,%ds mov %dx,%es /內(nèi)核數(shù)據(jù)內(nèi)核數(shù)據(jù) movl $0 x17,%edx mov %dx,%fs /fs可以找到用戶數(shù)據(jù)可以找到用戶數(shù)據(jù) call _sys_call_table(,%eax,4) /a(,%eax,4)=a+4*eax pushl %eax /返回值壓棧,留著返回值壓棧,留著ret_from_sys_call時(shí)用時(shí)用 . /其他代碼其他代碼ret_from_sys_call: popl %eax, 其他其他pop, ireteax中存放的是系統(tǒng)調(diào)用號(hào)中存放的是系統(tǒng)調(diào)用號(hào)_asm_ volatile(“int 0 x80”:”=a”(_
18、res)- 16 -Operating System在在include/linux/sched.h中中typedef int (fn_ptr*)();_sys_call_tablecall _sys_call_table(,%eax,4)就是就是call sys_write在在include/linux/sys.h中中fn_ptr sys_call_table= sys_setup, sys_exit, sys_fork, sys_read, sys_write, .;sys_call_table是一個(gè)是一個(gè)全局函數(shù)數(shù)組全局函數(shù)數(shù)組sys_write對(duì)應(yīng)的數(shù)組下標(biāo)對(duì)應(yīng)的數(shù)組下標(biāo)為為4,_NR_write=4eax=4,函數(shù)入口地址長(zhǎng)度也為,函數(shù)入口地址長(zhǎng)度也為4用戶調(diào)用用戶調(diào)用printfprintf展成展成int 0 x80中斷處理中斷處理system_call查表查表sys_ call_table_NR_write =4調(diào)用調(diào)用sys_write故事結(jié)束故事結(jié)束!用戶態(tài)用戶態(tài)內(nèi)核態(tài)內(nèi)核態(tài)- 17 -Operating System系統(tǒng)接口總結(jié)系統(tǒng)接口總結(jié)n對(duì)于用戶來(lái)說(shuō)對(duì)于用戶來(lái)說(shuō) 操作系統(tǒng)是個(gè)操作系統(tǒng)是個(gè)“黑盒子黑盒子”n要打開(kāi)這個(gè)盒子要打開(kāi)這個(gè)盒子 先得找到先得找到“盒子的入口盒子的入口” 系統(tǒng)接口系
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育機(jī)構(gòu)裝修保修合同條款
- 二手房買賣貸款合同
- 新材料研發(fā)合作項(xiàng)目啟動(dòng)協(xié)議
- 房屋車庫(kù)買賣合同
- 餐飲行業(yè)食品過(guò)敏源提示協(xié)議
- 施工合同管理中的各方配合措施
- 高級(jí)護(hù)膚品研發(fā)成果分享與技術(shù)支持合同
- 新聞媒體廣告發(fā)布合同
- 珠寶首飾購(gòu)銷合同協(xié)議
- 多維度城市能源消費(fèi)模式創(chuàng)新合同
- 紀(jì)委辦案安全培訓(xùn)課件
- 超市連鎖行業(yè)招商策劃
- 醫(yī)藥高等數(shù)學(xué)智慧樹(shù)知到課后章節(jié)答案2023年下浙江中醫(yī)藥大學(xué)
- 城市道路智慧路燈項(xiàng)目 投標(biāo)方案(技術(shù)標(biāo))
- 初中英語(yǔ)-Unit2 My dream job(writing)教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 【公司利潤(rùn)質(zhì)量研究國(guó)內(nèi)外文獻(xiàn)綜述3400字】
- 工行全國(guó)地區(qū)碼
- 新疆2022年中考物理試卷及答案
- 地暖工程監(jiān)理實(shí)施細(xì)則
- 頂部板式吊耳計(jì)算HGT-20574-2018
- 《內(nèi)證觀察筆記》
評(píng)論
0/150
提交評(píng)論