2983徐俊逸操作系统实验报告.docx
- 文档编号:12728013
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:55
- 大小:1.36MB
2983徐俊逸操作系统实验报告.docx
《2983徐俊逸操作系统实验报告.docx》由会员分享,可在线阅读,更多相关《2983徐俊逸操作系统实验报告.docx(55页珍藏版)》请在冰豆网上搜索。
2983徐俊逸操作系统实验报告
计算机与信息学院
操作系统实验报告
专业班级
计算机科学与技术09-2班
学生姓名及学号
胡祥坤20092675
课程教学班号
0001
任课教师
刘晓平,田卫东,李琳
实验指导教师
李琳,孙晓
实验地点
逸夫楼507
2011-2012学年第二学期
实验1实验环境的使用
一、实验内容:
熟悉操作系统集成实验环境OSLab的基本使用方法。
练习编译、调试EOS操作系统内核以及EOS应用程序。
二、实验结果:
1.启动OSLab
1.在安装有OSLab的计算机上,可以使用两种不同的方法来启动OSLab:
●在桌面上双击TevationOSLab图标。
或者
●点击开始菜单,在程序中的TevationOSLab中选择TevationOSLab”。
2.OSLab每次启动后都会首先弹出一个用于注册用户信息的对话框(可以选择对话框标题栏上的帮助按钮获得关于此对话框的帮助信息。
在此对话框中填入学号和姓名后,点击确定按钮完成本次注册。
3.观察OSLab主窗口的布局。
OSLab主要由下面的若干元素组成:
菜单栏、工具栏以及停靠在左侧和底部的各种工具窗口,余下的区域用来放置编辑器窗口。
2.学习OSLab的基本使用方法
练习使用OSLab编写一个Windows控制台应用程序,熟悉OSLab的基本使用方法(主要包括新建项目、生成项目、调试项目等)。
2.1新建Windows控制台应用程序项目
新建一个Windows控制台应用程序项目的步骤如下:
1.在“文件”菜单中选择“新建”,然后单击“项目”。
2.在“新建项目”对话框中,选择项目模板“控制台应用程序(c)”。
3.在“名称”中输入新项目使用的文件夹名称“oslab”。
4.在“位置”中输入新项目保存在磁盘上的位置“C:
\test”。
5.点击“确定”按钮。
新建完毕后,OSLab会自动打开这个新建的项目。
在“项目管理器”窗口中(如图9-1所示),树的根节点是项目节点,项目的名称是“console”,各个子节点是项目包含的文件夹或者文件。
此项目的源代码主要包含一个头文件“console.h”和一个C语言源文件“console.c”。
使用Windows资源管理器打开磁盘上的“C:
\test\oslab”文件夹查看项目中包含的文件(提示,在“项目管理器”窗口的项目节点上点击右键,然后在弹出的快捷菜单中选择“打开所在的文件夹”即可)。
2.2生成项目
使用“生成项目”功能可以将程序的源代码文件编译为可执行的二进制文件,方法十分简单:
在“生成”菜单中选择“生成项目”。
在项目生成过程中,“输出”窗口会实时显示生成的进度和结果。
如果源代码中不包含语法错误,会在最后提示生成成功
如果源代码中存在语法错误,“输出”窗口会输出相应的错误信息(包括错误所在文件的路径,错误在文件中的位置,以及错误原因),并在最后提示生成失败。
此时在“输出”窗口中双击错误信息所在的行,OSLab会使用源代码编辑器打开错误所在的文件,并自动定位到错误对应的代码行。
可以在源代码文件中故意输入一些错误的代码(例如删除一个代码行结尾的分号),然后再次生成项目,然后在“输出”窗口中双击错误信息来定位存在错误的代码行,将代码修改正确后再生成项目。
生成过程是将每个源代码文件(.c、.cpp、.asm等文件)编译为一个对象文件(.o文件),然后再将多个对象文件链接为一个目标文件(.exe、.dll等文件)。
成功生成Windows控制台应用程序项目后,默认会在“C:
\test\oslab\debug"目录下生成一个名称为“console.o”的对象文件和名称为“console.exe”的Windows控制台应用程序,可以使用Windows资源管理器查看这些文件。
2.3执行项目
在OSLab中选择“调试”菜单中的“开始执行(不调试)”,可以执行刚刚生成的Windows控制台应用程序。
启动执行后会弹出一个Windows控制台窗口,显示控制台应用程序输出的内容。
按任意键即可关闭此Windows控制台窗口。
2.4调试项目
OSLab提供的调试器是一个功能强大的工具,使用此调试器可以观察程序的运行时行为并确定逻辑错误的位置,可以中断(或挂起)程序的执行以检查代码,计算和编辑程序中的变量,查看寄存器,以及查看从源代码创建的指令。
为了顺利进行后续的各项实验,应该学会灵活使用这些调试功能。
在开始练习各种调试功能之前,首先需要对刚刚创建的例子程序进行必要的修改,步骤如下:
1.右键点击“项目管理器”窗口中的“源文件”文件夹节点,在弹出的快捷菜单中选择“添加”中的“添加新文件”。
2.在弹出的“添加新文件”对话框中选择“C源文件”模板。
3.在“名称”中输入文件名称“func”。
4.点击“添加”按钮,添加并自动打开文件func.c,此时的“项目管理器”窗口会如图
2.4.1使用断点中断执行
1.在main函数中定义变量n的代码行intn=0;上点击鼠标右键,在弹出的快捷菜单中选择“插入/删除断点”,会在此行左侧的空白处显示一个红色圆点,表示已经成功在此行代码添加了一个断点
2.在“调试”菜单中选择“启动调试”,Windows控制台应用程序开始执行,随后OSLab窗口被自动激活,并且在刚刚添加断点的代码行左侧空白中显示一个黄色箭头,表示程序已经在此行代码处中断执行(也就是说下一个要执行的就是此行代码),
3.激活Windows控制台应用程序的窗口,可以看到窗口中没有输出任何内容,因为printf函数还没有执行。
2.4.2单步调试
按照下面的步骤练习使用“逐过程”功能:
1.在OSLab的“调试”菜单中选择“逐过程”,“逐过程”功能会执行黄色箭头当前指向的代码行,并将黄色箭头指向下一个要执行的代码行。
2.按F10(“逐过程”功能的快捷键),黄色箭头就指向了调用printf函数的代码行。
查看控制台应用程序窗口,仍然没有任何输出。
3.再次按F10执行printf函数,查看控制台应用程序窗口,可以看到已经打印出了内容。
4.在“调试”菜单中选择“停止调试”,结束此次调试。
按照下面的步骤练习使用“逐语句”功能和“跳出”功能:
1.按F5(“启动调试”功能的快捷键),仍然会在之前设置的断点处中断。
2.按F10逐过程调试,此时黄色箭头指向了调用函数Func的代码行。
3.在“调试”菜单中选择“逐语句”,可以发现黄色箭头指向了函数Func中,说明“逐语句”功能可以进入函数,从而调试函数中的语句。
4.选择“调试”菜单中的“跳出”,会跳出Func函数,返回到上级函数中继续调试(此时Func函数已经执行完毕)。
5.按Shift+F5(“停止调试”功能的快捷键),结束此次调试。
2.4.3查看变量的值
在调试的过程中,OSLab提供了三种查看变量值的方法,按照下面的步骤练习这些方法:
1.按F5启动调试,仍然会在之前设置的断点处中断。
2.将鼠标移动到源代码编辑器中变量n的名称上,此时会弹出一个窗口显示出变量n当前的值(由于此时还没有给变量n赋值,所以是一个随机值)。
3.在源代码编辑器中变量n的名称上点击鼠标右键,在弹出的快捷菜单中选择“快速监视”,可以使用“快速监视”对话框查看变量n的值。
然后,可以点击“关闭”按钮关闭“快速监视”对话框。
4.在源代码编辑器中变量n的名称上点击鼠标右键,在弹出的快捷菜单中选择“添加监视”,变量n就被添加到了“监视”窗口中。
使用“监视”窗口可以随时查看变量的值和类型。
此时按F10进行一次单步调试,可以看到“监视”窗口中变量n的值会变为0。
2.4.4调用堆栈
使用“调用堆栈”窗口可以在调试的过程中查看当前堆栈上的函数,还可以帮助理解函数的调用层次和调用过程。
按照下面的步骤练习使用“调用堆栈”窗口:
1.按F5启动调试,仍然会在之前设置的断点处中断。
2.选择“调试”菜单“窗口”中的“调用堆栈”,激活“调用堆栈”窗口。
可以看到当前“调用堆栈”窗口中只有一个main函数(显示的内容还包括了参数值和函数地址)。
3.按F11(“逐语句”功能的快捷键)调试,直到进入Func函数,查看“调用堆栈”窗口可以发现在堆栈上有两个函数Func和main。
其中当前正在调试的Func函数在栈顶位置,main函数在栈底位置。
说明是在main函数中调用了Func函数。
4.在“调用堆栈”窗口中双击main函数所在的行,会有一个绿色箭头指向main函数所在的行,表示此函数是当前调用堆栈中的活动函数。
同时,会将main函数所在的源代码文件打开,并也使用一个绿色箭头指向Func函数返回后的位置。
5.在“调用堆栈”窗口中双击Func函数所在的行,可以重新激活此堆栈帧,并显示对应的源代码。
6.反复双击“调用堆栈”窗口中Func函数和main函数所在的行,查看“监视”窗口中变量n的值,可以看到在不同的堆栈帧被激活时,OSLab调试器会自动更新“监视”窗口中的数据,显示出对应于当前活动堆栈帧的信息。
7.结束此次调试。
3.EOS内核项目的生成和调试
之前练习了对Windows控制台应用程序项目的各项操作,对EOS内核项目的各种操作(包括新建、生成和各种调试功能等)与对Windows控制台项目的操作是完全一致的。
所以,接下来实验内容的重点不再是各种操作的具体步骤,而应将注意力放在对EOS内核项目的理解上。
3.1新建EOS内核项目
新建一个EOS内核项目的步骤如下:
1.在“文件”菜单中选择“新建”,然后单击“项目”。
2.在“新建项目”对话框中,选择项目模板“EOSKernel”。
3.在“名称”中输入新项目使用的文件夹名称“eos”。
4.在“位置”中输入新项目保存在磁盘上的位置“C:
\”。
5.点击“确定”按钮。
此项目就是一个EOS操作系统内核项目,包含了EOS操作系统内核的所有源代码文件。
在“项目管理器”窗口中查看EOS内核项目包含的文件夹和源代码文件,可以看到不同的文件夹包含了EOS操作系统不同模块的源代码文件,例如“mm”文件夹中包含了内存管理模块的源代码文件,“boot”文件夹中包含了软盘引导扇区程序和加载程序的源代码文件。
也可以使用Windows资源管理器打开项目所在的文件夹C:
\eos,查看所有源代码文件。
3.2生成项目
1.按F7生成项目,同时查看“输出”窗口中的内容,确认生成成功。
2.打开C:
\eos\debug文件夹,查看生成的对象文件和目标文件。
找到boot.bin、loader.bin和kernel.dll三个二进制文件,这三个文件就是EOS操作系统在运行时需要的可执行文件。
OSLab每次启动运行EOS操作系统之前,都会将这三个文件写入一个软盘镜像文件中,然后让虚拟机运行这个软盘镜像中的EOS(相当于将写有这三个二进制文件的软盘放入一个物理机的软盘驱动器中,然后按下开机按钮)。
找到libkernel.a文件,此文件是EOS内核文件kernel.dll对应的导入库文件。
3.3调试项目
1.在“项目管理器”窗口的ke文件夹中找到start.c文件节点,双击此文件节点使用源代码编辑器打开start.c文件。
2.在start.c文件中KiSystemStartup函数的“KiInitializePic();”语句所在行(第61行)添加一个断点,
3.按F5启动调试,虚拟机开始运行软盘镜像中的EOS。
在虚拟机窗口中可以看到EOS启动的过程。
随后EOS会在刚刚添加的断点处中断执行。
激活虚拟机窗口可以看到EOS也不再继续运行了。
各种调试功能(包括单步调试、查看变量的值和各个调试工具窗口)的使用方法与调试Windows控
制台程序完全相同,可以自己练习。
4.按F5继续执行。
查看虚拟机窗口,显示EOS操作系统已经启动,并且EOS的控制台程序已经开始运行了。
5.在“调试”菜单中选择“停止调试”,结束此次调试。
3.4查看软盘镜像文件中的内容
在“项目管理器”窗口中双击软盘镜像文件Floppy.img,就会使用FloppyImageEditor工具打开此文件(在FloppyImageEditor工具中按F1可以查看此工具的帮助文件)。
在FloppyImageEditor工具的文件列表中可以找到loader.bin文件和kernel.dll文件,这两个文件都是在启动调试时被写入软盘镜像文件的(可以查看这两个文件的修改日期)。
boot.bin文件在启动调试时被写入了软盘镜像的引导扇区中,不受软盘文件系统的管理,所以在文件列表中找不到此文件。
关闭FloppyImageEditor工具。
3.5查看EOSSDK(SoftwareDevelopmentKit)文件夹
1.点击OSLab工具栏上的“项目配置”下拉列表,选择下拉列表中的“Release”项目配置,“Release”项目配置被设置为新的活动项目配置(原来的活动项目配置是“Debug”)。
2.按F7使用Release配置生成项目。
3.生成完毕后,使用Windows资源管理器打开C:
\eos文件夹,可以发现在文件夹中多出了一个SDK文件夹,此文件夹就是在生成EOSKernel项目的同时自动生成的。
4.SDK文件夹中提供了开发EOS应用程序需要的所有文件。
打开SDK文件夹中的bin文件夹,可以看到有两个名称分别为debug和release的文件夹。
debug文件夹是在使用debug配置生成项目时生成的,其中存放了调试版本的EOS二进制文件。
release文件夹是在使用release配置生成项目时生成的,其中存放了发布版本的EOS二进制文件(不包含调试信息)。
分别打开这两个文件夹查看其中包含的文件。
5.打开SDK文件夹中的inc文件夹,可以看到此文件夹中存放了EOS用于导出API函数和重要数据类型定义的头文件,在编写EOS应用程序时必须包含这些头文件。
每次在开发EOS应用程序之前都应该使用EOSKernel项目的debug配置和release配置来生成EOSKernel项目,这样才能够得到完全版本的SDK文件夹供EOS应用程序使用。
4.EOS应用程序项目的生成和调试
4.1新建EOS应用程序项目
新建一个EOS应用程序项目的步骤如下:
1.在“文件”菜单中选择“新建”,然后单击“项目”。
2.在“新建项目”对话框中,选择项目模板“EOS应用程序”。
3.在“名称”中输入新项目使用的文件夹名称“eosapp”。
4.在“位置”中输入新项目保存在磁盘上的位置“C:
\”。
5.点击“确定”按钮。
此项目就是一个EOS应用程序项目。
使用Windows资源管理器将之前生成的C:
\eos\sdk文件夹拷贝覆盖到C:
\eosapp\sdk位置。
这样EOS应用程序就可以使用最新版本的EOSSDK文件夹了。
4.2生成项目
1.按F7生成项目,同时查看“输出”窗口中的内容,确认生成成功。
2.打开C:
\eosapp\debug文件夹,查看生成的对象文件和目标文件。
其中的EOSApp.exe就是EOS应用程序的可执行文件。
OSLab每次启动执行EOS应用程序时,都会将EOS应用程序的可执行文
件写入软盘镜像,并且会将SDK文件夹中对应配置(Debug或Release)的二进制文件写入软盘镜像,然后让虚拟机运行软盘镜像中的EOS,待EOS启动后再自动执行EOS应用程序。
4.3调试项目
调试EOS应用程序项目与之前的两个项目有较大的不同,之前的两个项目在调试时都是先添加断点再启动调试,而EOS应用程序项目必须先启动调试再添加断点,步骤如下:
1.按F5启动调试。
OSLab会弹出一个调试异常对话框,选择“是”调试异常,EOS应用程序会中断执行,黄色箭头指向下一个要执行的代码行。
2.在eosapp.c的printf("Helloworld!
\n");代码行添加一个断点,然后按F5继续调试,在此断点处中断。
3.按F10单步调试,查看虚拟机窗口,打印输出了“Helloworld!
”。
4.按F5继续调试,查看虚拟机窗口,EOS应用程序执行完毕。
5.在“调试”菜单中选择“停止调试”,调试被终止。
6.选择“调试”菜单中的“删除所有断点”。
只有删除所有断点后才能按F5再次启动调试,否则启动调试会失败。
4.4查看软盘镜像文件中的内容
使用FloppyImageEditor工具打开该项目中的Floppy.img文件,查看软盘镜像中的文件。
loader.bin和kernel.dll是从C:
\eosapp\sdk\bin\debug文件夹写入的,C:
\eosapp\sdk\bin\debug\boot.bin被写入了软盘镜像文件的引导扇区中。
eosapp.exe就是本项目生成的EOS应用程序。
EOS操作系统启动后会根据autorun.txt文本文件中的内容启动执行eosapp.exe程序,双击autorun.txt文件查看其内容。
4.5修改EOS应用程序项目名称
EOS应用程序项目所生成的可执行文件的名称默认是由项目名称决定的。
由于当前EOS应用程序项目的名称是EOSApp,所以该项目所生成的可执行文件的名称默认为EOSApp.exe。
按照下面的步骤修改EOS应用程序项目的名称,进而修改可执行文件的名称:
1.在“项目管理器”窗口中,右键点击项目节点(根节点)。
2.在弹出的快捷菜单中选择“重命名”,然后可以输入一个新的项目名称,例如“MyApp”,然后按回车键使修改生效。
3.按F7生成项目。
4.选择“调试”菜单中的“删除所有断点”。
5.按F5启动调试。
OSLab会弹出一个调试异常对话框,选择“否”忽略异常,EOS应用程序会自动执行。
6.激活虚拟机窗口,可以看到自动执行的可执行文件的名称为MyApp.exe,也可以打开C:
\eosapp\debug文件夹,确认生成了可执行文件MyApp.exe。
5.退出OSLab
1.在“文件”菜单中选择“退出”。
2.在OSLab关闭前会弹出一个保存数据对话框(可以选择对话框标题栏上的“帮助”按钮获得帮助信息),核对学号和姓名无误后点击“保存”按钮,OSLab关闭。
3.在OSLab关闭后默认会自动使用Windows资源管理器打开数据文件所在的文件夹,并且选中刚刚保存的数据文件(OUD文件)。
将数据文件备份(例如拷贝到自己的U盘中或者发送到服务器上),可以做为本次实验的考评依据。
6.保存EOS内核项目
如果要在课余时间阅读EOS源代码,或者调试EOS源代码,可以按照下面的步骤操作:
1.使用OSLab重新打开之前创建的EOS内核项目(启动OSLab后,在“起始页”的“最近的项目”列表中会有之前创建的EOS内核项目的快捷方式“kernel”)。
2.使用Debug配置生成此项目。
再次启动调试此项目,然后结束调试,从而制作包含Debug版本EOS操作系统的软盘镜像文件。
3.将此项目的文件夹复制到自己的计算机中。
注意,项目文件夹在磁盘中的位置不能改变,例如实验中此项目在C:
\eos位置,就必须也复制到自己计算机中的C:
\eos位置。
4.在自己的计算机中安装OSLab演示版,使用演示版程序阅读EOS源代码,或者调试EOS源代码。
可以在本书前言部分找到OSLab演示版安装程序的下载地址。
三、实验思考
该实验主要熟悉了实验环境OSLab的使用方法和操作主要是验证性的实验,强调会使用实验环境。
这次实验熟悉操作系统集成实验环境OSLab的基本使用方法,练习编译、调试EOS操作系统内核以及EOS应用程序。
实验2操作系统的启动
一.实验内容
跟踪调试EOS在PC机上从加电复位到成功启动的全过程,了解操作系统的启动过程。
查看EOS启动后的状态和行为,理解操作系统启动后的工作方式。
二.实验结果
1.准备实验
1.启动OSLab。
2.新建一个EOSKernel项目。
3.在“项目管理器”窗口中打开boot文件夹中的boot.asm和loader.asm两个汇编文件。
boot.asm是软盘引导扇区程序的源文件,loader.asm是loader程序的源文件。
简单阅读一下这两个文件中的NASM汇编代码和注释。
4.按F7生成项目。
5.生成完成后,使用Windows资源管理器打开项目文件夹中的Debug文件夹。
找到由boot.asm生成的软盘引导扇区程序boot.bin文件,该文件的大小一定为512字节(与软盘引导扇区的大小一致)。
找到由loader.asm生成的loader程序loader.bin文件,记录下此文件的大小1566字节,在下面的实验中会用到。
找到由其它源文件生成的操作系统内核文件kernel.dll。
2.调试EOS操作系统的启动过程
2.1使用Bochs做为远程目标机
按照下面的步骤将调试时使用的远程目标机修改为Bochs:
1.在“项目管理器”窗口中,右键点击项目节点,在弹出的快捷菜单中选择“属性”。
2.在弹出的“属性页”对话框右侧的属性列表中找到“远程目标机”属性,将此属性值修改为“BochsDebug”(此时按F1可以获得关于此属性的帮助)。
3.点击“确定”按钮关闭“属性页”对话框。
接下来就可以使用Bochs模拟器调试BIOS程序和软盘引导扇区程序了。
2.2调试BIOS程序
按F5启动调试,此时会弹出两个Bochs窗口。
标题为“Bochsforwindows-Display”的窗口相当于计算机的显示器,显示操作系统的输出。
标题为“Bochsforwindows-Console”的窗口是Bochs的控制台,用来输入调试命令,输出各种调试信息。
启动调试后,Bochs在CPU要执行的第一条指令(即BIOS的第一条指令)处中断。
此时,Display窗口没有显示任何内容,Console窗口显示要执行的BIOS第一条指令的相关信息,并等待用户输入调试命令。
从Console窗口显示的内容中,我们可以获得关于BIOS第一条指令的如下信息:
行首的[0xfffffff0]表示此条指令所在的物理地址。
f000:
fff0表示此条指令所在的逻辑地址(段地址:
偏移地址)。
jmpfarf000:
e05b是此条指令的反汇编代码。
行尾的ea5be000f0是此条指令的十六进制字节码,可以看出此条指令有5个字节。
接下来可以按照下面的步骤,查看CPU在没有执行任何指令之前主要寄存器中的数据,以及内存中的数据:
1.在Console窗口中输入调试命令sreg后按回车,显示当前CPU中各个段寄存器的值,如图10-2。
其中CS寄存器信息行中的“s=0xf000”表示CS寄存器的值为0xf000。
2.输入调试命令r后按回车,显示当前CPU中各个通用寄存器的值,如图10-3。
其中“rip:
0x00000000:
0000fff0”表示IP寄存器的值为0xfff0。
3.输入调试命令xp/1024b0x0000,查看开始的1024个字节的物理内存。
在Console
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2983 俊逸 操作系统 实验 报告