




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统实 验 报 告课程名称操作系统实验课程编号0906553实验项目名称操作系统的启动学号年级姓名专业学生所在学院指导教师实验室名称地点 哈尔滨工程大学计算机科学与技术学院第二讲 操作系统的启动一、实验概述1. 实验名称操作系统的启动2. 实验目的跟踪调试EOS在PC机上从加电复位到成功启动的全过程,了解操作系统的启动过程。 查看EOS启动后的状态和行为,理解操作系统启动后的工作方式。 3. 实验类型验证4. 实验内容准备实验调试EOS操作系统的启动过程二、实验环境EOS操作系统和OS Lab集成实验环境,主要运用了C语言。三、实验过程1. 源程序并附上注释/*提供该示例代码是为了阐释一个
2、概念,或者进行一个测试,并不代表着最安全的编码实践,因此不应在应用程序或网站中使用该示例代码。对于超出本示例代码的预期用途以外的使用所造成的偶然或继发性损失,北京英真时代科技有限公司不承担任何责任。*/#include "EOSApp.h"int main(int argc, char* argv)int i;for (i = 1; i <= 5; i+) printf("Hello,world! %dn", i);Sleep(1000);printf("Bye-bye!n");return 0;2. 程序运行时的初值和运行结果
3、2.1 准备实验 1. 启动OS Lab。 2. 新建一个EOS Kernel项目。 3. 在“项目管理器”窗口中打开boot文件夹中的boot.asm和loader.asm两个汇编文件。boot.asm是软盘引导扇区程序的源文件,loader.asm是loader程序的源文件。 4. 按F7生成项目。5. 生成完成后,使用Windows资源管理器打开项目文件夹中的Debug文件夹。找到由 boot.asm生成的软盘引导扇区程序boot.bin文件,该文件的大小一定为512字节(与软盘引导扇区的大小一致)。找到由loader.asm生成的loader程序loader.bin文件,记录下此文件的
4、大小1566字节。找到由其它源文件生成的操作系统内核kernel.dll。 2.2 调试EOS操作系统的启动过程 2.2.1 使用Bochs做为远程目标机 按照下面的步骤将调试时使用的远程目标机修改为Bochs: 1. 在“项目管理器”窗口中,右键点击项目节点,在弹出的快捷菜单中选择“属性”。 2. 在弹出的“属性页”对话框右侧的属性列表中找到“远程目标机”属性,将此属性值修改为“Bochs Debug”(此时按F1可以获得关于此属性的帮助)。 3. 点击“确定”按钮关闭“属性页”对话框。接下来就可以使用Bochs模拟器调试BIOS程序和软盘引导扇区程序了。 2.2.2 调试BIOS程序 按F
5、5启动调试,此时会弹出两个Bochs窗口。标题为“Bochs for windows - Display”的窗口相当于计算机的显示器,显示操作系统的输出。标题为“Bochs for windows - Console”的窗口是Bochs的控制台,用来输入调试命令,输出各种调试信息。 启动调试后,Bochs在CPU要执行的第一条指令(即BIOS的第一条指令)处中断。 此时,Display窗口没有显示任何内容,Console窗口显示要执行的BIOS第一条指令的相关信息,并等待用户输入调试命令。从Console窗口显示的内容中,我们可以获得关于BIOS第一条指令的如下信息: (1)行首的0xffff
6、fff0表示此条指令所在的物理地址。 (2)f000:fff0表示此条指令所在的逻辑地址(段地址:偏移地址)。 (3)jmp far f000:e05b是此条指令的反汇编代码。 (4)行尾的ea5be000f0是此条指令的十六进制字节码,可以看出此条指令有5个字节。查看CPU在没有执行任何指令之前主要寄存器中的数据,以及内存中的数据: 1. 在Console窗口中输入调试命令sreg后按回车,显示当前CPU中各个段寄存器的值,其中CS寄存器信息行中的“s=0xf000”表示CS寄存器的值为0xf000。2. 输入调试命令r后按回车,显示当前CPU中各个通用寄存器的数。其中“rip: 0x000
7、00000:0000fff0”表示IP寄存器的值为0xfff0。 3. 输入调试命令xp /1024b 0x0000,查看开始的1024个字节的物理内存。在Console中输出的这1K物理内存的值都为0,说明BIOS中断向量表还没有被加载到此处。4. 输入调试命令xp /512b 0x7c00,查看软盘引导扇区应该被加载到的内存位置。输出的内存值都为0,说明软盘引导扇区还没有被加载到此处。 可以验证BIOS第一条指令所在逻辑地址中的段地址和CS寄存器值是一致的,偏移地址和IP寄存器的值是一致的。由于内存还没有被使用,所以其中的值都为0。 2.2.3 调试软盘引导扇区程序 接下来从0x7c00处
8、调试软盘引导扇区程序: 1. 输入调试命令vb 0x0000:0x7c00,这样就在逻辑地址0x0000:0x7c00(相当于物理地 址0x7c00)处添加了一个断点。 2. 输入调试命令c继续执行,在0x7c00处的断点中断。中断后会在Console窗口中输出下一个要执行的指令,即软盘引导扇区程序的第一条指令。3.在纸上分别记录下此条指令的字节码(eb6d)和此条指令要跳转执行的下一条指令的地址(括号中的0x00007c6f)。 4.输入调试命令sreg验证CS寄存器(0x0000)的值。 5.输入调试命令r验证IP寄存器(0x7c00)的值。 6.由于BIOS程序此时已经执行完毕,输入调试
9、命令xp /1024b 0x0000验证此时BIOS中断向量表已经被载入。7.输入调试命令xp /512b 0x7c00显示软盘引导扇区程序的所有字节码。观察此块内存最开始的两个字节分别为0xeb和0x6d,这和引导程序第一条指令的字节码(eb6d)是相同的。此块内存最后的两个字节分别为0x55和0xaa,表示引导扇区是激活的,可以用来引导操作系统,这两个字节是boot.asm中最后一行语句 dw 0xaa55 定义的。 8.输入调试命令xp /512b 0x0600验证图3-2中第一个用户可用区域是空白的。 9. 输入调试命令xp /512b 0x7e00验证图3-2中第二个用户可用区域是空
10、白的。 10. 自己设计两个查看内存的调试命令,分别验证这两个用户可用区域的高地址端也是的。11. 输入调试命令xp /512b 0xa0000验证图3-2中上位内存已经被系统占用。 12. 自己设计一个查看内存的调试命令,验证上位内存的高地址端已经被系统占用。NASM汇编器在将boot.asm生成为boot.bin的同时,会生成一个boot.lst列表文件,帮助开发者调试boot.asm文件中的汇编代码。按照下面的步骤查看boot.lst文件: 1. 在“项目管理器”窗口中,右键点击“boot”文件夹中的boot.asm文件。 2. 在弹出的快捷菜单中选择“打开生成的列表文件”,在源代码编辑
11、器中就会打开文件boot.lst。 3. 将boot.lst文件和boot.asm文件对比可以发现,此文件包含了boot.asm文件中所有的汇编代码,同时在代码的左侧又添加了更多的信息。 4. 在boot.lst中查找到软盘引导扇区程序第一条指令所在的行(第73行) 73 00000000 EB6D jmp short Start 此行包含的信息有:73是行号。 00000000是此条指令相对于程序开始位置的偏移(第一条指令应该为0)。 EB6D是此条指令的字节码,和之前记录下来的指令字节码是一致的。 软盘引导扇区程序的主要任务就是将软盘中的loader.bin文件加载到物理内存0x1000处
12、,然后跳转到loader程序的第一条指令(物理地址0x1000处的指令)继续执行loader程序。按照下面的步骤调试此过程: 1. 在boot.lst文件中查找到加载完毕loader.bin文件后要跳转到loader程序中执行的指令(第278行) 根据此指令相对于程序开始(0x7C00)的偏移(0x0181)可以得到此指令的逻辑地址为0x0000:7D81。 2.输入调试命令vb 0x0000:0x7d81添加一个断点。 3.输入调试命令c继续执行,到断点处中断。在Console窗口中显示 此条指令会跳转到物理内存0x1000处(即Loader程序的第一条指令)继续执行。 4.按照打开boot
13、.lst文件的方法打开loader.lst文件,并在此文件中查找到loader程序的第一条指令(第33行) 5.输入调试命令xp /8b 0x1000查看内存0x1000处的数据,验证此块内存的前三个字节和loader.lst文件中的第一条指令的字节码是相同的。 6.根据之前记录的loader.bin文件的大小,自己设计一个查看内存的调试命令,查看内存中loader程序结束位置的字节码,并与loader.lst文件中最后指令的字节码比较,验证loader程序被完全加载到了正确的位置。 2.2.4 调试加载程序 Loader程序的主要任务是将操作系统内核(kernel.dll文件)加载到内存中,
14、然后让CPU进入保护模式并且启用分页机制,最后进入操作系统内核开始执行(跳转到kernel.dll的入口点执行)。按照下面的步骤调试上述过程: 1.在loader.lst文件中查找到准备进入EOS操作系统内核执行的指令(第755行) 2.计算此条指令的物理地址要复杂一些:偏移地址实际上是相对于节(节SECTION是NASM汇编中的概念)开始的。由于在boot.asm程序中只有一个节,所以之前计算的结果都是正确的,但是在loader.asm程序中有两个节,并且此条指令是在第二个节中。下面引用的代码是loader.lst中第一个节的最后一条指令(第593行) 因为第一个节中最后一条指令的偏移为0x
15、03c1,并占用了3个字节(字节码为C20600),所以可以计算出进入内核执行的指令所在的物理地址为0x1513(0x1000+0x03c1+0x3+0x14f)。 3.使用添加物理地址断点的调试命令pb 0x1513添加一个断点。 4.输入调试命令c继续执行,到断点处中断。在Console窗口中显示要执行的下一条指令(注意,此时的逻辑地址都为虚拟地址): 由于这里使用了函数指针的概念,所以,根据反汇编指令可以确定内核入口点函数的地址就保存在虚拟地址0x8000117处的四个字节中。 5.使用查看虚拟内存的调试命令x /1wx 0x80001117查看内存中保存的32位函数入口地址,在Cons
16、ole窗口中会输出类似下面的内容:记录下此块内存中保存的函数地址。 2.2.5 调试内核 调试内核的步骤如下: 1.在OS Lab的“项目管理器”窗口中打开ke文件夹中的start.c文件,此文件中只定义了一个函数,就是操作系统内核的入口点函数KiSystemStartup。 2.在KiSystemStartup函数中的代码行(第61行) KiInitializePic(); 添加一个断点。 3.现在可以在Console窗口中输入调试命令c继续调试,在刚刚添加的断点处中断。 4.在start.c源代码文件中的KiSystemStartup函数名上点击鼠标右键,在弹出的快捷菜单中选择“添加监视”
17、,KiSystemStartup函数就被添加到了“监视”窗口中。在“监视”窗口中可以看到此函数地址为与在虚拟内存x80001117处保存的函数入口地址相同,说明的确是由Loader程序进入了操作系统内核。 5.按F5继续执行EOS操作系统内核,在Display窗口中显示EOS操作系统已经启动,并且控制台程序已经开始运行了。 2.2.6 EOS启动后的状态和行为 查看EOS的版本号: 1.在控制台中输入命令“ver”后按回车。 2.输出EOS版本后的控制台查看EOS启动后的进程和线程的信息: 1.在控制台中输入命令“pt”后按回车。 2输出的进程和线程信息。 查看有应用程序运行时进程和线程的信息: 1.在OS Lab中选择“调试”菜单中的“停止调试”,结束之前的调试。 2.在OS Lab“项目管理器”窗口中双击Floppy.img文件,使用FloppyImageEditor工具打开此软盘镜像文件。 3.打开配套资源“学生包”,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度环境资源法律顾问服务合同
- 二零二五年度地磅采购及远程监控合同
- 2025版服装行业品牌推广与广告投放合同
- 麻疹的家庭护理
- 二零二五年度房产抵押贷款担保合同参考范本
- 电商区块链技术应用合作协议
- 环保科技公司短期员工聘用合同
- 二零二五年度代理记账及内部审计服务合同
- 2025版纯净水智能化配送服务合同
- 二零二五年高端电脑室装修及设备购置一体化合同
- 危险性较大的分部分项工程施工前安全生产条件核查表
- GB/T 5696-2006预应力混凝土管
- GB/T 528-2009硫化橡胶或热塑性橡胶拉伸应力应变性能的测定
- GB/T 3299-1996日用陶瓷器吸水率测定方法
- 大客户战略管理
- 精轧机组机械设备使用说明书
- 2022年机械制图期末试卷及答案
- 设备维护保养制度-设备维护保养制度规定
- 思想道德与法治课件:第四章 第一节 全体人民共同的价值追求则
- 叉车构造-、使用、维修一本通课件
- 绿色建筑设计专篇样式(供暖通风与空气调节)
评论
0/150
提交评论