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

下載本文檔

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

文檔簡(jiǎn)介

1、操作系統(tǒng)原理實(shí)驗(yàn)考試l 成績(jī)計(jì)算:平時(shí)40分 考勤問(wèn)答(5分)+ 平時(shí)作業(yè)(15分)+ 大作業(yè)(20分)+ 期末60分 筆試(30分)+ 機(jī)考(30分) = 100分l 考試形式:開(kāi)卷筆試+上機(jī)操作(使用實(shí)驗(yàn)室或自己的電腦)l 機(jī)考:n 考試時(shí)間:2014年6月17日(周二,三班)&20日(周五,二班)上午10:3012:30n 考試地點(diǎn):實(shí)驗(yàn)中心B401l 筆試:n 考試時(shí)間:2014年6月26日(周四)晚上19:0021:00n 考試地點(diǎn):教學(xué)樓C101l 筆試題型:填空(15題,每題2分,共30分)、問(wèn)答(6題,每題5分,共30分)、編程(4題,每題10分,共40分)l 操作題型:操作磁

2、盤(pán)映像和文件(30分)、編寫(xiě)簡(jiǎn)單的匯編程序(30分)、編寫(xiě)較復(fù)雜的匯編或/和C程序(40分,二選一)復(fù)習(xí)重點(diǎn)與考試要求1 實(shí)驗(yàn)環(huán)境1)要求熟悉虛擬機(jī)、編譯軟件和各種開(kāi)發(fā)工具的使用,會(huì)創(chuàng)建軟硬磁盤(pán)的磁盤(pán)映像和FAT12文件結(jié)構(gòu)、編寫(xiě)和編譯簡(jiǎn)單的匯編和C語(yǔ)言程序、將引導(dǎo)程序?qū)懭氪疟P(pán)映像的引導(dǎo)扇區(qū)、將可執(zhí)行程序和各種文件寫(xiě)入帶FAT文件結(jié)構(gòu)的磁盤(pán)映像。2)重點(diǎn)l 虛擬機(jī):VMware(Linux/Ubuntu、混合編程)、Bochs(運(yùn)行測(cè)試)l 編譯器:WindowsNASM(匯編),LinuxNASM(匯編)、GCC(C)、LD(鏈接)l 開(kāi)發(fā)工具:WindowsNotePad+(源代碼編輯)、

3、WinHex(二進(jìn)制編輯)、DiskWriter/ FloppyWriter(寫(xiě)磁盤(pán)映像)、WinImage(復(fù)制文件到FAT磁盤(pán)映像),Linuxgedit(源代碼編輯)l 測(cè)試環(huán)境:虛擬機(jī)Bochs、DOS系統(tǒng)軟盤(pán)映像、磁盤(pán)映像文件(帶FAT12結(jié)構(gòu)的1.44MB 軟盤(pán)和10MB 硬盤(pán))、可執(zhí)行文件格式COM/BIN/ELF、虛擬機(jī)配置文件bochsrc.bxrc2 引導(dǎo)1)要求了解PC機(jī)的引導(dǎo)過(guò)程,掌握引導(dǎo)扇區(qū)的結(jié)構(gòu),會(huì)編寫(xiě)和編譯帶清屏和顯示Hello串功能的簡(jiǎn)單匯編引導(dǎo)程序、將引導(dǎo)程序?qū)懭氪疟P(pán)映像的引導(dǎo)扇區(qū)、修改Bochs虛擬機(jī)的配置文件、用該磁盤(pán)映像啟動(dòng)Bochs虛擬機(jī)進(jìn)行測(cè)試。2)

4、重點(diǎn)l 引導(dǎo)過(guò)程:PC機(jī)加電或重啟CPU復(fù)位內(nèi)存清零內(nèi)存奇偶校驗(yàn)跳轉(zhuǎn)到地址為FFFF0h處的系統(tǒng)BIOS入口指令,執(zhí)行主板ROM中的例程檢查各個(gè)端口,識(shí)別并初始化設(shè)備,然后將這些設(shè)備連接到計(jì)算機(jī)上,并提供在設(shè)備上的I/O服務(wù)創(chuàng)建兩個(gè)數(shù)據(jù)區(qū)(中斷向量表和BIOS數(shù)據(jù)區(qū))讀啟動(dòng)盤(pán)的第一個(gè)物理扇區(qū)(主引導(dǎo)扇區(qū)),如果其最后兩個(gè)字節(jié)為55h和AAh(引導(dǎo)記錄標(biāo)識(shí)符),則裝入該扇區(qū)到內(nèi)存地址7C00h處,并跳轉(zhuǎn)到7C00h處執(zhí)行l(wèi) 主引導(dǎo)扇區(qū)(Master Boot Sector)是磁盤(pán)的第一個(gè)物理扇區(qū)(512B),內(nèi)容為:n 主引導(dǎo)記錄(MBR = Master Boot Record):446B,一

5、般為裝入操作系統(tǒng)的引導(dǎo)程序(通常負(fù)責(zé)加載OS的裝載模塊)n 磁盤(pán)分區(qū)表(DPT = Disk Partition Table):4*16=64B,4個(gè)分區(qū)表項(xiàng),每個(gè)16B,軟盤(pán)沒(méi)有DPTn 引導(dǎo)記錄標(biāo)識(shí)符(BRID = Boot Record Identifier):2B,內(nèi)容為55h AAhl 引導(dǎo)實(shí)驗(yàn)n 用NotePad+編寫(xiě)匯編源代碼u 用org操作符設(shè)置程序的入口地址為7C00hu 設(shè)置DS和ES=CSu (調(diào)用清屏例程)u 調(diào)用顯示字符串例程u 進(jìn)入無(wú)限循環(huán)u 定義顯示字符串例程用10h號(hào)中斷的13h號(hào)功能實(shí)現(xiàn)(彩色)字符串顯示u (定義清屏例程用10h號(hào)中斷的6號(hào)功能實(shí)現(xiàn)上滾整個(gè)文

6、本顯示頁(yè))u 定義字符串常量(如“Hello, OS world!”或其他特定字符串)u 用times偽指令將剩余空間填充為0u 將引導(dǎo)扇區(qū)的最后2個(gè)字節(jié)設(shè)置為55h和AAhn 用NASM將源程序編譯成二進(jìn)制文件boot.binn 用Bochs工具創(chuàng)建1.44MB軟盤(pán)映像a.imgn 用FloppyWriter/DiskWriter將boot.bin寫(xiě)入軟盤(pán)映像a.imgn 修改Bochs虛擬機(jī)的配置文件,使用a.img作為軟盤(pán)A的映像文件,并用軟盤(pán)啟動(dòng)n 啟動(dòng)Bochs虛擬機(jī)進(jìn)行測(cè)試3 CPU與指令1)要求了解x86 CPU的結(jié)構(gòu),熟悉其寄存器,掌握常用的CPU指令和NASM指令,會(huì)編寫(xiě)簡(jiǎn)單

7、的匯編程序。2)重點(diǎn)l 808680386寄存器n 8個(gè)1632位通用寄存器u 4個(gè)數(shù)據(jù)寄存器:EAX(累加)、EBX(基址)、ECX(計(jì)數(shù))、EDX(數(shù)據(jù)),其中的低16位寄存器(如AX)又可以進(jìn)一步分成低8位(如AL)和高8位(如AH)兩個(gè)部分u 4個(gè)指針變址寄存器:ESP(堆棧指針)、EBP(基址指針)、ESI(源變址)、EDI(目的變址)n 46個(gè)16位段寄存器(保護(hù)模式下為段選擇符,有與對(duì)應(yīng)段描述符類(lèi)似的64位隱藏結(jié)構(gòu)):CS(代碼段)、DS(數(shù)據(jù)段)、SS(堆棧段)、ES(附加段)、FS(附加段)、GS(附加段)n 2個(gè)1632位專(zhuān)用寄存器:EIP(指令指針)、EFLAGS(標(biāo)志,

8、其中的第6位為零標(biāo)志ZF、第9位為中斷允許標(biāo)志IF、第10位為方向標(biāo)志DF)n 4個(gè)48或80位系統(tǒng)地址寄存器:GDTR(全局描述符表寄存器,48位:16位界限+32位基址)、LDTR(局部描述符表寄存器,80位:16位段選擇符+32位基址+20位界限+12位屬性)、IDTR(中斷描述符表寄存器,48位:16位界限+32位基址)、TR(任務(wù)寄存器,80位:16位段選擇符+32位基址+20位界限+12位屬性)n 4個(gè)32位的控制寄存器:CR0(機(jī)器狀態(tài)字,其最低位PE用于進(jìn)入保護(hù)模式,最高位PG用于啟動(dòng)分頁(yè)機(jī)制)、CR1(未使用)、CR2(引起頁(yè)故障的線(xiàn)性地址)、CR3(頁(yè)目錄基址)l 常用CP

9、U指令:算術(shù)運(yùn)算(四則、增減)、位運(yùn)算(邏輯、移位)、賦值(MOV)、比較測(cè)試、跳轉(zhuǎn)、調(diào)用返回、中斷、循環(huán)重復(fù)、棧操作、串操作、端口IO、標(biāo)志位設(shè)置、裝入/保存系統(tǒng)寄存器、無(wú)操作l 常用NASM指令:DB/DW/DD,RESB/RESW/RESD,EQU,TIMES,BITS16/BITS32,SECTION/SEGMENT,EXTERN、GLOBAL,ALIGN/ALIGNB,%macro/ %endmacro、%rep/%endrep、%define、%if/%ifdef/%elif/%else/%endif,ORG,$、$4 BIOS中斷1)要求掌握常用BIOS中斷及其調(diào)用格式,會(huì)編寫(xiě)使

10、用BIOS中斷進(jìn)行字符串顯示、清屏、讀按鍵和讀扇區(qū)等操作的匯編程序。2)重點(diǎn)l 常用BIOS中斷:顯示字符int 10h的0Eh號(hào)功能、顯示字符串int 10h的13h號(hào)功能、清屏(上滾整個(gè)文本顯示頁(yè))int 10h中斷的6號(hào)功能、讀按鍵int 16h的00h號(hào)功能、讀扇區(qū)int 13h的02h號(hào)功能l 調(diào)用格式:mov ah,功能號(hào) ; 設(shè)置各種入口參數(shù)int中斷號(hào)5 可執(zhí)行文件格式1)要求掌握常用可執(zhí)行文件格式,掌握ELF的具體結(jié)構(gòu),會(huì)編寫(xiě)和生成COM和ELF格式的可執(zhí)行文件、運(yùn)行COM程序、分析ELF文件的結(jié)構(gòu)。2)重點(diǎn)l BIN(binary,二進(jìn)制)二進(jìn)制裸格式,無(wú)org指令時(shí)程序的

11、入口地址為0,引導(dǎo)程序需用org 7C00h指令來(lái)指定入口地址。文件的擴(kuò)展名一般為binl COM(command file,命令文件)DOS的二進(jìn)制裸格式,不分段,會(huì)被裝載到當(dāng)前段的100h處(需使用org 100h指令,DS=SS=CS、SP=100h-4),文件大小必須64KB-256B。文件的擴(kuò)展名必須為coml ELF(Executable and Linkable Format,可執(zhí)行與可鏈接格式)類(lèi)Unix操作系統(tǒng)的標(biāo)準(zhǔn)二進(jìn)制文件格式。ELF文件由ELF頭、程序頭表、若干節(jié)(section)和節(jié)頭表組成。程序頭表記載了運(yùn)行時(shí)所需的節(jié),節(jié)頭表則記載了二進(jìn)制文件中各節(jié)的首地址,它們?cè)?/p>

12、ELF文件中都是可選的。ELF文件可以沒(méi)有擴(kuò)展名,也可以使用下列擴(kuò)展名:.o、.so、.elf、.prx、.puff、.bin6 FAT文件系統(tǒng)1)要求掌握DPT及分區(qū)表項(xiàng)的結(jié)構(gòu),了解常用分區(qū)類(lèi)型和磁盤(pán)尋址方式,熟悉1.44MB軟盤(pán)和10MB硬盤(pán)的FAT12分區(qū)的具體格式和EBPB的概念與結(jié)構(gòu),掌握主引導(dǎo)扇區(qū)和分區(qū)引導(dǎo)扇區(qū)的區(qū)別,了解FAT文件系統(tǒng)的目錄結(jié)構(gòu)和表示方法,掌握文件條目的格式(包括首字節(jié)含義和文件屬性)和FAT項(xiàng)值的含義(包括FAT頭兩項(xiàng)的特殊值介質(zhì)描述符),會(huì)編寫(xiě)生成軟硬盤(pán)FAT12文件結(jié)構(gòu)的匯編程序并將其寫(xiě)入磁盤(pán)映像、能人工識(shí)別和手工編輯文件條目及FAT項(xiàng)(WinHex)。2)

13、重點(diǎn)l 磁盤(pán)分區(qū)n 磁盤(pán)分區(qū)表(DPT = Disk Partition Table)位于(主)引導(dǎo)扇區(qū),含4個(gè)分區(qū)表項(xiàng),每一項(xiàng)占16B。只有硬盤(pán)(U盤(pán)/固態(tài)盤(pán))才有磁盤(pán)分區(qū)表,軟盤(pán)無(wú)。如果DPT全為0,則表示無(wú)磁盤(pán)分區(qū);有幾個(gè)非0分區(qū)表項(xiàng),就有幾個(gè)磁盤(pán)分區(qū)(卷);一個(gè)磁盤(pán)最多可有4個(gè)分區(qū)(卷)n 分區(qū)類(lèi)型(CHS/LBA)如0x01 = FAT12、0x06/0x0E = FAT16、0x0B/0x0C = FAT32、0x07 = NTFS、0x05/0x0F = 擴(kuò)展、0x83 = Linux、0xEE = GPT(GUID Partition Table,全局唯一標(biāo)識(shí)符分區(qū)表,一種新的

14、磁盤(pán)分區(qū)表標(biāo)準(zhǔn),由Intel公司于2010年推出,可突破傳統(tǒng)MBR的2TB限制)n 磁盤(pán)尋址方式傳統(tǒng)的CHS(Cylinder/Head/Sector,柱面/磁頭/扇區(qū))、現(xiàn)代的線(xiàn)性尋址方式LBA(Logical Block Addressing,邏輯塊尋址),1996年以后推出的硬盤(pán)一般都支持LBAl FAT分區(qū)n FAT(File Allocation Table,文件分配表)是微軟公司為其操作系統(tǒng)DOS和老式Windows所定義的一套文件系統(tǒng),包括FAT12(32MB)、FAT16(32MB/2GB)、FAT32(2TB)和FAT64/exFAT(64ZB)等多種具體格式l FAT12:

15、在我們的OS實(shí)驗(yàn)中,使用1.44MB軟盤(pán)映像和10MB硬盤(pán)映像作為測(cè)試介質(zhì),它們都采用FAT12文件系統(tǒng)n 1.44MB軟盤(pán)的格式:u CHS=80/2/18、每個(gè)扇區(qū)有512(200h)B、共2880扇區(qū)=1440KB=1.44MBu 每個(gè)FAT項(xiàng)占12位(1.5B)、每個(gè)簇只有1個(gè)扇區(qū)、每個(gè)FAT表占9個(gè)扇區(qū)u 根目錄區(qū)有224條目,占14扇區(qū)u 無(wú)磁盤(pán)分區(qū)u 起始地址主引導(dǎo)扇區(qū):0(0#扇區(qū))、FAT#1:200h(1#扇區(qū))、FAT#2:1400h(10#扇區(qū))、根目錄區(qū):2600h(19#扇區(qū))、數(shù)據(jù)區(qū):4200h(33#扇區(qū))n 10MB硬盤(pán)的格式:u CHS=80/4/63、每個(gè)

16、扇區(qū)有512(200h)B、共20160扇區(qū)=10080KB9.84MBu 每個(gè)FAT項(xiàng)占12位(1.5B)、每個(gè)簇有8個(gè)扇區(qū)、每個(gè)FAT表占8個(gè)扇區(qū)u 根目錄區(qū)有512條目,占32扇區(qū)u 主引導(dǎo)扇區(qū)的DPT中有唯一分區(qū)表項(xiàng),分區(qū)從第2個(gè)(1號(hào))柱面的首個(gè)扇區(qū)(4*63=252)開(kāi)始u 起始地址:主引導(dǎo)扇區(qū):0(0#扇區(qū))、分區(qū)引導(dǎo)扇區(qū):1F800h(252#扇區(qū))、FAT#1:1FA00h(253#扇區(qū))、FAT#2:20A00h(261#扇區(qū))、根目錄區(qū):21A00h(269#扇區(qū))、數(shù)據(jù)區(qū):25A00h(301#扇區(qū))l 分區(qū)引導(dǎo)扇區(qū)n 是分區(qū)的第一個(gè)扇區(qū)(512B)。因?yàn)檐洷P(pán)無(wú)DPT,

17、整個(gè)磁盤(pán)都是一個(gè)分區(qū),所以其分區(qū)引導(dǎo)扇區(qū)與主引導(dǎo)扇區(qū)重合,都是磁盤(pán)的首個(gè)物理扇區(qū);而硬盤(pán)必須有DPT,且其各個(gè)分區(qū)必須都從第2個(gè)柱面及其之后的某個(gè)柱面的首個(gè)扇區(qū)開(kāi)始。所以我們的10MB硬盤(pán)的唯一分區(qū),也從第2個(gè)(1號(hào))柱面的首個(gè)扇區(qū)開(kāi)始,分區(qū)的首個(gè)扇區(qū)(即分區(qū)引導(dǎo)扇區(qū))的序號(hào)為252,主引導(dǎo)扇區(qū)到分區(qū)引導(dǎo)扇區(qū)之間的251個(gè)扇區(qū)(125.5KB)都浪費(fèi)了n FAT分區(qū)引導(dǎo)扇區(qū)的結(jié)構(gòu):跳轉(zhuǎn)指令(3B)、OEM名串(8B)、BPB(BIOS Parameter Block,BIOS參數(shù)塊,25B)、EBPB(Extended BPB,擴(kuò)展BPB,26B)、引導(dǎo)程序代碼(448B)、有效結(jié)束標(biāo)志(2B

18、:55 AA)l FAT文件系統(tǒng):采用多級(jí)目錄結(jié)構(gòu),子目錄用文件表示。文件數(shù)據(jù)塊的大小為簇,采用鏈?zhǔn)酱鎯?chǔ)(FAT項(xiàng)為指向下一簇的鏈指針/下一簇號(hào)),磁盤(pán)的空閑空間管理采用空閑塊列表(FAT項(xiàng)為0表示對(duì)應(yīng)簇為空閑)。目錄為文件條目的列表,每個(gè)條目占用32B(20h字節(jié))n 文件條目u 格式:8+3文件名(11B,英文字母必須大寫(xiě))、文件屬性(1B)、保留(10B)、時(shí)間(2B)、日期(2B)、開(kāi)始簇號(hào)(2B)、文件大?。?B)u 首字節(jié)含義:0未使用、2Eh點(diǎn)條目、E5h已刪條目、05E5hu 文件屬性(可位或):00普通文件、01只讀、02隱藏、04系統(tǒng)、08卷標(biāo)、10h子目錄、20h檔案n

19、FAT項(xiàng)u FAT是映射到分區(qū)中每個(gè)簇(cluster)的項(xiàng)(entry)列表u FAT12的每個(gè)項(xiàng)占12位(1.5B)u FAT項(xiàng)取值的含義:000空閑簇、001保留簇、002FEF被占用簇(值為下一簇的序號(hào))、FF0FF6保留值、FF7壞簇、FF8FFF文件最后簇(一般取FFF)u FAT表的前兩個(gè)項(xiàng)保存特殊的值:項(xiàng)0 的低8位(首字節(jié))為介質(zhì)描述符(軟盤(pán)為F0h、硬盤(pán)/U盤(pán)/固態(tài)盤(pán)為F8h)、其余位全為1,項(xiàng)1 = 結(jié)束簇標(biāo)記,F(xiàn)AT12的前兩項(xiàng)(3B)的值(十六進(jìn)制)為F0 FF FF7 DOS1)要求了解DOS操作系統(tǒng)的特點(diǎn)、組成、版本和系統(tǒng)盤(pán)映像文件,掌握常用的DOS內(nèi)外部命令的使

20、用方法,會(huì)用TYPE和EDIT生成文本文件、用XCOPY復(fù)制文件目錄。2)重點(diǎn)l DOS(Disk Operating Sysytem,磁盤(pán)操作系統(tǒng))是PC機(jī)的傳統(tǒng)操作系統(tǒng),單用戶(hù)、單任務(wù)、字符界面,運(yùn)行在16位實(shí)模式(沒(méi)有保護(hù)功能,最大RAM內(nèi)存空間只有640KB),命令行不區(qū)分字母的大小寫(xiě)。l FreeDOS是一種自由開(kāi)源的兼容DOS操作系統(tǒng),由Jim Hall領(lǐng)導(dǎo)一個(gè)團(tuán)隊(duì)于1994年中開(kāi)始開(kāi)發(fā),目前最新的是2012年1月2日推出的1.1版,其系統(tǒng)軟盤(pán)映像文件為FDOS11.img。l MS-DOS 6.22是微軟公司于1994年6月推出的一個(gè)DOS最后銷(xiāo)售版本,其系統(tǒng)軟盤(pán)映像文件為MSD

21、OS622.img。l 組成:n FreeDOS:內(nèi)核文件KERNEL.SYS和命令文件COMMAND.COM。n MS-DOS:內(nèi)核文件MSDOS.SYS、設(shè)備管理文件IO.SYS和命令文件COMMAND.COMn 它們須用DOS的外部命令SYS.COM復(fù)制到其他磁盤(pán),才能生成DOS的啟動(dòng)盤(pán)n 配置文件CONFIG.SYS,初始化批處理文件AUTOEXEC.BAT。l 內(nèi)部命令:指COMMAND.COM中包含的命令,提供DOS的一些基本功能。其中常用的有:X:(改變當(dāng)前卷為X)、CD(改變當(dāng)前目錄)、DIR(列出目錄)、MD(創(chuàng)建目錄)、DEL(刪除文件)、REN(修改文件名)、PATH(設(shè)

22、置路徑)、TYPE(顯示文件內(nèi)容)、CLS(清屏)、VER(版本)等,可用“命令 /?”獲取命令格式和使用方法的幫助信息。l 外部命令:操作系統(tǒng)提供的獨(dú)立的可執(zhí)行文件,常用的有:SYS(傳遞系統(tǒng)文件)、FDISK(創(chuàng)建分區(qū))、FORMAT(格式化磁盤(pán))、XCOPY(復(fù)制目錄)、DELTREE(刪除目錄)、MOVE(移動(dòng)文件)、EDIT(仿圖形界面的文本編輯器)、MOUSE(啟用鼠標(biāo))等。l 生成文本文件n TYPE內(nèi)部命令和I/O重定向:type con *.txt,按Ctrl+C組合鍵退出。n Edit外部命令:仿圖形界面的文本編輯程序edit.exe。n XCOPY外部命令:如A:xcop

23、y test b: /s8 文件加載1)要求掌握根目錄文件加載的方法和步驟,會(huì)編寫(xiě)加載FAT12軟硬盤(pán)根目錄中的LOADER.BIN文件的匯編代碼。2)重點(diǎn)l 引導(dǎo)扇區(qū)的主要功能是加載操作系統(tǒng)的裝入程序LOADER.BINl LOADER.BIN一般位于磁盤(pán)文件系統(tǒng)的根目錄中l(wèi) 引導(dǎo)程序中加載LOADER.BIN文件到內(nèi)存的主要步驟n 在根目錄中查找LOADER.BIN文件所對(duì)應(yīng)的條目1. 設(shè)當(dāng)前扇區(qū)號(hào)為根目錄的起始扇區(qū)號(hào)2. 讀根目錄的當(dāng)前扇區(qū)到內(nèi)存中的加載地址3. 依次比較當(dāng)前扇區(qū)中各個(gè)文件條目(共16個(gè))中的文件名串與“LOADER.BIN”4. 若無(wú)相等的文件條目,前扇區(qū)號(hào)加1,轉(zhuǎn)到2

24、5. 若找到相等的文件條目,從該條目獲取起始簇號(hào)Nn 利用文件的首簇號(hào)及FAT項(xiàng)來(lái)確定文件各數(shù)據(jù)塊的位置,并利用磁盤(pán)中斷將數(shù)據(jù)塊復(fù)制到指定內(nèi)存6. 計(jì)算出簇號(hào)N所對(duì)應(yīng)的裝載文件的扇區(qū)號(hào)7. 調(diào)用讀扇區(qū)函數(shù)將裝載文件的當(dāng)前扇區(qū)讀到內(nèi)存中加載地址的當(dāng)前扇區(qū)8. 由當(dāng)前簇號(hào)值N計(jì)算其對(duì)應(yīng)FAT項(xiàng)在FAT表中的偏移地址D(=N*1.5B),由D值計(jì)算出FAT項(xiàng)所在扇區(qū)的序號(hào)K(=FAT起始扇區(qū)號(hào)+D/512)和偏移值O(=D%512)9. 調(diào)用讀扇區(qū)函數(shù)將磁盤(pán)的(FAT表中的)K號(hào)和K+1號(hào)兩個(gè)扇區(qū)(因?yàn)橐粋€(gè) FAT項(xiàng)可能跨越兩個(gè)扇區(qū))讀入內(nèi)存緩沖區(qū)(8F000h)10. 利用偏移值O獲取FAT項(xiàng)值N

25、(=文件下一個(gè)簇的序號(hào))11. 若N=FF8h,則文件已經(jīng)讀完,跳轉(zhuǎn)到裝載程序9 實(shí)模式下的中斷處理1)要求了解PC機(jī)中斷的分類(lèi)、IVT、CPU響應(yīng)和IRET的功能,掌握中斷控制器8259A的初始化和操作方法,了解計(jì)時(shí)器8253的組成、輸入頻率、初始節(jié)拍和工作過(guò)程,掌握通過(guò)8253的I/O端口設(shè)置計(jì)時(shí)器時(shí)鐘中斷頻率的方法,會(huì)編寫(xiě)初始化8259A和設(shè)置其起始中斷號(hào)、屏蔽中斷請(qǐng)求和發(fā)送EOI的匯編代碼,會(huì)編寫(xiě)設(shè)置計(jì)時(shí)器8253的時(shí)鐘中斷頻率的匯編代碼。2)重點(diǎn)l 分類(lèi)n 屏蔽(x86處理器有兩條外部中斷請(qǐng)求線(xiàn)):NMI(Non Maskable Interrupt,不可屏蔽中斷)和INTR(Int

26、errupt Request,中斷請(qǐng)求可屏蔽中斷),不可屏蔽中斷的優(yōu)先級(jí)要高于可屏蔽中斷的。n 軟硬:硬件中斷由兩個(gè)級(jí)聯(lián)的8259A芯片所代理的可屏蔽外設(shè)中斷、軟件中斷BIOS中斷或由操作系統(tǒng)定義的系統(tǒng)服務(wù)中斷(用int i指令調(diào)用)。l IVT:x86計(jì)算機(jī)在啟動(dòng)時(shí)會(huì)自動(dòng)進(jìn)入實(shí)模式狀態(tài),并由主板上的系統(tǒng)BIOS初始化8259A的各中斷線(xiàn)的類(lèi)型(0號(hào)為時(shí)鐘中斷),同時(shí)在內(nèi)存的低位區(qū)(地址范圍為010233FFH,1KB)創(chuàng)建含256個(gè)中斷向量(存放中斷處理程序的入口地址)的表IVT(Interrupt Vector Table,中斷向量表),其中每個(gè)中斷向量地址占4個(gè)字節(jié),格式為:16位段值:

27、16位偏移值,字節(jié)序?yàn)椋篒P、CS。l CPU響應(yīng):在實(shí)模式下,每當(dāng)中斷發(fā)生時(shí),CPU都會(huì)中止當(dāng)前程序的運(yùn)行,并先后將寄存器FLAGS、CS和IP的當(dāng)前值壓入當(dāng)前程序棧,接著清除IF標(biāo)志(IF=0以禁止中斷),最后轉(zhuǎn)換程序控制到IVT中的中斷號(hào)i所對(duì)應(yīng)(4*i處)的向量所指定的中斷處理程序的入口位置。l 中斷返回指令:IRET = POP IP、POP CS、POPFl 可編程中斷控制器8259An PC機(jī)中有兩個(gè)級(jí)聯(lián)的8259An 每個(gè)8259A有8根中斷請(qǐng)求線(xiàn)IR0IR7,從8259A被級(jí)聯(lián)到主8259A的第3根中斷請(qǐng)求線(xiàn)IR2上。n 每個(gè)8259A都有兩個(gè)I/O端口,主8259A所對(duì)應(yīng)的

28、端口地址為20h和21h,從8259A的為A0h和A1h。程序員可通過(guò)in/out指令來(lái)讀寫(xiě)這些端口,從而操作這兩個(gè)中斷控制器。n 初始化:8259A的初始化由有嚴(yán)格順序的4步組成1. 往端口20h(主片)或A0h(從片)寫(xiě)入ICW12. 往端口21h(主片)或A1h(從片)寫(xiě)入ICW2(設(shè)置起始中斷向量號(hào))3. 往端口21h(主片)或A1h(從片)寫(xiě)入ICW34. 往端口21h(主片)或A1h(從片)寫(xiě)入ICW4n 操作:在初始化8259A后,可在任何時(shí)候,以任何順序向8259A發(fā)送OCW(Operation Command Word,操作控制字)u OCW1(21h或A1h端口)屏蔽中斷請(qǐng)

29、求u OCW2(20h或A0h端口)發(fā)送EOI(End of Interrupt,中斷結(jié)束)u OCW3(20h或A0h端口)(=10或11)設(shè)置下一個(gè)讀端口的動(dòng)作將要讀取IRR(未處理中斷)或ISR(正在處理的中斷)寄存器的內(nèi)容。l 計(jì)時(shí)器/可編程時(shí)鐘8253n 組成:由石英晶體振蕩器、計(jì)數(shù)器和寄存器三部分組成n 輸入頻率:1.19MHz(1,193,181.8181Hz)n 工作過(guò)程:計(jì)時(shí)器在啟動(dòng)時(shí),將保持寄存器中的值復(fù)制到計(jì)時(shí)器中。在晶振每來(lái)一個(gè)脈沖時(shí),計(jì)時(shí)器的值減1。當(dāng)計(jì)時(shí)器的值減至0時(shí),引發(fā)一個(gè)中斷。然后,寄存器將自動(dòng)把其中的值復(fù)制到計(jì)時(shí)器中,再重新開(kāi)始計(jì)數(shù)。這樣會(huì)產(chǎn)生周期性的中斷,

30、稱(chēng)為時(shí)鐘節(jié)拍n 計(jì)數(shù)器:8253中有3個(gè)16位計(jì)數(shù)器,作用各不相同。u 計(jì)數(shù)器0輸出到IRQ0,產(chǎn)生(18.2Hz的)周期性時(shí)鐘中斷u 計(jì)數(shù)器1產(chǎn)生輸出間隔為15s的脈沖,用于DMA刷新u 計(jì)數(shù)器2輸出不同頻率的方波,經(jīng)75477電流驅(qū)動(dòng)器放大后,推動(dòng)揚(yáng)聲器發(fā)出不同頻率的聲音n 初始時(shí)鐘中斷頻率=1193182/6553518.2(為時(shí)鐘的最低頻率值)n I/O端口:8253有4個(gè)I/O端口40h(計(jì)數(shù)器0)、41h(計(jì)數(shù)器1)、42h(計(jì)數(shù)器2)、43h(控制字寄存器)。不能直接寫(xiě)計(jì)數(shù)器端口,須先向控制字寄存器寫(xiě)入8位的控制字來(lái)確定8253的工作方式(mode)和選擇計(jì)數(shù)器n 設(shè)置計(jì)時(shí)器的時(shí)

31、鐘中斷頻率:對(duì)應(yīng)于8253中計(jì)數(shù)器0的工作方式2,對(duì)應(yīng)的控制字值為34h。通過(guò)修改8253中計(jì)數(shù)器0的值(=1193182/n,每秒n次中斷),可設(shè)置自己的計(jì)時(shí)器中斷的頻率(為n)10 實(shí)模式下的進(jìn)程調(diào)度1)要求掌握實(shí)模式下進(jìn)程調(diào)度的方法和步驟,包括編寫(xiě)應(yīng)用程序(直接改寫(xiě)顯存來(lái)顯示字符)、重寫(xiě)裝入程序以加載內(nèi)核和各應(yīng)用程序、定義PCB表數(shù)組、設(shè)置時(shí)鐘中斷頻率、在時(shí)鐘中斷處理程序中保存上下文寄存器值并調(diào)用進(jìn)程調(diào)度程序、三種棧及棧的切換、進(jìn)程切換,會(huì)編寫(xiě)(多個(gè))應(yīng)用程序、(軟硬盤(pán))裝入程序、時(shí)鐘中斷處理程序和(多個(gè))進(jìn)程間的調(diào)度程序的匯編代碼。2)重點(diǎn)l 方法和功能:采用匯編語(yǔ)言,利用計(jì)時(shí)器,實(shí)現(xiàn)

32、實(shí)模式下多個(gè)進(jìn)程間的簡(jiǎn)單切換l 用戶(hù)進(jìn)程:編寫(xiě)三個(gè)功能相同的應(yīng)用程序,分別在各自行的當(dāng)前位置重復(fù)顯示字符A、B、Cl 顯示字符的方法:為了以避免中斷重入,不調(diào)用顯示中斷int 10h,而是采用直接改寫(xiě)文本窗口所對(duì)應(yīng)顯存內(nèi)容的方法來(lái)顯示字符l 延時(shí):為便于測(cè)試觀察,(因?yàn)镃PU速度太快)需使用延時(shí)循環(huán)l 裝入內(nèi)核程序和應(yīng)用程序:重寫(xiě)操作系統(tǒng)的裝入程序loader.asm,使其能夠裝入內(nèi)核程序kernel.bin和若干應(yīng)用程序(在本實(shí)驗(yàn)里是a.bin、b.bin、c.bin)。為簡(jiǎn)單,需要將kernel.bin和各應(yīng)用程序也放在磁盤(pán)映像的根目錄l PCB:應(yīng)用程序PCB(Process Contr

33、ol Block,進(jìn)程控制塊)的內(nèi)容不多(42B),主要有(在實(shí)模式下)恢復(fù)進(jìn)程運(yùn)行所必需的進(jìn)程狀態(tài)(16個(gè)16位)上下文寄存器,即CPU中的8個(gè)通用寄存器(包括4個(gè)數(shù)據(jù)寄存器和4個(gè)指針寄存器)、6個(gè)段寄存器、1個(gè)標(biāo)志寄存器和1個(gè)指令指針寄存器IP中的當(dāng)前值,以及進(jìn)程的ID和名串l 寄存器壓棧:標(biāo)志寄存器FLAGS、代碼段寄存器CS和指令指針寄存器IP,由處理器在中斷發(fā)生時(shí)自動(dòng)依次壓入當(dāng)前應(yīng)用程序棧中。8個(gè)通用寄存器和4個(gè)數(shù)據(jù)和輔助段寄存器,由時(shí)鐘中斷處理程序在最開(kāi)始處用PUSHA指令(一起壓,順序:AX、CX、DX、BX、SP原來(lái)的值、BP、SI、DI,對(duì)應(yīng)的出棧指令為POPA)和PUSH指

34、令(逐個(gè)壓,順序:DS、ES、FS、GS)壓棧。只有堆棧段寄存器SS,需由調(diào)度程序另外手工賦值l 進(jìn)程調(diào)度中的棧問(wèn)題n 三種棧:進(jìn)程調(diào)度需要使用大量棧操作,而且涉及到三種不同的棧:應(yīng)用程序棧、進(jìn)程表?xiàng)?、?nèi)核棧。其中的進(jìn)程表?xiàng)#ㄎ挥趦?nèi)核程序的數(shù)據(jù)段中),只是為了保存和恢復(fù)進(jìn)程的上下文寄存器值,而臨時(shí)設(shè)置的一個(gè)偽局部棧,不是正常的程序棧n 上下文寄存器被壓入被中斷進(jìn)程棧:在時(shí)鐘中斷發(fā)生時(shí),實(shí)模式下的CPU會(huì)將寄存器FLAGS、CS、IP的當(dāng)前值先后壓入當(dāng)前被中斷程序(應(yīng)用程序進(jìn)程X)的堆棧中,接著跳轉(zhuǎn)到(位于kernel內(nèi))時(shí)鐘中斷處理程序(Timer函數(shù))執(zhí)行。注意,此時(shí)并沒(méi)有改變堆棧(的SS和

35、SP),內(nèi)核里的時(shí)鐘中斷處理函數(shù)開(kāi)始處的保存上下文寄存器壓棧操作,使用的也是被中斷進(jìn)程的棧n 復(fù)制被中斷進(jìn)程棧中保存的上下文寄存器值到對(duì)應(yīng)的PCB中:再利用重復(fù)字串傳送指令REP MOVSW(以CX為計(jì)數(shù)值,它將DS:SI處的字傳送到ES:DI處,并SI+=2、DI+=2、CX-,直到CX=0)將在當(dāng)前進(jìn)程棧中的15個(gè)寄存器值復(fù)制到位于內(nèi)核的進(jìn)程表的對(duì)應(yīng)PCB中(只缺棧段寄存器SS)n 棧切換:為了能夠同時(shí)完成進(jìn)程切換和棧切換,可先切換到下一進(jìn)程的棧,再將返回指令RETF(= POP IP、POP CS)所需的IP和CS的值,預(yù)先壓入此棧中,在從下一進(jìn)程的PCB恢復(fù)了上下文寄存器值后,再使用R

36、ETF指令進(jìn)行進(jìn)程切換11 保護(hù)模式1)要求掌握實(shí)模式與保護(hù)模式的主要特點(diǎn)和區(qū)別,掌握邏輯地址、線(xiàn)性地址和物理地址的區(qū)別及映射方法。掌握分段和分頁(yè)與內(nèi)存保護(hù)和虛擬內(nèi)存管理的關(guān)系、特權(quán)的分級(jí)與分類(lèi)、特權(quán)級(jí)與訪(fǎng)問(wèn)控制及代碼轉(zhuǎn)移之間的關(guān)系。掌握段選擇符、(段)描述符、GDT和LDT的概念、大小、結(jié)構(gòu)和功用。掌握IA-32所采用的主要內(nèi)存管理方法(段頁(yè)式)、基本頁(yè)面的大?。?KB)、頁(yè)表的實(shí)現(xiàn)方式(二級(jí)頁(yè)表:一級(jí)=頁(yè)目錄、二級(jí)=頁(yè)表)。掌握進(jìn)入保護(hù)模式與啟動(dòng)分頁(yè)機(jī)制的主要步驟和實(shí)現(xiàn)方法。會(huì)編寫(xiě)定義GDT/LDT、段選擇符、頁(yè)目錄和諸頁(yè)表,進(jìn)入保護(hù)模式與啟動(dòng)分頁(yè)機(jī)制的匯編代碼。會(huì)編寫(xiě)獲取并顯示內(nèi)存信息的

37、匯編代碼。2)重點(diǎn)l 實(shí)模式與保護(hù)模式n 實(shí)模式u 1978年推出的16位處理器8086,采用分段內(nèi)存管理,20位物理地址 = 16位段寄存器值*16(或左移4位) + 16位偏移量,尋址空間為(220=)1MB,最大段長(zhǎng)為(216=)64KBu 因?yàn)橹荒苌珊驮L(fǎng)問(wèn)真實(shí)的物理內(nèi)存地址,所以被稱(chēng)為實(shí)地址模式(real-address mode),簡(jiǎn)稱(chēng)為實(shí)模式(real mode)u 實(shí)模式下的分段技術(shù),沒(méi)有提供任何內(nèi)存保護(hù)功能,無(wú)特權(quán)分級(jí)、也不能阻止內(nèi)存的越界訪(fǎng)問(wèn)n 保護(hù)模式u 1982年推出的16位處理器80286,引入(分段式的)內(nèi)存保護(hù)機(jī)制,稱(chēng)之為保護(hù)模式(protected mode)。

38、尋址空間為(224=)16MB,最大段長(zhǎng)為(216=)64KB或(216+8=224=)16MB,只能從實(shí)模式進(jìn)入保護(hù)模式,而不能從保護(hù)模式返回實(shí)模式u 1985年推出的32位處理器80386,其保護(hù)模式支持32位的地址空間,尋址空間達(dá)到(232=)4GB。引入(基于分段的)分頁(yè)機(jī)制,采用段頁(yè)式內(nèi)存管理方法。其中,分段是必須的,分頁(yè)則是可選的。分段管理提供內(nèi)存保護(hù)功能,分頁(yè)機(jī)制支持虛擬內(nèi)存管理u 優(yōu)點(diǎn):保護(hù)模式不但增大了可訪(fǎng)問(wèn)的地址空間(1MB-16MB-4GB- 16ZB),而且提供了大量(分段)內(nèi)存保護(hù)機(jī)制。如區(qū)分4個(gè)特權(quán)級(jí)(高/內(nèi)核03低/用戶(hù))和3種特權(quán)級(jí)類(lèi)型(運(yùn)行程序的CPL、訪(fǎng)問(wèn)段

39、的DPL、代碼轉(zhuǎn)移的RPL)、限制對(duì)數(shù)據(jù)的訪(fǎng)問(wèn)、進(jìn)行段的越界檢查、控制代碼轉(zhuǎn)移(包括過(guò)程調(diào)用CALL、程序切換JMP和中斷處理INT)l 特權(quán)級(jí)n 4個(gè)特權(quán)級(jí)別:在IA32處理器的分段機(jī)制中,采用的是環(huán)保護(hù)方式(內(nèi)層的級(jí)別高,外層的級(jí)別低),有03共4個(gè)特權(quán)級(jí)(Privilege Level),數(shù)字越小級(jí)別越高。特權(quán)級(jí)0用于操作系統(tǒng)、特權(quán)級(jí)3用于用戶(hù)進(jìn)程n 三種特權(quán)級(jí)類(lèi)型:處理器通過(guò)識(shí)別CPL、DPL和RPL這三種特權(quán)級(jí),來(lái)進(jìn)行特權(quán)級(jí)檢驗(yàn),從而實(shí)現(xiàn)分段內(nèi)存的保護(hù)功能u CPL(Current Privilege Level,當(dāng)前特權(quán)級(jí))為當(dāng)前執(zhí)行的程序或任務(wù)的特權(quán)級(jí),存儲(chǔ)在段寄存器CS和SS的

40、低2位中,也叫寄存器特權(quán)級(jí)。u DPL(Descriptor Privilege Level,描述符特權(quán)級(jí))為段或門(mén)的特權(quán)級(jí),存儲(chǔ)在段或門(mén)描述符的DPL字段中,用于對(duì)目標(biāo)代碼和數(shù)據(jù)的訪(fǎng)問(wèn)控制,也叫目標(biāo)特權(quán)級(jí)。u RPL(Requested Privilege Level,請(qǐng)求特權(quán)級(jí))為取代(override)特權(quán)級(jí),存儲(chǔ)在指向目標(biāo)代碼段的段/門(mén)選擇符的低2位中,也叫選擇符特權(quán)級(jí),用于控制過(guò)程調(diào)用(CALL)、程序跳轉(zhuǎn)(JMP)和中斷處理(INT)。n 訪(fǎng)問(wèn)控制u 只有CPLDPL時(shí),當(dāng)前的程序才有權(quán)訪(fǎng)問(wèn)對(duì)應(yīng)的段u 只有RPLDPL時(shí),才允許代碼轉(zhuǎn)移n 特權(quán)指令:僅當(dāng)CPL 為0 時(shí)才能執(zhí)行的C

41、PU指令,常用特權(quán)0級(jí)系統(tǒng)指令:LGDT/SGDT(裝載/保存GDT 寄存器)、LLDT/SLDT(裝載/保存LDT 寄存器)、LIDT/SIDT(裝載/保存IDT 寄存器)、LTR/STR(裝載/保存任務(wù)寄存器)、MOV控制寄存器(讀寫(xiě)控制寄存器C0和C3)l 一致性:為進(jìn)一步控制代碼轉(zhuǎn)移和數(shù)據(jù)訪(fǎng)問(wèn),在段描述符中專(zhuān)門(mén)引入了一個(gè)一致性控制位C(Conforming,一致/符合/順應(yīng)),位于段描述符類(lèi)型字段的第3位n 所有的數(shù)據(jù)段總是非一致的,不允許特權(quán)級(jí)更低的代碼段訪(fǎng)問(wèn)n 一致代碼段允許從特權(quán)級(jí)更低的代碼轉(zhuǎn)入(并以轉(zhuǎn)入前的原特權(quán)級(jí)繼續(xù)運(yùn)行),而非一致代碼段則不允許n 不論是一致還是非一致(no

42、nconforming)的代碼段,都不允許(通過(guò)CALL和JMP指令)從高特權(quán)級(jí)轉(zhuǎn)移到低特權(quán)級(jí)n 一般將(高特權(quán)級(jí)的)系統(tǒng)服務(wù)和實(shí)用程序等放入一致代碼段,供(低特權(quán)級(jí)的)用戶(hù)程序訪(fǎng)問(wèn)。而將不能被特權(quán)級(jí)更低的程序和過(guò)程訪(fǎng)問(wèn)的系統(tǒng)實(shí)用程序放入非一致代碼段l 分段與分頁(yè):保護(hù)模式下,分段用于段的內(nèi)存保護(hù)(包括特權(quán)級(jí)檢驗(yàn)和越界檢查),分頁(yè)則用于虛擬內(nèi)存管理(包括頁(yè)面的尋址和在主輔存間的交換)n 分段:分段將處理器可尋址的內(nèi)存空間(稱(chēng)為線(xiàn)性地址空間)劃分為較小的受保護(hù)的地址空間(稱(chēng)為段),段可用于容納程序的代碼、數(shù)據(jù)和堆棧,或系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)(如GDT、LDT或TSS)??梢詾槊總€(gè)運(yùn)行的程序指派各自的段集

43、(LDT)。分段機(jī)制還允許將段分類(lèi),從而可限制在某個(gè)特定段類(lèi)上能夠執(zhí)行的操作u 在保護(hù)模式下,內(nèi)存使用線(xiàn)性地址空間,如果不分頁(yè),則線(xiàn)性地址與物理地址是一致的u 分段內(nèi)存空間使用邏輯地址:邏輯地址 = 段選擇符 : 偏移量,CPU通過(guò)段選擇符(寄存器)獲?。ㄖ付枋龇淼闹付ㄆ屏刻幍模┒蚊枋龇ㄔ谘b入段選擇符時(shí)已被同步裝入段寄存器的影子結(jié)構(gòu)中),并從中得到段的基址和界限,若偏移量界限,則:段基址 + 偏移量 = 線(xiàn)性地址,即:u 段選擇符(segment selector)=保護(hù)模式下的16位段寄存器,內(nèi)容是段描述符在描述符表中的偏移地址,由于(段)描述符為64位(8字節(jié)),所以該偏移地址是8

44、B對(duì)齊,低3位為0。其中,第0和1位用作/為請(qǐng)求特權(quán)級(jí)RPL、第2位用作/為表指示符TI(Tabel Indicator)(=0:GDT、=1:LDT)。CPU在裝入段選擇符時(shí),會(huì)同步裝載對(duì)應(yīng)的段描述符到寄存器的64位影子結(jié)構(gòu),以避免CPU在內(nèi)存地址映射時(shí)(對(duì)GDT或LDT)的內(nèi)存訪(fǎng)問(wèn)u 段描述符:用于分段內(nèi)存管理中的地址生成和保護(hù),包含32位段基址、20位段界限和12個(gè)(屬性)控制位,共計(jì)64位(8字節(jié))。為了與(24位基址、16位界限、8個(gè)控制位的)80286的48位段描述符兼容,80386段描述符中的基址、界限和控制位都不是連續(xù)存放的u 描述符表:IA-32有兩種描述符表GDT用于訪(fǎng)問(wèn)操

45、作系統(tǒng)內(nèi)核及LDT、IDT和TSS等系統(tǒng)數(shù)據(jù)結(jié)構(gòu),LDT則用于訪(fǎng)問(wèn)應(yīng)用程序的各種段。整個(gè)系統(tǒng)只有一個(gè)GDT,而每個(gè)應(yīng)用程序一般都有一個(gè)自己的LDT,但是CPU中只有一個(gè)LDTR寄存器,用于存放當(dāng)前應(yīng)用程序的LDTl GDT(Global Descriptor Table,全局描述符表)是線(xiàn)性空間里的一種數(shù)據(jù)結(jié)構(gòu)(本身不是一個(gè)段),每個(gè)系統(tǒng)在每一時(shí)刻,都必須且只能裝入唯一的一個(gè)GDT,其32位基址和16位界限等參數(shù)位于CPU中的48位(6B)系統(tǒng)地址寄存器GDTR(須用LGDT指令裝入)中,可被系統(tǒng)中的所有程序和任務(wù)使用l LDT(Local Descriptor Table,局部描述符表)本身

46、是一個(gè)段(為L(zhǎng)DT類(lèi)型的系統(tǒng)段),可定義若干個(gè),但CPU中只有一個(gè)表示當(dāng)前LDT的80位系統(tǒng)地址寄存器LDTR。GDT中必須包含指向每個(gè)LDT段的段描述符,使用段選擇符訪(fǎng)問(wèn)。為了在訪(fǎng)問(wèn)LDT時(shí)消除地址轉(zhuǎn)換,在使用LLDT指令裝入LDT的段選擇符時(shí),CPU會(huì)同時(shí)將LDT的16位段選擇符和(對(duì)應(yīng)的64位段描述符中的)基線(xiàn)性地址、界限、訪(fǎng)問(wèn)權(quán)限都存儲(chǔ)在LDTR寄存器中l(wèi) 一個(gè)程序的代碼段、數(shù)據(jù)段和堆棧段的段描述符,既可以放在GDT中,也可以放在LDT,由段選擇符中的TI位(位于選擇符中的2號(hào)位/第3位)來(lái)決定:TI=0:GDT、TI=1:LDTl 由于段選擇符是16位的,而且其低3位必須為0(8B對(duì)

47、齊),所以GDT和LDT的大小都(216=)64KB,表中描述符的個(gè)數(shù)(213=)8192=8Kn 分頁(yè)u 對(duì)IA-32處理器,只有分頁(yè)機(jī)制才支持虛擬內(nèi)存,但分頁(yè)是建立在分段的基礎(chǔ)之上的,故IA-32處理器采用的是段頁(yè)式內(nèi)存管理方法u IA-32處理器采用的是兩級(jí)分頁(yè)方式。一級(jí)頁(yè)表為頁(yè)目錄,有(210=)1024個(gè)頁(yè)目錄項(xiàng)(Page Directory Entry,PDE),占4B*1024=4KB。每個(gè)頁(yè)目錄項(xiàng)指向一個(gè)(二級(jí))頁(yè)表,它也有(210=)1024個(gè)頁(yè)表項(xiàng)(Page Table Entry,PTE),每個(gè)頁(yè)表也占4B*1024=4KB??偣灿?024*1024=1M個(gè)頁(yè),占4B*1

48、M=4MB空間u 32位的頁(yè)目錄項(xiàng)和頁(yè)表項(xiàng)的高20位分別為頁(yè)表和頁(yè)幀起始物理地址的高20位(4KB對(duì)齊,低12位必須為0),低12位控制位u 頁(yè)目錄的起始地址保存在控制寄存器CR3中u 4KB分頁(yè)時(shí)的32位線(xiàn)性地址格式:頁(yè)目錄項(xiàng)序號(hào)(10b)+ 頁(yè)表項(xiàng)項(xiàng)序號(hào)(10b)+ 頁(yè)幀內(nèi)偏移地址(12b)u 線(xiàn)性地址到物理地址的映射過(guò)程:從CR0獲得頁(yè)目錄的起始地址線(xiàn)性地址中的頁(yè)目錄項(xiàng)序號(hào)*4=頁(yè)目錄項(xiàng)的偏移地址由頁(yè)目錄項(xiàng)的起始地址+偏移地址=對(duì)應(yīng)頁(yè)目錄項(xiàng)地址從該頁(yè)目錄項(xiàng)中獲取頁(yè)表起始物理地址線(xiàn)性地址中的頁(yè)表項(xiàng)序號(hào)*4=頁(yè)表項(xiàng)的偏移地址由頁(yè)表項(xiàng)的起始地址+偏移地址=對(duì)應(yīng)頁(yè)表項(xiàng)地址從該頁(yè)表項(xiàng)中獲取頁(yè)幀起始

49、物理地址由頁(yè)幀的起始地址+線(xiàn)性地址中的頁(yè)幀內(nèi)偏移地址=線(xiàn)性地址所對(duì)應(yīng)的物理地址l 進(jìn)入保護(hù)模式n 主要步驟u 準(zhǔn)備GDTu 準(zhǔn)備GDTR指針(48位GDT參數(shù):16位界限與32位基址)u 用LGDT指令將GDTR指針加載到GDTR寄存器u 關(guān)閉中斷u 打開(kāi)A20地址線(xiàn)u 置CR0寄存器的PE位u 雙字跳轉(zhuǎn)進(jìn)入保護(hù)模式n 定義GDT:用3參數(shù)宏Descriptor定義若干描述符(首個(gè)必須為全0的空描述符)、用各段在代碼中的地址初始化描述符中基址部分n 打開(kāi)地址線(xiàn)A20:inal, 92horal, 00000010bout92h, aln 置CR0寄存器的PE位moveax, cr0oreax,

50、 1movcr0, eaxn 跳轉(zhuǎn)進(jìn)入保護(hù)模式:jmp dword SelectorCode32:0l 啟動(dòng)分頁(yè)機(jī)制n 主要步驟u 準(zhǔn)備PD和PT(分配內(nèi)存空間、在描述符表中增加PD和PT的段描述符)u 讓CR3指向PD的起始地址u 置CR0寄存器的PG位為1u 短跳轉(zhuǎn)啟動(dòng)分頁(yè)機(jī)制n 采用4KB分頁(yè)大小。為了簡(jiǎn)化,所有線(xiàn)性地址對(duì)應(yīng)相等的物理地址,讓頁(yè)目錄和所有頁(yè)表在內(nèi)存中是連續(xù)的。并將頁(yè)目錄PD的開(kāi)始地址PageDirBase定在200000h(2M)處,大小為4KB(1K個(gè)目錄項(xiàng))。將1024個(gè)一個(gè)個(gè)依次連續(xù)緊密排列的頁(yè)表PT的開(kāi)始地址PageTblBase定在201000h(2M+4K)處

51、,緊跟在PD之后,大小為1KB*4K(1M個(gè)表項(xiàng))n 將頁(yè)目錄DP和諸頁(yè)表PT各設(shè)為一段(前者的粒度為B,后者的為4KB),在GDT中添加相應(yīng)的描述符,并定義對(duì)應(yīng)的段選擇符n 先初始化頁(yè)目錄,再初始化所有頁(yè)表(1K個(gè),占4M內(nèi)存空間)n 其他啟動(dòng)分頁(yè)機(jī)制的代碼:; 讓CR3指向頁(yè)目錄moveax, PageDirBase; CR3 = 頁(yè)目錄起始地址movcr3, eax; 置CR0中的PG位moveax, cr0oreax, 80000000hmovcr0, eax; CR0的PG位=1; 通過(guò)跳轉(zhuǎn)完成分頁(yè)機(jī)制啟動(dòng)jmpshort .3.3:nopl 獲取內(nèi)存大?。涸趯?shí)模式下,可通過(guò)調(diào)用BI

52、OS中斷15h的E801h和E820h號(hào)功能來(lái)確定內(nèi)存的容量n E801h號(hào)功能的15h號(hào)中斷,調(diào)用簡(jiǎn)單,且可獲得系統(tǒng)全部?jī)?nèi)存容量,但是不能知曉可用內(nèi)存的具體分布范圍n E820h號(hào)功能的15h號(hào)中斷,調(diào)用復(fù)雜,且需多次調(diào)用,但是能夠確定內(nèi)存的類(lèi)型、容量和分布l 利用修改顯存內(nèi)容的方法,顯示多字節(jié)整數(shù)的十六進(jìn)制字符串的匯編例程12 Linux1)要求掌握Linux的基本使用方法(包括文件基本操作、磁盤(pán)映象掛載、軟件安裝),了解Linux的文件權(quán)限。2)重點(diǎn)l 環(huán)境:在VMware虛擬機(jī)中安裝和使用Linux的Ubuntu版本l 目的:了解類(lèi)Unix操作系統(tǒng)的功能和使用方法、實(shí)現(xiàn)ELF格式的匯編

53、與C混合編程l 終端命令行提示串的格式為:用戶(hù)名 主機(jī)名 : 當(dāng)前目錄 提示符n 提示符:普通用戶(hù)的提示符為美元符$、管理員Administrator和根root用戶(hù)的提示符為井號(hào)符#n 表示主文件目錄l 常用命令n 獲取命令的幫助信息:help(幫助)、info(信息)和man(手冊(cè))。n 文件操作:mkdir(創(chuàng)建目錄)、ls(列出文件目錄)、cd(改變當(dāng)前目錄)、cat(顯示文件內(nèi)容)、cp(復(fù)制文件和目錄)、chmod(設(shè)置文件權(quán)限)n 掛載(綁定)磁盤(pán)文件系統(tǒng):mount(掛載)、umount(卸載)n 安裝軟件:apt-get install(如安裝GCC和NASM:sudo ap

54、t-get install build-essential nasm)l 文件類(lèi)型:- 普通、d 目錄、l 鏈接、b 塊設(shè)備(如硬盤(pán))、c 字符設(shè)備(如鍵盤(pán))、s 網(wǎng)絡(luò)套接字、p 管道l 文件權(quán)限n 三種分組:屬主權(quán)限、屬組權(quán)限、其他人權(quán)限n 三種權(quán)限(用三個(gè)二進(jìn)制位表示,從高到低為):r讀 = 4、w寫(xiě) = 2、x執(zhí)行 = 113匯編與C混合編程1)要求掌握混合編程的方法和步驟、Make文件的編寫(xiě)和使用。會(huì)進(jìn)行匯編與C混合編程,會(huì)編寫(xiě)和使用Make文件來(lái)自動(dòng)化生成可執(zhí)行程序及操作磁盤(pán)映象。2)重點(diǎn)l 操作系統(tǒng)一般采用匯編和C語(yǔ)言編寫(xiě)??刂朴布虸/O設(shè)備等底層代碼使用低級(jí)的匯編語(yǔ)言,實(shí)現(xiàn)算法

55、和API等高層邏輯操作則使用中級(jí)語(yǔ)言Cl 步驟n 簡(jiǎn)單程序編譯運(yùn)行的主要步驟:u 用gedit編寫(xiě)匯編和C程序的源代碼(在匯編程序中,用extern和global語(yǔ)句,導(dǎo)出和導(dǎo)入函數(shù),利用棧傳遞參數(shù)逆序壓棧)u 用NASM編譯匯編語(yǔ)言源程序,如:nasm -f elf foo.asm -o foo.ou 用GCC編譯C語(yǔ)言源程序,如:gcc -c bar.c -o bar.ou 用ld命令鏈接,如:ld -s foo.o bar.o -o foobaru 在Shell終端中運(yùn)行,如:./foobarn 復(fù)雜程序編譯掛載的主要步驟:u 用Bochs工具創(chuàng)建1.44MB軟盤(pán)映像a.imgu 用Fl

56、oppyWrite將帶FAT12結(jié)構(gòu)和卷標(biāo)的boot4.bin寫(xiě)入a.imgu 在Windows中用NotePad+編寫(xiě)匯編和C語(yǔ)言源程序以及Make文件(也可以利用Ubuntu中的gedit進(jìn)行編寫(xiě))u 將a.img、源文件和Make文件復(fù)制到Ubuntu的主文件夾u 創(chuàng)建掛載目錄,如sudo mkdir /mnt/floppyu 使用Make文件,如make all和make imagel 編譯鏈接生成可執(zhí)行文件(可在LD鏈接時(shí),用-Ttext 開(kāi)關(guān)來(lái)指定生成的可執(zhí)行程序裝入特定的內(nèi)存地址類(lèi)似于匯編程序的ORG偽指令)l 掛載軟盤(pán)映像,如sudo mount -o loop a.img /mnt/floppyl 復(fù)制可執(zhí)行文件到軟盤(pán)映像,如sudo cp -fv kernel.bin /mnt/floppyl 卸載軟盤(pán)映像(將緩沖區(qū)中的內(nèi)容回寫(xiě)到軟盤(pán)映像,即保存文件),如sudo umount /mnt/floppyu 將Ubuntu中的a.img和boot.bin等復(fù)制到Windows中u 用FloppyWrite將帶FAT12結(jié)構(gòu)和裝載代碼的boot.bin寫(xiě)入a.img的引導(dǎo)扇區(qū)u 用a.img啟動(dòng)Bochs虛擬機(jī)進(jìn)行OS程序的運(yùn)行測(cè)試l Make文件:make是類(lèi)Unix操作系統(tǒng)(包括Linux)和高級(jí)語(yǔ)言(如C/C+語(yǔ)言)的標(biāo)準(zhǔn)程序

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論