操作系统实验报告 附思考题解读.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《操作系统实验报告 附思考题解读.pdf》由会员分享,可在线阅读,更多相关《操作系统实验报告 附思考题解读.pdf(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、课程设计课程设计( (综合实验综合实验) )报告报告( 2015 - 2016 年度第 1 学期)名称:题目:院系:班级:学号:学生姓名:指导教师:设计周数:成绩:日期:操作系统综合实验oslab 综合实验计算机系分散进行2015 年10 月 29 日实验实验 1 1 实验环境的使用实验环境的使用一、一、 综合实验的目的与要求综合实验的目的与要求熟悉操作系统集成实验环境OS Lab 的基本使用方法。练习编译、调试 EOS 操作系统内核以及 EOS 应用程序。二、实验正文二、实验正文1.启动 OS Lab2.1 执行项目 Windows 控制台窗口内容显示2.2 调试项目2.2.1 使用断点中断
2、执行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 Lab6 保存 EOS 内核项目三、综合实验总结或结论三、综合实验总结或结论思考与练习:1. 在哪些情况下应该使用“
3、逐过程”调试,在哪些情况下应该使用“逐语句”调试。1答:逐语句为每执行一行语句,如果碰到函数调用它就会进入到函数里面。而逐过程碰到答:逐语句为每执行一行语句,如果碰到函数调用它就会进入到函数里面。而逐过程碰到函数时不进入函数,把函数调用当成一条语句去执行。函数时不进入函数,把函数调用当成一条语句去执行。2.生成 EOS SDK 文件夹的目的和作用。明白文件夹的组织结构和各个文件的来源和作用。查看 EOS 应用程序包含了 SDK 文件夹中的哪些头文件,是如何包含的?(1 1)EOSEOSSDKSDK 为应用程序调用系统为应用程序调用系统 APIAPI 提供服务,可作为用户编程中使用的工具包集合。
4、提供服务,可作为用户编程中使用的工具包集合。(2 2)其主要包括)其主要包括 INCINC 头文件头文件 LIBLIB 文件夹、导入库文件和文件夹、导入库文件和 BINBIN 文件夹、动态链接库、可执行文件夹、动态链接库、可执行程序、二进制文件。程序、二进制文件。(3 3)包含的头文件有)包含的头文件有:eos.h:eos.h 负责导出负责导出 APIAPI 函数函数,eosdef.h,eosdef.h 声明负责导出函数类型的定声明负责导出函数类型的定义义,error.h,error.h 负责导出错误码。负责导出错误码。(4 4)EOSEOS 应用程序在项目的头文件中只是包含了应用程序在项目的
5、头文件中只是包含了 eos.heos.h 文件,在文件,在 eos.heos.h 文件中又包含了文件中又包含了eosdef.heosdef.h 和和 error.herror.h 文件。文件。实验实验 2 2 操作系统的启动操作系统的启动一、一、 综合实验的目的与要求综合实验的目的与要求跟踪调试 EOS 在 PC 机上从加电复位到成功启动全过程,了解操作系统的启动过程。查看 EOS 启动后的状态和行为,理解操作系统启动后的工作方式。二、实验正文二、实验正文1. 准备实验新建一个 EOS Kernel 项目。打开 boot.asm 和 loader.asm 两个汇编文件。生成项目。找到 load
6、er.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
7、 /1024b 0 x0000,查看开始的 1024 个字节的物理内存。在 Console中输出的这 1K 物理内存的值都为 0,说明 BIOS 中断向量表还没有被加载到此处。2.2.4 输入调试命令 xp /512b 0 x7c00 ,查看软盘引导扇区应该被加载到的内存位置。输出的内存值都为 0,说明软盘引导扇区还没有被加载到此处。2可以验证可以验证 BIOS BIOS 第一条指令所在逻辑地址中的段地址和第一条指令所在逻辑地址中的段地址和 CS CS 寄存器值是一致的,偏移地址寄存器值是一致的,偏移地址和和 IP IP 寄存器值是一致的。由于内存还没有被使用,所以其中的值都为寄存器值是一致的
8、。由于内存还没有被使用,所以其中的值都为 0 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.2.3.6.输入调试命令 xp /512b 0 x7c00 显示软盘引导扇区程序的所有字节码。32.3.7 输入调试命令 xp /51
9、2b 0 x0600 验证图 3-2 中第一个用户可用区域是空白的。2.3.82.3.8 输入调试命令 xp /512b 0 x7e00 验证图 3-2 中第二个用户可用区域是空白的。2.3.92.3.9 自己设计两个查看内存的调试命令,验证这两个用户可用区域的高地址端是空白的。(1) xp /512b 0 x7f00(1) xp /512b 0 x7f00(2) xp /512b0 x0700(2) xp /512b0 x07002.3.10 输入调试命令 xp /512b 0 xa0000 验证图 3-2 中上位内存已经被系统占用。42.3.11 自己设计一个查看内存的调试命令,验证上位内
10、存的高地址端已经被系统占用。xp /512b 0 xb0000 xp /512b 0 xb00002.3.122.3.12 输入调试命令 xp /8b 0 x1000 查看内存 0 x1000 处的数据,验证此块内存的前三个字节和 loader.lst 文件中的第一条指令的字节码是相同的。2.3.132.3.13 根据之前记录的 loader.bin 文件的大小,自己设计一个查看内存的调试命令loader.binloader.bin 文件的大小为文件的大小为 15661566 个字节,转换为十六进制的个字节,转换为十六进制的61E61E,所以程序最后八个字节在,所以程序最后八个字节在物理内存的
11、物理内存的 0 x16160 x1616 到到 0 x161D0 x161D 的位置,的位置, 所以调试命令为所以调试命令为 xp/8bxp/8b 0 x16160 x1616。 经检验,经检验, loader.bin loader.bin程序结束位置字节码与反汇编命令相同。程序结束位置字节码与反汇编命令相同。5注:查看注:查看 loader.binloader.bin 文件的大小应在“属性”对话框中看。文件的大小应在“属性”对话框中看。2.4 调试加载程序使用查看虚拟内存的调试命令 x /1wx 0 x80001117 查看内存中保存的 32 位函数入口地址,在 Console 窗口中会输出
12、:0 x0000000080001117 : 0 x800*2.5 调试内核在“监视”窗口中可以看到KiSystemStartup 函数地址为void (PVOID) 0 x800* KiSystemStartup2.6 EOS 启动后的状态和行为三、综合实验总结或结论三、综合实验总结或结论1. 为什么 EOS 操作系统从软盘启动时要使用 boot.bin 和 loader.bin 两个程序?使用一个可以吗? 它们各自的主要功能是什么? 如果将 loader.bin 的功能移动到 boot.bin文件中,则 boot.bin 文件的大小是否仍然能保持小于 512 字节?答:在答:在 IDEID
13、E 环境启动执行环境启动执行 EOSEOS 操作系统时,会将操作系统时,会将 boot.binboot.bin,loader.binloader.bin,kernal.dllkernal.dll 三个三个二进制写入软件镜像文件中二进制写入软件镜像文件中, ,然后让虚拟机来执行软盘中的然后让虚拟机来执行软盘中的 EOSEOS 操作系统操作系统, ,使用其中一个是使用其中一个是不能运行的。不能运行的。2.为什么软盘引导扇区程序选择将 loader.bin 加载到第一个可用区域的 0 x1000 处呢?这样做有什么好处?这样做会对 loader.bin 文件的大小有哪些限制。答:用户只用两个可用区域
14、,加载位置非此即彼。第一个可用用户区是低地址区,且空间答:用户只用两个可用区域,加载位置非此即彼。第一个可用用户区是低地址区,且空间大小比较小,适合容纳小文件,所以我们选择将占用空大小比较小,适合容纳小文件,所以我们选择将占用空 loder.binloder.bin 加载到第一用户区。优加载到第一用户区。优点点: :低地址开始,低地址开始,便于搜索查找小文件占用小空间,便于搜索查找小文件占用小空间,节约资源。节约资源。限制限制:loder.bin:loder.bin 文件必须小文件必须小于于 1c00k 1c00k。实验实验 3 3 进程的创建进程的创建一、一、 综合实验的目的与要求综合实验的
15、目的与要求练习使用 EOS API 函数 CreateProcess 创建一个进程,掌握创建进程的方法,理解进程和程序的区别。调试跟踪 CreateProcess 函数的执行过程,了解进程的创建过程,理解进程是资源分配的单位。二、实验正文二、实验正文1 准备实验2 练习使用控制台命令创建 EOS 应用程序的进程6Hello.exe 应用程序输出结果3 练习通过编程的方式让应用程序创建另一个应用程序的进程可知子进程结束后,父进程继续执行可知子进程结束后,父进程继续执行4 调试 CreateProcess 函数在“反汇编”窗口的左侧显示的虚拟地址中看到所有指令的虚拟地址都大于 0 x8000000
16、0,说明内核( kernel.dll) 处于高 2G 的虚拟地址空间中。查看 main 函数的指令所在的虚拟地址都是小于 0 x80000000, 说明应用程序 ( eosapp.exe)处于低 2G 的虚拟地址空间中。5 调试 PsCreateProcess 函数进程执行的结果:绘制一幅进程创建过程的流程图。绘制一幅进程创建过程的流程图。6 练习通过编程的方式创建应用程序的多个进程多个进程并发执行的结果:有结果显示可知有两个进程在执行有结果显示可知有两个进程在执行三、综合实验总结或结论三、综合实验总结或结论1. 在源代码文件 NewTwoProc.c进行修改,要求使用 hello.exe 同
17、修改结果如下图所示:7提供的源代码基础上时创建 10 个进程。部分修改代码如下图所示:(“”部分为相似的4-9 进程代码)if (CreateProcess(A:Hello.exe, NULL, 0, &StartupInfo, &ProcInfoOne)& CreateProcess(A:Hello.exe, NULL, 0, &StartupInfo, &ProcInfoTwo)& CreateProcess(A:Hello.exe, NULL, 0, &StartupInfo, &ProcInfo3)& CreateProcess(A:Hello.exe, NULL, 0, &Start
18、upInfo, &ProcInfo3) & CreateProcess(A:Hello.exe, NULL, 0, &StartupInfo, &ProcInfo10)& CreateProcess(A:Hello.exe, NULL, 0, &StartupInfo, &ProcInfo10)WaitForSingleObject(ProcInfoOne.ProcessHandle, INFINITE);WaitForSingleObject(ProcInfoTwo.ProcessHandle, INFINITE);WaitForSingleObject(ProcInfo3.ProcessH
19、andle, INFINITE);WaitForSingleObject(ProcInfo3.ProcessHandle, INFINITE); WaitForSingleObject(ProcInfo10.ProcessHandle, INFINITE);WaitForSingleObject(ProcInfo10.ProcessHandle, INFINITE);GetExitCodeProcess(ProcInfoOne.ProcessHandle, &ulExitCode);GetExitCodeProcess(ProcInfo3.ProcessHandle, &ulExitCode)
20、;GetExitCodeProcess(ProcInfo3.ProcessHandle, &ulExitCode);printf(nThe process 3 exit with %d.n, ulExitCode);printf(nThe process 3 exit with %d.n, ulExitCode);GetExitCodeProcess(ProcInfo10.ProcessHandle, &ulExitCode);GetExitCodeProcess(ProcInfo10.ProcessHandle, &ulExitCode);printf(nThe process 10 exi
21、t with %d.n, ulExitCode);printf(nThe process 10 exit with %d.n, ulExitCode);CloseHandle(ProcInfoOne.ProcessHandle);CloseHandle(ProcInfoTwo.ThreadHandle);CloseHandle(ProcInfo3.ProcessHandle);CloseHandle(ProcInfo3.ProcessHandle);CloseHandle(ProcInfo3.ThreadHandle);CloseHandle(ProcInfo3.ThreadHandle);C
22、loseHandle(ProcInfo10.ProcessHandle);CloseHandle(ProcInfo10.ProcessHandle);CloseHandle(ProcInfo10.ThreadHandle);CloseHandle(ProcInfo10.ThreadHandle);2. 在 PsCreateProcess 函 数 中 调 用 了 PspCreateProcessEnvironment 函 数 后 又先 后 调 用 了 PspLoadProcessImage 和 PspCreateThread 函数, 学习这些函数的主要功能。能够交换这些函数被调用的顺序吗?答:答
23、:PspCreateProcessEnvironmentPspCreateProcessEnvironment创建了进程控制块,地址空间和分配了句柄表,创建了进程控制块,地址空间和分配了句柄表,PspLoadProcessImagePspLoadProcessImage 将进程的可执行映象加载的到了进程的地址空间中,将进程的可执行映象加载的到了进程的地址空间中,PspCreateThreadPspCreateThread 创建了进程的主线程。这三个函数知道自己从哪里开始执行,执行哪些创建了进程的主线程。这三个函数知道自己从哪里开始执行,执行哪些指令,因此不能交换它们的顺序。指令,因此不能交换它
24、们的顺序。8实验实验 4 4 线程的状态和转换线程的状态和转换一、一、 综合实验的目的与要求综合实验的目的与要求调试线程在各种状态间的转换过程,熟悉线程的状态和转换。通过为线程增加挂起状态,加深对线程状态的理解。二、实验正文二、实验正文1 准备实验2 调试线程状态的转换过程2.1 线程由阻塞状态进入就绪状态“ *Thread”State 域的值为 3( Waiting)的 Next 和 Prev 指针的值都不为 0, 双向链表项 StateListEntry, 说明这个线程还处于阻塞状态,并在某个同步对象的等待队列中; StartAddr 域的值为IopConsoleDispatchThrea
25、d是控制台派遣线程。在“调用堆栈”窗口中双击 PspUnwaitThread 函数对应的堆栈项, 按 F10 调试,此时State 域的值为 0 ( Zero)针的值都为 0, 双向链表项 StateListEntry 的 Next 和 Prev 指,说明这个线程就, 说明这个线程已经处于游离状态。按 F5 继续执行, 在 PspReadyThread 函数中的断点处中断。 按 F10 单步调试直到此函数的最后。此时 State 域的值为 1( Ready)Next 和 Prev 指针的值都不为 0经被放入优先级为 24 的就绪队列中。2.2 线程由运行状态进入就绪状态2.3 线程由就绪状态进
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统实验报告 附思考题解读 操作系统 实验 报告 思考题 解读
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内