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

正文內(nèi)容

中國科學(xué)院大學(xué)操作系統(tǒng)考試思考題答案-展示頁

2025-07-07 03:55本頁面
  

【正文】 setup_paging:…ret10. 保護(hù)模式的“保護(hù)”體現(xiàn)在哪里?答:打開了保護(hù)模式后,CPU 的尋址模式發(fā)生了變化,需要依賴于 GDT 去獲取代碼或數(shù)據(jù)段的基址。所以要達(dá)到既調(diào)用 main又不需返回,就不采用 call 而是選擇了 ret“調(diào)用”了。答:CALL 指令會將 EIP 的值自動壓棧,保護(hù)返回現(xiàn)場,然后執(zhí)行被調(diào)函數(shù),檔執(zhí)行到被調(diào)函數(shù)的ret指令時,自動出棧給 EIP 并還原現(xiàn)場,繼續(xù)執(zhí)行CALL 的下一行指令。當(dāng)計算機(jī)處在32 位的保護(hù)模式狀態(tài)下時,調(diào)用main的條件才算準(zhǔn)備完畢。8. Linux是用C語言寫的,為什么沒有從main還是開始,而是先運(yùn)行3個匯編程序,道理何在?答:通常用 C 語言編寫的程序都是用戶應(yīng)用程序,這類程序的執(zhí)行必須在操作系統(tǒng)上執(zhí)行,也就是說要由操作系統(tǒng)為應(yīng)用程序創(chuàng)建進(jìn)程,并把應(yīng)用程序的可執(zhí)行代碼從硬盤加載到內(nèi)存。打開A20是打開PE的必要條件;而打開A20不一定非得打開PE。A20是cpu的第 21 位地址線,A20 未打開的時候,實(shí)模式下的最大尋址為 1MB+64KB,而第21根地址線被強(qiáng)制為0,所以相當(dāng)于 cpu“回滾”到內(nèi)存地址起始處尋址。注意到已經(jīng)開啟了保護(hù)模式的機(jī)制,這里的8是保護(hù)模式下的段選擇符,而不能當(dāng)成簡單的阿拉伯?dāng)?shù)字8來看待。6. setup程序的最后是jmpi 0,8 為什么這個8不能簡單的當(dāng)作阿拉伯?dāng)?shù)字8看待?答:這里 8 要看成二進(jìn)制 1000,最后兩位00表示內(nèi)核特權(quán)級,第三位0表示 GDT 表,第四位1表示根據(jù)GDT中的第2項(xiàng)來確定代碼段的段基址和段限長等信息。由于head放置在內(nèi)核的頭部,因此程序跳轉(zhuǎn)到head中執(zhí)行5. setup程序里的cli是為了什么?答:cli是關(guān)中斷指令。 setup 執(zhí)行了之后,內(nèi)核被移到了0x00000處,系統(tǒng)進(jìn)入了保護(hù)模式,并加載了中斷描述符表和全局描述符表lidt idt_48lgdt gdt_48在保護(hù)模式下,一個重要的特征就是根據(jù)GDT決定后續(xù)執(zhí)行哪里的程序。4. bootsect、setup、head程序之間是怎么銜接的?給出代碼證據(jù)。加載之后挪到0x90000處的原因如下:首先內(nèi)核會使用啟動扇區(qū)中的一些數(shù)據(jù),如第 50509 字節(jié)處的 ROOT_DEV;其次,依據(jù)系統(tǒng)對內(nèi)存的規(guī)劃,內(nèi)核占用 0x0000 開始的空間,因此 0x7c00 可能會被覆蓋。另外,如果要使用BIOS進(jìn)行加載,而且加載完成之后再執(zhí)行,則需要很長的時間,因此Linux采用的是邊執(zhí)行邊加載的方法。例如, BIOS可以不用知道內(nèi)核鏡像的大小以及其在軟盤的分布等等信息,減輕了 BIOS 程序的復(fù)雜度,降低了硬件上的開銷。這樣構(gòu)建的好處是站在整個體系的高度,統(tǒng)一設(shè)計和統(tǒng)一安排,簡單而有效。所以計算機(jī)啟動最開始執(zhí)行的是 bios 代碼2. 為什么BIOS只加載了一個扇區(qū),后續(xù)扇區(qū)卻是由bootsect代碼加載?為什么BIOS沒有把所有需要加載的扇區(qū)都加載?答:對 BIOS 而言,“約定”在接到啟動操作系統(tǒng)的命令后,“定位識別”只從啟動扇區(qū)把代碼加載到 0x7c00 這個位置。1. 為什么計算機(jī)啟動最開始的時候執(zhí)行的是BIOS代碼而不是操作系統(tǒng)自身的代碼?答:通常我們用C語言寫的用戶程序,必須在操作系統(tǒng)的平臺上執(zhí)行,即操作系統(tǒng)為應(yīng)用程序創(chuàng)建進(jìn)程并把應(yīng)用程序的可執(zhí)行代碼加載到內(nèi)存。計算機(jī)啟動的時候,操作系統(tǒng)并沒有在內(nèi)存中,我們首先要把操作系統(tǒng)加載到內(nèi)存,而這個工作最開始的部分,就是由bios 程序來實(shí)現(xiàn)的。后續(xù)扇區(qū)則由 bootsect 代碼加載,這些代碼由編寫系統(tǒng)的用戶負(fù)責(zé),與 BIOS 無關(guān)。BIOS 和操作系統(tǒng)的開發(fā)都可以遵循這一約定,靈活地進(jìn)行各自的設(shè)計。而操作系統(tǒng)的開發(fā)者也可以按照自己的意愿,內(nèi)存的規(guī)劃,等等都更為靈活。3. 為什么BIOS把bootsect加載到0x07c00,而不是0x00000?加載后又馬上挪到0x90000處,是何道理?為什么不一次加載到位?答:因?yàn)锽IOS首先會把中斷向量表加載到0x000000x003ff的1KB的內(nèi)存空間,在加載bootsect時約定加載到0x07c00處,符合內(nèi)存布局,如下。因?yàn)榧虞d到0x07c00是BIOS約定好的,操作系統(tǒng)只能遵守這個約定。答:bootsect首先利用int 0x13中斷分別加載setup程序及system模塊,待bootsect程序的任務(wù)完成之后,執(zhí)行jmpi 0,SETUPSEG由于 bootsect 將 setup 段加載到了 SETUPSEG:0 的地方,在實(shí)模式下,該指令跳轉(zhuǎn)到setup段的第一條指令。開啟保護(hù)模式后,執(zhí)行jmpi 0, 8根據(jù)保護(hù)模式的機(jī)制,該指令執(zhí)行后跳轉(zhuǎn)到以GDT第2項(xiàng)中的 base_addr 為基地址,以0為偏移量的地方,其中base_addr為0。因?yàn)榇藭r需要由16位實(shí)模式向32位保護(hù)模式轉(zhuǎn)變,即將進(jìn)行實(shí)模式下的中斷向量表和保護(hù)模式下中斷描述符表的交接工作,在保護(hù)模式的中斷機(jī)制尚未完成時不允許響應(yīng)中斷,以免發(fā)生未知的錯誤。這樣,我們可以得到代碼是從段基址 0x00000000、偏移為 0 處開始執(zhí)行的,即 head 的開始位置。7. 打開A20和打開pe究竟是什么關(guān)系,保護(hù)模式不就是32位的嗎?為什么還要打開A20?有必要嗎?答:有必要。打開A20僅僅意味著CPU可以進(jìn)行32位尋址,且最大尋址空間是4GB,而打開PE是使能保護(hù)模式。打開PE是說明系統(tǒng)處于保護(hù)模式下,如果不打開A20的話,可以訪問的內(nèi)存只能是奇數(shù)1M段,若要真正在保護(hù)模式下工作,必須打開A20,實(shí)現(xiàn)32位尋址
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)教案相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1