2011061324张耀(第二讲 操作系统的启动)_第1页
2011061324张耀(第二讲 操作系统的启动)_第2页
2011061324张耀(第二讲 操作系统的启动)_第3页
2011061324张耀(第二讲 操作系统的启动)_第4页
2011061324张耀(第二讲 操作系统的启动)_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统实验报告课程名称操作系统实验课程编号0906553实验项目名称操作系统的启动学号2011061324年级2011姓名张耀专业计算机科学与技术学生所在学院计算机科学与技术指导教师印桂生实验室名称地点21B276哈尔滨工程大学计算机科学与技术学院第二讲操作系统的启动一、实验概述1.实验名称操作系统的启动2.实验目的跟踪调试EOS在PC机上从加电复位到成功启动的全过程,了解操作系统的启动过程;查看EOS启动后的状态和行为,理解操作系统启动后的工作方式;3.实验类型验证性实验4.实验内容(1)熟悉掌握Bochs模拟器;(2)了解学习NASM汇编;(3)了解BIOS(BasicInput/Out

2、putSystem);(4)掌握EOS操作系统的启动过程;二、实验环境本次实验在OSLab实验台上进行,使用EOS操作系统,并且会用到Bochs模拟器。同时会用到NISM汇编语言,以及能够提供最低级、最直接的硬件控制与支持的BIOS系统。三、实验过程设计思路和流程图:CPU从默认位詈执行BIOS的开机自检和初始化程炜,之后BIOS将软盘引导扇区加载到Ox7COO井执行。软盘引才扇区中的Boot程序开始执行,将软盘根冃录中的Loader程序文件Loader,bin加载到0 x1000并执行。Loader程序开始执行,先加载Kernel.dll,然后启动保护模式和分页机制,最后跳到Kernel,d

3、lI的入口点执行vm十十十图3.1十l十十十一Lt-*I1iIiIiI一.:-.*启动完毕。 需要解决的问题及解答:(1)自己设计两个查看内存的调试命令,分别验证这两个用户可用区域的高地址端也是空白的。答:命令为:xp/512b0 x7a00和xp/512b0 x9fe00,如图3.2和3.3所示。因为第一个用户区的高位地址截止到0 x7c00,第二个用户区高位地址截止到OxAOOOO,命令表示显示从0 x7a00和0 x9fe00以后512b空间的所有字节码,即两个用户区的高位地址端。可以看到所有字节全为0,说明高地址端是空白的。图3.2gBochsforTindoTs一Consolekbo

4、chs:llxp/512b0 x9fe00bochs1:0 x000000000009e00:0 x000 x000 x000 x000000000009e08:0 x000 x000 x000 x000X000X000X000X000X000X000X000X000X00图3.3(2)自己设计一个查看内存的调试命令,验证上位内存的高地址端已经被系统占用。答:命令为:xp/512bOxffeOO,如图3.4所示。因为上位内存的高位地址截止到0 x100000,命令表示显示从OxffeOO以后512b空间的所有字节码,即两个用户区的高位地址端。可以看到所有字节都有值,说明高地址端被占用。Boch

5、sforindo一ConsoleASkbochs:12xp/512b0 xfe00bochs:fe00:0 xdc0 x760 x660 x600 xf00X00000000000ffeB8:0 x7c0XC00 x780 x0c0 xf8图3.4(3)根据之前记录的loader.bin文件的大小,自己设计一个查看内存的调试命令,查看内存中loader程序结束位置的字节码,并与loader.lst文件中最后指令的字节码比较,验证loader程序被完全加载到了正确的位置。答:命令为xp/8b0 x1616,如图3.5所示。xp/8b0 x1616bochs:0 x0000000000001616

6、:0 x930 xff0 xff0 xff0 xc90 xc20 x040 x00图3.5(4)仔细比较实验指导10-5图和图10-6,尝试说明哪个是应用程序的进程,它和系统进程有什么区别,哪个是应用程序的主线程,它和系统线程有什么区别。答:进程列表中ID为31的进程是应用程序的进程,其优先级为8,包含1个线程,主线程ID为33,映像名称为a:hello.exe;而ID为1的是系统进程,其优先级为24,包含有10个线程,其中的ID为2的线程是该进程的主线程,系统进程没有映像名称。主要区别:应用程序的进程优先级较低。线程列表中ID为33的线程是应用程序的线程,其优先级为8,处在阻塞状态;而ID为

7、20到28的是系统进程,其优先级为24,其中ID为22的处于运行状态,其余处于阻塞状态;处于的ID为2的线程也是系统线程,优先级为0,当没有优先级大于0的线程占用处理器时,空闲线程就会在处理器上运行并处于运行状态。主要区别:应用程序的主线程的优先级别低,存放在物理内存的高地址端。(5)为什么EOS操作系统从软盘启动时要使用boot.bin和loader.bin两个程序?使用一个可以吗?它们各自的主要功能是什么?如果将loader.bin的功能移动到boot.bin文件中,则boot.bin文件的大小是否仍然能保持小于512字节?答:在生成项目时,boot文件夹中的两个汇编文件boot.asm和

8、loader.asm分别生成了两个二进制文件boot.bin和loader.bin。这两个文件缺一不可,他们会被写入软盘镜像文件。在EOS操作系统启动时,boot.bin用于引导软盘,而loader.bin用于加载程序。如果把loader.bin的功能移动到boot.bin程序中,肯定会增加boot.bin的规模,文件大小将会大于512字节。(6)软盘引导扇区加载完毕后内存中有两个用户可用的区域,为什么软盘引导扇区程序选择将loader.bin加载到第一个可用区域的0 x1000处呢?这样做有什么好处?这样做会对loader.bin文件的大小有哪些限制。答:第一个用户可用区区域位于低地址端,便

9、于检索查找,并且容量相对较小,适合容纳相对较小的文件,所以将loader.bin加载到第一个可用区域,节省资源。由于第一用户区域的大小限制loader.bin的大小不能超过29.5KB。程序运行时的初值和运行结果:1、准备实验的阶段;2、调试EOS操作系统的启动过程,在这一阶段有包括:(1)使用Bochs作为远程目标机;在“项目管理器”窗口中,右键点击项目节点,在弹出的快捷菜单中选择“属性”。在弹出的“属性页”对话框右侧的属性列表中找到“远程目标机”属性,将此属性值修改为“BochsDebug”。点击“确定”按钮关闭“属性页”对话框。(2)调试BIOS程序;Kbochs:1sregCS:S=0

10、 xf000,ds=5=0X0000,dh=0 xf0093ff,dll=0X00009300,在Console窗口中输入调试命令sreg后按回车,显示当前CPU中各个段寄存器的值,如图3.6所示。dl=0 x0000ffff,ualid=?dl=0 x0000ffff,ualid=7SS=5=0X0000,CS=5=0X0000,dh=0 x00009300,dll=0X00009300,dl=0 x0000ffff,ualid=?dl=0 x0000ffff,ualid=7S=5=0X0000,5=0X0000,r:s=0 x0000,dh=0 x00008200,dl=0 x0000ff

11、ff,ualid=ldll=0X00009300,dll=0X00009300,dl=0X0000ffff,dl=0X0000ffff,ualid=7ualid=70X00000000:000000000X00000000:000000000X00000000:000000000X00000000:000000000X00000000:000000000X00000000:000000000X00000000:000000000X00000000:00000000tr:s=0 x0000,dh=0 x00008b00J.dl=0 x0000ffff,ualid=lgdtr:base=0 x00

12、000000,limit=0 xffffidtr:base=0 x00000000,limit=0 xffff图3.6输入调试命令r后按回车,显示当前CPU中各个通用寄存器的值,如图3.7所示。rrax:0X00000000:000000001CX:rdx:0X00000000:00000f201bx:rSP:0X00000000:000000001bp:rSi:0X00000000:00000000rdi:18:0X00000000:0000000019:ri0:0X00000000:00000000111:112:0X00000000:00000000113:114:0X00000000:

13、00000000115:rip:0X00000000:0000fff0eflags0 x00000002iduipuifacurnrfntIOPL=0图3.7输入调试命令xp/1024b0 x0000,查看开始的1024个字节的物理内存,如图3.8所示。在Console中输出的这1K物理内存的值都为0,说明BIOS中断向量表还没有被加载到此处。bochs:3xp/1024b0 x0000bochs:0X0000000000000000:0X000X000X000X000X000 x0000000000000008:0X000X000X000X000X00图3.8输入调试命令xp/512b0 x

14、7c00,查看软盘引导扇区应该被加载到的内存位置如图3.9所示。输出的内存值都为0,说明软盘引导扇区还没有被加载到此处。0:0X000X000X000X000X008:0X000X000X000X000X00 xp/512b0 x7c00bochs1:0 x0000000000007c00bogus+0 x000X000X000 x0000000000007c08bogus+0 x000X000X00图3.9调试软盘引导扇区程序;输入调试命令vb0 x0000:0 x7c00,这样就在逻辑地址0 x0000:0 x7c00(相当于物理地址0 x7c00)处添加了一个断点,如图3.10所示。ub

15、0 x0000:0 x7c00图3.10输入调试命令c继续执行,在0 x7c00处的断点中断,如图3.11所示。cBreakpoint4317298,in0000:7c00|Nextatt=1703622410 x00007c00J0000:7c00:jmp.+0 x006d:eb6d图3.11输入调试命令xp/1024b0 x0000验证此时BIOS中断向量表已经被载入如图3.12所示。tCbochs:9xp/1024b0 x0000bochs:0X0000000000000000-x53Oxff0X000 xf0ix530 x0000000000000008rx53Oxff0X000 xf

16、0ix53图3.12输入调试命令xp/512b0 x7c00显示软盘引导扇区程序的所有字节码。此块内存最后的两个字节分别为0 x55和0 xaa,表示引导扇区是激活的,可以用来引导操作系统,如图3.13所示。 图3.18 0 x0000000000007d8:0X000X00X000X00X00 x00Hx550 xaa图3.13输入调试命令xp/512b0 x0600验证第一个用户可用区域是空白的,如图3.14所示。xp/512b0 x0600bochs:TOC o 1-5 h z0X0000000000000600:0X000X000X000X000X000 x000 x000 x000X

17、0000000000000608:0 x000 x000 x000 x000X00图3.14输入调试命令xp/512b0 x7e00验证第二个用户可用区域是空白的,如图3.15所示。xp/512b0 x7e00bochs:0X000000000000700;0X000X000X000X000X000 x0000000000007e08;0X000X000X000X000X00图3.15输入调试命令xp/512bOxaOOOO验证上位内存已经被系统占用,如图3.16所示。xp/512b0 xa0000bochs:0 x00000000000a0000:0 xff0 xff0 xff0 xff0

18、xff0 x00000000000a0008:0 xff0 xff0 xff0 xff0 xff图3.16输入调试命令vb0 x0000:0 x7d81添加一个断点,如图3.17所示。ub0 x0000:0 x7d81图3.17输入调试命令c继续执行,到断点处中断。在Console窗口中显示如图3.18所示。cBreakpoint4317298,in0000:7d81Nextattx0000?d8:L0000汐罰1unk.ctxt:jmp0000:1000;吕300100000输入调试命令xp/8b0 x1000查看内存0 x1000处的数据,验证此块内存的前三个字节

19、和loader.lst文件中的第一条指令的字节码是相同的,如图3.19所示。3300000000E91801jmpStartxp/8b0 x1000bochs:0X0000000000001000:0 xe90 x18图3.19(4)调试加载程序;使用添加物理地址断点的调试命令pb0 x1513添加一个断点,如图3.20所示。KbochM:lpb0 x1513图3.20使用查看虚拟内存的调试命令x/1wx0 x80001117查看内存中保存的32位函数入口地址,如图3.21所示。xZlwx0 x80001117bochs1:图3.21(5)调试内核在KiSystemStartup函数中的代码行

20、(第61行)KiInitializePic();添加一个断点,如图3.22所示。KiInitialikePic();图3.22在start.c源代码文件中的KiSystemStartup函数名上点击鼠标右键,在弹出的快捷菜单中选择“添加监视”,KiSystemStartup函数就被添加到了“监视”窗口中。(6)EOS启动后的状态和行为在控制台中输入命令“ver”后按回车,如图3.23所示。图3.23在控制台中输入命令“pt”后按回车,如图3.24所示。*ProcessList(1Process)*IDISystem?!PriorityIThreadCount!PrimaryThreadIDII

21、mageName1YZ401y(ttr444444444sozzzzzzzzz1i0Thread)!StateReadyUaitingRunningWaitingWaitingWaitingUaitingWaitingWaiting*!FarentProcessID111111111NA!StartAddress0X8001817C0 x80015E9A0X80O18Z6D0X80O18Z6D0X80O18Z6D0X80O18Z6D0X80018Z6D0X80O1826D0X80O18Z6D0 x80018Z6D将本实验文件夹中的Hello.exe文件拖动到FloppyImageEditor工具窗口的文件列表中释放,按F5启动调试。待EOS启动完毕,在EOS控制台中输入命令“hello”后按回车。此时Hello.exe应用程序就开

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论