操作系统课程设计.docx

上传人:b****3 文档编号:1921177 上传时间:2022-10-25 格式:DOCX 页数:24 大小:31.90KB
下载 相关 举报
操作系统课程设计.docx_第1页
第1页 / 共24页
操作系统课程设计.docx_第2页
第2页 / 共24页
操作系统课程设计.docx_第3页
第3页 / 共24页
操作系统课程设计.docx_第4页
第4页 / 共24页
操作系统课程设计.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

操作系统课程设计.docx

《操作系统课程设计.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计.docx(24页珍藏版)》请在冰豆网上搜索。

操作系统课程设计.docx

操作系统课程设计

湖南科技大学计算机科学与工程学院

操作系统课程设计报告

 

学号

********

***

***

********

■■

姓名班级指导老师:

完成时间:

实验一Windows进程管理

实验二Linux进程管理

实验三互斥与同步

实验四银行家算法的模拟与实现

实验五内存管理

实验六磁盘调度

实验七进程间通信

实验一Windows进程管理

、实验目的

1)学会使用VC编写基本的Win32ConsolApplication(控制台应用程序)。

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

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

二、实验内容和步骤

(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子目录,执行编译好的可

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

如果运行不成功可能是路径有问题或者没有通过编译。

(2)创建进程

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

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

步骤1:

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

步骤2:

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

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

运行结果:

步骤3:

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

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

运行结果:

步骤4:

nclone为线程开始运行的编号,当nclone的值大于或者等于c_nCloneMax时程序运行一次即跳出;变量的定义和初始化方法(位置)只对程序的执行结果有影响;

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

步骤1:

创建一个“Win32ConsolApplication”工程,然后拷贝清单1-3中的程

序,编译成可执行文件。

步骤2:

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

步骤3:

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

工作),列出运行结果。

在程序中加入跟踪语句,或调试运行程序,同时参考MSDN中的帮助文件

CreateProcess()的使用方法,理解父子进程如何传递参数。

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

通过main(intargc,char*argv[]?

)传递参数,每次运行时先检测argc的值,若小

于1程序运行结束,否则继续往下执行

步骤4:

按源程序中注释中的提示,修改源程序1-3,编译执行,列出运行结果

步骤5:

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

的。

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

CreateMutex()创建互斥体,OpenMutex()打开互斥体,ReleaseMutex()释放互斥体,WaitForSingleObject()检测hHandle事件的信号状态,通过这些方法可

实现当前只有一个进程被创建或使用,实现进程的同步。

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

三、实验心得与体会

每个进程都从调用CreateProcess()?

API函数开始,该函数的任务是在对象管理器子系统内初始化进程对象。

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

通常应用程序的框架负责调

用?

ExitProcess()函数。

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

实验二Linux进程管理

一、实验目的通过进程的创建、撤销和运行加深对进程概念和进程并发执行的理解,明确进程和程序之间的区别。

二、背景知识

在Linux中创建子进程要使用fork()函数,执行新的命令要使用exec()系列函数,等待子进程结束使用wait()函数,结束终止进程使用exit()函数。

fork()原型如下:

pid_tfork(void);

fork建立一个子进程,父进程继续运行,子进程在同样的位置执行同样的程序。

对于父进程,fork()返回子进程的pid,对于子进程,fork()返回0。

出错时返回-1。

exec系列有6个函数,原型如下:

externchar**environ;

intexeclp(constchar*file,constchar*arg,...);

intexecle(constchar*path,constchar*arg,...,char*constenvp[]);

intexecv(constchar*path,char*constargv[]);

intexecve(constchar*filename,char*constargv[],char*constenvp[]);

intexecvp(constchar*file,char*constargv[]);

exec系列函数用新的进程映象置换当前的进程映象.这些函数的第一个参数是待执行程序的路径名(文件名)。

这些函数调用成功后不会返回,其进程的正文(text),数据(data)和栈(stack)段被待执行程序程序覆盖。

但是进程的PID和所有打开的文件描述符没有改变,同时悬挂信号被清除,信号重置为缺省行为。

在函数execl,execlp,和execle中,constchar*arg以及省略号代表的参数可被视为arg0,arg1,...,argn。

它们合起来描述了指向NULL结尾的字符串的指针列表,即执行程序的参数列表。

作为约定,第一个arg参数应该指向执行程序名自身,参数列表必须用NULL指针结束。

execv和execvp函数提供指向NULL结尾的字符串的指针数组作为新程序的参数列表。

作为约定,指针数组中第一个元素应该指向执行程序名自身。

指针数组必须用NULL指针结

束。

execle函数同时说明了执行进程的环境(environment),它在NULL指针后面要求一个附加参数,NULL指针用于结束参数列表,或者说,argv数组。

这个附加参数是指向NULL结尾的字符

串的指针数组,它必须用NULL指针结束。

其它函数从当前进程的environ外部变量中获取新进程的环境。

execlp和execvp可根据path搜索合适的程序运行,其它则需要给出程序全路径。

execve()类似execv(),但是加上了环境的处理。

wait(),waitpid()可用来等待子进程结束。

函数原型:

#include

pid_twait(int*stat_loc);

pid_twaitpid(pid_tpid,int*stat_loc,intoptions);

当进程调用wait,它将进入睡眠状态直到有一个子进程结束。

wait函数返回子进程的进程id,stat_loc中返回子进程的退出状态。

waitpid的第一个参数pid的意义:

pid>0:

等待进程id为pid的子进程。

pid==0:

等待与自己同组的任意子进程。

pid==-1:

等待任意一个子进程

pid<-1:

等待进程组号为-pid的任意子进程。

因此,wait(&stat)等价于waitpid(-1,&stat,0),waitpid第三个参数option可以是0,

WNOHANG,WUNTRACED几者的组合。

三、实验内容与步骤

(1)进程的创建

任务要求:

编写一段程序,使用系统调用fork()创建两个子进程。

当此程序行在系统中

有一个父进程和两个子进程活动。

让每一个进程在屏幕上显示一个字符:

父进程显示字符

“a”;两子进程分别显示字符“b”和字符“c”。

步骤1:

使用vi或gedit新建一个fork_demo.c程序,然后拷贝清单2-1中的程序,使用cc或者gcc编译成可执行文件fork_demo。

例如,可以使用gcc-ofork_demofork_demo.c完成编译。

步骤2:

在命令行输入./forkdemo运行该程序。

(2)子进程执行新任务

任务要求:

编写一段程序,使用系统调用fork()创建一个子进程。

子进程通过系统调用exec更换自己原有的执行代码,转去执行Linux命令/bin/Is(显示当前目录的列表),然后调用

exit()函数结束。

父进程则调用waitpid()等待子进程结束,并在子进程结束后显示子进程的标

识符,然后正常结束。

程序执行过程如图2-1所示。

步骤1:

使用vi或gedit新建一个exec_demo.c程序,然后拷贝清单2-2中的程序(该程序的执行如图2-1所示),使用cc或者gcc编译成可执行文件exec_demo。

例如,可以使用gcc-oexec_demoexec_demo.c完成编译。

步骤2:

在命令行输入./exec_demo运行该程序

步骤3:

观察该程序在屏幕上的显示结果,并分析

图2-1exec_demo.c程序的执行过程

四、实验心得及体会

这个课题的实验让我学会了Windows系统下虚拟机中的基本程序的编写,第一次在虚拟级的环

境中编写了这一个程序。

并通过进程的创建。

撤销和运行加深对进程概念和进程并发执行的理解,明确了进程和程序之间的区别。

实验三互斥与同步

一、实验目的

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

2)了解互斥体对象,利用互斥与同步操作编写生产者-消费者问题的并发程序,加深对P(即

semWait)、V(即semSigna

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

当前位置:首页 > PPT模板 > 商务科技

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

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