当前位置:   article > 正文

操作系统头歌实验二 进程(线程)同步或死锁1、2_头歌操作系统进程通信调度实验

头歌操作系统进程通信调度实验

题目描述:

操作系统为进程提供了必要的隔离,使得进程内部获得“封闭”的“可再现”执行环境。但是也有很多场合需要进程间交互、协作完成任务,这就需要进程间通信手段以及同步手段。通信手段用于进程间的数据交换,而同步手段用于控制各自的执行步伐形成前后因果或互斥的执行关系。本次实训,同学们将观察和感受Linux提供的各种进程间通信手段。

第一关:创建共享内存

  1. #include <sys/types.h>
  2. #include <sys/ipc.h>
  3. #include <sys/shm.h>
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <string.h>
  7. #define BUFSZ 4096
  8. int main(int argc, char* argv[])
  9. {
  10. //*****************Begin***********************
  11. key_t key=ftok("keyfile",0);
  12. shmget(key,BUFSZ,IPC_CREAT);
  13. //*****************End*************************
  14. system("ipcs -m >temp"); //执行ipcs -m 命令,显示系统的共享内存信息,此句不可以删除。
  15. return 0;
  16. }

第二关:读写共享内存

read.c

  1. #include <sys/types.h>
  2. #include <sys/ipc.h>
  3. #include <sys/shm.h>
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <string.h>
  7. int main( int argc, char* argv[])
  8. {
  9. int shm_id;
  10. char* shm_buf;
  11. if (argc != 2) {
  12. printf("USAGE:atshm <identifier>\n");
  13. exit(1);
  14. }
  15. shm_id = atoi(argv[1]);
  16. //--------------Begin--------------
  17. void *s=shmat(shm_id,0,0);
  18. system("ipcs -m > read_attach");
  19. printf("%s\n",(char*)s);
  20. shmdt(s);
  21. system("ipcs -m >read_detach");
  22. //---------------End----------------
  23. exit(0);
  24. }

write.c

  1. #include <sys/types.h>
  2. #include <sys/ipc.h>
  3. #include <sys/shm.h>
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <string.h>
  7. int main(int argc, char* argv[])
  8. {
  9. int shm_id;
  10. char* shm_buf;
  11. if (argc != 2) {
  12. printf("USAGE:atshm <identifier>");
  13. exit(1);
  14. }
  15. shm_id = atoi(argv[1]);
  16. //----------------Begin------------------
  17. void *s=shmat(shm_id,0,0);
  18. system("ipcs -m >write_attach");//将当前进程和共享内存建立映射之后,执行该代码;不可删除
  19. char *t="Hello shared memory!";
  20. memcpy(s,t,strlen(t)+1);
  21. shmdt(s);
  22. system("ipcs -m >write_detach");//将当前进程和共享内存解除映射之后,执行该代码;不可删除
  23. //--------------End-----------------------
  24. exit(0);
  25. }

第三关:POSIX信号量的使用

  1. #include <semaphore.h>
  2. #include <unistd.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <fcntl.h>
  6. int main(int argc, char** argv)
  7. {
  8. //--------------Begin---------------
  9. sem_t *s;
  10. s=sem_open("semfile",O_CREAT,0666,1);
  11. //--------------End-----------------
  12. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/336623
推荐阅读
相关标签
  

闽ICP备14008679号