操作系統(tǒng)實(shí)驗(yàn)報(bào)告1_第1頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告1_第2頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告1_第3頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告1_第4頁
操作系統(tǒng)實(shí)驗(yàn)報(bào)告1_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、操作系統(tǒng)實(shí)驗(yàn)報(bào)告班號:1303107學(xué)號:1130310726姓名:蔡鵬1. 請簡述head.s 的工作原理。head.s實(shí)在32位保護(hù)模式下運(yùn)行的。我認(rèn)為這段程序主要包括兩個(gè)部分:1.初始化設(shè)置。2.任務(wù)執(zhí)行與切換。初始設(shè)置主要包括了:1.設(shè)置GDT表2.設(shè)置系統(tǒng)定時(shí)芯片3.設(shè)置IDT表(0x08時(shí)鐘中斷和0x80系統(tǒng)調(diào)用中斷)4.切換到任務(wù)0執(zhí)行任務(wù)切換和執(zhí)行包括了:1.任務(wù)0和任務(wù)1 , 2. 時(shí)鐘中斷, 3. 系統(tǒng)中斷 兩個(gè)任務(wù)的在LDT中代碼段和數(shù)據(jù)段描述符的內(nèi)容都設(shè)置為:基地址0x0000;段限長值為0x03ff,實(shí)際段長度為4MB。因此在線性地址空間中這個(gè)“內(nèi)核”的代碼和數(shù)據(jù)段與

2、任務(wù)的代碼和數(shù)據(jù)段都從線性地址0開始并且由于沒有采用分頁機(jī)制,所以他們都直接對應(yīng)物理地址0開始處。 為了每隔10毫秒切換運(yùn)行的任務(wù),head.s程序中把定時(shí)器芯片8253的通道0設(shè)置成每隔10毫秒就向中斷控制芯片8259A發(fā)送一個(gè)時(shí)鐘中斷請求信號。PC機(jī)的ROM BIOS開機(jī)時(shí)已經(jīng)在8259A中把時(shí)鐘中斷請求信號設(shè)置成中斷向量8,因此我們需要在中斷8的處理過程中執(zhí)行任務(wù)切換操作。任務(wù)切換的實(shí)現(xiàn)是查看current變量中的當(dāng)前運(yùn)行的任務(wù)號,如果為0,就利用任務(wù)1的TSS選擇符作為操作數(shù)執(zhí)行遠(yuǎn)跳轉(zhuǎn)指令,從而切換到任務(wù)1中,否則反之。 每個(gè)任務(wù)在執(zhí)行時(shí),會(huì)首先把一個(gè)字符的ASCII碼放入寄存器AL中

3、,然后調(diào)用系統(tǒng)中斷調(diào)用int 0x80,而該系統(tǒng)調(diào)用處理過程則會(huì)調(diào)用一個(gè)簡單的字符寫屏子程序,把寄存器AL中的字符顯示在屏幕上,同時(shí)把字符顯示的屏幕的下一個(gè)位置記錄下來,作為下一次顯示字符用。在顯示過一個(gè)字符后,任務(wù)代碼會(huì)使用循環(huán)語句延遲一段時(shí)間,然后又跳轉(zhuǎn)到任務(wù)代碼開始處繼續(xù)循環(huán)執(zhí)行,直到運(yùn)行了10毫秒而發(fā)生了定時(shí)中斷,從而代碼會(huì)切換到另一個(gè)任務(wù)執(zhí)行。對于任務(wù)A,寄存器AL中始終存放字符A,而任務(wù)B運(yùn)行時(shí)AL中始終存放字符B。因此程序運(yùn)行時(shí)我們將看到一連串的A和一連串的B間隔的連續(xù)不斷的顯示在屏幕上。若出現(xiàn)了一個(gè)C,是由于PC機(jī)偶然產(chǎn)生了一個(gè)不是時(shí)鐘中斷和系統(tǒng)調(diào)用中斷的其他中斷。因?yàn)槲覀円呀?jīng)

4、在程序中給所有其他中斷安裝了一個(gè)默認(rèn)中斷處理程序。當(dāng)出現(xiàn)一個(gè)其他中斷時(shí),系統(tǒng)就會(huì)運(yùn)行這個(gè)中斷處理程序,于是就會(huì)在屏幕上顯示一個(gè)C,然后退出中斷。4. 請記錄head.s 的內(nèi)存分布狀況,寫明每個(gè)數(shù)據(jù)段,代碼段,棧段的起始與終止的內(nèi)存地址。代碼段編號名稱起始地址終止地址1startup_320x000xac2setup_idt0xb50xe43setup_gdt0xad0xb44write_char0xe50x1135ignore_int0x1140x1296timer_interrupt0x12b0x1657system_interrupt0x1660x17c8task00x10e00x10f

5、39task10x10f40x1107數(shù)據(jù)段編號名稱起始地址終止地址1current0x17d0x1802scr_loc0x1810x1843lidt_opcode0x1860x18b4lgdt_opcode0x18c0x1915idt0x1980x9976gtd0x9980x9d77ldt00xbe00xbf78tss00xbf80xc5f9ldt10xc600xe7710tss10xe780xedf堆棧段編號名稱起始地址終止地址1Init_stack0x9d80xbd82Krn_stk00xc600xe603Krn_stk10xe000x10e04User_stk10x11080x1308

6、5. 簡述Head.s 5762行在做什么?簡述iret執(zhí)行后,pc如何找到下一條指令?并記錄iret執(zhí)行前后,棧是如何變化的。代碼作用:是在初始堆棧中人工設(shè)置返回環(huán)境。57:把任務(wù)0當(dāng)前局部空間數(shù)據(jù)段(堆棧段)選擇符入棧58:把堆棧指針入棧(也可以把ESP入棧)59:把標(biāo)志寄存器入棧60:把當(dāng)前局部空間代碼段選擇符入棧61:把代碼指針入棧62:執(zhí)行中斷返回指令,從而切換到特權(quán)級3的任務(wù)0中執(zhí)行如何找到下一條指令:執(zhí)行iret之后,將推入堆棧的段地址和偏移地址彈出,使程序返回到原來發(fā)生中斷的地方。其作用是從中斷中恢復(fù)中斷前的狀態(tài),具體作用有如下三點(diǎn):1.恢復(fù)IP:(IP)(SP)+1:(SP)

7、,(SP)(SP)+22.恢復(fù)CS:(CS)(SP)+1:(SP),(SP)(SP)+23.恢復(fù)中斷前的PSW(program status word),即恢復(fù)中斷前的標(biāo)志寄存器的狀態(tài)。(FR)(SP)+1:(SP),(SP)(SP)+24.恢復(fù)ESP(返回權(quán)限發(fā)生變化)5.恢復(fù)SS(返回權(quán)限發(fā)生變化)PC根據(jù)彈出的cs查找其ldt表形成段基地址0x0000,然后再加上偏移地址eip得到下一條指令的地址0x10e0。棧的變化:其中,iret指令執(zhí)行前后棧的內(nèi)容如下:執(zhí)行前:棧中的內(nèi)容就是上面57-62行指令壓入的內(nèi)容。棧指針esp=0x0bc4地址值0x0BC40x10e00x0BC80x0f

8、0x0BCC0x2460x0BD00xbd80x0BD40x170x0BD80xbd8具體截圖如下:執(zhí)行后:將上述內(nèi)容全部彈出,使程序返回到原來發(fā)生中斷的地方。棧指針esp=0x0bd8地址值0x0BD80x0bd8具體截圖如下:6. 當(dāng)任務(wù)進(jìn)行系統(tǒng)調(diào)用時(shí),即int 0x80時(shí),記錄棧的變化情況。當(dāng)執(zhí)行完system_interrupt函數(shù),執(zhí)行153行iret時(shí),記錄棧的變化情況。此外,當(dāng)進(jìn)入和退出system_interrupt時(shí),都發(fā)生了模式切換,請總結(jié)模式切換時(shí),特權(quán)級是如何改變的?棧切換嗎?如何進(jìn)行切換的?執(zhí)行系統(tǒng)調(diào)用int 0x80前,棧為task0或者task1的用戶棧,棧的內(nèi)容

9、:地址值0x0BD80x0bd8具體截圖如下:執(zhí)行系統(tǒng)調(diào)用int 0x80后,堆棧變?yōu)榇巳蝿?wù)的系統(tǒng)棧,而在這系統(tǒng)棧中自動(dòng)壓入了發(fā)生中斷之前的ss、棧指針、標(biāo)志寄存器、cs和下一條指令的eip。棧的內(nèi)容如下:地址值0x0e4c0x10eb0x0e500x0f0x0e540x2460x0e580xbd80x0e5c0x17具體截圖如下:當(dāng)執(zhí)行完system_interrupt函數(shù),執(zhí)行153行iret前,棧為任務(wù)0的系統(tǒng)棧:esp=0x0e4c,棧的內(nèi)容是:地址值0x0e4c0x10eb0x0e500x0f0x0e540x2460x0e580xbd80x0e5c0x17具體截圖如下:執(zhí)行153行i

10、ret后,系統(tǒng)棧彈出下一條指令的地址以及各寄存器的值,彈完后系統(tǒng)棧為空。棧變化為任務(wù)1的用戶棧:esp=0x0bd8。棧的內(nèi)容是:地址值0x0bd80x0bd8具體截圖如下:當(dāng)進(jìn)入和退出system_interrupt時(shí),都發(fā)生了模式切換。進(jìn)入系統(tǒng)中斷時(shí),硬件將各寄存器的值壓入系統(tǒng)棧后,查找其中斷向量表后,根據(jù)描述符的格式,cs值變?yōu)?x08,此時(shí),cs標(biāo)志著由用戶模式切換至內(nèi)核模式,特權(quán)級也由3變?yōu)?,棧也切換至系統(tǒng)棧。退出系統(tǒng)中斷時(shí),由于處于特權(quán)級0的代碼不能直接把控制權(quán)轉(zhuǎn)移到特權(quán)級3的代碼中執(zhí)行,但中斷返回操作iret是可以的,可利用中斷返回指令I(lǐng)RET來啟動(dòng)第一個(gè)任務(wù)。具體實(shí)現(xiàn)方法是在

11、初始堆棧init_stack中人工設(shè)置一個(gè)返回環(huán)境。例,把任務(wù)0的TSS段選擇符加載到任務(wù)寄存器LTR中、LDT段選擇符加載到LDTR中以后,把任務(wù)0的用戶棧指針(0x17: init_stack)和代碼指針(0x0f: task0)以及標(biāo)志寄存器值壓入棧中,然后執(zhí)行中斷返回指令I(lǐng)RET。該指令會(huì)彈出堆棧上的的堆棧指針作為任務(wù)0用戶指針,恢復(fù)假設(shè)的任務(wù)0的標(biāo)志寄存器內(nèi)容,并且彈出棧中代碼指針放入CS: EIP寄存器中,從而開始執(zhí)行任務(wù)0的代碼,完成了從特權(quán)級0到特權(quán)級3代碼的控制轉(zhuǎn)移,模式由內(nèi)核模式轉(zhuǎn)換為用戶模式。7. 當(dāng)時(shí)鐘中斷發(fā)生,進(jìn)入到timer_interrupt程序,請?jiān)敿?xì)記錄從任務(wù)

12、0切換到任務(wù)1,以及又過了10ms,從任務(wù)1切換回到任務(wù)0,整個(gè)流程是怎樣的?TSS是如何變化的?各個(gè)寄存器的值是如何變化的?請?jiān)敿?xì)總結(jié)任務(wù)切換的過程。從任務(wù)0切換到任務(wù)1: 1、 硬件將任務(wù)0的各寄存器的值和狀態(tài)保存到tss0中。2、 通過$TSS1_SEL選擇符查找gdt的tss1和ldt1得到任務(wù)1的各寄存器的值和任務(wù)1的局部代碼段指針等,加載到對應(yīng)各寄存器中,3、 然后跳轉(zhuǎn)到任務(wù)1中。此時(shí),tss0中為任務(wù)0在跳轉(zhuǎn)前的對應(yīng)各寄存器的值 跳轉(zhuǎn)前的tss0:tss0的基地址位0xbf8 切換后,數(shù)據(jù)或指針加載到對應(yīng)各寄存器后的tss0:切換后各寄存器的值是tss1中對應(yīng)的各寄存器的值:tss1:基地址為0x0e78各寄存器的值也是對應(yīng)tss1中的值。當(dāng)過10ms后,從任務(wù)1切換到任務(wù)0:執(zhí)行跳轉(zhuǎn)指令時(shí),1、硬件將任務(wù)1的各寄存器的值和狀態(tài)保存到tss1中。2、通過$TSS0_SEL選擇符查找gdt的tss0和ldt0,3、將tss0對應(yīng)值加載到寄存器中,其中eip的值是前面跳轉(zhuǎn)到任務(wù)0時(shí)下一條指令的地址,即 jmp 2f,棧切換為任務(wù)1的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論