哈工程操作系统第二个 - 图文

更新时间:2023-10-02 17:17:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

操作系统 实验报告

课程名称 实验项目名称 学号 操作系统实验 操作系统的启动 年级 三 计算机科学姓名 计算机科学与技学生所在学院 术实验 实验室名称地点

课程编号 0906553 专业 与技术 指导教师 初妍

哈尔滨工程大学 计算机科学与技术学院

第二讲 操作系统的启动

一、实验概述

1. 实验名称 操作系统的启动

2. 实验目的

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

?(2)查看EOS启动后的状态和行为,理解操作系统启动后的工作方式。 3. 实验类型(验证、设计) 验证 4. 实验内容 (1)准备实验

(2)调试EOS操作系统的启动过程 二、实验环境

EOS操作系统、Bochs模拟器、Virtual PC虚拟机软件、NASM汇编、BIOS(Basic Input/Output System) 三、实验过程

1.准备实验

(1)启动OS Lab

(2)新建一个EOS Kernel项目

(3)在“项目管理器”窗口中打开boot文件夹中的boot.asm和loader.asm两个汇编文件。

(4)生成项目

(5)生成完成后,使用Windows资源管理器打开项目文件夹中的Debug文件夹。找到boot.asm生成的软盘引导扇区程序boot.bin文件,该文件的大小是512字节。找到由loader.asm生成的loader.bin文件,记录下此文件的大小1566字节,在下面的实验中会用到。找到由其它源文件生成的操作系统内核文件kernel.dll 2.调试EOS操作系统的启动过程 (1)使用Bochs做为远程目标机 (2)调试BIOS程序

在Console窗口中输入调试命令sreg后按回车,CS寄存器的值为0xf000。 输入调试命令r后按回车,显示当前CPU中各个通用寄存器的值

输入调试命令xp/1024b 0x0000,查看开始的1024个字节的物理内存。 输入xp/512b0x7c00,查看软盘引导扇区应该被加载到的内村位置,输出的内存之都是0

(3)调试软盘引导扇区程序

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

验证loader程序被完全加载到了正确的位置

(4)调试加载程序

a.在loader.lst文件中查找到准备进入EOS操作系统内核执行的指令(第755行)

b.计算出进入内核执行的指令所在的物理地址为0x1513(0x1000+0x03c1+0x3+0x14f)

c.使用添加物理地址断点的调试命令pb 0x1513添加一个断点 d.输入调试命令c继续执行,到断点处中断

e.使用查看虚拟内存的调试命令x /1wx 0x80001117查看内存中保存的32位函数入口地址 (5)调试内核

a.在OS Lab的“项目管理器”窗口中打开ke文件夹中的start.c文件,找到操作系统内核的入口点函数KiSystemStartup

b.在KiSystemStartup函数中的代码行(第61行) KiInitializePic(); 添加一个断点

c.在Console窗口中输入调试命令c继续调试,在刚刚添加的断点处中断

d. KiSystemStartup函数就被添加到了“监视”窗口中 e.按F5继续执行EOS操作系统内核 (6) EOS启动后的状态和行为

查看EOS版本号:

在控制台中输入命令“ver”后按回车。 查看EOS启动后的进程和线程的信息:

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

使用pt命令查看进程和线程的信息

查看有应用程序运行时进程和线程的信息: 1.在OS Lab中选择“调试”菜单中的“停止调试”

2.在OS Lab“项目管理器”窗口中双击Floppy.img文件

3.打开配套资源“学生包”,在其中找到本实验对应的文件夹

4.将本实验文件夹中的Hello.exe文件拖动到FloppyImageEditor工具窗口的文

件列表中释放,Hello.exe文件即被添加到软盘镜像文件中

5.在FloppyImageEditor中选择“文件”菜单中的“保存”后关闭FloppyImageEditor 6.按F5启动调试

7.待EOS启动完毕,在EOS控制台中输入命令“hello”后按回车 8.迅速按Ctrl+F2切换到控制台2,并输入命令“pt”后按回车 ",",",",",",",",",

??

??用pt命令查看有应用程序运行时进程和线程的信息

四、实验心得体会

回答问题:

仔细比较图10-5和10-6后,ID 31是应用程序的进程。与系统进程相比,应用程序的进程优先级低。系统进程没有映像名称,应用程序进程又影响名称。

线程ID33是应用程序的主线程。与系统程序线程相比,系统线程优先级为0,并处于运行状态(Running),而应用程序处于阻塞状态(Waiting)。

体会:

进一步熟悉了OS lab的使用,对操作系统启动的全过程都有了更加深入的了解。

实验指令中数字1与小写字母l多次看错,对实验造成了困扰,应该对指令的意义做更深入的了解。

电脑上安装的压缩软件将一些实验用到的文件当作压缩文件打开,影响实验顺利进行。

问题:

1. 根据之前记录的loader.bin文件的大小,自己设计一个查看内存的调试命令,查看内存

中loader程序结束位置的字节码,并与loader.lst文件中的最后指令的字节码比较,验证loader程序被完全加载到了正确的位置。

答:将软盘中的loader.bin文件加载到物理内存的0x1000处,然后跳转到loader程序的第一条指令(物理地址0x1000处的指令)继续执行loader程序。找出由loader.asm生成的loader程序loader.bin文件,记录下此文件的大小1566字节。1566转换成十六进制是61E,加上跳到的物理内存地址0x0000得161E,而我们要访问一条指令占八个字节,故地址应修改为1608。图如第一张图。

2. 实验指导中的P127最下面:仔细比较图10-6和图10-5,尝试说明哪个是应用程序的进

程,它和系统进程有什么区别,哪个是应用程序的主线程,它和系统线程有什么区别。 答:进程列表中得ID为31的进程是应用程序的进程,其优先级为8,包含一个线程,主线

程ID为33,映像名称为a:\\hello.ese。而ID为1的是系统进程,其优先级为24,包含10个线程,其中得ID为2的线程是其主线程,系统进程没有映像名称。

主要区别:应用程序的优先级较低

3. 为什么EOS操作系统从软盘启动时要使用boot.bin和loader.bin两个程序?使用一个可以吗?它们各自的主要功能是什么?如果将loader.bin的功能移动到boot.bin文件中,则boot.bin文件的大小是否仍然能保持小于512字节?

答:在生成项目时boot.bin文件夹中的两个汇编文件boot.asm和loader.asm分别生成了两个二进制文件boot.bin和loader.bin。这两个文件缺一不可,它们会被写入软盘镜像文件。在EOS操作系统启动时,boot.bin用于引导软盘,而loader.bin用于加载程序。如果把loader.bin的功能移动到boot.bin程序中,肯定会增加boot.bin的规模,文件大小也将超过512字节。

4. 软盘引导扇区加载完毕后内存中有两个用户可用的区域,为什么软盘引导扇区程序选择

将loader.bin加载到第一个可用区域的0x1000处呢?这样做有什么好处?这样做会对loader.bin文件的大小有哪些限制。

心得体会:

通过这次实验,锻炼了动手操作的能力,进一步熟悉了软件的应用,对课本的知识加深了理解,对系统的存储、进程、线程等也有了进一步的认识。我想对实验环境的熟悉是很重要的,不懂的地方应该及时虚心同学老师、积极讨论,毕竟一个人的力量是有限的。

本文来源:https://www.bwwdw.com/article/11xd.html

Top