版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统实验报告课程名称操作系统实验实验项目名称操作系统的启动学号班级20100612姓名专业计算机科学与技术学生所在学院计 算 机科 学 与技术学院指导教师实验室名称地点计算机基础第七实验室 21B475哈尔滨工程大学计算机科学与技术学院 、实验概述实验名称 操作系统的启动实验目的1 跟踪调试 EOS 在 PC 机上从加电复位到成功启动的全过程, 了解操作系 统的启动过程。2 查看 EOS启动后的状态和行为,理解操作系统启动后的工作方式。实验类型 验证性实验实验内容调试 EOS操作系统的启动过程包括:(1). 使用 Bochs 做为远程目标机 ;(2). 调试 BIOS程序; ( 3).调试
2、软盘引导扇区程序 ;(4). 调试加载程序 ;(5). 调试 内核; (6).查看 EOS启动后的状态和行为二、实验环境EOS操作系统和配套的 IDE 集成开发环境。 三、实验过程设计思路和流程图CPU 从默认位置执行 BIOS 的开机自检和初始化程序, 之后 BIOS 将软盘引导扇区加载到 0 x7C00 并执行。软盘引导扇区中的 Boot 程序开始执行,将软盘根目录 中的 Loader 程序文件 Loader.bin 加载到 0 x1000 并执行Loader 程序开始执行,先加载 Kernel.dll ,然后启动保 护模式和分页机制,最后跳到 Kernel.dll 的入口点执行Kerne
3、l.dll 开始执行,初始化 EOS 内核, EOS 启动完毕图 2-1.EOS 操作系统的启动过程流程图算法实现:验证性试验,无算法。需要解决的问题及解答(试验指导)(1). 为什么EOS操作系统从软盘启动时要使用 boot.bin 和loader.bin 两个程 序?使用一个可以吗?它们各自的主要功能是什么?如果将 loader.bin 的功能 移动到boot.bin 文件中,则 boot.bin 文件的大小是否仍然能保持小于 512字节? 答:boot 文件夹包含了两个汇编文件 boot.asm 和loader.asm 。这两个文件生 成的二进制文件 boot.bin 和 loader.
4、bin 会被写入软盘镜像文件。 操作系统启动时 boot.bin 和loader.bin 引导软盘加载程序, 二者缺一不可。 使用 Boot.bin 的主要 功能是引导软盘; loader.bin 的主要功能是加载程序。 如果把 loader.bin 功能移 动到 boot.bin 程序中,必然导致程序规模扩大,可能使其大于 512字节。(2). 软盘引导扇区加载完毕后内存中有两个用户可用的区域,为什么软盘 引导扇区程序选择将 loader.bin 加载到第一个可用区域的 0 x1000处呢?这样做 有什么好处?这样做会对 loader.bin 文件的大小有哪些限制。答:首先用户只用两个可用区
5、域,加载位置非此即彼。第一个可用用户区是 低地址区,且空间大小比较小, 适合容纳小文件, 所以我们选择将占用空间小的 loder.bin 加载到第一用户区。优点:由低地址开始,便于检索查找。小文件占用小空间,节约资源。 限制: loader.bin 文件必须小于 1c00k.(3).练习使用Bochs单步调试BIOS程序、软盘引导扇区程序和 loader 程序, 加深对操作系统启动过程的理解。(4). 仔细比较实验指导 10-5图和图 10-6,尝试说明哪个是应用程序的进程, 它和系统进程有什么区别, 哪个是应用程序的主线程, 它和系统线程有什么区别。答:图 10-6是应用程序的进程,在进程列
6、表中只有一个 ID为1的系统进程, 其优先级为 24,包含有 10个线程,其中的 ID为2的线程是该进程的主线程,系统 进程没有映像名称。在线程列表中有 10个线程,它们都是系统线程。区别:主线程的优先级别高。 存放在物理内存的低端。主要数据结构、实现代码及其说明:验证性实验,无此项目。源程序并附上注释:验证性实验,无此项目。程序运行时的初值和运行结果 ,实验过程1. 调试 BIOS程序(1). 在Console窗口中输入调试命令 sreg 后按回车,显示当前 CPU中各个 段寄存器的值,如图 2-1 。其中CS寄存器信息行中的 “s=0 xf000 ”表示CS寄存器的 值为0 xf000.(
7、2). 输入调试命令 r后按回车,显示当前 CPU中各个通用寄存器的值, 如图 10-3 。其中“rip: 0 x00000000:0000fff0 ”表示IP寄存器的值为 0 xfff0 。. 输入调试命令 xp /1024b 0 x0000,查看开始的 1024个字节的物理内存。 在Console中输出的这 1K物理内存的值都为 0,说明 BIOS中断向量表还没有被加载 到此处。. 输入调试命令 xp /512b 0 x7c00,查看软盘引导扇区应该被加载到的内 存位置。输出的内存值都为 0,说明软盘引导扇区还没有被加载到此处。2. 调试软盘引导扇区程序输入调试命令 vb 0 x0000:
8、0 x7c00 ,这样就在逻辑地址 0 x0000:0 x7c00(相当于 物理地址 0 x7c00)处添加了一个断点。输入调试命令 c继续执行,在 0 x7c00处的断点中断。中断后会在 Console 窗口 中输出下一个要执行的指令,即软盘引导扇区程序的第一条指令,如下 (0) 0 x00007c00 0000:7c00 (unk. ctxt): jmp .+0 x006d (0 x00007c6f) ; eb6d为了方便后面的使用,先在纸上分别记录下此条指令的字节码(eb6d)和此条指令要跳转执行的下一条指令的地址(括号中的 0 x00007c6f )。输入调试命令 sreg验证CS寄存
9、器( 0 x0000)的值。输入调试命令 r验证IP寄存器( 0 x7c00)的值。由于BIOS程序此时已经执行完毕,输入调试命令 xp /1024b 0 x0000 验证此时 BIOS中断向量表已经被载入。g. 输入调试命令 xp /512b 0 x7c00显示软盘引导扇区程序的所有字节码。观察此 块内存最开始的两个字节分别为 0 xeb和 0 x6d,这和引导程序第一条指令的字节码 ( eb6d)是相同的。h. 输入调试命令 xp /512b 0 x0600 验证图 3-2中第一个用户可用区域是空白的i. 输入调试命令 xp /512b 0 x7e00 验证图 3-2中第二个用户可用区域是
10、空白的j. 自己设计两个查看内存的调试命令,分别验证这两个用户可用区域的高地址 端也是空白的。k. 输入调试命令 xp /512b 0 xa0000 验证图 3-2 中上位内存已经被系统占用自己设计一个查看内存的调试命令,验证上位内存的高地址端已经被系统占 用。查看 boot.lst文件. 在“项目管理器 ”窗口中,右键点击 “boot ”文件夹中的 boot.asm 文件。. 在弹出的快捷菜单中选择 “打开生成的列表文件 ”,在源代码编辑器中就会打 开文件 boot.lst 。. 将boot.lst 文件和 boot.asm 文件对比可以发现, 此文件包含了 boot.asm 文件 中所有的
11、汇编代码,同时在代码的左侧又添加了更多的信息。. 在boot.lst 中查找到软盘引导扇区程序第一条指令所在的行(第 73行) 73 00000000 EB6D jmp short Start 此行包含的信息有:73是行号。00000000是此条指令相对于程序开始位置的偏移(第一条指令应该为 0)。EB6D是此条指令的字节码,和之前记录下来的指令字节码是一致的。软盘引导扇区程序的主要任务就是将软盘中的 loader.bin 文件加载到物理内存 的 0 x1000处,然后跳转到 loader 程序的第一条指令(物理地址 0 x1000处的指令) 继续执行loader 程序。按照下面的步骤调试此过
12、程:1). 在 boot.lst 文件中查找到加载完毕 loader.bin 文件后要跳转到 loader 程序 中执行的指令(第 278行) 278 00000181 EA00100000 jmp 0:LOADER_ORG根 据 此指令相对于程序开始( 0 x7C00)的偏移( 0 x0181)可以得到此指令的逻辑地址 为0 x0000:7D81。2). 输入调试命令 vb 0 x0000:0 x7d81 添加一个断点。3). 输入调试命令 c继续执行,到断点处中断。在 Console 窗口中显示 (0) 0 x00007d81 0000:7d81 (unk. ctxt): jmp far
13、0000:1000 ; ea00100000此条指令会跳转到物理内存 0 x1000处(即 Loader程序的第一条指令)继续执行。4). 按照打开 boot.lst 文件的方法打开 loader.lst 文件,并在此文件中查找到 loader 程序的第一条指令(第 33行) 33 00000000 E91801 jmp Start5). 输入调试命令 xp /8b 0 x1000查看内存 0 x1000处的数据,验证此块内存的前 三个字节和 loader.lst 文件中的第一条指令的字节码是相同的。6). 根据之前记录的 loader.bin文件的大小,自己设计一个查看内存的调试命令, 查看
14、内存中 loader程序结束位置的字节码,并与 loader.lst文件中最后指令的字节 码比较,验证 loader程序被完全加载到了正确的位置。调试加载程序Loader 程序的主要任务是将操作系统内核 (kernel.dll 文件)加载到内存中, 然 后让CPU进入保护模式并且启用分页机制,最后进入操作系统内核开始执行(跳 转到 kernel.dll 的入口点执行)。按照下面的步骤调试上述过程:在loader.lst 文件中查找到准备进入 EOS操作系统内核执行的指令 (第 755行)755 0000014F FF1517010080 call dword va_ImageEntry计算此条
15、指令的物理地址要复杂一些:偏移地址实际上是相对于节(节 SECTION是NASM汇编中的概念)开始的。由于在 boot.asm 程序中只有一个节,所 以之前计算的结果都是正确的, 但是在 loader.asm 程序中有两个节, 并且此条指 令是在第二个节中。下面引用的代码是 loader.lst 中第一个节的最后一条指令 (第593行) 593 000003C1 C20600 ret 6 因为第一个节中最后一条指令的偏移 为 0 x03c1,并占用了 3个字节(字节码为 C20600),所以可以计算出进入内核执 行的指令所在的物理地址为 0 x1513(0 x1000+0 x03c1+0 x3
16、+0 x14f)。使用添加物理地址断点的调试命令 pb 0 x1513添加一个断点。输入调试命令 c继续执行,到断点处中断。在 Console窗口中显示要执行的下 一条指令(注意,此时的逻辑地址都为虚拟地址): (0) 0 x00001513 0008:0000000080001513 (unk. ctxt): call dword ptr ds:0 x80001117 ; ff1517110080 由于这里使用了函数指针的概念,所以,根据反汇编指令可以确 定内核入口点函数的地址就保存在虚拟地址 0 x8000117处的四个字节中。使用查看虚拟内存的调试命令 x /1wx 0 x8000111
17、7查看内存中保存的 32位函数 入口地址,在 Console 窗口中会输出类似下面的内容: 0 x0000000080001117 : 0 x800* 记录下此块内存中保存的函数地址,后面的实验会验 证内核入口点函数的地址与此地址是一致的。调试内核:. 在OSL ab的 “项目管理器 ”窗口中打开 ke文件夹中的 start.c 文件,此文件中 只定义了一个函数,就是操作系统内核的入口点函数 KiSystemStartup 。. 在 KiSystemStartup 函数中的代码行(第 61行) KiInitializePic();添加一个断点。. 现在可以在 Console 窗口中输入调试命令
18、 c继续调试,在刚刚添加的断点处 中断。. 在start.c 源代码文件中的 KiSystemStartup 函数名上点击鼠标右键,在弹 出的快捷菜单中选择 “添加监视 ”,KiSystemStartup 函数就被添加到了 “监视 ”窗 口中。在 “监视”窗口中可以看到此函数地址为 void (PVOID) 0 x800* 与在虚拟内存 x80001117处保存的函数入口地址相同,说明 的确是由 Loader 程序进入了操作系统内核。. 按F5继续执行EOS操作系统内核, 在Display 窗口中显示 EOS操作系统已经启 动,并且控制台 程序已经开始运行了。EOS启动后的状态和行为1). 在控制台中输入命令 “ver ”后按回车。2). 输出EOS版本后的控制台如图 10-4 所示 使用ver命令查看 EOS的版本号。查看EOS启动后的进程和线程的信息:1). 在控制台中输入命令 “pt ”后按回车。2) . 输出的进程和线程信息如图所示。查看有应用程序运行时进程和线程的信息:1. 在OS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 成本管控责任制度
- 手术器械准备责任制度
- 投诉举报岗位责任制度
- 护理员岗位责任制度
- 招商局首问责任制度
- 探放水岗位责任制度
- 搅拌站安全责任制度范本
- 收费停车场安全责任制度
- 政府办首问责任制制度
- 教学管理岗位责任制度
- 市场营销基础(第6版) 课件
- 2025年多旋翼无人机超视距驾驶员执照参考试题库50题(附答案)
- 财务进出账管理办法
- 基于智慧课堂的小学语文阅读教学研究
- 《数字经济发展与治理》课件全套 Ch1-14 数字经济的概念与内涵 -. 数字平台治理:各国实践与未来展望
- 道岔毕业论文
- 2025年江西省农村(社区)“多员合一岗”工作人员招聘考试历年参考题库含答案详解(5套)
- 2025年广西中考数学真题卷含答案解析
- 船舶危险源 机舱风险源清单
- 阳光保险职级管理办法
- 陆河辅警考试题库2025(有答案)
评论
0/150
提交评论