操作系统课程设计实验报告(附思考题答案)

  • 格式:doc
  • 大小:19.80 MB
  • 文档页数:22

课程设计(综合实验)报告( 2015 -- 2016 年度第 1 学期)名称:操作系统综合实验题目:oslab综合实验院系:计算机系班级:学号:学生姓名:指导教师:设计周数:分散进行成绩:日期:2015 年10 月29 日一、综合实验的目的与要求1. 理解和掌握操作系统的基本概念、基本组成与工作原理;2. 理解和掌握操作系统中主要功能模块的工作原理及其实现算法;3. 掌握软件模块设计技能;熟悉并能较好地利用软件开发环境独立编程、调试和分析程序运行情况,逐渐形成创新思维和从事系统软件的研究和开发能力。

二、实验正文实验1:实验环境的使用1.1实验目的:1.熟悉操作系统集成实验环境OS Lab的基本使用方法。

2.练习编译、调试EOS操作系统内核以及EOS应用程序。

1.2实验内容:1.启动OS Lab2.学习OS Lab的基本用法●新建Windows 控制台应用程序项目(1)在“文件”菜单中选择“新建”,然后单击“项目”。

(2)在“新建项目”对话框中,选择项目模板“控制台应用程序 (c)”。

(3)在“名称”中输入新项目使用的文件夹名称“oslab”。

(4)在“位置”中输入新项目保存在磁盘上的位置“C:\test”。

(5)点击“确定”按钮。

●生成、执行项目●调试项目(断点中断执行、单步调试、查看变量的值、调用堆栈)使用断点中断执行查看变量的值3.EOS内核项目的生成和调试●新建EOS内核项目并按F7生成项目●调试项目●查看软盘镜像文件中的内容、EOS SDK(Software Development Kit)文件夹4.EOS应用程序项目的生成和调试●新建EOS应用程序项目●生成并调试项目●查看软盘镜像文件中的内容●修改EOS应用程序项目名称5.退出OS Lab6.保存EOS内核项目1.3思考与练习●在实验1中,生成EOS SDK文件夹的目的和作用是什么?答:SDK文件夹中提供了开发EOS应用程序需要的所有文件。

debug文件夹是在使用debug配置生成项目时生成的,其中存放了调试版本的EOS二进制文件。

release文件夹是在使用release配置生成项目时生成的,其中存放了发布版本的EOS二进制文件(不包含调试信息)。

SDK文件夹中的inc文件夹,此文件夹中存放了EOS用于导出API函数和重要数据类型定义的头文件,在编写EOS应用程序时必须包含这些头文件。

每次在开发EOS应用程序之前都应该使用EOS Kernel项目的debug配置和release配置来生成EOS Kernel项目,这样才得到完全版本的SDK文件夹供EOS应用程序使用。

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

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

2.2实验内容:1.准备实验:启动OS Lab,新建一个EOS Kenel项目2.调试EOS操作系统的启动过程:●使用Bochs作为远程目标机●调试BIOS程序(1)启动调试后,Bochs 在CPU 要执行的第一条指令处中断(2)在Console窗口中输入调试命令sreg 后按回车,显示当前CPU中各个段寄存器的值。

其中CS 寄存器信息行中的“s=0xf000”表示CS 寄存器的值为0xf000。

(3)输入调试命令r 后按回车,显示当前CPU 中各个通用寄存器的值,如图10-3。

其中“rip: 0x00000000:0000fff0”表示IP寄存器的值为0xfff0(4)输入调试命令xp /1024b 0x0000,查看开始的1024个字节的物理内存。

在Console 中输出的这1K物理内存的值都为0,说明BIOS中断向量表还没有被加载到此处。

输入调试命令xp /512b 0x7c00,查看软盘引导扇区应该被加载到的内存位置。

输出的内存值都为0,说明软盘引导扇区还没有被加载到此处。

●调试软盘引导扇区程序(1)输入调试命令vb 0x0000:0x7c00,这样就在逻辑地址0x0000:0x7c00处添加了一个断点,输入调试命令c 继续执行,输入调试命令sreg 验证CS寄存器的值,输入调试命令r 验证IP 寄存器的值;(2)输入调试命令xp /1024b 0x0000 验证此时BIOS 中断向量表已经被载入,输入调试命令xp /512b 0x7c00 显示软盘引导扇区程序的所有字节;(3)输入调试命令xp /512b 0x0600 验证图3-2中第一个用户可用区域是空白的。

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

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

(4)输入调试命令xp /512b 0xa0000 验证图3-2中上位内存已经被系统占用。

自己设计一个查看内存的调试命令,验证上位内存的高地址端已经被系统占用;(5)输入调试命令vb 0x0000:0x7d81 添加一个断点,输入调试命令c继续执行,到断点处中断。

按照打开boot.lst文件的方法打开loader.lst文件,输入调试命令xp /8b 0x1000查看内存0x1000处的数据,验证此块内存的前三个字节和loader.lst文件中的第一条指令的字节码是相同的。

(6)根据之前记录的loader.bin文件的大小,自己设计一个查看内存的调试命令,查看内存中loader程序结束位置的字节码,并与loader.lst 文件中最后指令的字节码比较,验证loader 程序被完全加载到了正确的位置。

●调试加载程序:(1)使用添加物理地址断点的调试命令pb 0x1513添加一个断点,输入调试命令 c 继续执行,到断点处中断。

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

●调试内核●EOS启动后的状态和行为(1)在控制台中输入命令“ver”后按回车,在控制台中输入命令“pt”后按回车(2)将本实验文件夹中的Hello.exe 文件添加到软盘镜像文件中,待EOS启动完毕,在EOS控制台中输入命令“hello”后按回车,迅速按Ctrl+F2切换到控制台2,并输入命令“pt”后按回车。

实验3:进程的创建3.1实验目的:1. 练习使用EOS API函数CreateProcess创建一个进程,掌握创建进程的方法,理解进程和程序的区别;2. 调试跟踪CreateProcess函数的执行过程,了解进程的创建过程,理解进程是资源分配的单位。

3.2实验内容:1.准备实验:启动OS Lab,新建一个EOS Kenel项目,新建一个EOS应用程序项目;2.练习使用控制台命令创建EOS应用程序的进程;●将本实验文件夹中的Hello.exe 文件添加到软盘镜像文件中,按F7生成EOS应用项目,按F5启动调试。

忽略异常继续执行应用程序,激活虚拟机窗口,待该应用程序执行完毕后,在EOS 的控制台中输入命令“A:\Hello.exe”后回车。

Hello.exe应用程序开始执行;3.练习通过编程的方式让应用程序创建另一个应用程序的进程●使用NewProc.c文件中的源代码替换之前创建的EOS应用程序项目中的EOSApp.c文件内的源代码。

按F7生成修改后的EOS应用程序项目。

按F5启动调试。

激活虚拟机窗口查看应用程序输出的内容。

首先开始执行并输出内容,父进程创建了子进程(Hello.exe)后,子进程开始执行并输出内容,待子进程结束后父进程再继续执行。

4.调试CreateProcess函数●按F5启动调试EOS应用程序,OS Lab首先弹出一个调试异常对话框。

选择“是”调试异常,调试中断。

在main函数中调用CreateProcess函数的代码行添加一个断点。

按F5继续调试,在断点处中断。

按F11调试进入CreateProcess函数进行调试●在“调试”菜单的“窗口”中选择“反汇编”,在“反汇编”窗口中显示CreateProcess函数的指令对应的反汇编代码。

在“调用堆栈”窗口中双击main 函数项,设置main函数的调用堆栈帧为活动的。

在“反汇编”窗口中查看main 函数的指令所在的虚拟地址都是小于0x80000000,说明应用程序(eosapp.exe)处于低2G的虚拟地址空间中。

在“调用堆栈”窗口中双击CreateProcess函数项,重新设置CreateProcess函数的调用堆栈帧为活动的。

关闭“反汇编”窗口。

5.调试PsCreateProcess函数;●在PsCreateProcess函数调用PspCreateProcessEnvironment函数的代码行添加一个断点。

按F5继续调试,按F11调试进入PspCreateProcessEnvironment函数●在调用ObCreateObject函数的代码行添加一个断点。

按F5继续调试,按F10执行此函数后中断。

将表达式*NewProcess添加到“监视”窗口中。

将鼠标移动到“监视”窗口中此表达式的“值”属性上,会弹出一个临时窗口,在临时窗口中会按照进程控制块的结构显示各个成员变量的值,值都为0。

●在代码行NewProcess->Pas = MmCreateProcessAddressSpace()添加一个断点,按F5继续调试,按F10执行此行代码后中断。

使用F10一步步调试PspCreateProcessEnvironment函数中后面的代码,查看“监视”窗口中*NewProcess表达式的值。

当从PspCreateProcessEnvironment函数返回到PsCreateProcess函数后,停止按F10。

将表达式*ProcessObject添加到“监视”窗口中。

继续使用F10一步步调试PsCreateProcess函数中的代码。

当调试到PsCreateProcess函数的最后一行代码时,查看进程控制块中的信息,按F5继续执行。

激活虚拟机窗口查看新建进程执行的结果。

6.练习通过编程的方式创建应用程序的多个进程;使用NewTwoProc.c文件中的源代码替换EOS 应用程序项目中EOSApp.c 文件内的源代码,生成后启动调试,查看多个进程并发执行的结果。

3.3思考与练习1. 在源代码文件NewTwoProc.c提供的源代码基础上进行修改,要求使用hello.exe同时创建10个进程。

然后尝试调试PspCreateThread 函数,观察线程控制块(TCB)初始化的过程。

3.在实验3中,在PsCreateProcess函数中调用PspCreateProcessEnvironment函数后又先后调用了PspLoadProcessImage和PspCreateThread函数,分析这些函数的主要功能。