freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

中國科學(xué)院大學(xué)操作系統(tǒng)考試思考題答案(編輯修改稿)

2024-07-25 03:55 本頁面
 

【文章內(nèi)容簡介】 地址空間。(圖片自己畫,參考如下圖)17. 進程0開始創(chuàng)建進程1,調(diào)用了fork(),跟蹤代碼時我們發(fā)現(xiàn),fork代碼執(zhí)行了兩次,第一次,跳過init()直接執(zhí)行了for(。) pause(),第二次執(zhí)行fork代碼后,執(zhí)行了init()。奇怪的是,我們在代碼中并沒有看見向后的goto語句,也沒有看到循環(huán)語句,是什么原因?qū)е路磸?fù)執(zhí)行?請說明理由,并給出代碼證據(jù)。答:進程 0 創(chuàng)建進程1采用了中斷機制,在中斷發(fā)生時由硬件將 ss,esp,eflags,cs,eip的值壓入了內(nèi)核棧,其中 eip 的值指向了 int 0x80 的下一條指令。在執(zhí)行fork時,通過0x80號系統(tǒng)調(diào)用,內(nèi)核執(zhí)行copy_process函數(shù),為進程1準備其管理結(jié)構(gòu)(task_struct),設(shè)置進程1的線性地址空間及物理頁面,其中設(shè)置了進程1的 TSS 中 eax 的值為 0,狀態(tài)為TASK_RUNNING,以及利用中斷壓棧的寄存器值設(shè)置進程 1 的 ss,esp,eflags,cs,eip。copy_process:ppid = last_pid?!璸 = eip。p = eflags。p = 0?!璸 = esp?!璸 = cs amp。 0xffff。p = ss amp。 0xffff。…pstate = TASK_RUNNING。return last_pid。函數(shù)copy_process的返回值是last_pid,即進程1的pid(pid不為0)。在fork返回到進程0后,進程0判斷返回值非 0,因此執(zhí)行代碼for(。) pause()。在sys_pause函數(shù)中,內(nèi)核設(shè)置了進程0的狀態(tài)為 TASK_INTERRUPTIBLE,并進行進程調(diào)度。由于只有進程1處于就緒態(tài),因此調(diào)度執(zhí)行進程1的指令。由于進程1在TSS中設(shè)置了eip等寄存器的值,因此從 int 0x80 的下一條指令開始執(zhí)行,且設(shè)定返回 eax 的值作為 fork 的返回值(值為 0),因此進程1執(zhí)行了 init 的函數(shù)。導(dǎo)致反復(fù)執(zhí)行,主要是利用了兩個系統(tǒng)調(diào)用 sys_fork 和 sys_pause 對進程狀態(tài)的設(shè)置,以及利用了進程調(diào)度機制。18. copy_process函數(shù)的參數(shù)最后五項是:long eip,long cs,long eflags,long esp,long ss。查看棧結(jié)構(gòu)確實有這五個參數(shù),奇怪的是其他參數(shù)的壓棧代碼都能找得到,確找不到這五個參數(shù)的壓棧代碼,反匯編代碼中也查不到,請解釋原因。答:在fork()中,當(dāng)執(zhí)行“int $0x80”時產(chǎn)生一個軟中斷,該中斷使 CPU硬件自動將SS、ESP、EFLAGS、CS、EIP這5個寄存器的數(shù)值按照這個順序壓入進程0的內(nèi)核棧。利用硬件進行壓棧,可以確保 eip 的值指向正確的指令,以使在中斷返回后,程序能夠繼續(xù)執(zhí)行。19. 為什么static inline _syscall0(type,name)中需要加上關(guān)鍵字inline?答:inline一般是用于定義內(nèi)聯(lián)函數(shù),內(nèi)聯(lián)函數(shù)結(jié)合了函數(shù)以及宏的優(yōu)點,在定義時和函數(shù)一樣,編譯器會對其參數(shù)進行檢查;在使用時和宏類似,內(nèi)聯(lián)函數(shù)的代碼會被直接嵌入在它被調(diào)用的地方,這樣省去了函數(shù)調(diào)用時的一些額外開銷,比如保存和恢復(fù)函數(shù)返回地址等,可以加快速度。20. 根據(jù)代碼詳細說明copy_process函數(shù)的所有參數(shù)是如何形成的?答:一般在應(yīng)用程序中,一個函數(shù)的參數(shù)是由函數(shù)定義的,而在操作系統(tǒng)底層中,函數(shù)參數(shù)可以由函數(shù)定義以外的程序通過壓棧的方式“做”出來。 copy_process函數(shù)的所有參數(shù)正是通過壓棧形成的。代碼見P83頁、P85頁、P86頁。21. 根據(jù)代碼詳細分析,進程0如何根據(jù)調(diào)度第一次切換到進程1的。答:通過fork(),進程0創(chuàng)建進程1,并將其狀態(tài)設(shè)為TASK_RUNNING,fork()函數(shù)執(zhí)行完畢后返回,進入for(。) pause()。在sys_pause()中,將當(dāng)前進程(進程0)的狀態(tài)設(shè)置為TASK_INTERRUPTBLE,然后執(zhí)行schedule(),遍歷task[]數(shù)組,找到唯一的一個處于TASK_RUNNING的進程(進程1),然后切換到進程1執(zhí)行,即switch_to(1)。代碼見P10622. 內(nèi)核的線性地址空間是如何分頁的?畫出從0x000000開始的7個頁(包括頁目錄表、頁表所在頁)的掛接關(guān)系圖,就是頁目錄表的前四個頁目錄項、第一個個頁表的前7個頁表項指向什么位置?給出代碼證據(jù)。答:先把頁目錄表和4個頁表放在物理內(nèi)存的起始地址,從內(nèi)存起始位置開始的5頁空間內(nèi)容全部清零(每頁4KB)。然后設(shè)置頁目錄表的前4項,使之分別指向4個頁表,將第4個頁表的最后一個頁表項指向?qū)ぶ贩秶淖詈笠粋€頁面,將第4個頁表的倒數(shù)第二個頁表項指向?qū)ぶ贩秶牡箶?shù)第二個頁面,從高地址向低地址方向填寫4個頁面,依次指向內(nèi)存從高地址向低地址方向的各個頁面。圖見P39(注意要畫出7個頁,參考如下)代碼見P39 最下面23. 用文字和圖說明中斷描述符表是如何初始化的,可以舉例說明(比如:set_trap_gate(0,amp。divide_error)),并給出代碼證據(jù)。答:以set_trap_gate(0,amp。divide_error)為例,其中,n是0,gate_addr是amp。idt[0],也就是idt的第一項中斷描述符的地址;type是15,dpl(描述符特權(quán)級)是0;addr是中斷服務(wù)程序divide_error(void)的入口地址。見P54 圖29
點擊復(fù)制文檔內(nèi)容
教學(xué)教案相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1