没有合适的资源?快使用搜索试试~ 我知道了~
操作系统实验一_周玉川_20172213020061
需积分: 0 0 下载量 26 浏览量
2022-08-08
20:09:07
上传
评论
收藏 514KB DOCX 举报
温馨提示
试读
12页
四、实验原理:(1)由Dijkstra提出并解决的哲学家进餐问题(The Dinning Philosophers Problem)是典型的同步问题 五、实验内
资源详情
资源评论
资源推荐
电子科技大学信息与软件工程学院
实 验 报 告
学 号 2017221302006
姓 名 周玉川
(实验) 课程名称 操作系统基础
理论教师 刘瑶
实验教师 文淑华
电子科技大学教务处制表
电 子 科 技 大 学
实 验 报 告
学生姓名:周玉川 学号:2017221302006 指导教师:刘瑶
实验地点:信软楼西 305 实验时间:2019.04.22
一、实验名称:信号量经典问题的实现
二、实验学时:4
三、实验目的:
本实验分为两部分,首先实现哲学家就餐问题,要求不能出现死锁。通过本
实验熟悉 Linux 系统的基本环境,了解 Linux 下进程和线程的实现。然后实现生
产者/消费者问题,通过本实验掌握进程间的同步和互斥机制的使用。熟悉基于
某操作系统进程和线程的编程。
1) 掌握进程、线程的概念,熟悉相关的控制原语。
2) 掌握进程、线程间的同步原理和方法。
3) 掌握进程、线程间的互斥原理和方法。
4) 掌握使用信号量原语解决进程、线程间互斥和同步方法。
四、实验原理:
(1)由 Dijkstra 提出并解决的哲学家进餐问题(The Dinning Philosophers
Problem)是典型的同步问题。该问题是描述有五个哲学家共用一张圆桌,分别坐
在周围的五张椅子上,在圆桌上有五个碗和五只筷子,他们的生活方式是交替地
进行思考和进餐。平时,一个哲学家进行思考,饥饿时便试图取用其左右最靠近
他的筷子,只有在他拿到两只筷子时才能进餐。进餐完毕,放下筷子继续思考。
(2)第二个问题考虑 n 个缓冲区的缓冲池作为一个共享资源,当生产者进
程从数据源—文件中读取数据后将会申请一个缓冲区,并将此数据放入缓冲区中。
消费者从一个缓冲区中取走数据,并将其中的内容打印输出。当生产者进程正在
访问缓冲区时,消费者进程不能同时访问缓冲区,因此缓冲区是个互斥资源。
五、实验内容:
1)熟悉 Ubuntu 系统环境和命令;
2)熟悉 Ubuntu 系统下的多线程编程;
2)在 Ubuntu 系统下编程实现哲学家就餐问题。
第一步:哲学家就餐问题
实现教材 2.5.2 节中所描述的哲学家就餐问题。要求显示出每个哲学家的工作
状态,如就餐,思考。连续运行 30 次以上都未出现死锁现象。
第二步:实现生产者/消费者问题
1)有一群生产者进程在生产产品,并将这些产品提供给消费者进程去消费。
为使生产者进程与消费者进程能并发执行,在两者之间设置了一个具有 n 个缓
冲区的缓冲池:生产者进程从文件中读取一个数据,并将它存放到一个缓冲区
中; 消费者进程从一个缓冲区中取走数据,并输出此数据。生产者和消费者
之间必须保持同步原则:不允许消费者进程到一个空缓冲区去取产品;也不允
许生产者进程向一个已装满产品且尚未被取走的缓冲区中投放产品。
2)、创建 3 进程(或者线程)作为生产者,4 个进程(或者线程)作为消费者。
创建一个文件作为数据源,文件中事先写入一些内容作为数据。
3)、生产者和消费者进程(或者线程)都具有相同的优先级。
六、实验器材(设备、元器件):
(1) 学生每人一台 PC,安装 Windows10 操作系统。
(2) 个人 PC 安装 VMware 虚拟机和 Ubuntu 系统。
七、实验步骤:
(一) 熟悉 Ubuntu 系统下的多线程编程。
1. 使用“Ctrl+Alt+T”打开终端;
2. 使用 gedit 或 vim 命令打开文本编辑器进行编码: “gedit 文件名.c”
3.编译程序:
“ gcc 文件名.c -o 可执行程序名 ”
(如果只输入 gcc 文件名.c,默认可执行程序名为 a.out)
使用线程库时,gcc 编译需要添加-lpthread
4. 执行程序:./可执行程序名
(二)信号量同步问题实现
剩余11页未读,继续阅读
爱吃番茄great
- 粉丝: 20
- 资源: 298
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0