实验目的
加深对进程同步与互斥概念的认识; 掌握信号量的使用,并应用它解决生产者——消费者问题; 掌握信号量的实现原理。
实验环境
本操作系统实验的硬件环境是 IA-32(x86) 架构的 PC 机(在实验楼的环境中就是右侧的窗口),主要软件环境是 Bochs + gcc + 你最喜欢的编辑器 / IDE + 你最喜欢的操作系统 + Linux 0.11 源代码。
本次实验的基本内容是:
在 Ubuntu 下编写程序,用信号量解决生产者——消费者问题; 在 0.11 中实现信号量,用生产者—消费者程序检验之。
实验过程及数据记录
实验环境准备
添加信号量系统调用.进入linux-0.11/include目录下,修改文件
新建sem.h
在kernel目录中,修改system_call.s
在include下的linux目录中,修改sys.h
在linux目录下增加,新增sem.c
修改makefile
运行
实验结果分析
实验结果基本与预期结果一致。
问题:
在 pc.c 中去掉所有与信号量有关的代码,再运行程序,执行效果有变化吗?为什么会这样? 实验的设计者在第一次编写生产者——消费者程序的时候,是这么做的:这样可行吗?如果可行,那么它和标准解法在执行效果上会有什么不同?如果不可行,那么它有什么问题使它不可行?
答:这样做是可不行的,有造成死锁的可能。不能先对Mutex加锁再对Empty加锁。 假如mutex=1,当前缓冲区为空,full=0,Consumer执行P(Mutex)后又执行P(full),然后producer执行P(mutex),那么full和mutex 的值将永远得不到变化,生产者和消费者陷入死锁。
学习时间 72分钟
操作时间 18分钟
按键次数 589次
实验次数 5次
报告字数 1729字
是否完成 完成