操作系统程序进程通信实验报告详解.docx
- 文档编号:23024180
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:13
- 大小:127KB
操作系统程序进程通信实验报告详解.docx
《操作系统程序进程通信实验报告详解.docx》由会员分享,可在线阅读,更多相关《操作系统程序进程通信实验报告详解.docx(13页珍藏版)》请在冰豆网上搜索。
操作系统程序进程通信实验报告详解
进程通信
指导老师:
夏建
一、实验题目
进程通信上机实验(消息缓冲通信)
二、算法思想
1、在进程管理(调度)实验基础上,加入进程通信的功能,采用消息缓冲通信机制进行通信。
2、P1发送数据给P2,P2排序后发送给P3,P3接收数据并输出。
3、要发送的数据内容由操作者实时输入。
三、小组分工:
四、算法程序
1、缓冲区结构
typedefstructnode
{intid;
intsize;
chartext[100];
structnode*next;
}buftype;
2、进程控制块PCB
struct{intid;
charstatus;
intwaiter1;
intpriority;
charstack[5];
intsm;
buftype*front;
buftype*rear;
}pcb[4];
3.发送、接收、排序程序算法流程
(1)发送函数send()
程序:
voidsend(intrec_id,chara[],intn){
buftype*p;
p=(buftype*)malloc(sizeof(buftype));
p->id=rec_id;//接收消息进程id
p->size=n;//消息的大小
strcpy(p->text,a);//将消息拷贝到节点之中
p->next=0;
if(pcb[rec_id].sm<=0)//如果消息缓冲队列空..就将p放在链首
{
pcb[rec_id].front=p;
}
else
pcb[rec_id].rear->next=p;//如果不空..放在队尾..rear指针后移一位
pcb[rec_id].rear=p;//队尾指针指向新加入的缓冲区
pcb[rec_id].sm++;//接收进程的消息个数+1
}
(2)接收函数receive()
程序:
intreceive(intrec_id,charb[])
{
buftype*p;
if(pcb[rec_id].sm<=0){
printf("nomessage!
!
\n");
return0;
}else{
p=pcb[rec_id].front;
pcb[rec_id].sm--;
pcb[rec_id].front=pcb[rec_id].front->next;//取出来后..front指针后移一位
strcpy(b,p->text);
free(p);
if(pcb[rec_id].front==NULL)
pcb[rec_id].rear=NULL;
return1;
}
}
(3)排序函数sort()
调用参数:
a[]待排序数组,n数据个数;
程序:
voidsort(chara[],intn)
{
inti,j;
chartemp;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 程序 进程 通信 实验 报告 详解