操作系统的启动实验报告

  • 格式:doc
  • 大小:1.49 MB
  • 文档页数:13

下载文档原格式

  / 13
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统

实验报告

哈尔滨工程大学

计算机科学与技术学院

一、实验概述

1. 实验名称

操作系统的启动

2. 实验目的

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

2查看EOS 启动后的状态和行为,理解操作系统启动后的工作方式。 3. 实验类型

验证性实验

4. 实验内容

调试EOS 操作系统的启动过程包括:(1).使用Bochs 做为远程目标机;(2).调试BIOS 程序;(3).调试软盘引导扇区程序;(4).调试加载程序;(5).调试内核;(6).查看EOS 启动后的状态和行为

二、实验环境

EOS 操作系统和配套的IDE 集成开发环境。

三、实验过程

1.设计思路和流程图

图2-1.EOS 操作系统的启动过程流程图

2.算法实现:验证性试验,无算法。

3.需要解决的问题及解答(试验指导)

(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文件的大小有哪些限制。

答:首先用户只用两个可用区域,加载位置非此即彼。第一个可用用户区是低地址区,且空间大小比较小,适合容纳小文件,所以我们选择将占用空间小的loder.bin加载到第一用户区。

优点:由低地址开始,便于检索查找。小文件占用小空间,节约资源。

限制:loader.bin文件必须小于1c00k.

(3).练习使用Bochs单步调试BIOS程序、软盘引导扇区程序和loader程序,加深对操作系统启动过程的理解。

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

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

区别:主线程的优先级别高。存放在物理内存的低端。

4.主要数据结构、实现代码及其说明:验证性实验,无此项目。

5.源程序并附上注释:验证性实验,无此项目。

6.程序运行时的初值和运行结果,实验过程

1. 调试BIOS程序

(1). 在Console窗口中输入调试命令sreg后按回车,显示当前CPU中各个段寄存器的值,如图2-1。其中CS寄存器信息行中的“s=0xf000”表示CS寄存器的值为0xf000.

(2).输入调试命令r后按回车,显示当前CPU中各个通用寄存器的值,如图10-3。其中“rip: 0x00000000:0000fff0”表示IP寄存器的值为0xfff0。

(3). 输入调试命令xp /1024b 0x0000,查看开始的1024个字节的物理内存。在Console中输出的这1K物理内存的值都为0,说明BIOS中断向量表还没有被加载到此处。

(4). 输入调试命令xp /512b 0x7c00,查看软盘引导扇区应该被加载到的内存位置。输出的内存值都为0,说明软盘引导扇区还没有被加载到此处。

2. 调试软盘引导扇区程序

a. 输入调试命令vb 0x0000:0x7c00,这样就在逻辑地址0x0000:0x7c00(相当于物理地址0x7c00)处添加了一个断点。

b. 输入调试命令c继续执行,在0x7c00处的断点中断。中断后会在Console窗口中输出下一个要执行的指令,即软盘引导扇区程序的第一条指令,如下 (0) [0x00007c00] 0000:7c00 (unk. ctxt): jmp .+0x006d (0x00007c6f) ; eb6d

c. 为了方便后面的使用,先在纸上分别记录下此条指令的字节码(eb6d)和此条指令要跳转执行的下一条指令的地址(括号中的0x00007c6f)。

d. 输入调试命令sreg验证CS寄存器(0x0000)的值。

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

f. 由于BIOS程序此时已经执行完毕,输入调试命令xp /1024b 0x0000验证此时BIOS中断向量表已经被载入。

g. 输入调试命令xp /512b 0x7c00显示软盘引导扇区程序的所有字节码。观察此

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

h. 输入调试命令xp /512b 0x0600验证图3-2中第一个用户可用区域是空白的。

i. 输入调试命令xp /512b 0x7e00验证图3-2中第二个用户可用区域是空白的。

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