操作系统实验报告-附思考题
下载后可任意编辑 课程设计综合实验报告 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)EOSSDK为应用程序调用系统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 寄存器信息行中的“ s0 xf000”表示 CS 寄存器的值为 0 xf000。 2.2.2 输入调试命令 r 后按回车,显示当前 CPU 中各个通用寄存器的值。其中“ rip0 x000000000000fff0”表示 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 x00000 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