《操作系统原理》实验报告三

一、实验目的
(1)理解线程/进程的通信机制和编程;
(2)理解线程/进程的死锁概念和如何解决死锁

二、实验内容
(1)在 Ubuntu 或 Fedora 环境创建一对父子进程,使用共享内存的方式实现进程间的通信。父进程提供数据(1-100,递增),子进程读出来并显示。
(2)(考虑信号通信机制)在 Ubuntu 或 Fedora 环境创建父子 2 个进程 A,B。进程 A 不断获取用户从键盘输入的字符串或整数,通过信号机制传给进程 B。如果输入的是字符串,进程 B 将其打印出来;如果输入的是整数,进程 B 将其累加起来,并输出该数和累加和。当累加和大于 100 时结束子进程,子进程输出“My work done!”后结束,然后父进程也结束。
(3)在 windows 环境使用创建一对父子进程,使用管道(pipe)的方式实现进程间的通信。父进程提供数据(1-100,递增),子进程读出来并显示。
(4)(考虑匿名管道通信)在 windows 环境下创建将 CMD 控制台程序封装为标准的 windows 窗口程序。
(5)在 windows 环境下,利用高级语言编程环境(限定为 VS 环境或 VC 环境或QT)调用 CreateThread 函数哲学家就餐问题的演示。要求:(1)提供死锁的解法和非死锁的解法;(2)有图形界面直观显示哲学家取筷子,吃饭,放筷子,思考等状态。(3)为增强结果的随机性,各个状态之间的维持时间采用随机时间,例如100ms-500ms 之间。
:[1,3,4]中任意 1 题和第2,5 题,共计 3 道题

三、实验过程
(一)实验步骤
1)使用共享内存实现进程间的通信
1. 何为共享内存?
共享内存就是允许两个不相关的进程访问同一个逻辑内存。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址
2.重要函数介绍:
声明在头文件 sys/shm.h 中
shmget函数:该函数用来创建共享内存
int shmget(key_t key, size_t size, int shmflg);
key_t key: 它有效地为共享内存段命名,shmget函数成功时返回一个与key相关的共享内存标识符(非负整数)。调用失败返回-1.
size_t size: size以字节为单位指定需要共享的内存容量
int shmflg: 共享内存的权限标志
shmat函数: shmat函数的作用就是用来启动对该共享内存的访问,并把共享内存连接到当前进程的地址空间
void *shmat(int shm_id, const void *shm_addr, int shmflg);
shm_id: shm_id是由shmget函数返回的共享内存标识。
shm_addr: shm_addr指定共享内存连接到当前进程中的地址位置,通常为空,表示让系统来选择共享内存的地址。
shmflg: shm_flg是一组标志位,通常为0。
shmdt函数: 该函数用于将共享内存从当前进程中分离,使该共享内存对当前进程不再可用。
int shmdt(const void *shmaddr);
参数shmaddr: 是shmat函数返回的地址指针,调用成功时返回0,失败时返回-1
shmctl函数: 与信号量的semctl函数一样,用来控制共享内存
int shmctl(int shm_id, int command, struct shmid_ds *buf);
shm_id: 是shmget函数返回的共享内存标识符。
command: 是要采取的操作,它可以取下面的三个值 :
IPC_STAT: 把shmid_ds结构中的数据设置为共享内存的当前关联值,即用共享内存的当前关联值覆盖shmid_ds的值。
IPC_SET:如果进程有足够的权限,就把共享内存的当前关联值设置为shmid_ds结构中给出的值
IPC_RMID: 删除共享内存段
buf: 是一个结构指针,它指向共享内存模式和访问权限的结构。
1.

	if (pid < 0)    
2.	   {
       
3.	       //printf('子进程创建失败');    
4.	       fprintf
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值