网站大量收购闲置独家精品文档,联系QQ:2885784924

操作系统实验报告(进程间的共享存贮区和信号量通信).doc

操作系统实验报告(进程间的共享存贮区和信号量通信).doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统实验报告(进程间的共享存贮区和信号量通信)

实验题目 进程间的共享存贮区和信号量通信 小组合作 否 姓名 班级 学 号 一、实验目的 熟悉UNIX中的信号量机制中使用的数据结构。 熟悉信号量机制的操作以及控制。 了解共享主存段机制。 学会对共享主存段的系统调用。 二.实验环境 操作系统Windows XP集装有虚拟机Linux的系统 三、实验内容与步骤 一、信号量机制 在UNIX系统V中,一个或多个信号量构成一个信号量集合。使用信号量机制用来实现进程间的同步和互斥,允许并发进程一次对一组信号量进行相同或不同的操作。每个P,V操作不限于减1或加1,而是可以加减任何整数。在进程终止时,系统可以根据需要自动消除所有被进程操作过的信号量的影响。 例子用于互斥共享文件的信号量的使用。代码如下: #include stdio.h #include stdlib.h #include unistd.h #include time.h #include sys/types.h #includesys/wait.h #includelinux/sem.h #define NUM_PROCS 5 #define SEM_ID 250 #define FILE_NAME tmp/sem_MUTEX #define DELAY 400000 void update_file(int sem_set_id, char *file_name_path, int number) { struct sembuf sem_op; FILE *file; sem_op.sem_num =0; sem_op.sem_op = -1; sem_op.sem_flg =0; semop(sem_set_id, sem_op,1); file = fopen(file_name_path,w); if(file){ fprintf(file,%d\n,number); fclose(file); } sem_op.sem_num =0; sem_op.sem_op =1; sem_op.sem_flg = 0; semop(sem_set_id,sem_op, 1); } void do_child_loop(int sem_set_id, char *file_name) { pid_t pid =getpid(); int i,j; for(i=0;i3;i++){ update_file(sem_set_id, file_name,pid); for(j=0;j200000;j++); } } int main(int argc, char **argv) { int sem_set_id,child_pid; union semun sem_val; int i,rc; sem_set_id = semget(SEM_ID, 1,IPC_CREAT |0600); if(sem_set_id ==-1){ perror(mains semget error); exit(1); } sem_val.val =1; rc =semctl(sem_set_id,0,SETVAL,sem_val); if(rc ==-1){ perror(main:setctl); exit(1); for(i =0;iNUM_PROCS; i++){ child_pid = fork(); switch(child_pid){ case -1: perror(fork()); exit(0); case 0: do_child_loop(sem_set_id,FILE_NAME); exit(0); default:break; } } for(i = 0;i10;i++){ int child_status; wait(child_status); } printf(main is done); fflush(stdout); return 0; } 运行结果: 二、共享主存段机制 共享主存段为进程提供了直接通过主

您可能关注的文档

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档