操作系统实验Word格式.doc

上传人:b****9 文档编号:13090261 上传时间:2022-10-04 格式:DOC 页数:20 大小:131.50KB
下载 相关 举报
操作系统实验Word格式.doc_第1页
第1页 / 共20页
操作系统实验Word格式.doc_第2页
第2页 / 共20页
操作系统实验Word格式.doc_第3页
第3页 / 共20页
操作系统实验Word格式.doc_第4页
第4页 / 共20页
操作系统实验Word格式.doc_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

操作系统实验Word格式.doc

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

操作系统实验Word格式.doc

sys/type.h>

sys/wait.h>

(pid_t)wait(int*statloc);

Exit()函数:

进程终止。

在正常终止时,exit()函数返回进程结束状态。

调用格式为:

stdio.h>

Voidexit(intstatus);

其中,status为进程结束状态。

3、实验内容

(1)进程创建

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

当此程序运行时,在系统中有一个父进程和两个子进程活动。

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

父进程显示字符“a”;

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

(2)进程控制

修改已经编号的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕上出现的现象,并分析原因。

如果在程序中使用系统调用lockf()来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。

参考程序1:

#include<

Main()

{

Intp1,p2;

While((p1=fork())==-1);

If(p1==0)

Putchar(‘b’);

Else

{

While((p2=fork()==-1);

If(p2==0)

Putchar(‘c’);

Else

Putchar(‘a’);

}

分析执行结果及原因。

参考程序2:

#include<

{

Intp1,p2;

While((p1=fork()==-1);

If(p1==0)

For(i=0;

i<

50;

i++)

Printf(“child%d\n”,i);

Else

{

While((p2=fork()==-1);

If(p2==0)

For(i=0;

Printf(“son%d\n”,i);

Else

For(i=0;

Printf(“daughter%d\n”,i);

参考程序3:

#include<

unistd.h>

Main()

Intp1,p2,I;

While((p1=fork()==-1);

If(p1==0)

Lockf(1,1,0);

For(i=0;

Printf(“child%d\n”,i);

Lockf(1,0,0);

Else

{

While((p2=fork()==-1);

If(p2==0)

Lockf(1,1,0);

For(i=0;

Printf(‘son%d\n”,i);

Lockf(1,0,0);

Else

{

Lockf(1,1,0);

For(i=0;

Printf(“daughter%d\n”,i);

Lockf(1,0,0);

实验2进程通信

一、实验目的

(1)理解进程处理信号的方法,使用用户自定义的信号处理程序。

(2)分析进程竞争资源现象,学习解决进程互斥的方法。

(3)了解linux系统中进程通信的基本原理。

二、预备内容

通过Linux提供的系统调用signal(),来说明如何执行一个预先安排好的信号处理函数。

signal()的返回值是指向一个函数的指针,该函数的参数为一个整数。

#include<

signal.h>

intctrl_c_count=0;

void(*old_handler)(int);

voidctrl_c(int);

voidmain()

intc;

/*设置ctrl+c产生的信号SIGINT的处理程序为ctrl_c.取代系统原来默认的处理程序*/

old_handler=singal(SIGINT,ctrl_c);

/*不断输入字符,同时按多次ctrl+c,直到按回车结束*/

while((c=getchar())!

=’\n’));

printf(“ctrl_c_count=%d\n”,ctrl_c_count);

/*设置信号处理程序为原来的处理程序*/

(void)singal(SIGINT,old_hander);

/*不断输入字符,ctrl+c结束*/

while((c=getchar())!

/*对SIGINT信号的处理程序*/

voidctrl_c(intsignum)

(void)signal(SIGINT,ctrl_c);

++ctrl_c;

程序说明:

这个程序是从键盘获得字符,直到换行符为止,然后进入无限循环。

这里,程序安排了捕获ctrl_c信号(SIGINT),并且利用SIGINT来执行一个ctrl_c的处理函数。

当在键盘上敲入一个换行符时,SIGINT原来的操作(很可能是默认操作)才被恢复。

Main()函数中的第一个语句完成设置信号处理程序:

old_handler=signal(SIGINT,ctrl_c);

signal()的两个参数是:

信号值,这里是键盘中断信号SIGINT;

以及一个指向函数的指针,这里是ctrl_c,当这个中断信号出现时,将调用该函数。

Signal()调用返回旧的信号处理程序的地址,在此它被赋给变量older_handler,使得原来的信号处理程序稍后可以被恢复。

三、实验内容

1、软中断通信

编制一段程序,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按ctrl+c键),当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止:

childprocess1iskilledbyparent!

childprocess2iskilledbyparent!

父进程等待两个子进程终止后,输出以下信息后终止:

parentprocessiskilled!

2、进程的管道通信

编制一段程序,实现进程的管道通信。

使用系统调用pipe()建立一条管道先。

两个子进程p1和分别向管道各写一句话:

Child1processissendingamessage!

Child2processissendingamessage!

而父进程则从管道中读出来自于两个子进程的信息并显示在屏幕上。

3、消息通信

使用系统调用msgget(),msgsnd(),msgrcv()及msgctl()编制一长度为1K的消息发送和接收的程序。

〈程序设计〉

(1)为了便于操作和观察结果,用一个程序为“引子”,先后fork()两个子进程,SERVER和CLIENT,进行通信。

(2)SERVER端建立一个Key为75的消息队列,等待其他进程发来的消息。

当遇到类型为1的消息,则作为结束信号,取消该队列,并退出SERVER。

SERVER每接收到一个消息后显示一句“(server)received”。

(3)CLIENT端使用Key为75的消息队列,先后发送类型从10到1的消息,然后退出。

最后的一个消息,既是SERVER端需要的结束信号。

CLIENT每发送一条消息后显示一句“(client)sent”。

(4)父进程在SERVER和CLIENT均退出后结束。

参考程序:

略。

4、共享存储区通信

使用系统调用shmget(),sgmat(),smgdt(),shmctl(),编制一个与上述相同功能的程序。

sys/types.h>

sys/msg.h>

sys/ipc.h>

#defineSHMKEY75

Intshmid,I;

Int*addr;

Voidclient()

IntI;

Shmid=shmget(SHMKEY,1024,0777);

/*获取共享区,长度为1024*/

Addr=shmat(shmid,0,0);

/*共享区起始地址为addr*/

For(i=9;

i>

=0;

i--)

{

While(*addr!

=-1);

Printf(“(client)sent\n”);

/*打印(client)sent*/

*addr=I;

Exit(0);

Voidserver()

Shmid=shmget(SHMKEY,1024,0777|IPC_CREAT);

/*创建共享区*/

/*共享区起始地址为addr*/

Do

{*addr=-1;

While(*addr==-1);

Printf(“(server)received\n”);

/*服务进程使用共享区*/

}while(*addr);

Shmctl(shmid,IPC_RMID,0);

Eixt(0);

Voidmain()

While((i=fork())==-1);

If(!

i)server();

While((i=fork())==-1);

i)client();

Wait(0);

Wait(0);

实验三存储管理

(1)理解内

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

当前位置:首页 > 小学教育 > 小学作文

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

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