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

2018-12-04 16:29

1

五、程序代码

实验1消息队列 /* msg_client.c */

#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(\}

/* msg_server.c */ #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);

1

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

printf(\ msg.mtype=pid; *pint=getpid();

msgsnd(msgqid,&msg, sizeof(int),0);}} cleanup() {

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

实验2共享内存 #include #include #include #define SHMKEY 75 #define K 1024 int shmid; main() {

int i, * pint; char * addr;

extern char * shmat();

shmid = shmget(SHMKEY, 8 * K, 0777); addr = shmat (shmid,0,0); pint = (int *)addr; while ( * pint==0 )

for (i=0; i<256; *pint++) printf(\}

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

int i, * pint; char * addr;

extern char * shmat();

1

extern cleanup(); for(i=0; i<20; i++) sinal (i, cleanup);

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(); }

cleanup() {

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

六、程序运行结果及分析

实验1消息队列运行结果截图 客户端:

服务器端:

1

实验1消息队列结果分析

服务端程序监听软中断,建立消息队列,循环在队列中接收类型为1的消息,每接收一个消息向队列中增加一个类型为客户进程ID的消息。当发生软中断时,删除消息队列。

客户端进程创建和服务端相同的消息队列,并向消息队列中发送类型为1的消息,然后接收类型为客户进程ID的消息。 实验后思考:

对消息队列的运行情况有所了解,但关于内存共享部分尚需仔细研究。

1


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

下一篇:关于新农村政策与税费改革调查报告

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

马上注册会员

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