操作系统原理实验报告(3)

2019-01-19 12:13

操作系统原理实验报告 2010-2011学年 第2学期

四、程序说明和程序流程图

1. 消息队列

“消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。 消息被发送到队列中。“消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。 2. 共享内存

共享内存指在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存。由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存(Cache)。任何一个缓存的数据被更新后,由于其他处理器也可能要存取,共享内存就需要立即更新,否则不同的处理器可能用到不同的数据。共享内存 (shared memory)是 Unix下的多进程之间的通信方法 ,这种方法通常用于一个程序的多进程间通信,实际上多个程序间也可以通过共享内存来传递信息。

第 10 页 共 16 页

操作系统原理实验报告 2010-2011学年 第2学期

五、程序代码

1.

#include #include #include #define MSGKEY 75 struct msgform { long mtype; char mtext[256]; } main()

{ struct msgform msg;

int msgqid,pid,*pint; /* 文件主 同组用户 其他用户 rwxrwxrwx */ msgqid=msgget(MSGKEY,0777); /* rw-rw-rw- */ pid=getpid();

pint=(int*)msg.mtext; *pint=pid; msg.mtype=1;

msgsnd(msgqid,&msg,sizeof(int),0); msgrcv(msgqid,&msg,256,pid,0);

printf(\

第 11 页 共 16 页

操作系统原理实验报告 2010-2011学年 第2学期

}

#include #include #include #define MSGKEY 75 struct msgform { long mtype;

char mtext[256];}msg; int msgqid; main()

{ int i,pid,*pint; extern cleanup(); for (i=0;i<20;i++) signal(i,cleanup);

msgqid=msgget(MSGKEY, 0777|IPC_CREAT); for (;;)

{ msgrcv(msgqid,&msg,256,1,0); pint=(int*)msg.mtext; pid=*pint;

printf(\pid %d\\n\ msg.mtype=pid;

第 12 页 共 16 页

操作系统原理实验报告 2010-2011学年 第2学期

*pint=getpid(); msgsnd(msgqid,&msg, sizeof(int),0);} } cleanup()

{ msgctl(msgqid,IPC_RMID,0); exit();}

2. #include

#include #include #define SHMKEY 75 #define K 1024 int shmid; main()

{ int i, *pint; char *addr;

extern clearup(); for (i=1; i<20; i++)

signal(i, clearup);

shmid=shmget(SHMKEY, 16*K, 0777|IPC_CREAT); addr=shmat(shmid, 0, 0); printf(\ pint=(int*)addr;

for (i=0; i<256; i++) *pint++=i; pint=(int*)addr; *pint=256; pause();} clearup()

{ shmctl(shmid, IPC_RMID, 0); exit(0); }

#include #include #include

第 13 页 共 16 页

操作系统原理实验报告 2010-2011学年 第2学期

#define SHMKEY 75 #define K 1024 int shmid; main()

{ int i, *pint; char *addr;

shmid=shmget(SHMKEY, 8*K, 0777); addr=shmat(shmid, 0, 0); pint=(int*)addr; while (*pint==0); for (i=0; i<256; i++)

printf(“%d\\n“, *pint++);}

第 14 页 共 16 页

操作系统原理实验报告 2010-2011学年 第2学期

六、程序运行结果及分析

1.

2.

实验2的时候,可能会出现段错误。可以尝试重启计算机来重新运行程序。

第 15 页 共 16 页


操作系统原理实验报告(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:14电气EDA实验指导书(1)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: