操作系統(tǒng)課件_第1頁
操作系統(tǒng)課件_第2頁
操作系統(tǒng)課件_第3頁
操作系統(tǒng)課件_第4頁
操作系統(tǒng)課件_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

實驗3

UserEnvironments實驗內容首先要說明的是:這里的Environment類似于UNIX系統(tǒng)中的process用戶進程管理;加載用戶程序(ELF格式);用戶程序的組成部分和編譯;中斷和異常處理增加系統(tǒng)調用實驗指導Chapter5.pdfJOS_exp_3.pdf實驗3增加的代碼inc/env.h Publicdefinitionsforuser-modeenvironments trap.hPublicdefinitionsfortraphandling syscall.hPublicdefinitionsforsystemcallsfromuserenvironmentstothekernel lib.h Publicdefinitionsfortheuser-modesupportlibrarykern/env.hKernel-privatedefinitionsforuser-modeenvironments env.cKernelcodeimplementinguser-modeenvironments trap.hKernel-privatetraphandlingdefinitions trap.cTraphandlingcode trapentry.SAssembly-languagetraphandlerentry-points syscall.hKernel-privatedefinitionsforsystemcallhandling syscall.cSystemcallimplementationcodelib/MakefragMakefilefragmenttobuilduser-modelibrary,obj/lib/libuser.a entry.SAssembly-languageentry-pointforuserenvironments libmain.cUser-modelibrarysetupcodecalledfromentry.S syscall.cUser-modesystemcallstubfunctions console.cUser-modeimplementationsofputcharandgetchar,providingconsoleI/O exit.cUser-modeimplementationofexit panic.cUser-modeimplementationofpanicuser/* Varioustestprogramstocheckkernellab3code合并實驗3的代碼gitcheckout-blab3origin/lab3gitmergelab2用戶進程管理(數(shù)據(jù)結構)表示用戶進程信息的數(shù)據(jù)結構(進程控制塊pcb):

structEnv{

structTrapframeenv_tf;//Savedregisters LIST_ENTRY(Env)env_link;//Freelistlinkpointers u_intenv_id;//Uniqueenvironmentidentifier u_intenv_parent_id;//env_idofthisenv'sparent u_intenv_status;//Statusoftheenvironment

Pde*env_pgdir;//Kernelvirtualaddressofpagedir u_intenv_cr3;//Physicaladdressofpagedir };structEnv數(shù)組:structEnv*envs=NULL,*curenv=NULL;空閑structEnv鏈表:structEnv_listenv_free_list;用戶進程管理(功能函數(shù))env_init():分配structEnv數(shù)組內存和初始化空閑evn鏈表i386_vm_init()中增加映射Env數(shù)組到UENVS

到這里應該明白mitjos內存布局設計中的每一部分含義(inc/memlayout.h)用戶進程管理(功能函數(shù)2)env_create()env_alloc()//初始化env數(shù)據(jù)結構中的所有成員變量(內存布局,Trapframe寄存器)env_setup_vm()//初始化內存布局load_icode()//加載elf文件內容segment_alloc()//實際分配物理內存,并映射到該進程的虛擬內存用戶進程管理(功能函數(shù)3)env_run()env_pop_tf()iretESP虛擬內存Trapframe|SSESPEFLAGS|CSEIPerrorcodeinterruptnum|DSpushal|ES低地址高地址用戶程序用戶程序的組成:user/hello.c:用戶程序代碼lib/*:實現(xiàn)用戶程序的初始化封裝系統(tǒng)調用,方便用戶程序調用編譯:首先把lib/*編譯成靜態(tài)鏈接庫libjos.alib/entry.S+libjos.a+libgcc.a+hello.c->hellouser/user.ld(注意內存布局)運行:startsrunningatlib/entry.Scallslibmain(),inlib/libmain.clibmain()thencallsumain()用戶程序集成因為目前沒有文件系統(tǒng),所以把編譯之后的多個應用程序(ELF文件)直接集成到kernel中l(wèi)d...-bbinaryobj/user/helloobj/user/buggyhello...nm-nobj/kern/kernel>obj/kern/kernel.symi386_init()ENV_CREATE(user_hello)#defineENV_CREATE(x) { \ externuint8_t_binary_obj_##x##_start[], \ _binary_obj_##x##_size[]; \ env_create(_binary_obj_##x##_start, \ (int)_binary_obj_##x##_size); \}x86保護方式下的中斷和異常Interrupts(中斷)可屏蔽中斷,INTR引腳不可屏蔽中斷,NMI引腳Exceptions(異常)處理器自動檢測觸發(fā):除數(shù)為0,無效指令,一般保護性錯誤,頁故障,等等指令觸發(fā)(軟中斷):INTO,INT3,INTn,BOUND中斷和異常用一個整數(shù)來標示:NMI和異常:0~31中斷:32~255x86保護方式下的中斷和異常Exceptions(異常)Fault(故障):重新執(zhí)行引起故障的指令Taps(陷阱):執(zhí)行下一條指令Aborts(中止):嚴重的系統(tǒng)錯誤,不容易定位引發(fā)錯誤的指令x86保護方式下的中斷和異常IDTR長度為48位的寄存器。其中32位用作中斷描述符表在存儲器中的線性基地址,16位為該表所占的主存空間的字節(jié)大小-1。它們分別被稱為基址字段和界限字段

線性基址界限主存中斷描述符0中斷描述符1中斷描述符2描述符255015031IDTRx86保護方式下的中斷和異常中斷描述符中斷01110:進入中斷后,EFLAGS中的IF自動復位為0,即自動屏蔽中斷異常01111:不改變EFLAGS中的IFx86保護方式下的中斷和異常中斷入口中斷描述符也叫做中斷門(gate)x86保護方式下的中斷和異常中斷進入過程(用戶模式-->核心模式)切換到核心模式的堆棧SS,ESP把用戶模式下的SS,ESP,EFLAGS,CS,EIP壓棧EFLAGS中的TF和IFERRORCODEx86保護方式下的中斷和異常核心模式的堆棧SS,ESP通過任務狀態(tài)段TSS來獲取TR任務寄存器

段選擇字015x86保護方式下的中斷和異常2已經(jīng)在核心模式下的中斷進入不切換堆棧,只把EFLAGS,CS,EIP壓棧EFLAGS中的TF和IF:同用戶模式ERRORCODE:同用戶模式

Thereisoneimportantcaveattotheprocessor'snestedexceptioncapability.Iftheprocessortakesanexceptionwhilealreadyinkernelmode,andcannotpushitsoldstateontothekernelstackforanyreasonsuchaslackofstackspace,thenthereisnothingtheprocessorcandotorecover,soitsimplyresetsitself.Needlesstosay,thekernelshouldbedesignedsothatthiscan'thappen.x86保護方式下的中斷和異常序號描述類型errorcode指令0除法錯,除數(shù)為0FaultNo整數(shù)除法1調試Fault/TrapNo3斷點TrapNoINT34overflowTrapNoINTO5BoundscheckFaultNoBOUND6無效指令FaultNo無效指令7coprocessor無效FaultNo8doublefaultAbortYes10無效TSSFaultYes11segmentnotpresentFaultYes12stackexceptionFaultYes13一般保護性故障FaultYes14頁故障FaultYes訪問內存代碼16浮點錯誤FaultNo32~255中斷TrapNoINTn權限CPL:是當前進程的權限級別,存在于cs寄存器的低兩位;RPL:是進程對段訪問的請求權限,位于段選擇符的低兩位;DPL:存儲在段描述符和中斷描述符中,規(guī)定訪問該段的權限級別和通過該中斷門的權限;

核心態(tài)的權限級別為0,用戶態(tài)為3 max(CPL,RPL)<=DPL中斷過程初始化中斷描述符表:trap.c:idt_init()完成各個中斷處理的入口代碼:trapentry.S中斷處理的統(tǒng)一入口代碼:trapentry.S:_alltrapstrap.c:trap()中斷處理;中斷返回:env_run()->env_pop_tf()中斷過程的堆棧中斷進入

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論