版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验报告
课程名称操作系统实验课程编号0920311
实验工程名称操作系统的启动
学号年级2011级
姓名专业软件工程
学生所在学院软件学院指导教师王红滨
实验室名称地点软件工程实验室21B282
哈尔滨工程大学
软件学院
第二讲实验系统的启动
一、实验概述
1.实验名称
实验系统的启动
2.实验目的
跟踪调试EOS在PC机上从加电复位到成功启动的全过程,了解操作系统的启动过
程。
查看EOS启动后的状态和行为,理解操作系统启动后的工作方式。
3.实验类型(验证、设计)
验证
4.实验内容
调试EOS操作系统的启动过程包括:(1).使用Bochs做为远程目标机;(2).调试BIOS
程序;(3).调试软盘引导扇区程序;14).调试加载程序;15).调试内核;16).查看EOS
启动后的状态和行为
二、实验环境
操作系统:windowsxp
编译环境:OSLab
三、实验过程
1.设计思路和流程图
|CPU从默认位置执行BIOS的开机自检和初'始化程序,
软盘引导扇区中的Boot程序开始执行,将软盘根目录中
的Icc/Iql壬■岸在他I力II非c空llCv1<¥丫、北利1拧
Loader程序开始执行,先加载Kernel.dll,然后启动保
Kemel.dll开始执行,初始化EOS内核,EOS启动完毕
2.需要解4刖1叼越以解令
(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的主要功能是引导软盘;
loader,bin的主要功能是加载程序。如果把loader,bin功能移动到boot,bin程序中,必然
导致程序规模扩大,可能使其大于512字节。
(2).软盘引导扇区加载完毕后内存中有两个用户可用的区域,为什么软盘引导扇区程序
选择将loader.bin加载到第一个可用区域的0x1000处呢?这样做有什么好处?这样做会对
loader.bin文件的大小有哪些限制。
答:首先用户只用两个可用区域,加载位置非此即彼。第一个可用用户区是低地址区,
且空间大小比拟小,适合容纳小文件,所以我们选择将占用空间小的hdQr.bin加载到第一
用户区。
优点:由低地址开始,便于检索查找。小文件占用小空间,节约资源。
限制:loader,bin文件必须小于IcOOk.
(3).练习使用Bochs单步调试BIOS程序、软盘引导扇区程序和loader程序,加深对操作
系统启动过程的理解。
(4).仔细比拟实验指导10-5图和图10-6,尝试说明哪个是应用程序的进程,它和系统进
程有什么区别,哪个是应用程序的主线程,它和系统线程有什么区别。
答:图10-6是应用程序的进程,在进程列表中只有一个ID为1的系统进程,其优先级为
24,包含有10个线程,其中的ID为2的线程是该进程的主线程,系统进程没有映像名称。在
线程列表中有1()个线程,它们都是系统线程。
区别:主线程的优先级别高。存放在物理内存的低端。
3.程序运行时的初值和运行结果
1.调试BIOS程序
(1).在Console窗口中输入调试命令sreg后按回车,显示当前CPU中各个段存放器的
值。其中CS存放器信息行中的“s二OxfOOO"表示CS存放器的值为OxfOOO.
(2).输入调试命令r后按回车,显示当前CPU中各个通用存放器的值。其中“rip:
0x00000000:0000£££0"表示IP存放器的值为OxfffO。
(3).输入调试命令xp/1024b0x0000,查看开始的1024个字节的物理内存。在Console
中输出的这1K物理内存的值都为0,说明BIOS中断向量表还没有被加载到此处。
e.输入调试命令r验证IP存放器(0x7c00)的值。
f.由于BIOS程序此时已经执行完毕,输入调试命令xp/1024b0x0000验证此时BIOS中
断向量表已经被载入。
g-输入调试命令xp/512b0x7c00显示软盘引导扇区程序的所有字节码。观察此块内存最
开始的两个字节分别为Oxeb和0x6d,这和引导程序第一条指令的字节码(eb6d)是相同的。
clBochsfor■indo,s-Consolelrlglxl
<bochs:7>xp/512b0x06003
[bochs]:
0x0000000000000600<bogus+0>:0X000X000X000X000X00
0x000x000x00
0x0000000000000608<bogus+8>:0X000x000X000X000x00
0X000X000X00
0x0000000000000610<bogus+16>:0X000x000X000X000X00
0X000X000X00
0x0000000000000618<bogus+24>:0X000X000X000X000X00
0x000x000x00
0x0000000000000620<bogus+32>:0X000x000X000X000X00
0X000X000X00
0x0000000000000628<bogus+40>:0X000X000X000X000X00
0X000X000X00
0x0000000000000630<bogus+48>:0X000X000X000X000X00
0x000x000x00
0x0000000000000638〈bogus*56〉:0X000x000X000X000X00
0X000X000X00
0x0000000000000640<bogus+64>:0X000X000X000X000X00
0X000X000X00
0x0000000000000648<bogus+72>:0X000X000X000X000X00
0X000X000X00
0x0000000000000650<bogus+80>:0X000X000X000X000X00
0X000X000X00
h.88>:▼目而入调
试命令xp/512b0x0600验记图3-2中第一个用户可用区域是空白的。
i.输入调试命令xp/512bOx7eOO验证图3-2中第二个用户可用区域是空白的。
j.自己设计两个杏看内存的调试命令,分别验证这两个用户可用区域的高地址端也是空白
的。
k.输入调试命令xp/512bDxaOOOO验证图3-2中上位内存已经被系统占用。
1.自己设计一个查看内存的调试命令,验证上位内存的高地址端已经被系统占用。
查看boot.lst文件
(1).在“工程管理器〃窗口中,右键点击“boot”文件夹中的boot,asm文件。
(2).在弹出的快捷菜单中选择“翻开生成的列表文件〃,在源代码编辑器中就会翻开
文件boot.1st。
(3).将boot.1st文件和boot,asm文件比照可以发现,此文件包含了boot.asir文件中所
有的汇编代码,同时在代码的左侧又添加了更多的信息。
(4).在boot.1st中查找到软盘引导扇区程序第一条指令所在的行(第73行)73
00000000EB6DjmpshortStart此行包含的信息有:•73是行号。
•00000000是此条指令相对于程序开始位置的偏移(第一条指令应该为0)。
•EB6D是此条指令的字节码,和之前记录下来的指令字节码是一致的。
软盘引导扇区程序的主要任务就是将软盘中的loader,bin文件加载到物理内存的DxlOOO
处,然后跳转到loader程序的第一条指令(物理地址Ox1000处的指令)继续执行loader程
序。按照下面的步骤调试此过程:
(1).在boot.1st文件中查找到加载完毕loader.bin文件后要跳转到loader程序中执
行的指令(第278行)27800000181EA00100000jmp0:LOADERORG根据此指令相对于程
序开始(0x7C00)的偏移(0x0181)可以得到此指令的逻辑地址为0x0000:7D81。
(2).输入调试命令vb0x0000:0x7d81添加一个断点。
(3).输入调试命令c继续执行,到断点处中断。在Console窗口中显示(0)
[0x00007d81]0000:7d81(unk.ctxt):jmpfar0000:1000;eaOO100000此条指令会跳
转到物理内存0x1000处(即“ader程序的第一条指令)继续执行。
(4).按照翻开boot.1st文件的方法翻开loader.1st文件,并在此文件中查找到loader
程序的第一条指令(第33行)3300000000E91801jmpStart
(5).输入调试命令xp/8b0x1000查看内存OxlOOD处的数据,验证此块内存的前三个
字节和loader.1st文件中的第一条指令的字节码是相同的。
(6).根据之前记录的loader.bin文件的大小,自己设计一个查看内存的调试命令,查看
内存中loader程序结束位置的字节码,并与loader.lst文件中最后指令的字节码比拟,验证
loader程序被完全加载到了正确的位置。
调试加载程序
Loader程序的主要任务是将操作系统内核[kcrncl.dll文件)加载到内存中,然后让CPU
进入保护模式并且启用分页机制,最后进入操作系统内核开始执行(跳转到kernel,dll的
入口点执行)。按照下面的步骤调试上述过程:
(1).在loader.1st文件中杳找到准备进入EOS操作系统内核执行的指令(第755行)
7550000014FFF15[17010080]calldword[va_ImageEntry]
(2).计算此条指令的物理地址要复杂一些:偏移地址实际上是相对于节(节SECTION
是NASM汇编中的概念)开始的。由于在boot,asm程序中只有一个节,所以之前计算的结果
都是正确的,但是在loader.asm程序中有两个节,并且此条指令是在第二个节中。下面引
用的代码是loader.1st中第一个节的最后一条指令(第593行)593000003C1C20600ret
6因为第一个节中最后一条指令的偏移为0x03cl,并占用了3个字节(字节码为C20600),
所以可以计算出进入内核执行的指令所在的物理地址为0x1513
(0xl000+0x03cl+0x3+0xl4f)。
(3).使用添加物理地址断点的调试命令pb()x1513添加一个断点。
(4).输入调试命令c继续执行,到断点处中断。在Console窗口中显示要执行的下一条
指令(注意,此时的逻辑地址都为虚拟地址):(0)[0x00001513]0008:0000000080001513
(unk.ctxt):calldwordptrds:0x80001117;ffl517110080由于这里使用了函数指针
的概念,所以,根据反汇编指令可以确定内核入口点函数的地址就保存在虚拟地址
0x8000117处的四个字节中。
(5).使用查看虚拟内存的调试命令x/Iwx0x800Dl117查看内存中保存的32位函数入
口地址,在Console窗口中会输出类似下面的内容:0x0000000080001117<bogus+0>:
0x800*****记录下此块内存中保存的函数地址,后面的实验会验证内核入口点函数的地址
与此地址是一致的。
调试内核:
(1).在OSLab的“工程管理器〃窗口中翻开ke文件夹中的start,c文件,此文件中只定
义了一个函数,就是操作系统内核的入口点函数KiSystemStartup。
(2).在KiSystemStartup函数中的代码行(第61行)KilnitializePic();添加一个
断点。
(3).现在可以在Console窗口中输入调试命令c继续调试,在刚刚添加的断点处中断。
(4).在start,c源代码文件中的KiSystemStartup函数名上点击鼠标右键,在弹出的快
捷菜单中选择“添加监视〃,KiSystemStartup函数就被添加到了“监视〃窗口中。在“监视〃
窗口中可以看到此函数地址为{void(PVOID)}0x800*****<KiSystemStartup〉与在虚拟
内存X80001117处保存的函数入口地址相同,说明确实是由Loader程序进入了操作系统内
核。
(5).按F5继续执行EOS操作系统内核,在Display窗口中显示EOS操作系统已经启动,
并且控制台
程序已经开始运行了。
EDS启动后的状态和行为
(1).在控制台中输入命令"ver〃后按回车。
(2).输出EOS版本后的捽制台。
查看EOS启动后的进程和线程的信息:
(1).在控制台中输入命令〃pt〃后按回车。
(2).输出的进程和线程信息如下图。
查看有应用程序运行时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年全国职业病防治知识竞赛考试试题及答案
- 遥感探测无人机操作规程
- 广东省佛山市南海区、三水区2023-2024学年七年级上学期期末英语试题(含答案)
- 慢阻肺患者血氧饱和度实时监测与干预策略
- 货物提货方式合同协议
- 2026年上海安全知识竞赛考试试题及答案解析
- 旅游目的地开发合同协议
- 2026年单位综合治理工作总结(3篇)
- 室内环境检测服务协议
- 每日防火巡查检查制度
- 车厢余煤清扫协议书
- 拆除油罐协议书
- 患者心理护理要点解析
- DB13∕T 6060-2025“一河(湖)一策”方案编制技术导则
- 中国自有品牌发展研究报告2025-2026
- 2024-2025学年北京朝阳区九年级初三(上)期末历史试卷(含答案)
- GB/T 5758-2023离子交换树脂粒度、有效粒径和均一系数的测定方法
- 防雷装置维护保养制度
- 中医治疗“膏淋”医案67例
- 黄金冶炼行业三废处理综述
- 统编版高中语文选择性必修上册 在民族复兴的历史丰碑上-2020中国抗疫记 教学课件
评论
0/150
提交评论