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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

8、其中的第6位為零標(biāo)志ZF、第9位為中斷允許標(biāo)志IF、第10位為方向標(biāo)志DF)n 4個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個32位的控制寄存器:CR0(機(jī)器狀態(tài)字,其最低位PE用于進(jìn)入保護(hù)模式,最高位PG用于啟動分頁機(jī)制)、CR1(未使用)、CR2(引起頁故障的線性地址)、CR3(頁目錄基址)l 常用CP

9、U指令:算術(shù)運(yùn)算(四則、增減)、位運(yùn)算(邏輯、移位)、賦值(MOV)、比較測試、跳轉(zhuǎn)、調(diào)用返回、中斷、循環(huán)重復(fù)、棧操作、串操作、端口IO、標(biāo)志位設(shè)置、裝入/保存系統(tǒng)寄存器、無操作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)用格式,會編寫使

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

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

12、ELF文件中都是可選的。ELF文件可以沒有擴(kuò)展名,也可以使用下列擴(kuò)展名:.o、.so、.elf、.prx、.puff、.bin6 FAT文件系統(tǒng)1)要求掌握DPT及分區(qū)表項(xiàng)的結(jié)構(gòu),了解常用分區(qū)類型和磁盤尋址方式,熟悉1.44MB軟盤和10MB硬盤的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ì)描述符),會編寫生成軟硬盤FAT12文件結(jié)構(gòu)的匯編程序并將其寫入磁盤映像、能人工識別和手工編輯文件條目及FAT項(xiàng)(WinHex)。2)

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

14、磁盤分區(qū)表標(biāo)準(zhǔn),由Intel公司于2010年推出,可突破傳統(tǒng)MBR的2TB限制)n 磁盤尋址方式傳統(tǒng)的CHS(Cylinder/Head/Sector,柱面/磁頭/扇區(qū))、現(xiàn)代的線性尋址方式LBA(Logical Block Addressing,邏輯塊尋址),1996年以后推出的硬盤一般都支持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軟盤映像和10MB硬盤映像作為測試介質(zhì),它們都采用FAT12文件系統(tǒng)n 1.44MB軟盤的格式:u CHS=80/2/18、每個扇區(qū)有512(200h)B、共2880扇區(qū)=1440KB=1.44MBu 每個FAT項(xiàng)占12位(1.5B)、每個簇只有1個扇區(qū)、每個FAT表占9個扇區(qū)u 根目錄區(qū)有224條目,占14扇區(qū)u 無磁盤分區(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硬盤的格式:u CHS=80/4/63、每個

16、扇區(qū)有512(200h)B、共20160扇區(qū)=10080KB9.84MBu 每個FAT項(xiàng)占12位(1.5B)、每個簇有8個扇區(qū)、每個FAT表占8個扇區(qū)u 根目錄區(qū)有512條目,占32扇區(qū)u 主引導(dǎo)扇區(qū)的DPT中有唯一分區(qū)表項(xiàng),分區(qū)從第2個(1號)柱面的首個扇區(qū)(4*63=252)開始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ū)的第一個扇區(qū)(512B)。因?yàn)檐洷P無DPT,

17、整個磁盤都是一個分區(qū),所以其分區(qū)引導(dǎo)扇區(qū)與主引導(dǎo)扇區(qū)重合,都是磁盤的首個物理扇區(qū);而硬盤必須有DPT,且其各個分區(qū)必須都從第2個柱面及其之后的某個柱面的首個扇區(qū)開始。所以我們的10MB硬盤的唯一分區(qū),也從第2個(1號)柱面的首個扇區(qū)開始,分區(qū)的首個扇區(qū)(即分區(qū)引導(dǎo)扇區(qū))的序號為252,主引導(dǎo)扇區(qū)到分區(qū)引導(dǎo)扇區(qū)之間的251個扇區(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):采用多級目錄結(jié)構(gòu),子目錄用文件表示。文件數(shù)據(jù)塊的大小為簇,采用鏈?zhǔn)酱鎯Γ‵AT項(xiàng)為指向下一簇的鏈指針/下一簇號),磁盤的空閑空間管理采用空閑塊列表(FAT項(xiàng)為0表示對應(yīng)簇為空閑)。目錄為文件條目的列表,每個條目占用32B(20h字節(jié))n 文件條目u 格式:8+3文件名(11B,英文字母必須大寫)、文件屬性(1B)、保留(10B)、時間(2B)、日期(2B)、開始簇號(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ū)中每個簇(cluster)的項(xiàng)(entry)列表u FAT12的每個項(xiàng)占12位(1.5B)u FAT項(xiàng)取值的含義:000空閑簇、001保留簇、002FEF被占用簇(值為下一簇的序號)、FF0FF6保留值、FF7壞簇、FF8FFF文件最后簇(一般取FFF)u FAT表的前兩個項(xiàng)保存特殊的值:項(xiàng)0 的低8位(首字節(jié))為介質(zhì)描述符(軟盤為F0h、硬盤/U盤/固態(tài)盤為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)盤映像文件,掌握常用的DOS內(nèi)外部命令的使

20、用方法,會用TYPE和EDIT生成文本文件、用XCOPY復(fù)制文件目錄。2)重點(diǎn)l DOS(Disk Operating Sysytem,磁盤操作系統(tǒng))是PC機(jī)的傳統(tǒng)操作系統(tǒng),單用戶、單任務(wù)、字符界面,運(yùn)行在16位實(shí)模式(沒有保護(hù)功能,最大RAM內(nèi)存空間只有640KB),命令行不區(qū)分字母的大小寫。l FreeDOS是一種自由開源的兼容DOS操作系統(tǒng),由Jim Hall領(lǐng)導(dǎo)一個團(tuán)隊(duì)于1994年中開始開發(fā),目前最新的是2012年1月2日推出的1.1版,其系統(tǒng)軟盤映像文件為FDOS11.img。l MS-DOS 6.22是微軟公司于1994年6月推出的一個DOS最后銷售版本,其系統(tǒng)軟盤映像文件為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ù)制到其他磁盤,才能生成DOS的啟動盤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(格式化磁盤)、XCOPY(復(fù)制目錄)、DELTREE(刪除目錄)、MOVE(移動文件)、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)要求掌握根目錄文件加載的方法和步驟,會編寫加載FAT12軟硬盤根目錄中的LOADER.BIN文件的匯編代碼。2)重點(diǎn)l 引導(dǎo)扇區(qū)的主要功能是加載操作系統(tǒng)的裝入程序LOADER.BINl LOADER.BIN一般位于磁盤文件系統(tǒng)的根目錄中l(wèi) 引導(dǎo)程序中加載LOADER.BIN文件到內(nèi)存的主要步驟n 在根目錄中查找LOADER.BIN文件所對應(yīng)的條目1. 設(shè)當(dāng)前扇區(qū)號為根目錄的起始扇區(qū)號2. 讀根目錄的當(dāng)前扇區(qū)到內(nèi)存中的加載地址3. 依次比較當(dāng)前扇區(qū)中各個文件條目(共16個)中的文件名串與“LOADER.BIN”4. 若無相等的文件條目,前扇區(qū)號加1,轉(zhuǎn)到2

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

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

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

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

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

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

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

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

32、實(shí)模式下多個進(jìn)程間的簡單切換l 用戶進(jìn)程:編寫三個功能相同的應(yīng)用程序,分別在各自行的當(dāng)前位置重復(fù)顯示字符A、B、Cl 顯示字符的方法:為了以避免中斷重入,不調(diào)用顯示中斷int 10h,而是采用直接改寫文本窗口所對應(yīng)顯存內(nèi)容的方法來顯示字符l 延時:為便于測試觀察,(因?yàn)镃PU速度太快)需使用延時循環(huán)l 裝入內(nèi)核程序和應(yīng)用程序:重寫操作系統(tǒng)的裝入程序loader.asm,使其能夠裝入內(nèi)核程序kernel.bin和若干應(yīng)用程序(在本實(shí)驗(yàn)里是a.bin、b.bin、c.bin)。為簡單,需要將kernel.bin和各應(yīng)用程序也放在磁盤映像的根目錄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個16位)上下文寄存器,即CPU中的8個通用寄存器(包括4個數(shù)據(jù)寄存器和4個指針寄存器)、6個段寄存器、1個標(biāo)志寄存器和1個指令指針寄存器IP中的當(dāng)前值,以及進(jìn)程的ID和名串l 寄存器壓棧:標(biāo)志寄存器FLAGS、代碼段寄存器CS和指令指針寄存器IP,由處理器在中斷發(fā)生時自動依次壓入當(dāng)前應(yīng)用程序棧中。8個通用寄存器和4個數(shù)據(jù)和輔助段寄存器,由時鐘中斷處理程序在最開始處用PUSHA指令(一起壓,順序:AX、CX、DX、BX、SP原來的值、BP、SI、DI,對應(yīng)的出棧指令為POPA)和PUSH指

34、令(逐個壓,順序:DS、ES、FS、GS)壓棧。只有堆棧段寄存器SS,需由調(diào)度程序另外手工賦值l 進(jìn)程調(diào)度中的棧問題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è)置的一個偽局部棧,不是正常的程序棧n 上下文寄存器被壓入被中斷進(jìn)程棧:在時鐘中斷發(fā)生時,實(shí)模式下的CPU會將寄存器FLAGS、CS、IP的當(dāng)前值先后壓入當(dāng)前被中斷程序(應(yīng)用程序進(jìn)程X)的堆棧中,接著跳轉(zhuǎn)到(位于kernel內(nèi))時鐘中斷處理程序(Timer函數(shù))執(zhí)行。注意,此時并沒有改變堆棧(的SS和

35、SP),內(nèi)核里的時鐘中斷處理函數(shù)開始處的保存上下文寄存器壓棧操作,使用的也是被中斷進(jìn)程的棧n 復(fù)制被中斷進(jìn)程棧中保存的上下文寄存器值到對應(yīng)的PCB中:再利用重復(fù)字串傳送指令REP MOVSW(以CX為計數(shù)值,它將DS:SI處的字傳送到ES:DI處,并SI+=2、DI+=2、CX-,直到CX=0)將在當(dāng)前進(jìn)程棧中的15個寄存器值復(fù)制到位于內(nèi)核的進(jìn)程表的對應(yīng)PCB中(只缺棧段寄存器SS)n 棧切換:為了能夠同時完成進(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ū)別,掌握邏輯地址、線性地址和物理地址的區(qū)別及映射方法。掌握分段和分頁與內(nèi)存保護(hù)和虛擬內(nèi)存管理的關(guān)系、特權(quán)的分級與分類、特權(quán)級與訪問控制及代碼轉(zhuǎn)移之間的關(guān)系。掌握段選擇符、(段)描述符、GDT和LDT的概念、大小、結(jié)構(gòu)和功用。掌握IA-32所采用的主要內(nèi)存管理方法(段頁式)、基本頁面的大?。?KB)、頁表的實(shí)現(xiàn)方式(二級頁表:一級=頁目錄、二級=頁表)。掌握進(jìn)入保護(hù)模式與啟動分頁機(jī)制的主要步驟和實(shí)現(xiàn)方法。會編寫定義GDT/LDT、段選擇符、頁目錄和諸頁表,進(jìn)入保護(hù)模式與啟動分頁機(jī)制的匯編代碼。會編寫獲取并顯示內(nèi)存信息的

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

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

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

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

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

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

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

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

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

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

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

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

49、物理地址由頁幀的起始地址+線性地址中的頁幀內(nèi)偏移地址=線性地址所對應(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 打開A20地址線u 置CR0寄存器的PE位u 雙字跳轉(zhuǎn)進(jìn)入保護(hù)模式n 定義GDT:用3參數(shù)宏Descriptor定義若干描述符(首個必須為全0的空描述符)、用各段在代碼中的地址初始化描述符中基址部分n 打開地址線A20:inal, 92horal, 00000010bout92h, aln 置CR0寄存器的PE位moveax, cr0oreax,

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

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

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

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

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

55、和API等高層邏輯操作則使用中級語言Cl 步驟n 簡單程序編譯運(yùn)行的主要步驟:u 用gedit編寫匯編和C程序的源代碼(在匯編程序中,用extern和global語句,導(dǎo)出和導(dǎo)入函數(shù),利用棧傳遞參數(shù)逆序壓棧)u 用NASM編譯匯編語言源程序,如:nasm -f elf foo.asm -o foo.ou 用GCC編譯C語言源程序,如: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軟盤映像a.imgu 用Fl

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

溫馨提示

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

評論

0/150

提交評論