操作系统报告66160Word格式.docx

上传人:b****2 文档编号:15231234 上传时间:2022-10-28 格式:DOCX 页数:23 大小:348.38KB
下载 相关 举报
操作系统报告66160Word格式.docx_第1页
第1页 / 共23页
操作系统报告66160Word格式.docx_第2页
第2页 / 共23页
操作系统报告66160Word格式.docx_第3页
第3页 / 共23页
操作系统报告66160Word格式.docx_第4页
第4页 / 共23页
操作系统报告66160Word格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

操作系统报告66160Word格式.docx

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

操作系统报告66160Word格式.docx

基于消息队列和共享内存的进程间通信……………………………………………….…...18

实验一UNIX/LINUIX入门

一、实验目的

了解UNIX/LINUX运行环境,熟悉UNIX/LINUX的常用基本命令,熟悉和掌握UNIX/LINUX下c语言程序的编写、编译、调试和运行方法。

二、实验内容

1、熟悉UNIX/LINUX的常用基本命令如ls、who、pwd、ps等。

2、练习UNIX/LINUX的文本行编辑器vi的使用方法

3、熟悉UNIX/LINUX下c语言编译器cc/gcc的使用方法。

用vi编写一个简单的显示“Hello,World!

”c语言程序,用gcc编译并观察编译后的结果,然后运行它。

三、实验要求

按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。

四、实验设计

代码如下:

#include<

stdio.h>

voidmain(){

printf("

helloworld"

);

}

五、运行结果

1

六、收获及机会

此次实验让我熟悉了Liunx下的文本行编辑器vi和c语言编译器cc/gcc的使用方法。

七、参考资料

《实验指导书》

2

实验二进程管理

加深对进程概念的理解,明确进程与程序的区别;

进一步认识并发执行的实质

(1)进程创建

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

当此程序运行时,在系统中有一

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

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

父进程显示“a“;

子进

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

试观察记录屏幕上的显示结果,并分析原因。

(2)进程控制

修改已编写的程序,将每一个进程输出一个字符改为每一个进程输出一句话,再观察程

序执行时屏幕上出现的现象,并分析原因。

(3)进程的管道通信

编写程序实现进程的管道通信。

使用系统调用pipe()建立一个管道,二个子进程P1和

P2分别向管道各写一句话:

Child1issendingamessage!

Child2issendingamessage!

父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,再接收P2)。

按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,

并写出实验报告。

使用fork()创建两个子进程,父进程等待两个子进程执行完在运行。

使用fork()创建两个子进程,父进程等待两个子进程分别输出一句话在运行。

建立一个管道。

在程序中先建立一个子进程,然后向管道中输入数据,然后从子进程中退出到父进程,读出管道数据,然后再建立一个子进程,写入数据,再读出,即可。

(1)进程创建:

#include<

stdlib.h>

sys/types.h>

unistd.h>

string.h>

errno.h>

#defineINPUT0

#defineOUTPUT1

3

voidmain(){

pid_tpid[2];

//定义两个子进程

pid[0]=fork();

//创建第一个子进程

if(pid[0]<

0){//判断是否创建成功

printf("

ForkFailed"

exit(-1);

elseif(pid[0]==0)

{

b\n"

else

pid[1]=fork();

//创建另一子进程

if(pid[1]<

0){

printf("

exit(-1);

}

elseif(pid[1]==0)

{

printf("

c\n"

else{

wait(NULL);

a\n"

//父进程执行

exit(0);

}

(2)进程控制:

4

thisisb\n"

thisisc\n"

thisisa\n"

(3)进程的管道通信

5

signal.h>

intrw[2];

/*定义子进程号*/

pid_tpid[2];

intcount,count2;

/*创建无名管道*/

pipe(rw);

char*msg1="

child1processissendingmessage!

\n"

;

字符串msg1

char*msg2="

child2processissendingmessage!

字符串msg2

charbuf[50],s[50];

intresult;

result=pipe(rw);

if(result==-1){

failedincallingpipe"

}

/*创建子进程*/

if((pid[0]=fork())==-1){

Errorinfork\n"

exit

(1);

if(pid[0]==0){

//printf("

/*子进程向父进程写数据,关闭管道的读端*/

close(rw[0]);

write(rw[1],msg1,1+strlen(msg1));

close(rw[1]);

exit(0);

}

else{

if((pid[1]=fork())==-1){

exit

(1);

if(pid[1]==0){

//printf("

6

close(rw[0]);

write(rw[1],msg2,1+strlen(msg2));

close(rw[1]);

exit(0);

}

else{

/*执行父进程*/

///printf("

inthespawning(parent)process...\n"

/*父进程从管道读取子进程写的数据,关闭管道的写端*/

count=read(rw[0],buf,sizeof(buf));

count2=read(rw[0],s,sizeof(s));

%d%s\n"

count,buf);

count2,s);

(1)进程创建

7

(2)进程控制

8

此次实验让我对进程和管道有了进一步的理解,用fork()创建完子进程后,要用exit()返回父进程,当需要创建两个子进程的时候,不能直接在第一个子进程中直接fork(),要返回到父进程再用fork()再次创建子进程,否则将无法控制。

创建完管道后,在向管道中写入数据和从管道中读出数据的时候,要控制好管道的读写控制,不适当的关闭和开启管道端口,将不能使得数据得到正确的读写。

这些是我此次实验最大的收获,还需要在今后的时候发现更多的问题,有更深的理解。

9

实验三线程的管理

编写Linux环境下的多线程程序,了解多线程的程序设计方法,掌握最常用的三个函

数pthread_create,pthread_join和pthread_exit的用法

1、主程序创建两个线程myThread1和myThread2,每个线程打印一句话。

使用pthread_create(&

id,NULL,(void*)thread,NULL)完成。

提示:

先定义每个线程的执行体,然后在main中()创建几个线程,最后主线程等待子线程结

束后再退出。

2、创建两个线程,分别向线程传递如下两种类型的参数

􀁺

传递整型值

传递字符

先定义2个线程的带有参数的函数,参数分别为整型(int)和字符型(char),每个函数中打印出相对应线程的话。

在main函数中,利用pthread_create函数创建该两个线程,在函数参数中的第四位,写入想要传进各进程的参数。

最有利用pthread_join等待第二个结束后退出。

1、主程序创建两个线程myThread1和myThread2,每个线程打印一句话。

pthread.h>

stdlib

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

当前位置:首页 > 医药卫生 > 中医中药

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

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