山大操作系统实验4.doc
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
进程同步实验 张咪 软件四班 一、实验要求 加深对并发协作进程同步与互斥概念的理解,观察和体验并发进程同步与互斥操作的效 果,分析与研究经典进程同步与互斥问题的实际解决方案。了解Linux系统中IPC进程同 步工具的用法,练习并发协作进程的同步与互斥操作的编程与调试技术。 二、实验目的 抽烟者问题。假设一个系统中有三个抽烟者进程,每个抽烟者不断地卷烟并抽烟。抽烟 者卷起并抽掉一颗烟需要有三种材料:烟草、纸和胶水。一个抽烟者有烟草,一个有纸 ,另一个有胶水。系统中还有两个供应者进程,它们无限地供应所有三种材料,但每次 仅轮流提供三种材料中的两种。得到缺失的两种材料的抽烟者在卷起并抽掉一颗烟后会 发信号通知供应者,让它继续提供另外的两种材料。这一过程重复进行。 请用以上介绍的IPC同步机制编程,实现该问题要求的功能。 三、实验环境 实验环境均为Linux操作系统,开发工具为gcc和g++。 四、实验思路 1、约束: (1)某一时刻,只能有一个供应者,放入一对物品。 (2)某一时刻,只能有一个抽烟者,且要保证这个抽烟者恰好需要的就是刚刚生产的物 品。 (3)所有供应者提供这种物品之后,不论它 【知识点详解】 本实验主要涉及的操作系统知识点是进程同步与互斥,具体是通过IPC(Inter-Process Communication,进程间通信)机制解决并发环境中进程协作的问题。实验目标是实现经典的“抽烟者问题”(Smoker Problem),这属于多线程编程中的经典案例,用于展示同步与互斥的实现。 1. **进程同步与互斥**: - **进程同步**是指多个进程协同工作,以完成一项任务,需要控制进程执行的相对顺序,以防止出现数据不一致或资源浪费。 - **互斥**是指同一时刻只允许一个进程访问临界资源,以避免资源竞争导致的数据错误。 2. **经典问题——抽烟者问题**: - 系统中包含三个抽烟者进程和两个供应者进程。 - 抽烟者需要烟草、纸和胶水三种材料,每个抽烟者只有一种材料。 - 供应者无限供应材料,但每次只提供两种。 - 当抽烟者获得缺失的材料后,需通知供应者提供剩余材料。 - 实现此问题的关键在于如何保证供应者与抽烟者的协调,以及资源的有效分配。 3. **Linux中的IPC进程同步工具**: - 在Linux中,常用的进程同步机制包括信号量(Semaphore)、消息队列、管道(Pipe)、共享内存等。 - 实验中使用的是信号量机制,包括互斥量(Mutex Semaphore)和条件变量(Condition Variable)。 4. **信号量机制**: - **互斥量**用于控制对临界资源的访问,确保同一时刻只有一个进程能进入临界区。 - **条件变量**则用于进程间的同步,进程在等待特定条件满足时可以释放资源进入等待状态,条件满足时被唤醒。 5. **实验思路**: - 实验设定约束,如同一时刻只有一个供应者和一个抽烟者在行动。 - 使用信号量实现供应者和抽烟者的同步与互斥,例如供应者生产后通知抽烟者,抽烟者取走材料后再通知供应者继续生产。 - 创建五个子进程,两个供应者,三个抽烟者。 - 使用信号量数组管理不同资源的可用状态和供应者之间的同步。 - 使用ftok函数生成关键ID,创建共享内存,供应者将生产信息写入共享内存,供其他进程读取。 6. **实验流程**: - 创建并初始化信号量。 - 创建进程,分配角色。 - 供应者根据信号量进行生产与通知,抽烟者根据信号量等待资源并消费。 - 使用`wait()`和`signal()`函数进行信号量操作,控制进程间的同步与互斥。 - 结束时释放资源,关闭信号量。 实验通过实际编程实现抽烟者问题,有助于深入理解进程同步与互斥的概念,以及如何在Linux环境下运用IPC机制解决问题。实验过程中,学生将学习到如何利用C语言编写多线程程序,并掌握信号量在解决并发问题中的应用技巧。
- 粉丝: 195
- 资源: 3万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助