安徽工业大学操作系统实验报告.docx

上传人:b****4 文档编号:3020971 上传时间:2022-11-17 格式:DOCX 页数:18 大小:90.90KB
下载 相关 举报
安徽工业大学操作系统实验报告.docx_第1页
第1页 / 共18页
安徽工业大学操作系统实验报告.docx_第2页
第2页 / 共18页
安徽工业大学操作系统实验报告.docx_第3页
第3页 / 共18页
安徽工业大学操作系统实验报告.docx_第4页
第4页 / 共18页
安徽工业大学操作系统实验报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

安徽工业大学操作系统实验报告.docx

《安徽工业大学操作系统实验报告.docx》由会员分享,可在线阅读,更多相关《安徽工业大学操作系统实验报告.docx(18页珍藏版)》请在冰豆网上搜索。

安徽工业大学操作系统实验报告.docx

安徽工业大学操作系统实验报告

《操作系统教程》

实验报告书

专业班级

学号

姓名

指导教师

 

2015年12月28号

实验一WINDOWS进程初识

1、实验目的

(1)学会使用VC编写基本的Win32ConsolApplication(控制

(2)台应用程序)。

(3)掌握WINDOWSAPI的使用方法。

(4)编写测试程序,理解用户态运行和核心态运行。

2、实验内容和步骤

(1)编写基本的Win32ConsolApplication

步骤1:

登录进入Windows,启动VC++6.0。

步骤2:

在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32ConsolApplication”,然后在“Projectname”处输入工程名,在“Location”处输入工程目录。

创建一个新的控制台应用程序工程。

步骤3:

在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++SourceFile”,然后在“File”处输入C/C++源程序的文件名。

步骤4:

将清单1-1所示的程序清单复制到新创建的C/C++源程序中。

编译成可执行文件。

步骤5:

在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows“命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序:

E:

\课程\os课\os实验\程序\os11\debug>hello.exe

运行结果(如果运行不成功,则可能的原因是什么?

):

运行成功,截图:

(2)计算进程在核心态运行和用户态运行的时间

步骤1:

按照

(1)中的步骤创建一个新的“Win32ConsolApplication”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。

步骤2:

在创建一个新的“Win32ConsolApplication”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。

步骤3:

在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。

E:

\课程\os课\os实验\程序\os12\debug>timeTEST.exe

步骤4:

运行结果(如果运行不成功,则可能的原因是什么?

):

processID:

3716,EXEfile:

3.exe,%dinKernelmode:

60

步骤5:

分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。

屏蔽i循环:

processID:

1412,EXEfile:

3.exe,%dinKernelmode:

62

屏蔽j循环:

processID:

1816,EXEfile:

3.exe,%dinKernelmode:

34

调整循环变量i的循环次数:

processID:

2616,EXEfile:

3.exe,%dinKernelmode:

64

调整循环变量j的循环次数:

processID:

1868,EXEfile:

3.exe,%dinKernelmode:

50

3、实验结论

对Win32ConsolApplication有进一步的认识,WIN32API也就是Windows32平台的应用程序编程接口。

用户态运行和核心态运行,核心态就是一个是直接的代码运行,即win32consolApplication下代码运行;而用户态是在DOS下运行的,对编译好的程序进行的运行,核心态速度较快,没有太多的约束,而用户态的运行需要时间较长,由于有相应的约束。

实验二进程管理

1、实验目的

1)通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows进程的“一生”。

2)通过阅读和分析实验程序,学习创建进程、观察进程、终止进程以及父子进程同步的基本程序设计方法。

2、实验内容和步骤

(1).创建进程

本实验显示了创建子进程的基本框架。

该程序只是再一次地启动自身,显示它的系统进程ID和它在进程列表中的位置。

步骤1:

创建一个“Win32ConsolApplication”工程,然后拷贝清单2-1中的程序,编译成可执行文件。

步骤2:

在“命令提示符”窗口运行步骤1中生成的可执行文件。

运行结果:

范例:

E:

\课程\os课\os实验\程序\os11\debug>os21

(假设编译生成的可执行文件是os21.exe)

ProcessID:

3012,CloneID:

0

ProcessID:

2748,CloneID:

1

ProcessID:

4044,CloneID:

2

ProcessID:

2896,CloneID:

3

ProcessID:

1588,CloneID:

4

ProcessID:

2144,CloneID:

5

按下ctrl+alt+del,调用windows的任务管理器,记录进程相关的行为属性:

步骤3:

在“命令提示符”窗口加入参数重新运行生成的可执行文件。

运行结果:

范例:

E:

\课程\os课\os实验\程序\os11\debug>os213

(假设编译生成的可执行文件是os21.exe)

ProcessID:

3112,CloneID:

3

ProcessID:

1380,CloneID:

4

ProcessID:

3576,CloneID:

5

按下ctrl+alt+del,调用windows的任务管理器,记录进程相关的行为属性:

步骤4:

修改清单2-1中的程序,将nClone的定义和初始化方法按程序注释中的修改方法进行修改,编译成可执行文件(执行前请先保存已经完成的工作)。

再按步骤2中的方式运行,看看结果会有什么不一样。

运行结果:

ProcessID:

3112,CloneID:

3

ProcessID:

1380,CloneID:

4

ProcessID:

3576,CloneID:

5

从中你可以得出什么结论:

nClone的作用:

控制ID的起始值,并控制其输出窗口的数量。

_

变量的定义和初始化方法(位置)对程序的执行结果有影响吗?

为什么?

有影响,变量的定义影响了程序的结果数目,还影响了ID的其实位置,由于变量的初始化使程序的循环次数发生改变,直接改变了结果,所以结果由变量的不同而不同。

(2).父子进程的简单通信及终止进程

步骤1:

创建一个“Win32ConsolApplication”工程,然后拷贝清单2-2中的程序,编译成可执行文件。

步骤2:

在VC的工具栏单击“ExecuteProgram”(执行程序)按钮,或者按Ctrl+F5键,或者在“命令提示符”窗口运行步骤1中生成的可执行文件。

运行结果:

范例:

E:

\课程\os课\os实验\程序\os11\debug>os22

(假设编译生成的可执行文件是os22.exe)

步骤3:

按源程序中注释中的提示,修改源程序2-2,编译执行(执行前请先保存已经完成的工作)。

运行结果:

死循环

在程序中加入跟踪语句,或调试运行程序,同时参考MSDN中的帮助文件CreateProcess()的使用方法,理解父子进程如何传递参数。

给出程序执行过程的大概描述:

产生的应用程序的名称(本EXE文件),告诉其行为像一个子进程的标志,不继承句柄,使用新的控制台,新的环境,启动信息,返回的进程信息。

 

步骤4:

填空

CreateProcess()函数有__8个核心参数?

本实验程序中设置的各个参数的值是:

a.szFilename;

b.szCmdLine,;

c.NULL;

d.NULL;

e.FALSE;

f.CREATE_NEW_CONSOLE;

g.NULL;

h.NULL。

步骤5:

按源程序中注释中的提示,修改源程序2-2,编译执行。

运行结果:

步骤6:

参考MSDN中的帮助文件CreateMutex()、OpenMutex()、ReleaseMutex()和WaitForSingleObject()的使用方法,理解父子进程如何利用互斥体进行同步的。

给出父子进程同步过程的一个大概描述:

首先,进程创建一个互斥体,打开互斥体,如遇到互斥,则进行处理,处理完后,释放互斥体,下面便是进程等待下一个要处理的项目。

3、实验结论

每个进程都从调用CreateProcess()API函数开始,该函数的任务是在对象管理器子系统内初始化进程对象。

每一进程都以调用ExitProcess()或TerminateProcess()API函数终止。

通常应用程序的框架负责调用ExitProcess()函数。

进程都是有始有终,其中有中断,还有处理进程间互斥的函数,已达到进程的完成后自然终止。

 

实验三进程同步的经典算法

1、实验目的

1)回顾系统进程、线程的有关概念,加深对Windows2000线程的理解。

2)了解互斥体对象,通过对生产者消费者等进程间同步与互斥经典算法的实现,加深对P、V原语以及利用P、V原语进行进程间同步与互斥操作的理解。

2、实验内容和步骤

(1).生产者消费者问题

步骤1:

创建一个“Win32ConsolApplication”工程,然后拷贝清单3-1中的程序,编译成可执行文件。

步骤2:

在“命令提示符”窗口运行步骤1中生成的可执行文件。

运行结果:

范例:

E:

\课程\os课\os实验\程序\os11\debug>os31

(假设编译生成的可执行文件是os31.exe)

步骤3:

仔细阅读源程序,找出创建线程的WINDOWSAPI函数,回答下列问题:

线程的第一个执行函数是什么(从哪里开始执行)?

它位于创建线程的API函数的第几个参数中?

第一个执行函数是:

DWORDWINAPIProducer(LPVOIDlpPara)

Produce();

它位于创建线程的API函数的第3个参数中。

步骤4:

修改清单3-1中的程序,调整生产者线程和消费者线程的个数,使得消费者数目大与生产者,看看结果有何不同。

运行结果:

从中你可以得出什么结论:

生产速度快,生产者经常等待消费者;反之,消费者经常等待。

步骤5:

修改清单3-1中的程序,按程序注释中的说明修改信号量EmptySemaphore的初始化方法,看看结果有何不同。

运行结果:

步骤6:

根据步骤4的结果,并查看MSDN,回答下列问题

1)CreateMutex中有几个参数,各代表什么含义。

答:

有三个参数.

1.LPSECURITY_ATTRIBUTESlpMutexAttributes代表安全属性的指针

2.BOOLbInitialOwner代表布尔bInitialOwner

3.LPCTSTRlpName代表LPCTSTR类型lpName

2)CreateSemaphore中有几个参数,各代表什么含义,信号量的初值在第几个参数中。

四个:

lpSemaphoreAttributesSECURITY_ATTRIBUTES,指定一个SECURITY_ATTRIBUTES结构,或传递零值——表示采用不允许继承的默认描述符。

该参数定义了信号机的安全特性;lInitialCountLong,设置信号机的初始计数。

可设置零到lMaximumCount之间的一个值;lMaximumCountLong,设置信号机的最大计数;lpNameString,指定信号机对象的名称。

3)程序中P、V原语所对应的实际WindowsAPI函数是什么

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 视频讲堂

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1