课程设计(综合实验)报告
( 2015 -- 2016 年度第 1 学期)
名 称: 操作系统综合实验
题 目: oslab综合实验
院 系: 计算机系
班 级:
学 号:
学生姓名:
指导教师:
设计周数:安卓课程设计源代码 分散进行
成 绩:
日期: 2015 年 10 月 29 日
一、 综合实验的目的与要求
1. 理解和掌握操作系统的基本概念、基本组成与工作原理;
2. 理解和掌握操作系统中主要功能模块的工作原理及其实现算法;
3. 掌握软件模块设计技能;熟悉并能较好地利用软件开发环境独立编程、调试和分
析程序运行情况,逐渐形成创新思维和从事系统软件的研究和开发能力。
二、实验正文
实验1:实验环境的使用
1.1实验目的:
1.熟悉操作系统集成实验环境OS Lab的基本使用方法。
2.练习编译、调试EOS操作系统内核以及EOS应用程序。
1.2实验内容:
1.启动OS Lab
2.学习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 Lab
6.保存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)将本实验文件夹中的 文件添加到软盘镜像文件中,待 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应用程序的进程;
●将本实验文件夹中的 文件添加到软盘镜像文件中,按F7生成EOS应用项目,按 F5启动调试。忽略异常继续执行应用程序,激活虚拟机窗口,待该应用程序执行完毕后,在EOS 的控制台中输入命令“A:\”后回车。 应用程序开始执行;
3.练习通过编程的方式让应用程序创建另一个应用程序的进程
●使用NewProc.c文件中的源代码替换之前创建的EOS应用程序项目中的EOSApp.c文件内的源代码。按 F7生成修改后的EOS应用程序项目。按F5启动调试。激活虚拟机窗口查看应用程序输出的内容。首先开始执行并输出内容,父进程创建了子进程()后,子进程开始执行并输出内容,待子进程结束后父进程再继续执行。
4.调试CreateProcess函数
●按 F5启动调试EOS应用程序,OS Lab首先弹出一个调试异常对话框。 选择“是”调试异常,调试中断。在 main函数中调用CreateProcess函数的代码行添加一个断点。按F5继续调试,在断点处中断。按 F11调试进入CreateProcess函数进行调试
●在“调试”菜单的“窗口”中选择“反汇编”,在“反汇编”窗口中显示CreateProcess函数的指令对应的反汇编代码。在“调用堆栈”窗口中双击 main 函数项,设置 main 函数的调用堆栈帧为活动的。在“反汇编”窗口中查看main 函数的指令所在的虚拟地址都是小于0x80000000,说明应用程序 ()处于低 2G的虚拟地址空间中。 在“调用堆栈”窗口中双击CreateProcess函数项,重新设置CreateProcess函数的调用堆栈帧为活动的。关闭“反汇编”窗口。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论