操作系统实验环境的使用

操作系统实验环境的使用
操作系统实验环境的使用

4.2、实验环境的使用实验内容

4.2.1、实验目的

●熟悉操作系统集成实验环境OS Lab的基本使用方法。

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

4.2.2、预备知识

对EOS操作系统和集成实验环境有一个初步的了解。

4.2.3、实验内容

4.2.3.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主要由下面的若干元素组成:菜单栏、

工具栏以及停靠在左侧和底部的各种工具窗口,余下的区域用来放置编辑器窗口。

4.2.3.2.学习OS Lab的基本使用方法

通过练习使用OS Lab编写一个Windows控制台应用程序,熟悉OS Lab的基本使用方法(主要包括新建项目、生成项目、调试项目等)。

1.新建Windows控制台应用程序项目

?新建一个Windows控制台应用程序项目的步骤如下:

①在“文件”菜单中选择“新建”,然后单击“项目”。

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

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

④在“位置”中输入新项目保存在磁盘上的位置“C:\Test”。

⑤点击“确定”按钮。

新建完毕后, OS Lab 会自动打开这个新建的项目。在“项目管理器”窗口中,树的根节点表示项目,可以看到项目的名称是“console”,各个子节点是项目包含的文件夹或者文件。此项目的源代码主要包含一个头文件

“console.h”和一个C语言源文件“console.c”,如图4.2.3.2—1。

使用Windows资源管理器打开磁盘上的“C:\test\oslab”文件夹查看项目中包含的文件(提示,在“项目管理器”窗口的项目节点上点击右键,然后在弹出的快捷菜单中选择“打开所在的文件夹”即可)。

图4.2.3.2—1:打开Windows控制台应用程序项目后的“项目管理器”窗口

生成项目

使用“生成项目”功能可以将程序的源代码编译为可执行的二进制文件,方法十分简单:在“生成”菜单中选择“生成项目”。

在项目的生成过程中,“输出”窗口会实时显示生成的进度和结果。如果源代码中不包含语法错误,会在最后提示生成成功,如图4.2.3.2—2:

图4.2.3.2—2:成功生成Windows控制台应用程序项目后的“输出”窗口

如果源代码中存在语法错误,“输出”窗口会输出相应的错误信息(包括错误所在文件的路径,错误在文件中的位置,以及错误原因),并在最后提示生成失败。此时在“输出”窗口中双击错误信息所在的行,OS Lab会使用源代码编辑器打开错误所在的文件,并自动定位到错误对应的代码行。可以在源代码中故意输入一些错误的代码(例如删除一个代码行结尾的分号),然后再次生成项目,练习在“输出”窗口中双击错误信息来定位存在错误的代码行,将代码修改正确后再生成项目。

生成过程是将每个源代码文件(.c、.cpp、.asm等文件)编译为一个对象

文件(.o文件),然后再将多个对象文件链接为一个目标文件(.exe、.dll等文件)。成功生成Windows控制台应用程序项目后,默认会在

“C:\test\oslab\debug" 目录下生成一个名称为“console.o”的对象文件和名称为“console.exe”的 Windows 控制台应用程序,可以使用Windows资源管理器查看这些文件。

?执行项目

在OS Lab中选择“调试”菜单中的“开始执行(不调试)”,可以执行此控制台应用程序。启动执行后会弹出一个Windows控制台窗口,显示控制台应用程序输出的内容。按任意键即可关闭此控制台窗口。

?调试项目

OS Lab 提供的调试器是一个功能强大的工具,使用此调试器可以观察程序的运行时行为并确定逻辑错误的位置,可以中断(或挂起)程序的执行以检查代码,计算和编辑程序中的变量,查看寄存器,以及查看从源代码创建的指令。为了顺利进行后面的各项实验,应该学会灵活使用这些调试功能。

在练习各种调试功能之前,需要对例子程序进行必要的修改,步骤如下:

①右键点击“项目管理器”窗口中的“源文件”文件夹节点,在弹出的快

捷菜单中选择“添加”中的“添加新文件”。

②在弹出的“添加新文件”对话框中选择“C 源文件”模板。

③在“名称”中输入文件名称“func”。

④点击“添加”按钮添加并自动打开文件func.c,此时的“项目管理器”

窗口如图4.2.3.2—3:

图4.2.3.2—3:添加func.c文件后的“项目管理器”窗口

在 func.c 文件中添加函数:

int Func (int n)

{

n = n + 1;

return n;

}

点击源代码编辑器上方的console.c标签,切换到console.c文件。将 main 函数修改为:

int main (int argc, char* argv[])

{

int Func (int n); // 声明Func函数

int n = 0;

n = Func(10);

printf ("Hello World!\n");

return 0;

}

代码修改完毕后按F7(“生成项目”功能的快捷键)。注意查看“输出”窗口中的内容,如果代码中存在语法错误,就根据错误信息进行修改,直到成功生成项目。

(1)使用断点中断执行

①、在main函数中定义变量n的代码行

int n = 0;

上点击鼠标右键,在弹出的快捷菜单中选择“插入/删除断点”,会在此行左侧的空白处显示了一个红色圆点,表示已经成功在此行代码处添加了一个断点,如图4.2.3.2—4:

图4.2.3.2—4:在console.c文件的main函数中添加断点后的代码行

②、在“调试”菜单中选择“启动调试”,Windows控制台应用程序开始执行,随后OS Lab窗口被自动激活,并且在刚刚添加断点的代码行左侧空白中显示了一个黄色箭头,表示程序已经在此行代码处中断执行(也就是说下一个要执行的就是此行代码),如图4.2.3.2—5:

图4.2.3.2—5:Windows控制台应用程序启动调试后在断点处中断执行

激活Windows控制台应用程序的窗口,可以看到窗口中没有输出任何内容,因为printf函数还没有被执行。

(2)单步调试

按照下面的步骤练习使用“逐过程”功能:

①在OS Lab的“调试”菜单中选择“逐过程”,“逐过程”功能会执行黄

色箭头当前指向的代码行,并将黄色箭头指向下一个要执行的代码行。

②按F10(“逐过程”功能的快捷键),黄色箭头就指向了调用printf函数

的代码行。查看控制台应用程序窗口,仍然没有任何输出。

③再次按F10执行printf函数,查看控制台应用程序窗口,可以看到已经

打印出了内容。

④仔细体会“逐过程”调试功能后,在“调试”菜单中选择“停止调试”,

结束此次调试。

按照下面的步骤练习使用“逐语句”功能和“跳出”功能:

①按F5(“启动调试”功能的快捷键),仍然会在之前设置的断点处中断。

②按F10逐过程调试,此时黄色箭头指向了调用函数Func的代码行。

③在“调试”菜单中选择“逐语句”,可以发现黄色箭头指向了函数Func

中,说明“逐语句”功能可以进入函数来调试函数中的语句。

④选择“调试”菜单中的“跳出”,会跳出Func函数,返回到上级函数中

继续调试(此时Func函数已经执行完毕)。

⑤按SHIFT+F5(“停止调试”功能的快捷键),结束此次调试。

自己练习使用“逐过程”、“逐语句”和“跳出”功能,注意体会“逐过程”和“逐语句”的不同。

(3)查看变量的值

在调试的过程中,OS Lab提供了三种查看变量值的方法,按照下面的步骤练习这些方法:

①按F5启动调试,仍然会在之前设置的断点处中断。

②将鼠标移动到源代码编辑器中变量n的名称上,此时会弹出一个窗口显

示出变量n当前的值(由于此时还没有给变量n赋值,所以是一个随机值)。

③在源代码编辑器中变量n的名称上点击鼠标右键,在弹出的快捷菜单中

选择“快速监视”,可以使用“快速监视”对话框查看变量n的值。点击“关闭”按钮关闭“快速监视”对话框。

④在源代码编辑器中变量n的名称上点击鼠标右键,在弹出的快捷菜单中

选择“添加监视”,变量n就被添加到了“监视”窗口中。使用“监视”

窗口可以随时查看变量的值和类型。此时按F10进行一次单步调试,可以看到“监视”窗口中变量n的值会变为0,如图4.2.3.2—6:

图4.2.3.2—6:使用“监视”窗口查看变量的值和类型

如果需要使用十进制查看变量的值,可以点击工具栏上的“十六进制”按钮,从而在十六进制和十进制间切换。自己练习使用不同的进制和不同的方法来查看变量的值,然后结束此次调试。

(4)调用堆栈

使用“调用堆栈”窗口可以在调试的过程中查看当前堆栈上的函数,帮助理解函数的调用层次和调用过程。按照下面的步骤练习使用“调用堆栈”窗口:

①按F5启动调试,仍然会在之前设置的断点处中断。

②选择“调试”菜单“窗口”中的“调用堆栈”,激活“调用堆栈”窗口。

可以看到当前“调用堆栈”窗口中只有一个main函数(包括参数值和函

数地址)。

③按F11(“逐语句”功能的快捷键)调试进入Func函数,查看“调用堆栈”

窗口可以发现在堆栈上有两个函数Func和main,其中当前正在调试的

Func函数在栈顶位置,main函数在栈底位置。说明是在main函数中调

用了Func函数。

④在“调用堆栈”窗口中双击main函数所在的行,会有一个绿色箭头指向

main函数所在的行,表示此函数是当前调用堆栈中的活动函数。同时会

将main函数所在的源代码文件打开,并也使用一个绿色箭头指向Func

函数返回后的位置。

⑤在“调用堆栈”窗口中双击Func函数所在的行,可以重新激活此堆栈帧,

并显示对应的源代码。

⑥反复双击“调用堆栈”窗口中Func函数和main函数所在的行,查看“监

视”窗口中变量n的值,可以看到在不同的堆栈帧被激活时,OS Lab调

试器会自动更新“监视”窗口中的数据,显示出对应于当前活动堆栈帧

的信息。

⑦结束此次调试。

2.EOS内核项目的生成和调试

之前练习了对Windows控制台应用程序项目的各项操作,对EOS内核项目的各项操作(包括新建、生成和各种调试功能等)与对Windows控制台项目的操作是完全一致的。所以,接下来实验内容的重点不再是各种操作的具体步骤,而应将注意力放在对EOS内核项目的理解上。

新建EOS内核项目

新建一个EOS内核项目的步骤如下:

①在“文件”菜单中选择“新建”,然后单击“项目”。

②在“新建项目”对话框中,选择项目模板“EOS Kernel”。

③在“名称”中输入新项目使用的文件夹名称“eos”。

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

⑤点击“确定”按钮。

此项目就是一个EOS操作系统内核项目,包含了EOS操作系统内核的所有源代码文件。

在“项目管理器”窗口中查看EOS内核项目包含的文件夹和源代码文件,可以看到不同的文件夹包含了EOS操作系统不同模块的源代码文件,例如“mm”文件夹中包含了内存管理模块的源代码文件,“boot”文件夹中包含了软盘引导扇区程序和加载程序的源代码文件。也可以使用Windows资源管理器打开项目所在的文件夹C:\eos,查看所有源代码文件。

?生成项目

①.按F7生成项目,同时查看“输出”窗口中的内容,确认生成成功。

②. 打开C:\eos\debug文件夹,查看生成的对象文件和目标文件。找到

boot.bin、loader.bin和kernel.dll三个二进制文件,这三个文件就是EOS 操作系统在运行时需要的可执行文件。OS Lab每次启动运行EOS操作系统之前,都会将这三个文件写入一个软盘镜像文件中,然后让虚拟机运行这个软盘镜像中的EOS(相当于将写有这三个二进制文件的软盘放入一个物理机的软盘驱动器中,然后按下开机按钮)。找到libkernel.a文件,此文件是EOS内核文件kernel.dll对应的导入库文件。

?调试项目

①.在“项目管理器”窗口的ke文件夹中找到start.c文件节点,双击此文

件节点使用源代码编辑器打开start.c文件。

②.在start.c文件中KiSystemStartup函数的“KiInitializePic();”语

句所在行(第61行)添加一个断点,如图4.2.3.2—7:

图4.2.3.2—8:在EOS内核项目的ke/start.c文件的第61行添加一个断点

③.按F5启动调试,虚拟机开始运行软盘镜像中的EOS。在虚拟机窗口中可

以看到EOS启动的过程。随后EOS会在刚刚添加的断点处中断执行。激活虚拟机窗口可以看到EOS也不再继续运行了。各种调试功能(包括单步调试、查看变量的值和各个调试工具窗口)的使用方法与调试Windows控制台程序完全相同,可以自己练习。

④.按F5继续执行。查看虚拟机窗口,显示EOS操作系统已经启动,并且

EOS的控制台程序已经开始运行了。

⑤.在“调试”菜单中选择“停止调试”,结束此次调试。

?查看软盘镜像文件中的内容

在“项目管理器”窗口中双击软盘镜像文件Floppy.img,就会使用FloppyImageEditor工具打开此文件(在FloppyImageEditor工具中按F1可以查看此工具的帮助文件)。在FloppyImageEditor工具的文件列表中可以找到loader.bin文件和kernel.dll文件,这两个文件都是在启动调试时被写入软盘镜像文件的(可以查看这两个文件的修改日期)。boot.bin文件在启动调试时被写入了软盘镜像的引导扇区中,不受软盘文件系统的管理,所以在文件列表中找不到此文件。关闭FloppyImageEditor工具。

(1)查看EOS SDK(Software Development Kit)文件夹

①点击OS Lab工具栏上的“项目配置”下拉列表,选择下拉列表中的

“Release”项目配置,“Release”项目配置被设置为新的活动项目配置(原来的活动项目配置是“Debug”)。如图4.2.3.2—8:

②按F7使用Release配置生成项目。

③生成完毕后,使用Windows资源管理器打开C:\eos文件夹,可以发现在

文件夹中多出了一个SDK文件夹,此文件夹就是在生成EOS Kernel项目

的同时自动生成的。

④ SDK文件夹中提供了开发EOS应用程序需要的所有文件。打开SDK文件夹

中的bin文件夹,可以看到有两个名称分别为debug和release的文件夹。

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

别打开这两个文件夹查看其中包含的文件。

⑤打开SDK文件夹中的inc文件夹,可以看到此文件夹中存放了EOS用于导

出API函数和重要数据类型定义的头文件,在编写EOS应用程序时必须包含这些头文件。

图4.2.3.2—8:使用工具栏上的“项目配置”下拉列表切换活动项目配置

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

3.EOS应用程序项目的生成和调试

?新建EOS应用程序项目

新建一个EOS内核项目的步骤如下:

①在“文件”菜单中选择“新建”,然后单击“项目”。

②在“新建项目”对话框中,选择项目模板“EOS应用程序”。

③在“名称”中输入新项目使用的文件夹名称“eosapp”。

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

⑤点击“确定”按钮。

此项目就是一个EOS应用程序项目。

使用Windows资源管理器将之前生成的C:\eos\sdk文件夹拷贝覆盖到

C:\eosapp\sdk位置。这样EOS应用程序就可以使用最新版本的EOS SDK文件夹了。

?生成项目

①.按F7生成项目,同时查看“输出”窗口中的内容,确认生成成功。

②.打开C:\eosapp\debug文件夹,查看生成的对象文件和目标文件。其中

的EOSApp.exe就是EOS应用程序的可执行文件。OS Lab每次启动执行

EOS应用程序时,都会将EOS应用程序的可执行文件写入软盘镜像,并

且会将SDK文件夹中对应配置(Debug或Release)的二进制文件写入软

盘镜像,然后让虚拟机运行软盘镜像中的EOS,待EOS启动后再自动执

行EOS应用程序。

?调试项目

调试EOS应用程序项目与之前的两个项目有较大的不同,之前的两个项目在调试时都是先添加断点再启动调试,而EOS应用程序项目必须先启动调试再添加断点,步骤如下:

①按F5启动调试。OS Lab会弹出一个调试异常对话框,选择“是”调试

异常,EOS应用程序会中断执行,黄色箭头指向下一个要执行的代码行。

②在eosapp.c的

printf("Hello world!\n");

代码行添加一个断点,然后按F5继续调试,在此断点处中断。

③按F10单步调试,查看虚拟机窗口,打印输出了“Hello world!”。

④按F5继续调试,查看虚拟机窗口,EOS应用程序执行完毕。

⑤在“调试”菜单中选择“停止调试”,调试被终止。

⑥选择“调试”菜单中的“删除所有断点”。只有删除所有断点后才能按

F5再次启动调试,否则启动调试会失败。

?查看软盘镜像文件中的内容

使用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文件查看其内容。

结合前面讲到过的关于EOS应用程序从源代码到可在虚拟机中运行过程的介绍,仔细体会EOS应用程序项目生成、调试的过程,以及EOS应用程序是如何使用EOS SDK文件夹的。

4.退出OS Lab

①在“文件”菜单中选择“退出”。

②在OS Lab关闭前会弹出一个保存数据对话框(可以选择对话框标题栏上的

“帮助”按钮获得帮助信息),核对学号和姓名无误后点击“保存”按钮,OS Lab关闭。

③在OS Lab关闭后默认会自动使用Windows资源管理器打开数据文件所在的

文件夹,并且选中刚刚保存的数据文件(OUD文件)。将数据文件备份(例如拷贝到自己的U盘中或者发送到服务器上),做为本次实验的考评依据。

5.保存EOS内核项目

如果要在课余时间阅读EOS源代码,或者调试EOS源代码,可以按照下面的步骤操作:

①使用OS Lab重新打开之前创建的EOS内核项目(启动OS Lab后,在“起

始页”的“最近的项目”列表中会有之前创建的EOS内核项目的快捷方

式“kernel”)。

②使用Debug配置生成此项目。再次启动调试此项目后结束调试,从而制

作包含Debug版本EOS操作系统的软盘镜像文件。

③将此项目文件夹复制到自己的计算机中。注意,项目文件夹在磁盘中的

位置不能改变,例如实验中此项目在C:\eos位置,就必须复制到自己计

算机中的C:\eos位置。

④在自己的计算机中安装OS Lab演示版,使用演示版程序阅读EOS源代码,

或者调试EOS源代码。

OS Lab演示版程序可以使用教师分发的安装包进行安装。建议使用和正式版版本号相同的演示版程序。

4.3、思考与练习

●练习使用单步调试功能(逐过程、逐语句),体会在哪些情况下应该使用“逐

过程”调试,在哪些情况下应该使用“逐语句”调试。练习使用各种调试工具(包括“监视”窗口、“调用堆栈”窗口等)。

●思考生成EOS SDK文件夹的目的和作用。查看EOS SDK文件夹中的内容,明

白文件夹的组织结构和各个文件的来源和作用。查看EOS应用程序包含了SDK文件夹中的哪些头文件,是如何包含的?

2017201212李博浩第一讲 实验环境的使用

操作系统 实验报告 哈尔滨工程大学

第一讲实验环境的使用 一、实验概述 1. 实验名称 实验环境的使用 2. 实验目的 熟悉操作系统集成实验环境OS Lab 的基本使用方法。 练习编译、调试EOS 操作系统内核以及EOS 应用程序。 3. 实验类型 验证 4. 实验内容 启动OS Lab ,学习OS Lab 的基本使用方法,新建Windows 控制台应用程序项目,生成项目,执行项目,调试项目,使用断点中断执行,单步调试,查看变量的值,调用堆栈,EOS 内核项目的生成和调试,新建EOS 内核项目,生成项目,查看EOS SDK(Software Development Kit)文件夹,EOS 应用程序项目的生成和调试,新建EOS 应用程序项目,生成项目,调试项目,修改EOS 应用程序项目名称,退出OS Lab,保存EOS 内核项目。 二、实验环境 Windows xp操作系统,tevation os lab,c(c++)语言 三、实验过程 1.启动OS Lab ,学习OS Lab 的基本使用方法,新建Windows 控制台应用程序项目,生成项目,执行项目,调试项目 新建一个EOS 应用程序项目的步骤如下: 1. 在“文件”菜单中选择“新建”,然后单击“项目”。 2. 在“新建项目”对话框中,选择项目模板“EOS 应用程序”。 3. 在“名称”中输入新项目使用的文件夹名称“eosapp”。 4. 在“位置”中输入新项目保存在磁盘上的位置“C:\”。 5. 点击“确定”按钮。 此项目就是一个EOS 应用程序项目。 使用Windows 资源管理器将之前生成的C:\eos\sdk 文件夹拷贝覆盖到C:\eosapp\sdk 位置。这样EOS

操作系统实验实验1

广州大学学生实验报告 1、实验目的 1.1、掌握进程的概念,明确进程的含义 1.2、认识并了解并发执行的实质 2.1、掌握进程另外的创建方法 2.2、熟悉进程的睡眠、同步、撤消等进程控制方法 3.1、进一步认识并发执行的实质 3.2、分析进程竞争资源的现象,学习解决进程互斥的方法 4.1、了解守护进程 5.1、了解什么是信号 5.2、INUX系统中进程之间软中断通信的基本原理 6.1、了解什么是管道 6.2、熟悉UNIX/LINUX支持的管道通信方式 7.1、了解什么是消息 7.2、熟悉消息传送的机理 8.1、了解和熟悉共享存储机制 二、实验内容 1.1、编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统 中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。试观察记录屏幕上的显示结果,并分析原因。 1.2、修改上述程序,每一个进程循环显示一句话。子进程显示'daughter …'及 'son ……',父进程显示'parent ……',观察结果,分析原因。 2.1、用fork( )创建一个进程,再调用exec( )用新的程序替换该子进程的内容 2.2、利用wait( )来控制进程执行顺序 3.1、修改实验(一)中的程序2,用lockf( )来给每一个进程加锁,以实现进程之间的互斥 3.2、观察并分析出现的现象 4.1、写一个使用守护进程(daemon)的程序,来实现: 创建一个日志文件/var/log/Mydaemon.log ; 每分钟都向其中写入一个时间戳(使用time_t的格式) ; 5.1、用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按^c键);捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child process1 is killed by parent! Child process2 is killed by parent! 父进程等待两个子进程终止后,输出如下的信息后终止: Parent process is killed! 5.2、用软中断通信实现进程同步的机理

操作系统实验题目2

实验报告撰写要求实验报告要求具有以下内容: 一、实验目的 二、实验内容 三、实验要求 四、算法流程图 五、给出测试数据及运行结果 六、实验体会或对改进实验的建议

实验1 进程调度(2学时) 一、实验目的 通过实验加强对进程调度算法的理解和掌握。 二、实验内容 编写程序实现基于优先级的时间片轮转调度算法。 三、实验要求 1、假定系统有5个进程,每个进程用一个进程控制块PCB来代表,进程控制块的结构如下图1.1所示: 图1.1 其中: 进程名:作为进程的标识,假设五个进程的进程名分别为p1,p2,p3,

p4,p5。 指针:进程按顺序排成循环链表,用指针指出下一个进程的进程控制块首地址,最后一个进程中的指针指出第一个进程的进程控制块首地址。 要求运行时间:假设进程需要运行的单位时间数。 已运行时间:假设进程已经运行的单位时间数,初值为0。 状态:可假设有两种状态,就绪状态和结束状态。进程的初始状态都为就绪状态。 2、每次运行所设计的处理器调度程序调度进程之前,为每个进程随机确定它的要求运行时间。 3、此程序是模拟处理器调度,因此,被选中的进程并不实际启动运行,而是执行 已运行时间+1 来模拟进程的一次运行,表示进程已经运行过一个单位时间。 4、在所设计的程序中应有显示语句,能显示每次被选中的进程名以及运行一次后进程队列的变化。

实验2 银行家算法(2学时) 一、实验目的 理解银行家算法,掌握进程安全性检查的方法及资源分配的方法。 二、实验内容 编写程序实现银行家算法,并验证程序的正确性。 三、实验要求 编制模拟银行家算法的程序,并以下面给出的例子验证所编写的程序的正确性。 例子:某系统有A、B、C、D 4类资源共5个进程(P0、P1、P2、P3、P4)共享,各进程对资源的需求和分配情况如下表所示。 现在系统中A、B、C、D 4类资源分别还剩1、5、2、0个,请按

操作系统实验_实验1

广州大学学生实验报告 开课学院及实验室:计算机科学与工程实验室 2015年11月11日 实验课 操作系统成绩 程名称 实验项 进程管理与进程通信指导老师陈康民目名称 (***报告只能为文字和图片,老师评语将添加到此处,学生请勿作答***) 进程管理 (一)进程的创建实验 一、实验目的 1、掌握进程的概念,明确进程的含义 2、认识并了解并发执行的实质 二、实验内容 1、编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一 个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。试观察记录屏幕上的显示结果,并分析原因。 2、修改上述程序,每一个进程循环显示一句话。子进程显示'daughter …'及'son ……', 父进程显示'parent ……',观察结果,分析原因。 三、实验步骤 1、编写一段程序,使用系统调用fork( )创建两个子进程。 代码: #include main( ) { int p1,p2; while((p1=fork( ))= = -1); /*创建子进程p1*/ if (p1= =0) putchar('b'); else { while((p2=fork( ))= = -1); /*创建子进程p2*/ if(p2= =0) putchar('c'); else putchar('a'); } } 运行结果:

bca,bac, abc ,……都有可能。 2、修改上述程序,每一个进程循环显示一句话。子进程显示'daughter …'及'son ……',父进程显示'parent ……',观察结果,分析原因。 代码:#include main( ) { int p1,p2,i; while((p1=fork( ))= = -1); /*创建子进程p1*/ if (p1= =0) for(i=0;i<10;i++) printf("daughter %d\n",i); else { while((p2=fork( ))= = -1); /*创建子进程p2*/ if(p2= =0) for(i=0;i<10;i++) printf("son %d\n",i); else for(i=0;i<10;i++) printf("parent %d\n",i); } } 结果:

操作系统实验2

武汉工程大学计算机科学与工程学院 《操作系统》实验报告 专业班级13计工01班实验地点计工403机房学生学号1305120610 指导教师张立 学生姓名李敏实验时间2014-10-19 /2014- 10-26 实验项目实验二、创建线程及线程通信 实验类别操作性()验证性()设计性(√)综合性()其它实 验 目的及要求(1)熟悉Windows中的线程及进程的创建 (2)掌握利用Windows中的同步机制实现线程同步及通信。 成绩评定表 类别评分标准分值得分合计 上机表现积极出勤、遵守纪律 主动完成实验设计任务 30分 实验报告及时递交、填写规范 内容完整、体现收获 70分 说明: 评阅教师:张立 日期: 2015 年 11 月 1 日

实验内容 一、实验内容 要求:创建线程,利用互斥实现线程共享变量通信。 示例程序:Thread.exe 简要说明: 1、点“创建线程”按钮,创建两个线程,一个线程不断对一个变量加1, 结果显示在第一个文本框中。另一个线程不断对另一个变量减1,结果显示在第二个文本框中。这两个线程之间没有交互,仅用于演示线程的创建。 2、演示线程互斥,点“线程互斥”按钮,创建两个线程,一个线程不断循 环,每次循环对共享变量x做100次加1操作(这100次加1操作作为一个临界区CSa),另一个线程不断循环,每次循环对共享变量x做100次减1操作(这100次减1操作作为一个临界区CSb),结果显示在第三个文本框中。可以看到结果是从0到100,然后又从100回到0。可见CSa 和CSb两个临界区是互斥的。 3、除了没有互斥,其它同2,结果显示在第四个文本框中。可见CSa和CSb 两个临界区的执行是有交叉的,CSa的执行可能被CSb打断,CSb的执行也可能被CSa打断 二、源代码 UINT ThreadA(LPVOID pParam) { CThreadDlg * pParent=(CThreadDlg *)pParam; pParent->DoThreadA(); return 0; } UINT ThreadB(LPVOID pParam) { CThreadDlg * pParent=(CThreadDlg *)pParam; pParent->DoThreadB(); return 0; } UINT ThreadC(LPVOID pParam) { CThreadDlg * pParent=(CThreadDlg *)pParam; pParent->DoThreadC(); return 0; } UINT ThreadD(LPVOID pParam) { CThreadDlg * pParent=(CThreadDlg *)pParam; pParent->DoThreadD(); return 0;

苏州大学操作系统实验1

实验一Linux系统 实验目的: (1)熟悉Linux操作系统,并尝试在Linux环境下编程。 (2)使用vi编辑器,了解用C语言编写文本处理程序的具体过程。 实验要求: (1)根据报告册上的提示进行操作,创建自己的目录,以及输入编译和执行C 程序。 (2)使用C语言编写一个词频(限英文文章)统计程序,使之能够给出各个单词在输入文件中的出现次数。 (3)使用C语言编写一个反向打印程序,使之能够按与输入文件中文本行相反的次序来打印(即后出现的文本行先打印)。 问题分析: 1.1实验没有具体要求英语文章是从文件中读出,还是直接由用户从屏幕上输入一篇,因此要根据自己的情况确定读取方式。 1.2统计每个单词出现的次数及频率。 1.3将结果输出到屏幕上,要解决如何不重复输出相同单词出现的频率。 1.4如何把用户输入的文本行以相反的顺序输到屏幕上的算法。 实验程序清单: #include #include void main() { char str[500][26]; //定义一个二维字符数组存放单词

const char str1[4]="000"; //定义一个const变量,用于停止输入 const char str2=' '; //定义一个const变量,用于初始化二维数组 int num[500]; //定义一个整型数组,用于单词出现频率的计数 int mark[500]; //定义一个整型数组,用来标记已出现过的单词 int i,j,m,x; int len; double q[500]; //定义一个浮点型数组,用来存放出现频率的数值again: m=0;j=0;i=0;x=0; //对m,j,i,x进行初始化 for(m=0;m<500;m++) //对num,mark,q数组初始化 { num[m]=0; mark[m]=0; q[m]=0; } for(m=0;m<500;m++) //对二维数组str进行初始化 { strcpy(str[m],&str2); } printf("请输入英文文章(单词数限制在500以内,每个单词不大于25个字符)\n"); //对用户的引导语句 printf("输入“000”代表文章输入终止!\n"); //对用户的引导语句 for(m=0;m<500;m++) //使用for循环,将用户输入的单词依次放入二维数组{ scanf("%s",str[m]); if(strcmp(str[m],str1)==0)//直到用户输入000,结束输入 break; } for(i=0;ii) //当j大于i时 { mark[i]=1; //标记此时的mark } num[i]++; //当两个单词相同,num[i]加1 } } q[i]=(double)num[i]/m; //获得单词出现的频率 } for(i=0;i

操作系统实验一

本科实验报告 课程名称:操作系统 学号: 姓名: 专业: 班级: 指导教师: 课内实验目录及成绩 信息技术学院

实验(实验一) 1 实验名称:基本shell命令及用户管理 2 实验目的 2.1 掌握安装Linux操作系统的方法。 2.2 掌握Linux操作系统的基本配置。 2.3 了解GNOME桌面环境。 2.4 掌握基本shell命令的使用。 3 实验准备 3.1 下载VMware Workstation虚拟机软件(版本不限)。 3.2 准备Linux操作系统的安装源(内核版本和发行版本均不限)。 注:实验准备、实验内容4.1和4.2作为回家作业布置,同学们利用课余时间可在私人计算机上完成。 4 实验要求、步骤及结果 4.1 安装虚拟机软件。 【操作要求】安装VMware Workstation虚拟机软件,并填写以下4.1.1和4.1.2的内容。 4.1.1【VMware Workstation虚拟机版本号】 4.1.2【主要配置参数】 4.2 安装Linux操作系统。 【操作要求】安装Linux操作系统,版本不限。 Linux发行版本: Linux内核版本:

【主要操作步骤:包括分区情况】 1、创建一台虚拟机安装操作系统时客户机操作系统选择Linux 2、修改虚拟机的安装路径。 3、建一个新的虚拟磁盘,磁盘的空间20GB,并且将单个文件存储虚拟磁盘。 4、设置分区完毕,安装虚拟机 4.3 了解Linux操作系统的桌面环境之一GNOME。 【操作要求】查看桌面图标,查看主菜单,查看个人用户主目录等个人使用环境。【操作步骤1】桌面图标

【操作步骤2】主菜单 【操作步骤3】个人用户主目录 【操作步骤4】启动字符终端

操作系统实验二

操作系统实验实验二进程管理 学号 1215108019 姓名克帆 学院信息学院 班级 12电子2

实验目的 1、理解进程的概念,明确进程和程序的区别。 2、理解并发执行的实质。 3、掌握进程的创建、睡眠、撤销等进程控制方法。 实验容与要求 基本要求:用C语言编写程序,模拟实现创建新的进程;查看运行进程;换出某个进程;杀死进程等功能。 实验报告容 1、进程、进程控制块等的基本原理。 进程是现代操作系统中的一个最基本也是最重要的概念,掌握这个概念对于理解操作系统实质,分析、设计操作系统都有其非常重要的意义。为了强调进程的并发性和动态性,可以给进程作如下定义:进程是可并发执行的程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位。 进程又就绪、执行、阻塞三种基本状态,三者的变迁图如下: 由于多个程序并发执行,各程序需要轮流使用CPU,当某程序不在CPU上运行时,必须保留其被中断的程序的现场,包括:断点地址、程序状态字、通用寄存器的容、堆栈容、程序当前状态、程序的大小、运行时间等信息,以便程序再次获得CPU时,能够正确执行。为了保存这些容,需要建立—个专用数据结构,我们称这个数据结构为进程控制块PCB (Process Control Block)。 进程控制块是进程存在的惟一标志,它跟踪程序执行的情况,表明了进程在当前时刻的状态以及与其它进程和资源的关系。当创建一个进程时,实际上就是为其建立一个进程控制块。 在通常的操作系统中,PCB应包含如下一些信息: ①进程标识信息。为了标识系统中的各个进程,每个进程必须有惟一的标识名或标 识数。 ②位置信息。指出进程的程序和数据部分在存或外存中的物理位置。 ③状态信息。指出进程当前所处的状态,作为进程调度、分配CPU的依据。 ④进程的优先级。一般根据进程的轻重缓急其它信息。 这里给出的只是一般操作系统中PCB所应具有的容,不同操作系统的PCB结构是不同的,我们将在2.8节介绍Linux系统的PCB结构。

实验环境介绍

DSP原理及应用实验教材——28335和6713实验教程 电工电子中心 版本号:V1.00 徐东

目录 1.实验环境 (1) 1.1 实验箱介绍 (1) 1.1.1主板SEED-DTK_MBoard (1) 1.1.228335核心板SEED-DEC28335 (14) 1.1.36713核心板SEED-DEC6713 (14) 1.2软件和驱动程序安装方法: (15) 1.2.1 CCS3.3软件安装 (15) 1.2.2 仿真器SEED-XDS510PLUS 的驱动安装 (18) 1.2.3 驱动程序的配置 (22) 1.3 不同核心板切换方法 (25) 2.TMS320F28335实验内容 (26) 2.1软件学习实验之一(CCS 使用) (26) 2.1.1 实验目的: (26) 2.1.2 实验内容: (26) 2.1. 3 实验背景知识: (26) 2.1.4 实验准备: (31) 2.1.5 实验步骤: (31) 2.2 CCS 入门实验2(C 语言的使用) (38) 2.2.1 实验目的: (38) 2.2.2实验内容: (38) 2.2.3 实验背景知识: (38) 未定义书签。。 2.2.4 实验程序,包含文件:.................................................................................... 错误!未定义书签 2.2.5 实验准备: (40) 2.2.6 实验步骤: (41)

实验环境 1.实验环境 这一部分内容是实验前的准备工作。所谓实验环境,包括硬件环境和软件环境。硬件环境,也就是实验箱;软件环境包括调试软件的安装和使用。安装我们在这一部分介绍,使用作为实验内容在下一部分学习。 1.1 实验箱介绍 实验箱有两部分组成:实验箱主板和核心板。其中主板的型号是SEED-DTK_MBoard,主板上可以安装不同型号的核心板,本课程实验包括SEED-DEC28335和SEED-DEC6713两种核心板。下面介绍实验箱的硬件配置。 1.1.1主板SEED-DTK_MBoard 在SEED-DTK_MBoard 中主要集成了DSP、FLASH、SRAM、UART、LCD 和D/A等外设。这样使其能够应用在显示、键盘和模拟信号输出及其相关的领域。主板的主要功能模块如下图所示,包括: TMS320VC5402@100MHz DSP主控制器 外扩SRAM,最大容量为256K x 16 位,基本配置为64K x 16 位 外扩Flash,最大容量为512K x 16 位,基本配置为256K x 16 位 通用键盘接口,最多支持20 个按键,配有19 个按键的薄膜键盘 LCD 液晶显示器接口,支持T6963C 控制器,配240×128 点阵LCD 4路D/A 输出 1路UART 接口,接口标准CMOS 电平/RS232/RS485 可硬件选配 1路McBSP 接口 JTAG 仿真器接口,方便二次开发

上海大学操作系统(二)实验报告(全)

评分: SHANGHAI UNIVERSITY 操作系统实验报告 学院计算机工程与科学 专业计算机科学与技术 学号 学生姓名

《计算机操作系统》实验一报告 实验一题目:操作系统的进程调度 姓名:张佳慧学号 :12122544 实验日期: 2015.1 实验环境: Microsoft Visual Studio 实验目的: 进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。本实习要求学生独立地用高级语言编写和调试一个简单的进程调度程序。调度算法可任意选择或自行设计。例如,简单轮转法和优先数法等。本实习可加深对于进程调度和各种调度算法的理解。实验内容: 1、设计一个有n个进程工行的进程调度程序。每个进程由一个进程控制块(PCB)表示。进程控制块通常应包含下述信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间以及进程的状态等,且可按调度算法的不同而增删。 2、调度程序应包含2~3种不同的调度算法,运行时可任意选一种,以利于各种算法的分析比较。 3、系统应能显示或打印各进程状态和参数的变化情况,便于观察诸进程的调度过程。 操作过程: 1、本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。进程控制块结构如下: 进程控制块结构如下: PCB 进程标识数 链指针 优先数/轮转时间片数 占用 CPU 时间片数 进程所需时间片数 进程状态 进程控制块链结构如下:

其中:RUN—当前运行进程指针; HEAD—进程就绪链链首指针; TAID—进程就绪链链尾指针。2、算法与框图 (1) 优先数法。进程就绪链按优先数大小从高到低排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减 1,说明它已运行了一个时间片,优先数也减 3,理由是该进程如果在一个时间片中完成不了,优先级应该降低一级。接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续进行,否则,调度就绪链链首进程投入运行。原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。 (2) 简单轮转法。进程就绪链按各进程进入的先后次序排列,进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相当于优先数法的优先数记录项位置)。每过一个时间片,运行进程占用处理机的时间片数加 1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。 (3) 程序框图

操作系统实验报告.

学生学号0121210680225 实验课成绩 武汉理工大学 学生实验报告书 实验课程名称操作系统 开课学院计算机科学与技术学院 指导老师姓名刘军 学生姓名李安福 学生专业班级软件sy1201 2014 — 2015 学年第一学期

《操作系统》实验教学大纲 课程编号: 课程名称:操作系统/Operating System 实验总学时数:12学时 适应专业:计算机科学与技术、软件工程 承担实验室:计算机科学与技术学院实验中心 一、实验教学的目的和任务 通过实验掌握Linux系统下常用键盘命令、系统调用、SHELL编程、后台批处理和C程序开发调试手段等基本用法。 二、实验项目及学时分配 序号实验项目名称实验学时实验类型开出要求 01 Linux键盘命令和vi 2 设计必开 02 Linux下C编程 2 设计必开 03 SHELL编程和后台批处理 2 设计必开 04 Linux系统调用(time) 2 设计必开 05 Linux进程控制(fork) 4 设计必开 三、每项实验的内容和要求: 1、Linux键盘命令和vi 要求:掌握Linux系统键盘命令的使用方法。 内容:见教材p4, p9, p40, p49-53, p89, p100 2、Linux下的C编程 要求:掌握vi编辑器的使用方法;掌握Linux下C程序的源程序编辑方法;编译、连接和运行方法。 内容:设计、编辑、编译、连接以及运行一个C程序,其中包含键盘输入和屏幕输出语句。 3、SHELL编程和后台批处理 要求:掌握Linux系统的SHELL编程方法和后台批处理方法。 内容:(1) 将编译、连接以及运行上述C程序各步骤用SHELL程序批处理完成,前台运行。 (2) 将上面SHELLL程序后台运行。观察原C程序运行时输入输出情况。 (3) 修改调试上面SHELL程序和C程序,使得在后台批处理方式下,原键 盘输入内容可以键盘命令行位置参数方式交互式输入替代原键盘输入内容, 然后输出到屏幕。 4、Linux系统调用使用方法。

操作系统(2)实验六

SHANGHAI UNIVERSITY <操作系统>实验报告 学院计算机工程与科学学院学号10122050 姓名王杰 指导老师张建 日期2014.03.07

实验六FAT文件系统实验 一、实验目的: 1、从系统分析的角度出发,了解FAT文件系统的组织结构和文件的存储方式。 2、进一步理解操作系统文件管理的基本思想。 二、实验内容: 1..进入DEBUG环境,装入FAT文件系统结构。 执行命令:L 0 0 0 21 2.观察1.44M软盘中FAT12文件系统结构。 执行命令:D 0000 软盘有两面,每面80个磁道,每个磁道18个扇区,每个扇区512个字节,所以软盘的容量是2*80*18*512 = 1474560, 1474560/1024/1024大约为1.44M。 3.分析文件分配表结构,了解用簇链映射的文件的链式存储结构。 执行命令:D 200

◆思考:上面屏幕显示首簇号为003的文件共包括几个扇区?它分布在哪几个物理扇区上? 答:首簇号为003的文件共包括2个扇区,它分布在0道0面2、3扇。 4.观察1.44M软盘中文件目录表FDT以及文件目录结构 执行命令:L 0 0 0 21 说明:将逻辑扇区0H开始的共21H个物理扇区装入DS:0000H起始的内存。 执行命令:D 2600 说明:显示从2600H地址开始的FDT文件表。 思考:①计算1.44M的软盘根目录最多可以容纳多少文件? 答:1.44MB软盘的文件目录表FDT共14个扇区,每个文件的目录登记项占用32个字

节,用作目录的一个扇区(512字节)最多只能装入512/32=16个文件。因此,1.44MB软盘的根目录下最多可建文件或子目录224个。 ②上图屏幕显示的文件BAK.txt的目录项中标示该文件的首簇号在何处?该文件是什么属性? 答:首簇号在第2行的1A~1B字节处,首簇号为002,该文件属于归档文件。 书上显示的文件office.txt首簇号在第6行的1A~1B字节处,首簇号为091,属归档文件。 ③书上面的屏幕显示第1~2行目录项表示的是什么项目? 答:第1~2目录项表示卷标。 5.观察1.44M软盘中文件目录表的长文件名目录结构 思考:①书上面屏幕显示的2~3行是什么目录项? 答:长名的第一项,也是最后一项。 ②若有一个文件名共长34个字符,要占多少目录项? 答:四个目录项,三个长目录项和一个短目录项。 6.自己动手做: ①观察测试软盘的FDT区,找到名为BAK的文件目录。该文件是什么类型的文件?文件放在磁盘的哪个位置?占用几个存储单位?调出其内容看看。 该文件为BAK.txt,属于归档文件。察看其首簇号为002,对应了数据区21H逻辑扇区。执行:L 0 0 0 21 D 2600 察看内容执行:L 8000 0 21 8

实验2--操作系统环境

2.1 操作系统的计算环境 2.1.1 操作系统计算环境的背景 本实验帮助回顾Windows 2000/XP 、UNIX 和Linux 的计算环境术语,加深理解 有关操作系统的基础概念。学生还将调查在学校或其他机构中Windows 、UNIX 和Linux 的使用情况,看哪些机构在使用Windows 、UNIX 或者Linux 系统;研究Web 站点,看哪些因特网网站 (尤其是简体中文网站) 分别支持着Windows 、UNIX 和Linux 操作系统的应用。 2.1.2 练习与实验 本节“练习与实验”的目的是: 通过实验,加深对以下内容的理解: 1) 基本的计算机硬件组件; 2) 计算机操作系统; 3) Windows 的发展和版本 4) UNIX 和Linux 的历史和版本; 5) Windows XP 、UNIX 或Linux 操作环境。 调查在机构、学校和学生中Windows 、UNIX 和Linux 操作系统的使用情况。 实验 2 操作系统环境

26 操作系统原理实验(第二版) 分别研究支持Windows和Linux的Web站点。 1. 工具/准备工作 在开始本实验之前,请回顾教科书的相关内容。 请联系指导老师或者熟识网络技术的人士,如学校或企业信息技术部门的职员,了解你所在的学校 (或者其他机构) 中使用了哪些服务器和网络操作系统,找出是否在用Windows 2000/XP、UNIX和Linux以及在哪里使用这些操作系统。 需要准备一台带有浏览器,能够访问因特网的计算机。 2. 实验内容与步骤 (1) 识别一台计算机的4个主要硬件组成部分。 1) __运算器___ 2) ___控制器 3) 存储器 4) 输入输出设备 (2) 在空格中,填写3个概念中的一个:内核、shell或者文件系统。 1) shell_____________ 表现为用户界面,把用户的需求翻译为系统活动。 2) 文件系统____________ 在用户之间管理和分配资源。 3) 内核______________ 提供命令解释。 4) 文件系统____________ 以层次化的结构组织和存储数据。 5) 内核___________ 进行内存管理。 6) 文件系统________ 组成部分是文件和目录。 7) shell_________ 管理硬盘、磁带机、打印机、终端、通信线路和其他设备。 (3) Windows XP操作系统的主要优点是什么? 1) 兼容性好,软件资源最丰富。 2) 速度快 3)占用资源较少 4) 用户操作无障碍,绝大部分会用电脑的人都能比较自如的使用XP (4) UNIX操作系统的主要优点是什么? 1)具有简单强大统一的I接口,将所有设备用文件表示。 2) 可靠性高 3)伸缩性较强

实验环境的使用实验报告

操作系统实验报告 哈尔滨工程大学 计算机科学与技术学院

实验环境的使用 一.实验概述 1.实验名称:实验环境的使用 2.实验目的: 1)熟悉操作系统集成实验环境OS Lab的基本使用方法; 2)练习编译、调试EOS操作系统内核以及EOS应用程序。 3.实验类型:验证 4.实验内容: 1)准备实验,启动OS Lab; 2)学习OS Lab的基本使用方法; 3)EOS内核项目的生成和调试; 4)EOS应用程序项目的生成和调试; 5)退出OS Lab; 6)保存EOS内核项目 二.实验环境 操作系统:windows XP 编译器:Tevalaton OS Lab 语言:C++ 三.实验过程 1.实验过程: 1)启动OS Lab,在启动后弹出的对话框中填入学号、姓名; 2)学习OS Lab的基本使用方法,使用OS Lab编写一个windows控制应用台应用程序,熟悉OS Lab的基本使用方法(主要包括新建项目、生成项目、调试项目等); 在“文件”菜单中选择新建项目,并选择项目模板“控制台应用程序”。 3)点击F5生成项目,并对结果中的问题进行修改。

如果源代码中存在语法错误,“输出”窗口会输出相应的错误信息(包括错误所在文件的路径,错误在文件中的位置,以及错误原因),并在最后提示生成失败。此时在“输出”窗口中双击错误信息所在的行,OS Lab 会使用源代码编辑器打开错误所在的文件,并自动定位到错误对应的代码行。可以在源代码文件中故意输入一些错误的代码(例如删除一个代码行结尾的分号),然后再次生成项目,然后在“输出”窗口中双击错误信息来定位存在错误的代码行,将代码修改正确后再生成项目。 4)执行项目,在OS Lab 中选择“调试”菜单中的“开始执行(不调试)”,可以执行刚刚生成的Windows 控制台应用程序。启动执行后会弹出一个Windows 控制台窗口,显示控制台应用程序输出的内容。按任意键即可关闭此Windows 控制台窗口。 5)调试项目,点击“项目管理器”窗口中的“源文件”文件夹节点,在弹出的快捷菜单中选择“添加”中的“添加新文件”,文件中的函数如下所示。 int test1(int n){ n++; return n;} 6)将主函数进行修改。

操作系统实验3答案

实验三操作系统进程管理 一、实验目的 1) 掌握系统进程的概念,加深对Linux / UNIX进程管理的理解。 2) 学会使用ps命令和选项。 3) 列出当前shell中的进程。 4) 列出运行在系统中的所有进程。 5) 根据命令名搜索特定的进程。 6) 使用kill命令终止进程。 7) 根据用户名查找和终止进程。 二、实验内容和相应的答案截图,三、实验结果分析 步骤1:创建一个普通用户(参见实验二),以普通用户身份登录进入GNOME。 步骤2:打开一个“终端”窗口(参见实验二)。 步骤3:回顾系统进程概念,完成以下填空: 1) Linux系统中,几乎每一个启动的进程,都会由内核分配一个唯一的__PID__进程标识符,用于跟踪从进程启动到进程结束。 2) 当启动新进程的时候,内核也给它们分配系统资源,如__内存_和__CPU_。 3) 永远不向父进程返回输出的进程叫做__僵进程__。 4) 由父进程派生出来的进程叫做____子___进程。 5) ___父_进程是一个派生另一个进程的进程。 6) 运行用于提供服务的Linux系统进程是_______________。 7) 如果父进程在子进程之前结束,它创建了一个______________进程。 步骤4:回顾ps命令和信息。基本的ps命令显示当前shell中的进程信息,用户只能够查看当前终端窗口中初始化的进程。输入ps命令,将结果填入表3-3中。 表3-3 实验记录 下面,在当前终端窗口中,练习使用给出的每个选项的ps命令。

输入ps -f 命令,显示运行在系统中的某个进程的完全信息,填入表3-4中。 表3-4 实验记录 步骤5:列出系统中运行的所有进程。 输入ps -ef 命令,显示运行在系统中的各个进程的完全信息。执行该命令,并与ps –f 命令的输出结果对照,一致吗?有何不同? 答:不一致,后者显示了所有进程的完全可用信息,多了很多。 分析当前终端窗口中的输出结果,记录下来用于写实验报告。 a. 显示了多少个进程?答:59 b. 进程ID的PID是什么? c. 启动进程的命令(CMD) 是什么?答:sched d. 请观察,什么命令的PID号是1?答:init[5] e. 执行ps –ef >aaa命令,将ps命令的输出送到文本文件aaa。再次运行cat aaa | wc命令,计算进程的数目。其中,cat是显示文本文件命令。“|”是管道命令,就是将前一个命令的输出作为后一个命令的输入。wc 命令用来计算文本的行数,第一个数字显示的是行的数目,可以用来计算进程的数目。计算出进程数目并做记录。 执行man ps命令,可以打开Linux用户命令手册。了解ps命令的用法。输入wq命令可退出用户手册的阅读。man命令可以执行吗?结果如何? 答:Man ps时出现

操作系统实验二

GDOU-B-11-112广东海洋大学学生实验报告书(学生用表) 实验名称实验二课程名称操作系统课程号 学院(系) 信息学院专业物联网工程班级1131 学生姓名杨光学号201311672119 实验地点实验日期 实验1:线程的创建与撤销 1.实验目的 (1)熟悉Windows系统提供的线程创建与撤销系统调用。 (2)掌握Windows系统环境下线程的创建与撤销方法。 2.实验要求 能正确使用CreateThread()、ExitThread()及Sleep()等系统调用,进 一步理解进程与线程理论。 代码一: // ThreadCreate.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "ThreadCreate.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // The one and only application object CWinApp theApp; using namespace std; void ThreadName1(); static HANDLE hHandle1=NULL; //用于存储线程返回句柄的变量。 DWORD dwThreadID1; //用于存储线程标识符的变量。 int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])

环境试验的重要性及环境试验设备的有关问题

环境试验的重要性及环境试验设备的有关问题 环境试验的重要性及环境试验设备的有关问题 1环境试验的目的及其重要性 随着我国工业生产的快速发展和军用装备的改进,对产品的质量和可靠性要求越来越高,因而对可靠性研究必不可少的设备─环境试验设备的品种、质量的要求也更多更高。特别是海湾战争显示了武器装备在战争中的重要作用,也促使了我国军事科技和武器装备的研究、试验和发展。 国内外的部分统计资料表明,武器装备发生故障或损坏的原因一半以上是由于使用该产品时的环境因素引起的,如表1: 表1中、美军用航空产品故障情况 国家中美 产品机载产品沿海基地使用的产品同一种175架飞机中31种产品两年故障分析 F/A-18大黄蜂飞机 因环境因素引起的故障 52.7% 52% 52% 51% 其中:温度(高低温)振动潮湿砂尘盐雾低气压冲击 42 40 55 40 21.6 27 20 27 19 19 19 19 7.8 14 6 6 3.9 / / 4 3.6 / / 2 2.1 / / 2 可见,环境因素对军用装备非常重要,有不可忽视的影响,为了使军用产品有很好的环境适应性,从而提高其使用可靠性,不仅在开发研制阶段,就是在使用阶段都必须进行环境试验。 对一般电工、电子产品,由各种环境因素引起的失效比例统计如图1示: 图1 可见一般电工、电子产品由环境因素引起的失效与上表的统计是差不多的。 环境试验是将产品暴露在天然或人工模拟环境中,从而对其实际上可能遇到的贮存、运输和使用条件下的性能作出评价的试验,简单说是对产品进行环境适应性的试验。 环境试验的目的: 1.1探索和确定单一或多个环境因素对产品的影响,考核产品的环境适应性; 1.2作为产品的型式试验项目之一,或产品的验收试验,看其是否符合规定的环境要求,产品是否合格,作为产品接收或拒收的决策依据。 1.3作产品环境应力筛选(ESS)试验,筛选出不合格的或有潜在缺陷的产品,从而提高产品的可靠性。 环境试验可分外场试验及实验室试验: (1) 实验室试验:一般在实验室内进行,又叫人工模拟试验,是用人工的方法创造出某种气候环境或机械环境,将试品在此环境中试验。人工模拟试验具有与大气暴露试验相似的模拟性,并有加速性,可大大缩短试验时间,且其环境应力、负载条件的施加都可严格控制在容差范围内,保证全部试验在受控条件下进行,故重现性好,有可比性,其缺点是受到设备的限制,一般是试验一些体积较小,重量较轻的产品,且有时对非常真实的综合环境的模拟性较差。 (2) 外场试验,可分为天然暴露试验和现场试验:

操作系统实验一

攀枝花学院实验报告 实验课程:操作系统实验项目:模拟实现进程调度算法实验日期:2010.05.07 系:计算机班级:07级计本2班姓名:朱江学号:200710801086 指导教师:赖国勇成绩: 实验目的: 1、进程调度是处理机管理的核心内容。观察、体会操作系统的进程调度方法,并通过一个简单的进程调度模拟程序的实现,加深对进程控制块、进程队列、进程调度算法,进程切换的理解,并体会和了解各种调度算法的具体实施办法。 2、提高实际动手编程能力,为日后从事软件开发工作打下坚实基础。 实验设备: 1.装有windows2000/xp以上的操作系统。 2.装有LGY_VC++ 6.0集成开发环境。 实验要求: 1、使用模块化设计思想来设计。 2、给出主函数和各个算法函数的流程图。 3、学生可按照自身条件,随意选择采用的算法,(例如:采用冒泡法编写程序,实现短进程优先调度的算法)。 4、进程调度程序模拟程序只对PCB进行相应的调度模拟操作,不需要实际程序。 实验内容及步骤: 一、实验内容 1、设计进程控制块PCB表结构,模拟实现进程调度算法:FIFO,静态优先级调度,时间片轮转调度,短进程优先调度算法,多级反馈队列调度。(实现其中之一个以上)。 2、编写一个进程调度程序模拟程序。模拟程序只对PCB进行相应的调度模拟操作,不需要实际程序。 3、程序经visual c++ 6.0编译后运行,通过文件1.txt和2.txt读入进程名、进程状态、进程运行时间和进程优先级等数据。然后分别选择先进先出调度,静态优先级调度,时间片轮转调度,短进程优先调度算法对进程进行调度,并输出进程的调度模拟操作排序结果。

相关文档
最新文档