操作系统实验三进程管理实验报告.docx
- 文档编号:3092166
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:11
- 大小:17.63KB
操作系统实验三进程管理实验报告.docx
《操作系统实验三进程管理实验报告.docx》由会员分享,可在线阅读,更多相关《操作系统实验三进程管理实验报告.docx(11页珍藏版)》请在冰豆网上搜索。
操作系统实验三进程管理实验报告
计算机与信息工程学院实验报告
姓名
学号
专业
软件工程
年级
217级
课程
操作系统
主讲教师
党兰学
实验时间(年月日时)
219年1月23日
实验地点
计算机学院21机房
辅导教师
党兰学
实验题目
进程管理
实验目的
加深对进程概念的理解,明确进程和程序的区别;
进一步认识并发执行的实质;
了解父进程和子进程之间的关系;
查看进程管理命令。
实验环境(硬件和软件)
硬件PC机软件OracleVMVirtualboxLinux
一、实验内容
练习在shell环境下编译执行程序
(注意①在vi编辑器中编写名为sample.c的c语言源程序
②用linux自带的编译器gcc编译程序,例如gcc–otestsample.c
③编译后生成名为test.out的可执行文件;
④最后执行分析结果;命令为
注意linux自带的编译程序gcc的语法是gcc–o目标程序名源程序名,例如gcc–osample1samplec,然后利用命令来执行。
如果仅用“gcc源程序名”,将会把任何名字的源程序都编译成名为a.out的目标程序,这样新编译的程序会覆盖原来的程序,所以最好给每个源程序都起个新目标程序名。
进程的创建
仿照例子自己编写一段程序,使用系统调用fork()创建两个子进程。
当此程序运行时,在系统中有一个父进程和两个子进程活动。
让每一个进程在屏幕上显示一个字符父进程显示“a”,子进程分别显示字符“b”和“c”。
观察记录屏幕上的显示结果,并分析原因。
分析程序
实验内容要在给出的例子程序基础上,根据要求进行修改,对执行结果进行分析。
二、实验步骤
利用fork()创建一个小程序
编写程序
#include
main()
{
inti=5;
pid_tpid;
pid=fork();
for(;i>;i--)
{
if(pid<)
printf("errorinfork!
");
elseif(pid==)
printf("iamthechildprocess,myprocessidis%dandi=%d\n",getpid(),i);
else
printf("iamtheparentprocess,myprocessidis%dandi=%d\n",getpid(),i);
}
for(i=5;i>;i--)
{
if(pid<)
printf("errorinfork!
");
elseif(pid==)
printf("thechildprocess,myprocessidis%dandi=%d\n",getpid(),i);
else
printf("theparentprocess,myprocessidis%dandi=%d\n",getpid(),i);
}
}
运行程序
(3)分析程序
在这里,主程序先运行,在屏幕上输出一个a,之后两个子程序分别运行而输出c和b。
2子进程对存取空间的复制
编写程序
(2)运行程序
分析程序
通过scanf(“%d”,&i);语句读取一个整数存在i,之后创建两个子程序,输入1后,子程序运行,之后经过一些读取赋值操作,输出i的值。
3父子进程执行进程分析
编写程序
运行程序
程序分析
三次结果不同是因为printf(“Inwhichprocess\n”);所处位置经过变换,处于父子程序之后,父子程序之前和父程序之中。
4修改程序验证父子进程关系
编写程序
文本代码
#include
#include
#include
#include
#include
#include
#include
#include
#include
#defineMY_SHMKEY//needtochange
#defineMY_SEMKEY//needtochange
voidsigend(int);
intshmid,semid;
intmain(void)
{
int*shmptr,semval,local;
structsembufsemopbuf;
if((shmid=shmget(MY_SHMKEY,sizeof(int),IPC_CREAT|IPC_EXCL|666))<)
{
shmid=shmget(MY_SHMKEY,sizeof(int),666);
semid=semget(MY_SEMKEY,2,666);
shmptr=(int*)shmat(shmid,,);
printf("Actasproducer.Toend,inputwhenprompted.\n\n");
printf("Inputanumber:
\n");
scanf("%d",&local);
while(local)
{
semopbuf.sem_num=;
semopbuf.sem_op=-1;
semopbuf.sem_flg=SEM_UNDO;
semop(semid,&semopbuf,1);
*shmptr=local;
semopbuf.sem_num=1;
semopbuf.sem_op=1;
semopbuf.sem_flg=SEM_UNDO;
semop(semid,&semopbuf,1);
printf("Inputanumber:
\n");
scanf("%d",&local);
}
}
else
{
semid=semget(MY_SEMKEY,2,IPC_CREAT|666);
shmptr=(int*)shmat(shmid,,);
semval=1;
semctl(semid,,SETVAL,semval);
semval=;
semctl(semid,1,SETVAL,semval);
signal(SIGINT,sigend);
signal(SIGTERM,sigend);
printf("ACTCONSUMER!
!
!
Toend,tryCtrl+Corusekill.\n\n");
while
(1)
{
semopbuf.sem_num=1;
semopbuf.sem_op=-1;
semopbuf.sem_flg=SEM_UNDO;
semop(semid,&semopbuf,1);
printf("Sharedmemorysetto%d\n",*shmptr);
semopbuf.sem_num=;
semopbuf.sem_op=1;
semopbuf.sem_flg=SEM_UNDO;
semop(semid,&semopbuf,1);
}
}
}
voidsigend(intsig)
{
shmctl(shmid,IPC_RMID,);
semctl(semid,IPC_RMID,);
exit();
}
运行程序
分析程序
本示例主要体现进程间的直接制约关系,由于使用共享存储区,也存在间接制约关系。
进程分为服务进程和客户进程,服务进程只有一个,作为消费者,在每次客户进程改变共享存储区内容时显示其数值。
各客户进程作为生产者,如果共享存储区内容已经显示(被消费),可以接收用户从键盘输入的整数,放在共享存储区。
编译后执行,第一个进程实例将作为服务进程,提示
ACTCONSUMER!
!
!
Toend,tryCtrl+Corusekill.
服务进程一直循环执行,直到用户按Ctrl+C终止执行,或使用kill命令杀死服务进程。
其他进程实例作为客户进程,提示
Actasproducer.Toend,inputwhenprompted.
客户进程一直循环执行,直到用户输入。
5模拟临界资源访问的示例程序
编写程序
文本代码
#include
#include
#include
#include
#include
#include
#include
#include
#defineMY_SHMKEY//needtochange
#defineMAX_BLOCK124
#defineMAX_CMD8
structshmbuf{
inttop;
intstack[MAX_BLOCK];
}*shmptr,local;
charcmdbuf[MAX_CMD];
intshmid,semid;
voidsigend(int);
voidrelblock(void);
intgetblock(void);
voidshowhelp(void);
voidshowlist(void);
voidgetcmdline(void);
intmain(void)
{
if((shmid=shmget(MY_SHMKEY,sizeof(structshmbuf),IPC_CREAT|IPC_EXCL|666))<)
{
shmid=shmget(MY_SHMKEY,sizeof(structshmbuf),666);
shmptr=(structshmbuf*)shmat(shmid,,);
local.top=-1;
showhelp();
getcmdline();
while(strcmp(cmdbuf,"end\n"))
{
if(!
strcmp(cmdbuf,"get\n"))
getblock();
elseif(!
strcmp(cmdbuf,"rel\n"))
relblock();
elseif(!
strcmp(cmdbuf,"list\n"))
showlist();
elseif(!
strcmp(cmdbuf,"help\n"))
showhelp();
getcmdline();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 进程 管理 报告