操作系统 操作系统的启动.docx

上传人:b****6 文档编号:8220092 上传时间:2023-01-29 格式:DOCX 页数:15 大小:470.21KB
下载 相关 举报
操作系统 操作系统的启动.docx_第1页
第1页 / 共15页
操作系统 操作系统的启动.docx_第2页
第2页 / 共15页
操作系统 操作系统的启动.docx_第3页
第3页 / 共15页
操作系统 操作系统的启动.docx_第4页
第4页 / 共15页
操作系统 操作系统的启动.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

操作系统 操作系统的启动.docx

《操作系统 操作系统的启动.docx》由会员分享,可在线阅读,更多相关《操作系统 操作系统的启动.docx(15页珍藏版)》请在冰豆网上搜索。

操作系统 操作系统的启动.docx

操作系统操作系统的启动

操作系统

实验报告

课程名称

操作系统实验

课程编号

0920311

实验项目名称

操作系统的启动

学号

2011201423

年级

2011级

姓名

王云超

专业

软件工程

学生所在学院

软件学院

指导教师

王红滨

实验室名称地点

软件工程实验室21B282

哈尔滨工程大学

软件学院

第二讲操作系统的启动

一、实验概述

1.实验名称

操作系统的启动

2.实验目的

跟踪调试EOS在PC机上从加电复位到成功启动的全过程,了解操作系统的启动过程。

查看EOS启动后的状态和行为,理解操作系统启动后的工作方式。

3.实验类型(验证、设计)

验证

4.实验内容

4.1准备实验

4.2调试EOS操作系统的启动过程

4.2.1使用Bochs做为远程目标机

4.2.2调试BIOS程序

4.2.3调试软盘引导扇区程序

4.2.4调试加载程序

4.2.5调试内核

4.2.6EOS启动后的状态和行为

二、实验环境

实验使用的操作系统:

Wingdowsxp

实验工具:

Oslab

3、实验过程

实验过程:

1.查看CPU在没有执行任何指令之前主要寄存器中的数据,以及内存中的数据:

1.1启动调试后在Console窗口中输入调试命令sreg后按回车,显示当前CPU中各个段寄存器的值,如图1.1。

图1.1

1.2输入调试命令r后按回车,显示当前CPU中各个通用寄存器的值,如图1.2

图1.2

1.3.输入调试命令xp/1024b0x0000,查看开始的1024个字节的物理内存。

如图1.3

图1.3

在Console中输出的这1K物理内存的值都为0,说明BIOS中断向量表还没有被加载到此处。

如图1.3

1.4.输入调试命令xp/512b0x7c00,查看软盘引导扇区应该被加载到的内存位置。

如图1.4

图1.4

输出的内存值都为0,说明软盘引导扇区还没有被加载到此处。

可以验证BIOS第一条指令所在逻辑地址中的段地址和CS寄存器值是一致的,偏移地址和IP寄存器的值是一致的。

由于内存还没有被使用,所以其中的值都为0。

2.BIOS在执行完自检和初始化工作后,会将软盘引导扇区加载到物理地址0x7c00-0x7dff位置,并从0x7c00处的指令开始执行引导程序,所以接下来练习从0x7c00处调试软盘引导扇区程序:

2.1.输入调试命令vb0x0000:

0x7c00,这样就在逻辑地址0x0000:

0x7c00(相当于物理地址0x7c00)处添加了一个断点。

输入调试命令c继续执行,在0x7c00处的断点中断。

中断后会在Console窗口中输出下一个要执行的指令,即软盘引导扇区程序的第一条指令。

输入调试命令sreg验证CS寄存器(0x0000)的值,如图2.1

图2.1

2.2输入调试命令r验证IP寄存器(0x7c00)的值。

图2.2

2.3输入调试命令xp/512b0x7c00显示软盘引导扇区程序的所有字节码。

图2.3

观察此块内存最开始的两个字节分别为0xeb和0x6d,这和引导程序第一条指令的字节码(eb6d)是相同的。

2.4输入调试命令xp/512b0x0600

由输出结果可验证第一个用户可用区域是空白的。

2.5输入调试命令xp/512b0x7e00

图2.5

由图可验证第二个用户可用区域是空白的。

2.6自己设计两个查看内存的调试命令,分别验证这两个用户可用区域的高地址端也是空白的。

图2.6.1

图2.6.2

由图2.6.2和图2.6.2可知,两个用户地址可用区域的高地址端也是空白的

2.7输入调试命令xp/512b0xa0000。

图2.7

由此图可验证上位内存已经被系统占用

2.8自己设计一个查看内存的调试命令,验证上位内存的高地址端已经被系统占用。

图2.8

由此图可验证上位内存的高地址端已经被系统占用。

3.软盘引导扇区程序的主要任务就是将软盘中的loader.bin文件加载到物理内存的0x1000处,然后跳转到loader程序的第一条指令(物理地址0x1000处的指令)继续执行loader程序。

按照下面的步骤调试此过程:

3.1输入调试命令vb0x0000:

0x7d81添加一个断点。

输入调试命令c继续执行,到断点处中断。

输入调试命令xp/8b0x1000查看内存0x1000处的数据,验证此块内存的前三个字节和loader.lst文件中的第一条指令的字节码是相同的。

图3.1.1

图3.1.2

由图3.1.1中的前三个字节:

0x19,0x18,0x01可验证与图3.1.2中的loader.lst文件中的第一条指令(E91801)的字节码是相同的

3.2根据之前记录的loader.bin文件的大小,自己设计一个查看内存的调试命令,查看内存中loader程序结束位置的字节码,并与loader.lst文件中最后指令的字节码比较,验证loader程序被完全加载到了正确的位置。

由于loader.bin的大小为1566字节,转为十六进制即为61E,而loader.bin的开始地址为0x1000,所以loader.bin的最后地址为0x161E,减去八位,即为0x1616,查看loader.lst最后八位

图3.2.1

图3.2.2

由图3.2.1可知最后的几位0x93,0xff,0xff,0xff,0xc9,0xc2,0x04,0x00,可验证与图3.2.2中最后的指令:

E993FFFFFF,C9,C20400相同

4.Loader程序的主要任务是将操作系统内核(kernel.dll文件)加载到内存中,然后让CPU进入保护模式并且启用分页机制,最后进入操作系统内核开始执行(跳转到kernel.dll的入口点执行)。

按照下面的步骤调试上述过程:

4.1使用添加物理地址断点的调试命令pb0x1513添加一个断点。

输入调试命令c继续执行,到断点处中断

图4.1

4.2使用查看虚拟内存的调试命令x/1wx0x80001117查看内存中保存的32位函数入口地址,在Console窗口中会输出类似下面的内容:

图4.2

4.3在start.c源代码文件中的KiSystemStartup函数名上点击鼠标右键,在弹出的快捷菜单中选择“添加监视”,KiSystemStartup函数就被添加到了“监视”窗口中。

在“监视”窗口中可以看到此函数地址为

图4.3

与在虚拟内存x80001117处保存的函数入口地址相同,说明的确是由Loader程序进入了操作系统内核。

5.按F5继续执行EOS操作系统内核,在Display窗口中显示EOS操作系统已经启动,并且控制台程序已经开始运行了。

查看EOS的版本号:

5.1.在控制台中输入命令“ver”后按回车。

输出EOS版本后的控制台如图所示。

图5.1

5.2查看EOS启动后的进程和线程的信息:

在控制台中输入命令“pt”后按回车。

输出的进程和线程信息如图10-5所示。

图5.2

 

6.

6.1在OSLab中选择“调试”菜单中的“停止调试”,结束之前的调试。

在OSLab“项目管理器”窗口中双击Floppy.img文件,使用FloppyImageEditor工具打开此软盘镜像文件。

将本实验文件夹中的Hello.exe文件拖动到FloppyImageEditor工具窗口的文件列表中释放,Hello.exe文件即被添加到软盘镜像文件中。

Hello.exe一个EOS应用程序,其源代码可以参见本实验文件夹中的Hello.c源文件。

在FloppyImageEditor中选择“文件”菜单中的“保存”后关闭FloppyImageEditor。

图6.1

6.2待EOS启动完毕,在EOS控制台中输入命令“hello”后按回车。

此时Hello.exe应用程序就开始执行。

迅速按Ctrl+F2切换到控制台2,并输入命令“pt”后按回车。

输出的进程和线程信息如图10-6所示。

图6.2.1

7.思考与练习

7.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字节。

7.2软盘引导扇区加载完毕后内存中有两个用户可用的区域,为什么软盘引导扇区程序选择将loader.bin加载到第一个可用区域的0x1000处呢?

这样做有什么好处?

这样做会对loader.bin文件的大小有哪些限制。

答:

首先用户只用两个可用区域,加载位置非此即彼。

第一个可用用户区是低地址区,且空间大小比较小,适合容纳小文件,所以我们选择将占用空间小的loder.bin加载到第一用户区。

优点:

由低地址开始,便于检索查找。

小文件占用小空间,节约资源。

限制:

loader.bin文件必须小于1c00k.

7.3仔细比较实验指导10-5图(本实验中的图5.2)和图10-6(本实验中的图6.2.1),尝试说明哪个是应用程序的进程,它和系统进程有什么区别,哪个是应用程序的主线程,它和系统线程有什么区别。

答:

图6.2.1是应用程序的进程,在进程列表中只有一个ID为1的系统进程,其优先级24,包含有10个线程,其中的ID为2的线程是该进程的主线程,系统进程没有映像名称。

在线程列表中有10个线程,它们都是系统线程。

区别:

主线程的优先级别高。

存放在物理内存的低端。

四、实验体会

通过本次试验,我对计算机存储结构有了更深的认识,了解操作系统的启动过程。

理解操作系统启动后的工作方式。

同时也提高了写作报告的能力。

能更加熟练的运用实验环境了。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 其它语言学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1