湖南科技大学计算机科学与工程学院
操作系统课程设计报告
学 号 : ******** 姓 名 : * * 班 级 : ***
指导老师: ***
完成时间: ****.**.**
目录
实验一 Windows进程管理
实验二 Linux进程管理 实验三 互斥与同步
实验四 银行家算法的模拟与实现 实验五 内存管理 实验六 磁盘调度 实验七 进程间通信
实验一 Windows进程管理
一、实验目的
1)学会使用 VC 编写基本的 Win32 Consol Application(控制台应用程序)。 2)通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解 Windows 进程的“一生”。
3)通过阅读和分析实验程序,学习创建进程、观察进程、终止进程以及父子进程同步的基本程序设计方法。
二、实验内容和步骤
(1)编写基本的 Win32 Consol Application
步骤1:登录进入 Windows 系统,启动 VC++ 6.0。
步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 ConsolApplication”,然后在“Project name”处输入工程名,在“Location” 处输入工程目录。创建一个新的控制台应用程序工程。
步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”,然后在“File” 处输入 C/C++源程序的文件名。
步骤4:将清单 1-1 所示的程序清单复制到新创建的 C/C++源程序中。编译成可执行文件。
步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入 Windows“命令提示符”窗口,然后进入工程目录中的 debug 子目录,执行编译好的可执行程序,列出运行结果(如果运行不成功,则可能的原因是什么?)
如果运行不成功 可能是路径有问题或者没有通过编译。
(2) 创建进程
本实验显示了创建子进程的基本框架。该程序只是再一次地启动自身,显示它的系统进程 ID和它在进程列表中的位置。 步骤1:创建一个“Win32 Consol Application”工程,然后拷贝清单 1-2 中的程序编译成可执行文件。
步骤2:在“命令提示符”窗口运行步骤 1 中生成的可执行文件,列出运行结果。按下ctrl+alt+del,调用 windows 的任务管理器,记录进程相关的行为属性。
运行结果:
步骤3:在“命令提示符”窗口加入参数重新运行生成的可执行文件,列出运
行结果。按下ctrl+alt+del,调用 windows 的任务管理器,记录进程相关的行为属性。 运行结果: 步骤4: nclone为线程开始运行的编号,当nclone的值大于或者等于c_nCloneMax时程序运行一次即跳出;变量的定义和初始化方法(位置)对程序的执行结果有影响; (3)父子进程的简单通信及终止进程
步骤1: 创建一个“Win32 Consol Application”工程,然后拷贝清单 1-3 中的程序,编译成可执行文件。 步骤2:在 VC 的工具栏单击“ Execute Program” (执行程序) 按钮,或者按 Ctrl
+ F5 键,或者在“命令提示符”窗口运行步骤 1 中生成的可执行文件,列出运行结果。
步骤3: 按源程序中注释中的提示,修改源程序 1-3,编译执行(执行前请先保存已经完成的工作),列出运行结果。在程序中加入跟踪语句,或调试运行程序,同时参考 MSDN 中的帮助文件CreateProcess()的使用方法,理解父子进程如何传递参数。给出程序执行过程的大概描述。
通过main(int argc,char* argv[] )传递参数,每次运行时先检测argc的值,若小于1程序运行结束,否则继续往下执行
步骤4:按源程序中注释中的提示,修改源程序 1-3,编译执行,列出运行结果。
步骤5:参 考 MSDN 中 的 帮 助 文 件 CreateMutex() 、 OpenMutex() 、 ReleaseMutex() 和WaitForSingleObject()的使用方法,理解父子进程如何利用互斥体进行同步的。给出父子进程同步过程的一个大概描述。
CreateMutex()创建互斥体,OpenMutex()打开互斥体,ReleaseMutex()释放互斥体,WaitForSingleObject()检测hHandle事件的信号状态,通过这些方法可实现当前只有一个进程被创建或使用,实现进程的同步。 首先,进程创建一个互斥体,打开互斥体,如遇到互斥,则进行处理,处理完后,释放互斥体,下面便是进程等待一个要处理的项目
三、实验心得与体会
每个进程都从调用CreateProcess() API函数开始,该函数的任务是在对象管理器子系统内初始化进程对象。每一进程都以调用ExitProcess()或TerminateProcess()API函数终止。通常应用程序的框架负责调用 ExitProcess()函数。进程都是有始有终,其中有中断,还有处理进程间互斥的函数,已达到进程的完成后自然终止。
操作系统课程设计



