linux操作系统实验五.docx

上传人:b****5 文档编号:27972858 上传时间:2023-07-07 格式:DOCX 页数:8 大小:193.61KB
下载 相关 举报
linux操作系统实验五.docx_第1页
第1页 / 共8页
linux操作系统实验五.docx_第2页
第2页 / 共8页
linux操作系统实验五.docx_第3页
第3页 / 共8页
linux操作系统实验五.docx_第4页
第4页 / 共8页
linux操作系统实验五.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

linux操作系统实验五.docx

《linux操作系统实验五.docx》由会员分享,可在线阅读,更多相关《linux操作系统实验五.docx(8页珍藏版)》请在冰豆网上搜索。

linux操作系统实验五.docx

linux操作系统实验五

 

实验五进程管理子系统——进程控制

实验类别:

设计型实验时数:

6学时

开课单位:

计算机学院实验地点:

健翔校区计算中心

一、实验目的

◆掌握进程的概念,深入理解进程的含义。

认识并理解并发环境中进程执行的实质问题,了解构成并发机制的进程创建过程。

能够使用系统调用完成进程创建,形成多个进程并发的环境。

◆了解在进程创建后通过对进程控制的系统调用,可实现对进程的有效控制。

掌握在进程执行中对进程进行睡眠、同步、撤销等控制方法。

◆进一步认识并发执行的实质,分析进程竞争资源的现象,学习解决进程互斥的方法。

二、实验环境

操作系统:

任何Unix/Linux及SunSolaris或windows系列

应用系统:

gcc编译器。

若OS为windows系列,则还需相应的模拟环境

三、预备知识

1、LINUX系统中进程的含义

在LINUX中,进程既是一个独立拥有资源的基本单位,又是一个独立调度的基本单位。

进程是并发环境中的实体,每个进程用一个task_struct的数据结构来表示,用来管理系统中的进程,因而task_struct就是LINUX系统中的PCB。

另外,系统内核中还有一个task向量表,是指向系统中每一个task_struct数据结构的指针的数组,因而task向量表就是LINUX系统中的PCB表。

2、LINUX中的进程创建

除了init进程外,LINUX中的所有进程都是由其他进程创建的。

LINUX中提供了系统调用fork和clone,可被进程用来创建子进程。

但系统调用fork和clone其实都是调用内核函数do_fork(),通过克隆当前进程来创建子进程的。

四、实验内容

本实验要求在LINUX/UNIX环境下用C语言编写三个多进程并发执行的程序,基本涉及了LINUX/UNIX进程管理子系统中较为常用的有关进程控制的系统调用。

实验内容如下:

(1)使用fork()系统调用创建进程,使父、子进程分别运行不同的代码(要求子进程在父进程之前运行):

子进程:

①以长格式显示当前目录的情况;②分屏显示file1的内容。

父进程:

①对1—100之间的自然数求和;②分屏显示file2的内容。

程序可能涉及到的系统调用:

fork(),exec(),wait()

 

#include

#include

#include

#include

#include

intmain()

{

intp1,p2;

inti,n=0;

p1=fork();

if(p1==0)

{

//system("more-dcfile1");

execl("/bin/ls","ls","-l",0);

exit

(1);

}

elseif(p1>0)

{

wait(NULL);

//system("more-dcfile2");

p2=fork();

if(p2==0)

{

execl("/bin/cat","cat","file1",0);

}

elseif(p2>0)

{

wait(NULL);

for(i=1;i<=100;i++)

{

n=n+i;

}

printf("theaddof1-100is:

%d\n",n);

execl("/bin/cat","cat","file2",0);

exit

(1);

}

}

else

printf("forkfailed.\n");

return0;

}

(2)编程实现三个进程的并发执行(即父进程同其分别创建的两个子进程同时运行),此程序运行使系统中有三个活动进程存在。

控制让每个进程在屏幕上显示一个字符串(为了便于理解,可以是有意义的一句话)。

比如子进程显示”daughter…”及”son…”,父进程显示”parent…”。

试观察屏幕上的显示结果,并对输出结果进行分析。

程序可能涉及到的系统调用及函数:

fork(),printf()

#include

#include

intmain()

{

intp1,p2;

p1=fork();

if(p1==0)

{

printf("子进程:

son\n");

}

elseif(p1>0)

{

p2=fork();

if(p2==0)

{

printf("子进程:

daughter\n");

}

elseif(p2>0)

{

printf("父进程:

parent\n");

}

}

else

printf("forkfailed.\n");

return0;

}

(3)编程实现并发执行的父子进程通过管道实现通信。

要求父进程通过读标准输入,将读入的内容写入管道;子进程通过读管道,将读取的内容写到标准输出。

程序可能涉及到的系统调用及函数:

fork(),pipe(),read(),write(),close()

#include

#include

#include

#include

#include

//charparent[]="Amessagetopipe'communication.\n";

intmain()

{

intpid,fd[2];

charbuf[100];

charparent[100];

pipe(fd);

pid=fork();

read(STDIN_FILENO,parent,100);

if(pid>0)

{

close(fd[0]);

printf("parentprocesssendsamessagetochild.\n");

write(fd[1],parent,sizeof(parent));

close(fd[1]);

printf("parentprocesswaitsthechildtoterminate.\n");

wait(0);

printf("parentprocessterminate.\n");

}

elseif(pid==0)

{

close(fd[1]);

read(fd[0],buf,100);

printf("Themessagereadbychildprocessfromparentis:

%s\n",buf);

close(fd[0]);

printf("childprocessterminate.\n");

}

else

printf("forkfailed.\n");

return0;

}

 

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

当前位置:首页 > 农林牧渔 > 林学

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

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