操作系统实验报告-附思考题
下载后可任意编辑 课程设计(综合实验)报告 ( 2024 -- 2024 年度第 1 学期) 名 称: 操作系统综合实验 题 目: oslab综合实验 院 系: 计算机系 班 级: 学 号: 学生姓名: 指导老师: 设计周数: 分散进行 成 绩: 日期: 2024 年 10 月 29 日 下载后可任意编辑 实验1 实验环境的使用 一、 综合实验的目的与要求 l 熟悉操作系统集成实验环境OS Lab 的基本使用方法。 l 练习编译、调试EOS 操作系统内核以及EOS 应用程序。 二、实验正文 1.启动 OS Lab 2.1 执行项目 Windows 控制台窗口内容显示 2.2 调试项目 2.2.1 使用断点中断执行 2.2.2 单步调试 2.2.2 .3单步调试 结果显示: 练习使用“逐语句”功能和“跳出”功能 2.2.3 查看变量的值 快速监视 添加监视 2.2.4 调用堆栈 调用堆栈显示内容 进入Func 函数 双击 main 函数所在的行表示此函数是当前调用堆栈中的活动函数。 3 新建EOS 内核项目 4 EOS 应用程序项目的生成和调试 4.1 新建EOS 应用程序项目 4.2 调试项目 添加断点后单步调试结果显示 4.3 查看软盘镜像文件中的内容 4.4修改EOS 应用程序项目名称 5 退出OS Lab 6 保存EOS 内核项目 三、综合实验总结或结论 思考与练习: 1. 在哪些情况下应该使用“逐过程”调试,在哪些情况下应该使用“逐语句”调试。 答:逐语句为每执行一行语句,假如碰到函数调用它就会进入到函数里面。而逐过程碰到函数时不进入函数,把函数调用当成一条语句去执行。 2. 生成EOS SDK 文件夹的目的和作用。明白文件夹的组织结构和各个文件的来源和作用。查看EOS 应用程序包含了SDK 文件夹中的哪些头文件,是如何包含的? (1)EOS SDK为应用程序调用系统API提供服务,可作为用户编程中使用的工具包集合。 (2)其主要包括INC头文件LIB文件夹、导入库文件和BIN文件夹、动态链接库、可执行程序、二进制文件。 (3)包含的头文件有:eos.h负责导出API函数,eosdef.h声明负责导出函数类型的定义,error.h负责导出错误码。 (4)EOS应用程序在项目的头文件中只是包含了eos.h文件,在eos.h文件中又包含了eosdef.h和error.h文件。 实验 2 操作系统的启动 一、 综合实验的目的与要求 跟踪调试 EOS 在 PC 机上从加电复位到成功启动全过程,了解操作系统的启动过程。 查看 EOS 启动后的状态和行为,理解操作系统启动后的工作方式。 二、实验正文 1. 准备实验 新建一个 EOS Kernel 项目。打开boot.asm 和loader.asm 两个汇编文件。生成项目。找到loader.bin 文件,记录下此文件的大小 1566 字节。 2 调试 EOS 操作系统的启动过程 2.1 使用 Bochs 做为远程目标机 找到“远程目标机”属性,将此属性值修改为“BochsDebug” 2.2 调试 BIOS 程序 2.2.1在 Console 窗口中输入调试命令 sreg 后按回车,其中 CS 寄存器信息行中的“ s=0 xf000”表示 CS 寄存器的值为 0 xf000。 2.2.2 输入调试命令 r 后按回车,显示当前 CPU 中各个通用寄存器的值。其中“ rip:0 x00000000:0000fff0”表示 IP 寄存器的值为 0 xfff0。 2.2.3输入调试命令 xp /1024b 0 x0000,查看开始的 1024 个字节的物理内存。在 Console 中输出的这1K 物理内存的值都为 0,说明 BIOS 中断向量表还没有被加载到此处。 2.2.4输入调试命令 xp /512b 0 x7c00,查看软盘引导扇区应该被加载到的内存位置。输出的内存值都为 0,说明软盘引导扇区还没有被加载到此处。 可以验证 BIOS 第一条指令所在逻辑地址中的段地址和 CS 寄存器值是一致的,偏移地址和 IP 寄存器值是一致的。由于内存还没有被使用,所以其中的值都为 0。 2.3 调试软盘引导扇区程序 2.3.1. 输入调试命令 vb 0 x0000:0 x7c00,添加断点 2.3.2. 输入调试命令 c 继续执行 2.3.3. 输入调试命令 sreg 验证 CS 寄存器( 0 x0000)的值。 2.3.4. 输入调试命令 r 验证 IP 寄存器( 0 x7c00)的值。 2.3.5输入调试命令 xp /1024b 0 x0000 验证此时 BIOS 中断向量表已经被载入。 2.3.6.输入调试命令 xp /512b 0 x7c00 显示软盘引导扇区程序的所有字节码。 2.3.7输入调试命令 xp /512b 0 x0600 验证图 3-2 中第一个用户可用区域是空白的。 2.3.8输入调试命令 xp /512b 0 x7e00 验证图 3-2 中第二个用户可用区域是空白的。 2.3.9 自己设计两个查看内存的调试命令,验证这两个用户可用区域的高地址端是空白的。 (1) xp /512b 0 x7f00 (2) xp /512b0 x0700 2.3.10输入调试命令 xp /512b 0 xa0000 验证图 3-2 中上位内存已经被系统占用。 2.3.11自己设计一个查看内存的调试命令,验证上位内存的高地址端已经被系统占用。 xp /512b 0 xb0000 2.3.12 输入调试命令 xp /8b 0 x1000 查看内存 0 x1000 处的数据,验证此块内存的前三个字节和 loader.lst文件中的第一条指令的字节码是相同的。 2.3.13根据之前记录的 loader.bin 文件的大小,自己设计一个查看内存的调试命令 loader.bin文件的大小为1566个字节,转换为十六进制的61E,所以程序最后八个字节在物理内存的0 x1616到0 x161D的位置,所以调试命令为xp/8b 0 x1616。经检验, loader.bin程序结束位置字节码与反汇编命令相同。 注:查看loader.bin文件的大小应在“属性”对话框中看。 2.4 调试加载程序 使用查看虚拟内存的调试命令 x /1wx 0 x80001