上海大学北门-上海大学北门
综合实验报告
( 2013--
2014
年度第
一
学期
)
名
称:计算机操作系统
题
目:计算机操作系统实验
院
系:计算机系
班
级:网络
学
号:
学生姓名:
指导教师:王平
设计周数:
2
周
成
绩:
日期:
2013
年
11
月
华
北
电
力
大
学
实
验
报
告
实验
1
实验环境的使用
一、实验目的
1
、熟悉操作系统集成实验环境
OS Lab
的基本使用方法。
2
、练习编 译、调试
EOS
操作系统内核以及
EOS
应用程序 。
二、
预备知识
阅读本书第
1
章,对< /p>
EOS
操作系统和
OS Lab
集成实验环境有一个 初步的了解。重点
学习第
1.3
节,掌握
EOS
操作系统内核和
EOS
应用程序的源代码是如何生成可执行 文件
的,以及
OS Lab
是如何将这些可执行文件写入软盘镜像文件并开始执行的。
三、
实验内容
1
、启动
OS Lab
1.
在安装有
OS Lab
的计算机上,可以使用两种不同的方法来启动
OS Lab
:
在桌面上双击“
Tevation OS Lab
”图标。
或者
点击“开始”菜单,在“程序”中的“
Tevation OS Lab
”中选择“
Tevation OS Lab
”
。
2.
OS
Lab
每次启动后都会首先弹出一个用于注册用户信息的对 话框(可以选择对话框标题栏上
的“帮助”按钮获得关于此对话框的帮助信息)
。在此对话框中填入学号和姓名后,点击“确定”按钮
完成本次注册。
3.
观察
OS
Lab
主窗口的布局。
OS
Lab
主要由下面的若干元素组成:菜单栏、工具栏以及停靠在
左侧和底部的各种工具窗口,
余下的区域用来放置编辑器窗口。
2
、学习
OS Lab
的基本使用方法
2.1
新建
Windows
控制台应用程序项目
新建一个
Windows
控制台应用程序项目的步骤如下:
1.
在“文件”菜单中选择“新建”
,然后单击“项目”
。
< p>
2.
在“新建项目”对话框中,选择项目模板“控制台应用程序
(c)
”
。
3.
在“名称”中输入新项目使用的文件夹名称“
oslab
”
。
4.
在“ 位置”中输入新项目保存在磁盘上的位置“
C:test
”
。 p>
5.
点击“确定”按钮。
2.2
生成项目
使用
“生成项目”
功 能可以将程序的源代码文件编译为可执行的二进制文件,
方法十分简单:
在“生成”菜单中选择“生成项目”
。
在项目生成过程中,
“输出”窗口会实时显示生成的进度和结果。如果源代码中不 包含语法
错误,会在最后提示生成成功,如图:
第
页
共
页
华
北
电
力
大
学
实
验
报
告
2.3
执行项目
在
OS Lab
中选择“调试 ”菜单中的“开始执行
(
不调试
)
”
,可以执行刚刚生成的
Windows
控
制台应用程序
。启动执行后会弹出一个
Windows
控制台窗口,显示控制台应用程序输出的 内容。按任
意键即可关闭此
Windows
控制台窗口。
2.4
调试项目
在开始练习各种调试功能之前,
首先需 要对刚刚创建的例子程序进行必要的修改,
步骤如下:
1.
右键点击“项目管理器”窗口中的“源文件”文 件夹节点,在弹出的快捷菜单中选择“添
加”中的“添加新文件”
。 p>
2.
在弹出的“添加新文件”对话框中选择“
C
源文件”模板。
3.
func
”
。
4.
点击“添加”按钮,添加并自动打开文件
func.c
,此时的“项目管理器”窗口会如图:
2.4.1
使用断点中断执行
1.
在
main
函数中定义变量
n
的代码行
int
n
=
0;
< p>上点击鼠标右键,在弹出的快捷菜单中选
择“插入
/
删除断点”
,会在此行左侧的空白处显示一个红色圆点,表示已经成功在此行代码添加了一
个断点,如图:
2.
在“调试”菜单中选择“启动调试”
,
Windows p>
控制台应用程序开始执行,随后
OS
Lab
窗口被自
动激活,并且在刚刚添加断点的代码行左侧空白中显示一个黄色箭头,表示程序已经在此
行代码处中
断执行(也就是说下一个要执行的就是此行代码)
,如图:< /p>
2.4.2
单步调试
按照下面的步骤练习使用“逐过程”功能:
第
页
共
页
华
北
电
力
大
学
实
验
报
告
1.
在
OS Lab
的 “调试”菜单中选择“逐过程”
,
“逐过程”功能会执行黄色箭头当前指向的代< /p>
码行,并将黄色箭头指向下一个要执行的代码行。
2.
按
F10
(
“逐过程”
功能的快捷键)
,
黄色箭头就指向了调用 p>
printf
函数的代码行。查看控制
台应用程序窗口,仍然
没有任何输出。
3.
再次按
F10
执行
printf
函数,查看控制台应用程序窗口 ,可以看到已经打印出了内容。
4.
在“调试”菜单中选择“停止调试”
,结束此次调试。
2.4.3
查看变量的值
在调试的过程中,
OS Lab
提供了三种查看变量值的方法,按照下面的步骤练习这些方法:
1.
按
F5
启动调 试,仍然会在之前设置的断点处中断。
2. <
/p>
将鼠标移动到源代码编辑器中变量
n
的名称上,此时会弹出一个窗口 显示出变量
n
当前的
值(由于此时还没有给变量
n
赋值,所以是一个随机值)
。
3.
在源代码编辑器中变量
n p>
的名称上点击鼠标右键,
在弹出的快捷菜单中选择
“快速监视”
,
可以使用
“快速监视”
对话框查看变量
n
的值。
然后,
可以点击
“关闭”
按钮关闭
“快速监视”
对话框。
4.
在源代码编辑器中变量
n p>
的名称上点击鼠标右键,
在弹出的快捷菜单中选择
“添加监视”
,
变量
n
就被添加到了“监视”窗口中。使用“ 监视”窗口可以随时查看变量的值和类型。此时按
F10
进
行一次单步调试,可以看到“监视”窗口中变量
n
的值会变为
0
,如图
2.4.4
调用堆栈
1.
按
F5
启动调试 ,仍然会在之前设置的断点处中断。
2.
选择“调试”菜单“窗口”中的“调用堆栈”
,激活“调用堆栈”窗口。可以看到当前“ 调
用堆栈”窗口中只有一个
main
函数(显示的内容还 包括了参数值和函数地址)
。
3.
按
F11
(
“逐语句”功能的快捷键)调试,直到 进入
Func
函数,查看“调用堆栈”窗口可以
发现在堆
栈上有两个函数
Func
和
main
。其中当前正 在调试的
Func
函数在栈顶位置,
main
函数 在栈底位
置。说明是在
main
函数中调用了
< p>Func函数。
3
、
EOS
内核项目的生成和调试
3.1
新建
EOS
内核项目
新建一个
EOS
内核项目的步骤如下:
1.
在“文件”菜单中选择“新建”,然后单击“项目”。
2.
在“新建项目”对话框中,选择项目模板“
EOS Kernel
”。
3.
在“名称”中输入新项目使用的文件夹名称“
eos
”。
4.
在“位置”中输入新项目保存在磁盘上的位置“
C:
”。
5.
点击“确定”按钮。
3.2
生成项目
1.
按
F7
生成项目,同时查看“输出”窗口中的内容,确认生 成成功。
2.
打开
C:eosdebug
文件夹,
查看生成的对象文件和目标文件。
找到
、
和
三个二进制文件,这三个文件就是
EOS
操作系统在运行时需要的可执行文件。
3.3
调试项目
第
页
共
页
华
北
电
力
大
学
实
验
报
告
1.
在“项目管理器”窗口的
ke p>
文件夹中找到
start.c
文件节点,
双击此文件节 点使用源代码编
辑器打开
start.c
文件。
2.
在
start.c p>
文件中
KiSystemStartup
函数的“
Ki InitializePic();
”语句所在行(第
61
行)< /p>
添加一个断点,如图
9-7
。
EOS
启动时执行的第一个内核函数就是
KiSystemStartup
函数 。
3.4
查看软盘镜像文件中的内容
,就会使用
Flo ppyImageEditor
工具
打开此文件
(
在
FloppyImageEditor
工具中按
F1< /p>
可以查看此工具的帮助文件
)
。
在
F loppyImageEditor
工具的文件列表中可以找到
文件和
文件,这两个文件都是在启动调试时被写
入
软盘镜像文件的(可以查看这两个文件的修改日期)
。
文件在启动 调试时被写入了软盘镜
像
的
引
导
扇
区
中
,
不
受
软
盘
文
件
系
统
的
管
理
,
所
以
在 p>
文
件
列
表
中
找
不
到
此
文
件
。
关
闭
FloppyImageEditor
工具。 p>
3.5
查看
EOS SDK
(
Software Development Kit
)文件夹
1.
点击
OS Lab
工具栏上的“项目配置”下拉列表,选择 下拉列表中的“
Release
”项目配
置,“
Release
”项目配置被设置为新的活动项目配置(原来的活动项目配置是“
Debug
”)
。如图:
4
、 p>
EOS
应用程序项目的生成和调试
4.1
新建
EOS
应用程序项目
1.
在“文件”菜单中选择“新建”,然后单击“项目”。
2.
在“新建项目”对话框中,选择项目模板“
EOS
应用程序”。
3.
在“名称”中输入新项目使用的文件夹名称“
eosapp
”。
4.
在“位置”中输入新项目保存在磁盘上的位置“< /p>
C:
”。
5.
点击“确定”按钮。
4.2
生成项目
1.
p>
按
F7
生成项目,同时查看“输出”窗口中的内容,确认生成成功。< /p>
2.
打开
C:eos appdebug
文件夹,
查看生成的对象文件和目标文件。
其中 的
就是
EOS
应用程序的可执行文件。<
/p>
4.3
调试项目
4.4
查看软盘镜像文件中的内容
4.5
修改
EOS
应用程序项目名称
5
、退出
OS Lab
1.
在“文件”菜单中选择“退出”。
2.
在
OS
Lab
关闭前会弹出一个保存数据 对话框
(可以选择对话框标题栏上的“帮助”按钮获得
帮助信息)
,核对学号和姓名无误后点击“保存”按钮,
OS Lab
关闭。
3.
在
OS Lab
关闭后默认会自动使用
Windo ws
资源管理器打开数据文件所在的文件夹,并且选中
刚刚保存的数据文
件(
OUD
文件)
。将数据文件备份保存在自己的文件中。
第
页
共
页
华
北
电
力
大
学
实
验
报
告
实验
2
操作系统的启动
一、实验目的
1
、
跟踪调试
EOS
< p>在PC
机上从加电复位到成功启动的全过程,
了解操作系统的 启动过程。
2
、查看
EOS
启动后的状态和行为,理解操作系统启动后的工作方式。
二、预备知识
阅读 本书第
3
章,
了解
EOS
操作系统 的启动过程。
阅读第
2
章中的第
2.4
< p>节,复习汇编语
言的相关知识,并掌握
NASM p>
汇编代码的特点。阅读附录
A
,了解
Bochs
和
Virtual
PC
这两款
虚拟机软件的特点,重点熟悉
Bochs
的调试命令。
三、实验内容
3.1
准备实验
1.
启动
OS Lab
。
2.
新建一个
EOS Kernel
项目。
3.
在“项目管理器”窗口中打开
boot
文件夹中的
和
两个汇编文件。 p>
是软盘引导扇区程序的源文件,
是
< p>loader程序的源文件。简单阅读一下这两个文
件中的
NASM
汇编代码和注释。
4.
按
F7
生成项目。
3.2
调试
EOS
操作系统的启动过程
3.2.1
使用
Bochs
做为远程目标机
1.
在“项目管理器”窗口中,右键点击项目节点,在弹 出的快捷菜单中选择“属性”。
2.
在弹出的“属性页”对话框右侧的属性列表中找到“远程目标机”属性,
将此属性值修改为
“
Bochs Debug
”(此时按
F1 p>
可以获得关于此属性的帮助)
。
3.
点击“确定”按钮关闭“属性页”对话框。接下来就可以使用
Bochs< /p>
模拟器调试
BIOS
程序和
软盘引导扇区程
序了。
3.2.2
调试
BIOS
程序
1.
在
Console
窗口中 输入调试命令
sreg
后按回车
2.
输入调试命令
r
后按回车
第
页
共
页
华
北
电
力
大
学
实
验
报
告
3.2.3
调试软盘引导扇区程序
3.2.4
调试加载程序
3.2.5
调试内核
3.2.6 EOS
启动后的状态和行为
在控制台中输入命令
“
ver
”
后按回车
在控制台中输入命令
“
pt< /p>
”
后按回车
第
页
共
页
华
北
电
力
大
学
实
验
报
告
实验
3
进程的创建
一、实验目的
1
、练习使用
EOS API
函数
CreateP rocess
创建一个进程,掌握创建进程的方法,理解
进程和程序的区
别。
2
、
调试跟踪
CreateProcess
函数的执行过程,
了解进程的创建过程, p>
理解进程是资源
分配的单位。
二、预备知识
阅读 本书第
5.1
节,重点理解程序和进程的关系,熟悉进程控制块结构体以及进程创
建的过程。仔细学习
CreateProcess
函数和 其它与创建进程相关的函数的说明,注意理解
这些函数的参数和返回值的意义。
三、实验内容
3.1
准备实验
按照下面的步骤准备本次实验:
1.
启动
OS Lab
。
2.
新建一个
EOS Kernel
项目。
3.
分别使用
Debug
配置和
Release
配置生成此项目 ,从而在该项目文件夹中生成完全版本的
EOS SDK
文
件夹。
4.
新建一个
EOS
应用程序项目。
5.
使用在第
3
步生成的
SDK
文件夹覆盖
EOS
应用程序项目文件夹中的
SDK
文件夹。
3.2
练习使用控制台命令创建
EOS
应用程序的进程
1.
在
EOS
应用程 序项目的“项目管理器”窗口中双击
文件,
使用
F loppyImageEditor
工具打
开此软盘镜像文件。
2.
将本实验文件夹中的
文 件拖动到
FloppyImageEditor
工具窗口的文件列表中释放, p>
文件即被添加到软盘镜像文件中。
一个
EOS
应用程序,
其源代码可以参见本实验文
件
夹中的
Hello.c
源文件。
3.
在
FloppyImageEditor
中选择“文件”菜单中的 “保存”后关闭
FloppyImageEditor
。
4.
按
F7
生成
EOS
应用项目。
第
页
共
页
华
北
电
力
大
学
实
验
报
告
3.3
练习通过编程的方式让应用程序创建另一个应用程序的进程
1.
使用
NewProc.c
文件中的 源代码替换之前创建的
EOS
应用程序项目中的
EOSApp.c
文件内的源代码。
2.
按
F7
生成修改后的
EOS
应用程序项目。
3.
按
F5
启动调试。
OS Lab
会首先弹出一个调试异常对话框。
4.
在调试异常对话框中选择“否”,继续执行。
3.4
调试
CreateProcess
函数
1.
按
F5
启动调试
E OS
应用程序,
OS Lab
会首先弹出一个调试异常对话框。
2.
选择“是”调试异常,调试会中断。
3.
在
main
函数中调用
CreateProcess
函数的代码行(第
57
行)添加一个断点。
4.
按
F5
继续调试,在断点处中断。
5.
按
F11
调试进入
CreateProcess
函数。此时已经开始进入
EOS
内核 进行调试。
3.5
调试
PsCreateProcess
函数
1.
在
PsCreatePr ocess
函数中找到调用
PspCreateProcessEnvironm ent
函数的代码行
(
create.c
文件的< /p>
第
163
行)
,并在此行添加一个断点。< /p>
2.
按
F5
继续调试,到此断点处中断。
3.
按
F11
调试进入
PspCreateProcessEnvironment
函数。
3.6
练习通过编程的方式创建应用程序的多个进程
使用
OS Lab
打开本实验文件夹中的参考源代码文件
NewTwoProc.c
,仔细阅读此文件中的源代码。使
用
NewTwoProc.c
文件中的源代码替换
EOS p>
应用程序项目中
EOSApp.c
文件内的源代码,生成后启动调 p>
试,查看多个进程并发执行的结果。
第
页
共
页
华
北
电
力
大
学
实
验
报
告
第
页
共
页
华
北
电
力
大
学
实
验
报
告
实验
4
线程的状态和转换
一、实验目的
1
、调试线程在各种状态间的转换过程,熟悉线程的状态和转换。
2
、通过为线程增加挂起状态,加深对线程状态的理解。
二、预备知识
阅读 本书第
5.2.3
节,了解线程都有哪些状态以及
EOS
是如何定义这些状态的。了解线程是如何在
这些状态之间进行转换的,特别是要阅
读一下
EOS
中用于线程转换的相关函数的源代码。阅读本书第
< br>5.2.4
节,
了解
EOS
为线程添加的挂 起状态,
以及
Suspend
和
Resume p>
原语操作。
线程状态的转换和线程的
同步、线程的调度是不可
分割的,所以建议读者简单学习一下第
5.3
和
5.4
< p>节中的内容。
三、实验内容
3.1
准备实验
按照下面的步骤准备实验:
1.
启动
OS Lab
。
2.
新建一个
EOS Kernel
项目。
3.2
调试线程状态的转换过程
1.
按 p>
F7
生成在本实验
3.1
中创建的
EO S Kernel
项目。
2.
按
F5
启动调试。
3.
待
EOS
启动完毕,在
< p>EOS控制台中输入命令“
loop
”后按回车。
< p>
4.
结束此次调试。
loop
命令执行的效果可以参见图:
3.2.1
线程由阻塞状态进入就绪状态
3.2.2
线程由运行状态进入就绪状态
3.2.3
线程由就绪状态进入运行状态
3.2.4
线程由运行状态进入阻塞状态
3.3
为线程增加挂起状态
1.
删除之前添加的所有断点。
2.
按
F5
启动调试。
3.
待
EOS
启动完毕,
在
EOS
控制台中输入命令“
loop
”后按回 车。
此时可以看到
loop
线程的执行计数在
不停增长,说明
loop
线程正在执行。记录下
loop p>
线程的
ID
。
4.
p>
按
Ctrl+F2
切换到控制台
2
,输 入命令“
suspend
31
”(如果
loop
线程的
ID
是
31
)后按回车。命 令执
行成功的结果如图
12-2
所示。
5.
按
Ctrl+1
切换回控制台 p>
1
,可以看到由于
loop
线程已经成功被挂起,其执 行计数已经停止增长了。
此时占用处理器的是
EOS
中的 空闲线程。
第
页
共
页
华
北
电
力
大
学
实
验
报
告
实验
5
进程的同步
一、实验目的
1
、 使用
EOS
的信号量,编程解决生产者—消费者问题,理解进程同步的意义。 p>
2
、调试跟踪
EOS
< p>信号量的工作过程,理解进程同步的原理。
3
、修改
EOS
的信号量算法,使之支持等待超时唤醒功能(有限等待),加 深理解进程同步的原
理。
二、预备知识
阅读 本书第
5
章中的
5.3
节,
学习< /p>
EOS
内核提供的三种同步对象
(该实验没有涉及到
Event
同步对
象)。重点理解各种同步对象的状态与使用方式。同时
学习经典的生产者-消费者问题。
阅读
5.2
节,学习在
EOS
应用程序中调用
EOS API
函数
CreateThread
创建线程的方法。
三、实验内容
3.1
准备实验
1.
启动
OS Lab
。
2.
新建一个
EOS Kernel
项目。
3.
生成
EOS Kernel
项目,从而在该项目文件夹中生成 p>
SDK
文件夹。
4.
新建一个
EOS
应用程序项目。
5.
使用在第
3
步生成的
SDK
文件夹覆盖
EOS
应用程序项目文件夹中的
SDK
文件夹。
3.2
使用
EOS
的信号量解决生产者-消费者问题
生产者-消费者同步执行的过程
3.3
调试
EOS
信号量的工作过程
3.3.1
创建信号量
第
页
共
页
西安交通大学英文地址-西安交通大学英文地址
上海大学英语老师-上海大学英语老师
大学生入伍几年-大学生入伍几年
中国最好的烹饪大学-中国最好的烹饪大学
河南哪个大学好-河南哪个大学好
纽约大学数学专业-纽约大学数学专业
国防大学徐焰-国防大学徐焰
湖南师范大学地图-湖南师范大学地图
-
上一篇:625-华北电力大学
下一篇:中国华电集团各地发电厂联系方式 精品