




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验实验 4 进程的管道通信进程的管道通信 1 目的目的 1 加深对进程概念的理解 明确进程和程序的区别 2 进一步认识并发执行的实质 3 分析进程争用资源的现象 学习解决进程互斥的方法 4 学习解决进程同步的方法 5 了解 Linux 系统中进程通信的基本原理 进程是操作系统中最重要的概念 贯穿始终 也是学习现代操作系统的关键 通过本 次实验 要求理解进程的实质和进程管理的机制 在 Linux 系统下实现进程从创建到终止 的全过程 从中体会进程的创建过程 父进程和子进程之间的关系 进程状态的变化 进 程之间的互斥 同步机制 进程调度的原理和以管道为代表的进程间的通信方式的实现 2 内容及要求内容及要求 这是一个设计型实验 要求自行编制程序 使用系统调用 pipe 建立一条管道 两个子进程分别向管道写一句话 Child process1 is sending a message Child process2 is sending a message 父进程从管道读出来自两个子进程的信息 显示在屏幕上 要求 1 父进程先接收子进程 1 发来的消息 然后再接收子进程 2 发来的消息 2 实现管道的互斥使用 当一个子进程正在对管道进行写操作时 另一子进程必须等 待 使用系统调用 lockf fd 1 1 0 实现对管道的加锁操作 用 lockf fd 1 0 0 解除 对管道的锁定 3 实现父子进程的同步 当子进程把数据写入管道后 便去睡眠等待 当父进程试 图从一空管道中读取数据时 也应等待 直到子进程将数据写入管道后 才将其 唤醒 3 相关的系统调用 相关的系统调用 1 fork 用于创建一个子进程 格式 int fork 返回值 在子进程中返回 0 在父进程中返回所创建的子进程的 ID 值 当返回 1 时 创建失败 2 wait 常用来控制父进程与子进程的同步 在父进程中调用 wait 则父进程被阻塞 进入等待队列 等待子进程结束 当子进 程结束时 父进程从 wait 返回继续执行原来的程序 返回值 大于 0 时 为子进程的 ID 值 等于 1 时 调用失败 3 exit 是进程结束时最常调用的 格式 void exit int status 其中 status 为进程结束状态 4 pipe 用于创建一个管道 格式 pipe int fd 其中 fd 是一个由两个数组元素 fd 0 和 fd 1 组成的整型数组 fd 0 是管道的读端口 用于从管道读出数据 fd 1 是管道的写端口 用于向管道写入数据 返回值 0 调用成功 1 调用失败 5 sleep 调用进程睡眠若干时间 之后唤醒 格式 sleep int t 其中 t 为睡眠时间 6 lockf 用于对互斥资源加锁和解锁 在本实验中 该调用的格式为 lockf fd 1 1 0 表示对管道的写入端口加锁 lockf fd 1 0 0 表示对管道的写入端口解锁 7 write fd 1 String Length 将字符串 String 的内容写入管道的写入口 8 read fd 0 String Length 从管道的读入口读出信息放入字符串 String 中 4 程序流程程序流程 父进程 1 创建管道 2 创建子进程 1 3 创建子进程 2 4 等待从管道中读出子进程 1 写入的数据 并显示在屏幕上 5 等待从管道中读出子进程 2 写入的数据 并显示在屏幕上 6 退出 子进程 1 将管道的写入口加锁 2 将信息 Child process n is sending message 输入到变量 OutPipe 中 n 1 2 3 将 OutPipe 中信息写入管道 4 睡眠等待父进程从管道读出数据 5 将管道的写入口解锁 6 退出 5 程序流程图程序流程图 开始 创建管道 创建子进程 创建成功 N Y 父进程返回 N 锁定管道写端 写信息入管道 睡眠等待父进程 开锁 撤销子进程P1 Y 创建子进程P2 创建成功 N Y 父进程返回 Y 管道中是否有 消息 Y 读取管道消息 N 放弃处理机 锁定管道写端 向管道写入消息 睡眠等待父进程 锁定管道写端 撤销子进程P2 结束 N 6 程序源代码程序源代码 include include include include include include include include int main int i r P1 P2 fd 2 fd 1 写入端 fd 0 读取端 char buf 50 s 50 pipe fd while P1 fork 1 if P1 0 lockf fd 1 1 0 sprintf buf child process P1 is sending messages n printf child process P1 n write fd 1 buf 50 sleep 5 lockf fd 1 0 0 exit 0 else while P2 fork 1 if P2 0 lockf fd 1 1 0 sprintf buf child process P2 is sending messages n printf child process P2 n write fd 1 buf 50 sleep 5 lockf fd 1 0 0 exit 0 int pid pid wait 0 printf d n pid if r read fd 0 s 50 1 printf can t read pipe n else printf s n s pid wait 0 printf d n pid if r read fd 0 s 50 1 printf can t read pipe n else printf s n s exit 0 7 运行结果及其说明运行结果及其说明 运行结果如下图所示 8 回答以下问题回答以下问题 指出父进程与两个子进程并发执行的顺序 并说明原因 答 父进程先创建子进程 P1 然后子进程 P1 执行 P1 执行完以后父进程执行并 创建子进程 P2 接着 P2 执行 P2 执行完以后返回父进程 程序结束 这是由 进程的同步机制决定的 因为只有子进程向管道写入信息后 父进程才能从管 道中读取消息 否则父进程调用 wait 阻塞自己 将处理机交由子进程 若不对管道加以互斥控制 会有什么后果 答 对管道进行互斥控制 是为防止两个子进程对管道资源进行争夺而产生信息 丢失或覆盖 如果不加控制 那么可能一个子进程写入的信息还没来得及被 父进程读出 另一个子进程又向管道写入信息 那么之前的进程写入的信息将 被覆盖 父进程也就读不到之前进程传递来的信息了 说明你是如何实现父子进程之间的同步的 答 父进程读出之前确定管道中有数据 若管道中没有数据 则父进程调用 wait 函数阻塞自身 当子进程结束时 管道中已经有数据 父进程才执行 子进程在写入之前要确定管道中的数据已经被父进程读出 否则不能写 入或者阻塞自己 可以通过进程间的互斥来间接的办到 因为子进程间的互斥 所以 每个子进程在执行开始都对管道 p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年军供站医护人员招聘笔试答题技巧与案例分析
- 2025年中职英语专业的教师资格证面试模拟题及答案
- 2025年抽纱刺绣工艺品项目发展计划
- 2025年液压气压刹车系统项目建议书
- 2025-2026学年北师大版(2024)小学数学三年级上册《捐书》教学设计
- 吉林省长春市榆树市2025-2026学年九年级上学期开学五校联考语文试卷(含答案)
- 第二章 有理数及其运算 单元测试 培优卷(含答案) 2025-2026北师大版八上
- 2025年江西省吉安市吉州区中考数学一模试卷(含部分答案)
- 教育学与教学法基础知识试题及答案
- 古琴等级考试试题及答案
- 化学史课件讲课教案
- 心率与高血压培训课件
- 10kV高压开关柜验收规范标准详
- 旅游客源国地区概况(第三版)第03章亚洲客源国概况(下)
- 智慧审计综合管理平台解决方案
- 第一讲 ASPEN Plus使用入门课件
- 铁路客运英语中专学习教案
- 手术部位感染的预防与控制
- 宝钢产品质量证明书模板
- 专业美术专业介绍(课堂PPT)
- 医疗质量医疗安全目标管理责任书
评论
0/150
提交评论