




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
信息与管理科学学院计算机系实验报告课程名称: 计算机操作系统 实验名称: 操作系统的启动 姓 名: 张瑞芳 班 级: 指导教师: 刘羿 学 号: 实 验 室: 菊潭机房二 日 期: 2012.10.29 一、实验目的 跟踪调试EOS在PC机上从加电复位到成功启动的全过程,了解操作系统的启动过程。二、实验环境 EOS环境三、实验内容 调试EOS的启动过程,调试软盘引导扇区程序,调试加载程序,调试内核四、实验操作过程 1 准备EOS内核启动 OS Lab 后,首先新建一个EOS Kernel项目并生成项目。2 调试EOS的启动过程2.1 使用Bochs做为远程目标机按照下面的步骤将调试时使用的远程目标机修改为Bochs:1. 在“项目管理器”窗口中,右键点击目录树的根节点(kernel),选择快捷菜单中的“属性”,弹出项目的“属性页”对话框(此时按F1可以获得关于属性页的帮助)。2. 在弹出的项目“属性页”对话框中选中“远程目标机”属性(此时按F1可以获得关于此属性的帮助)。将“远程目标机”属性值修改为“Bochs Debug”。3. 点击“确定”按钮关闭“属性页”对话框。接下来就可以使用Bochs模拟器调试BIOS程序和软盘引导扇区程序了。2.2 调试BIOS按F5启动调试,此时会弹出两个Bochs窗口。标题为“Bochs for windows - Display”的窗口相当于计算机的显示器,显示操作系统的输出;标题为“Bochs for windows - Console”的窗口是Bochs的控制台,用来输入调试命令,输出各种调试信息。2.3 调试软盘引导扇区程序输入调试命令vb 0x0000:0x7c00在逻辑地址0x0000:0x7c00(相当于物理地址0x7c00)处添加一个断点。接下来输入调试命令c继续执行,到断点处中断。在Console窗口中输出下一个要执行的指令,即软盘引导扇区程序的第一条指令(0) 0x00007c00 0000:7c00 (unk. ctxt): jmp .+0x006d (0x00007c6f) ; eb6d 接下来使用调试命令sreg验证CS寄存器(0x0000)的值,使用调试命令r验证IP寄存器(0x7c00)的值。使用调试命令xp /512b 0x7c00显示软盘引导扇区程序的所有字节码,确保软盘引导扇区程序有512个字节。使用调试命令xp /512b 0x0600验证第一个用户可用区域是空白的。使用调试命令xp /512b 0x7e00验证第二个用户可用区域是空白的。在OS Lab的“项目管理器”窗口中打开“boot”文件夹,右键点击boot.asm文件,在弹出的快捷菜单中选择“打开生成的列表文件”,在源代码编辑器中就会打开文件boot.lst。接下来使用调试命令s,单步执行第一条指令,继续使用单步调试命令s进行调试,直到下面这些初始化CPU的指令执行完毕movax, csmovds, axmoves, axmovss, axxor sp, spmov bp, sp这些指令使用CS寄存器的值将DS、ES和SS寄存器初始化,由于CS寄存器的值为0,所以这些段寄存器(主要是代码段、数据段和堆栈段)的值就都被初始化为0了,最后将SP和BP都指向了64K堆栈的栈底,堆栈初始化完毕。接下来软盘引导扇区程序的主要任务就是将软盘中的loader.bin文件加载到物理内存的0x1000处,然后跳转到loader程序的第一条指令(物理地址0x1000处的指令)继续执行loader程序。下面在boot.lst文件中查找到加载完毕loader.bin文件后要跳转到loader程序中执行的指令。使用调试命令vb 0x0000:0x7d81在此指令处添加一个断点,输入调试命令c继续执行。按照打开boot.lst文件的方法同样可以打开loader.lst文件,在此文件中查找到loader程序的第一条指令。然后使用调试命令xp /8b 0x1000查看内存0x1000处的内存,验证此块内存的前三个字节和loader.lst文件中的第一条指令的字节码是相同的。根据loader.bin文件的大小,自己设计一个查看内存的调试命令,查看内存中loader程序结束位置的字节码,并与loader.lst文件中最后指令的字节码比较,验证loader程序被完全加载到了正确的位置。2.4 调试加载程序输入调试命令s,进入loader程序,Console窗口显示下一个要执行的指令,也就是loader程序的第一条指令, 在loader.lst文件中查找到准备进入EOS操作系统内核执行的指令 755 0000014F FF1517010080 call dword va_ImageEntry引用的代码是loader.lst中第一个节的结束和第二个节的开始593 000003C1 C20600 ret 6594 ;595 596 ;597 ;+598 ;保护模式代码599 SECTION .s32600 00000000 90 ALIGN32601 BITS32602 603 ProtectionMode:604 00000020 66B81000 movax, DS_SELECTOR使用添加物理地址断点的调试命令pb 0x1513在此指令处添加一个断点,然后输入调试命令c继续执行到此处中断。使用查看内存的调试命令x /1wx 0x80001117查看此处内存保存的32位函数入口地址,在Console窗口中输出0x0000000080001117 : 0x800*记录下Console输出的地址,接下来可以调试进入内核入口点函数,然后再验证内核入口点函数的地址与此地址是一致的。2.5 调试内核在OS Lab的“项目管理器”窗口中打开ke文件夹中的start.c文件,此文件中只定义了一个函数,就是操作系统内核的入口点函数KiSystemStartup。在KiSystemStartup函数中的KiInitializePic();代码行添加一个断点。现在可以在Console窗口中输入调试命令c继续调试,在刚刚添加的断点处中断。在start.c源代码文件中的KiSystemStartup函数名上点击鼠标右键,在弹出的快捷菜单中选择“添加监视”,KiSystemStartup函数就被添加到了“监视”窗口中,在“监视”窗口中可以看到此函数的值为void (PVOID) 0x800* 与在虚拟内存x80001117处保存的函数入口地址相同,说明的确是由Loader程序进入了操作系统内核。按F5继续执行EOS操作系统内核,在Display窗口中显示EOS操作系统已经启动,并且控制台程序已经开始运行了。在OS Lab中选择“调试”菜单中的“停止调试”,结束此次调试。五、实验结果及结论 1准备EOS内核并调试BIOS。启动调试后,Display窗口没有显示任何内容,Console窗口显示Bochs在BIOS程序的第一条指令处中断0xfffffff0 f000:fff0 (unk. ctxt): jmp far f000:e05b ; ea5be000f0在Console中输入调试命令sreg后按回车,查看输出内容中CS寄存器的值cs:s=0xf000, dh=0xff0093ff, dl=0x0000ffff, valid=7其中的s=0xf000表示CS寄存器中的值。接着输入调试命令r后按回车,查看IP寄存器的值rip: 0x00000000:0000fff0可以验证BIOS第一条指令逻辑地址中的段地址和CS寄存器值是一致的,偏移地址和IP寄存器的值是一致的。2.调试软盘引导扇区程序输入调试命令vb 0x0000:0x7c00在逻辑地址0x0000:0x7c00(相当于物理地址0x7c00)处添加一个断点。接下来输入调试命令c继续执行,到断点处中断。中断后会在Display窗口中会显示Booting from Floppy表示PC机开始从软盘引导。在Console窗口中输出下一个要执行的指令, (0) 0x00007c00 0000:7c00 (unk. ctxt): jmp .+0x006d (0x00007c6f) ; eb6d接下来使用调试命令sreg验证CS寄存器(0x0000)的值,使用调试命令r验证IP寄存器(0x7c00)的值。使用调试命令xp /512b 0x0600验证第一个用户可用区域是空白的。使用调试命令xp /512b 0x7e00验证第二个用户可用区域是空白的。在OS Lab的“项目管理器”窗口中打开“boot”文件夹,右键点击boot.asm文件,在弹出的快捷菜单中选择“打开生成的列表文件”,在boot.lst中查找到软盘引导扇区程序的第一条指令 73 00000000 EB6D jmp short Start其中的73是行号;00000000是此条指令相对于程序开始位置的偏移(第一条指令应该为0);EB6D是此条指令的字节码,和之前记录下来的指令字节码是一致的。继续在boot.lst文件中找到Start标签对应的指令 118 0000006F 8CC8 movax, cs3.调试加载程序记录下Console输出的地址,接下来可以调试进入内核入口点函数,验证内核入口点函数的地址与此地址是一致的。4.调试内核在OS Lab的“项目管理器”窗口中打开ke文件夹中的start.c文件,此文件中只定义了一个函数,就是操作系统内核的入口点函数KiSystemStartup。在KiSystemStartup函数中的KiInitializePic();代码行添加一个断点。在Console窗口中输入调试命令c继续调试,在刚刚添加的断点处中断。按F5继续执行EOS操作系统内核,在Display窗口中显示EOS操作系统已经启动,并且控制台程序已经开始运行了。在OS Lab中选择“调试”菜单中的“停止调试”,结束此次调试。六、心得体会 通过准备EOS内核并调试EO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工地用水电合同范本
- 超市代理合同范本
- 房屋网络出售合同范本
- 合租档口合同范本
- 回扣采购汽车合同范本
- 工厂培训学徒合同范本
- 河南装饰设计合同范本
- 关于纸盒购销合同范本
- 2025年芜湖市沈巷中心小学顶岗教师招聘备考练习试题及答案解析
- 防水购销合同范本
- 典型故障波形分析-典型故障下录波图的分析(电力系统故障分析)
- 2025高考政治命题纲要解读
- 万科物业管理服务方案
- 中国糖尿病行为与生活方式干预指南(2024版)解读课件
- 《对外汉语比字句》课件
- 《中华人民共和国职业分类大典》(2022年版)各行业职业表格统计版(含数字职业)
- 养老院消防应急演练的不足与改进措施
- 七年级上册劳动与技术教案
- 高级职称答辩模板
- 小学数学苏教版三年级上册第一单元《两三位数乘一位数混合运算》试题
- 2024年秋季新北师大版七年级上册数学全册教案
评论
0/150
提交评论