版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统实 验 报 告课程名称操作系统实验课程编号实验项目名称操作系统的启动学号年级2011级姓名专业软件工程学生所在学院软件学院指导教师王红滨实验室名称地点软件工程实验室 21B282 哈尔滨工程大学软件学院第二讲 实验系统的启动一、实验概述1. 实验名称实验系统的启动2. 实验目的 跟踪调试 EOS 在 PC 机上从加电复位到成功启动的全过程,了解操作系统的启动过程。查看EOS启动后的状态和行为,理解操作系统启动后的工作方式。 3. 实验类型(验证、设计)验证4. 实验内容调试EOS操作系统的启动过程包括:(1).使用Bochs做为远程目标机;(2).调试BIOS程序;(3).调试软盘引导
2、扇区程序;(4).调试加载程序;(5).调试内核;(6).查看EOS启动后的状态和行为 二、实验环境操作系统:windows xp编译环境:OS Lab三、实验过程1. 设计思路和流程图CPU从默认位置执行BIOS的开机自检和初始化程序,之后 BIOS 将软盘引导扇区加载到 0x7C00 并执行。软盘引导扇区中的Boot程序开始执行,将软盘根目录中的Loader程序文件Loader.bin加载到0x1000并执行Loader 程序开始执行,先加载Kernel.dll,然后启动保护模式和分页机制,最后跳到Kernel.dll的入口点执行Kernel.dll开始执行,初始化EOS内核,EOS启动完
3、毕图2-1.EOS操作系统的启动过程流程图2. 需要解决的问题及解答(1).为什么EOS操作系统从软盘启动时要使用boot.bin和loader.bin两个程序?使用一个可以吗?它们各自的主要功能是什么?如果将loader.bin的功能移动到boot.bin文件中,则boot.bin文件的大小是否仍然能保持小于512字节?答:boot文件夹包含了两个汇编文件boot.asm和loader.asm。这两个文件生成的二进制文件boot.bin和loader.bin会被写入软盘镜像文件。操作系统启动时boot.bin和loader.bin引导软盘加载程序,二者缺一不可。使用Boot.bin的主要功能
4、是引导软盘;loader.bin的主要功能是加载程序。如果把loader.bin功能移动到boot.bin程序中,必然导致程序规模扩大,可能使其大于512字节。(2).软盘引导扇区加载完毕后内存中有两个用户可用的区域,为什么软盘引导扇区程序选择将loader.bin加载到第一个可用区域的0x1000处呢?这样做有什么好处?这样做会对loader.bin文件的大小有哪些限制。答:首先用户只用两个可用区域,加载位置非此即彼。第一个可用用户区是低地址区,且空间大小比较小,适合容纳小文件,所以我们选择将占用空间小的loder.bin加载到第一用户区。优点:由低地址开始,便于检索查找。小文件占用小空间,
5、节约资源。限制:loader.bin文件必须小于1c00k.(3).练习使用Bochs单步调试BIOS程序、软盘引导扇区程序和loader程序,加深对操作系统启动过程的理解。(4). 仔细比较实验指导10-5图和图10-6,尝试说明哪个是应用程序的进程,它和系统进程有什么区别,哪个是应用程序的主线程,它和系统线程有什么区别。答:图10-6是应用程序的进程,在进程列表中只有一个ID为1的系统进程,其优先级为24,包含有10个线程,其中的ID为2的线程是该进程的主线程,系统进程没有映像名称。在线程列表中有10个线程,它们都是系统线程。区别:主线程的优先级别高。存放在物理内存的低端。3. 程序运行时
6、的初值和运行结果 1. 调试BIOS程序(1). 在Console窗口中输入调试命令sreg后按回车,显示当前CPU中各个段寄存器的值。其中CS寄存器信息行中的“s=0xf000”表示CS寄存器的值为0xf000. (2).输入调试命令r后按回车,显示当前CPU中各个通用寄存器的值。其中“rip: 0x:0000fff0”表示IP寄存器的值为0xfff0。 (3).输入调试命令xp /1024b 0x0000,查看开始的1024个字节的物理内存。在Console中输出的这1K物理内存的值都为0,说明BIOS中断向量表还没有被加载到此处。(4) . 输入调试命令xp /512b 0x7c00,查
7、看软盘引导扇区应该被加载到的内存位置。输出的内存值都为0,说明软盘引导扇区还没有被加载到此处。2. 调试软盘引导扇区程序a. 输入调试命令vb 0x0000:0x7c00,这样就在逻辑地址0x0000:0x7c00(相当于物理地址0x7c00)处添加了一个断点。b. 输入调试命令c继续执行,在0x7c00处的断点中断。中断后会在Console窗口中输出下一个要执行的指令,即软盘引导扇区程序的第一条指令,如下 (0) 0x00007c00 0000:7c00 (unk. ctxt): jmp .+0x006d (0x00007c6f) ; eb6d c. 为了方便后面的使用,先在纸上分别记录下此
8、条指令的字节码(eb6d)和此条指令要跳转执行的下一条指令的地址(括号中的0x00007c6f)。 d. 输入调试命令sreg验证CS寄存器(0x0000)的值。 e. 输入调试命令r验证IP寄存器(0x7c00)的值。f. 由于BIOS程序此时已经执行完毕,输入调试命令xp /1024b 0x0000验证此时BIOS中断向量表已经被载入。 g. 输入调试命令xp /512b 0x7c00显示软盘引导扇区程序的所有字节码。观察此块内存最开始的两个字节分别为0xeb和0x6d,这和引导程序第一条指令的字节码(eb6d)是相同的。h. 输入调试命令xp /512b 0x0600验证图3-2中第一个
9、用户可用区域是空白的。i. 输入调试命令xp /512b 0x7e00验证图3-2中第二个用户可用区域是空白的。j. 自己设计两个查看内存的调试命令,分别验证这两个用户可用区域的高地址端也是空白的。 k. 输入调试命令xp /512b 0xa0000验证图3-2中上位内存已经被系统占用。l. 自己设计一个查看内存的调试命令,验证上位内存的高地址端已经被系统占用。 查看boot.lst文件 (1). 在“项目管理器”窗口中,右键点击“boot”文件夹中的boot.asm文件。 (2). 在弹出的快捷菜单中选择“打开生成的列表文件”,在源代码编辑器中就会打开文件boot.lst。 (3). 将bo
10、ot.lst文件和boot.asm文件对比可以发现,此文件包含了boot.asm文件中所有的汇编代码,同时在代码的左侧又添加了更多的信息。 (4). 在boot.lst中查找到软盘引导扇区程序第一条指令所在的行(第73行) 73 EB6D jmp short Start 此行包含的信息有: l 73是行号。 l 是此条指令相对于程序开始位置的偏移(第一条指令应该为0)。 l EB6D是此条指令的字节码,和之前记录下来的指令字节码是一致的。 软盘引导扇区程序的主要任务就是将软盘中的loader.bin文件加载到物理内存的0x1000处,然后跳转到loader程序的第一条指令(物理地址0x1000
11、处的指令)继续执行loader程序。按照下面的步骤调试此过程: (1). 在boot.lst文件中查找到加载完毕loader.bin文件后要跳转到loader程序中执行的指令(第278行) 278 EA jmp 0:LOADER_ORG 根据此指令相对于程序开始(0x7C00)的偏移(0x0181)可以得到此指令的逻辑地址为0x0000:7D81。 (2). 输入调试命令vb 0x0000:0x7d81添加一个断点。 (3). 输入调试命令c继续执行,到断点处中断。在Console窗口中显示 (0) 0x00007d81 0000:7d81 (unk. ctxt): jmp far 0000:
12、1000 ; ea 此条指令会跳转到物理内存0x1000处(即Loader程序的第一条指令)继续执行。 (4). 按照打开boot.lst文件的方法打开loader.lst文件,并在此文件中查找到loader程序的第一条指令(第33行) 33 E91801 jmp Start (5). 输入调试命令xp /8b 0x1000查看内存0x1000处的数据,验证此块内存的前三个字节和loader.lst文件中的第一条指令的字节码是相同的。 (6). 根据之前记录的loader.bin文件的大小,自己设计一个查看内存的调试命令,查看内存中loader程序结束位置的字节码,并与loader.lst文件
13、中最后指令的字节码比较,验证loader程序被完全加载到了正确的位置。调试加载程序 Loader程序的主要任务是将操作系统内核(kernel.dll文件)加载到内存中,然后让CPU进入保护模式并且启用分页机制,最后进入操作系统内核开始执行(跳转到kernel.dll的入口点执行)。按照下面的步骤调试上述过程: (1). 在loader.lst文件中查找到准备进入EOS操作系统内核执行的指令(第755行) 755 F FF15 call dword va_ImageEntry (2). 计算此条指令的物理地址要复杂一些:偏移地址实际上是相对于节(节SECTION是NASM汇编中的概念)开始的。由
14、于在boot.asm程序中只有一个节,所以之前计算的结果都是正确的,但是在loader.asm程序中有两个节,并且此条指令是在第二个节中。下面引用的代码是loader.lst中第一个节的最后一条指令(第593行) 593 C1 C20600 ret 6 因为第一个节中最后一条指令的偏移为0x03c1,并占用了3个字节(字节码为C20600),所以可以计算出进入内核执行的指令所在的物理地址为0x1513(0x1000+0x03c1+0x3+0x14f)。 (3). 使用添加物理地址断点的调试命令pb 0x1513添加一个断点。 (4). 输入调试命令c继续执行,到断点处中断。在Console窗口
15、中显示要执行的下一条指令(注意,此时的逻辑地址都为虚拟地址): (0) 0x 0008:01513 (unk. ctxt): call dword ptr ds:0x ; ff 由于这里使用了函数指针的概念,所以,根据反汇编指令可以确定内核入口点函数的地址就保存在虚拟地址0x处的四个字节中。 (5). 使用查看虚拟内存的调试命令x /1wx 0x查看内存中保存的32位函数入口地址,在Console窗口中会输出类似下面的内容: 0x01117 : 0x800* 记录下此块内存中保存的函数地址,后面的实验会验证内核入口点函数的地址与此地址是一致的。 调试内核: (1). 在OS Lab的“项目管理
16、器”窗口中打开ke文件夹中的start.c文件,此文件中只定义了一个函数,就是操作系统内核的入口点函数KiSystemStartup。 (2). 在KiSystemStartup函数中的代码行(第61行) KiInitializePic(); 添加一个断点。 (3). 现在可以在Console窗口中输入调试命令c继续调试,在刚刚添加的断点处中断。 (4). 在start.c源代码文件中的KiSystemStartup函数名上点击鼠标右键,在弹出的快捷菜单中选择“添加监视”,KiSystemStartup函数就被添加到了“监视”窗口中。在“监视”窗口中可以看到此函数地址为 void (PVOID
17、) 0x800* 与在虚拟内存x处保存的函数入口地址相同,说明的确是由Loader程序进入了操作系统内核。 (5). 按F5继续执行EOS操作系统内核,在Display窗口中显示EOS操作系统已经启动,并且控制台程序已经开始运行了。EOS启动后的状态和行为 (1). 在控制台中输入命令“ver”后按回车。 (2). 输出EOS版本后的控制台。查看EOS启动后的进程和线程的信息: (1). 在控制台中输入命令“pt”后按回车。 (2). 输出的进程和线程信息如图所示。 查看有应用程序运行时进程和线程的信息: 1. 在OS Lab中选择“调试”菜单中的“停止调试”,结束之前的调试。 2. 在OS
18、Lab“项目管理器”窗口中双击Floppy.img文件,使用FloppyImageEditor工具打开此软盘镜像文件。 3. 打开配套资源“学生包”,在其中找到本实验对应的文件夹。可以在本书前言部分找到“学生包”的下载地址。 4. 将本实验文件夹中的Hello.exe文件拖动到FloppyImageEditor工具窗口的文件列表中释放,Hello.exe文件即被添加到软盘镜像文件中。Hello.exe一个EOS应用程序,其源代码可以参见本实验文件夹中的Hello.c源文件。 5. 在FloppyImageEditor中选择“文件”菜单中的“保存”后关闭FloppyImageEditor。 6. 按F5启动调试。 7. 待EOS启动完毕,在EOS控制台中输入命令“h
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水生动物病害防治员岗前岗位适应能力考核试卷含答案
- 陶瓷注浆成型工安全实操能力考核试卷含答案
- 煤提质工安全生产能力知识考核试卷含答案
- 井下作业工具工保密知识考核试卷含答案
- 注聚工岗前标准化考核试卷含答案
- 医学26年:血常规结果解读要点 查房课件
- 乳制品市场深度解析-探索增长策略与消费者趋势
- 2023年广东省初级主治医师妇产科基础知识模拟试题
- 2026 减脂期猪心课件
- 2025年八省适应性考试语文试题
- 2026广西梧州苍海投资集团有限责任公司招聘总会计师1人笔试模拟试题及答案解析
- 《AQ3067-2026化工和危险化学品重大生产安全事故隐患判定准则》解读
- YDT 5102-2024 通信线路工程技术规范
- 中小学艾滋病防护知识
- Waters2695高效液相色谱仪操作规程
- 宽宽窄窄量量看
- 2023年十堰市郧阳区事业单位真题及答案
- 性传播疾病病症处理
- 中国国防建设
- 小说《摩登情书》全文
- 第四种检查器介绍
评论
0/150
提交评论