操作系统习题

三个进程P1、P2、P3互斥使用一个包含N(N>0)个单元的缓冲区。P1每次用produce()生成一个正整数并用put()送入缓冲区某一空单元中;P2每次用getOdd()从该缓冲区中取出一个奇数

这个问题较为简单:与生产者一消费者问题非常类似,只不过涉及的进程多了一个。因此,我们可以用类似于生产者一消费者的解决方法来解决这个问题。不过,由于本问题的范围在生产者~消费者问题上进行了线性扩展,我们也需要对生产者~消费者的解决方案进行线性扩展,即增加适当数量的信号量。
解决要点如下:
(1)由于缓冲区是共享空间,我们设置一个互斥信号量来保护它。设信号量为mutex。
(2)P1、P2共享缓冲区的奇数数值,设同步信号量为odd。
(3)P1、P3共享缓冲区的偶数数值,设同步信号量为even。
(4)P1、P2、P3共享缓冲区的空位,设同步信号量为empty。
(5)所有进程均需进行down(mutex)和up(mutex)操作。
(6)P1需要进行down(empty)和up(odd)/up(even)之一的操作。
(7)P2需要进行down(odd)和up(empty)的操作。
(8)P3需要进行down(even)和]up(empty)的操作。

三个进程的实现如下:
P1:
while(true) {
integer=prodlace();//此行以下5行与生产者问题解答一样
down(empty);
down(mutex);
put();
up(mutex);
if(integer%2==0)//此处与生产者方案略有不同,需要进行判断,以决定唤醒P2、P3中的哪一个进程
up(even);
else
up(odd);
}
P2: 与消费者问题的解答几乎完全一样。
while(true) {
down(odd);
down(mutex);
getodd();
up(mutex);
up(empty);
countOdd();
}
P3: 与消费者问题的解答几乎完全一样。
while(true) {
down(even);
down(mutex);
getEven();
up(mutex);
up(empty);
countEven();
}

 

  • 11
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
第一章 操作系统引论 学习本章的目的是使学生建立起 OS的基本概念。要求了解OS的引入和发展, 理解多道程序设计技术,掌握操作系统的功能和特征,了解 分层式结构和微内核结构。 第二章 进程和线程 本章的学习目的是使学生建立起进程的概念。进程是 OS中最重要的基本概念,本章是全书中最重要的一章。要求 掌握 进程的概念,进程的状态及其转换, 进程控制原语,用 P、V操作解决进程同步问题,了解进程间的通信, 了解线程的概念。 第三章 死锁 掌握死锁的概念和产生的必要条件,掌握死锁的预防和避免方法,了解银行家算法,死锁的检测及恢复。 第四章 调度 本章的学习目的主要是使学生理解和掌握处理机调度基本概念,要求掌握进程调度、作业调度和常见的调度算法,了解三级调度及其之间的联系。 第五章 存储管理 本章的目的是使学生了解各种存储器管理的方式和它们的实现方法。要求掌握地址重定位、虚拟存贮器、动态链接和共享的概念以及实现方法;掌握分区、页式与请求页式、段式与虚拟段式的实现原理和地址变换。了解段页式存储管理技术,虚存中的置换算法。 第六章 文件系统 本章的学习目的是使学生掌握文件系统的基本概念和实现过程。要求掌握文件的逻辑结构、物理组织及对不同类型文件的存取方法,掌握文件目录, 外存空间管理及文件共享方式, 了解文件系统的概念、文件的使用、文件系统的层次模型。 第七章 设备管理 学习本章的目的是使学生了解操作系统处理用户 I/O请求的基本过程。要求 掌握通道、缓冲、设备独立性的概念,掌握 I/O控制方式及设备驱动程序 ,设备分配的数据结构及分配程序,掌握设备分配技术,设备管理程序功能,理解缓冲技术和Spooling系统及磁盘调度算法。 第八章 中断和信号机制 理解中断的概念,了解中断机构的组成及工作机制,理解系统调用的概念,熟悉系统调用的使用方法,了解信号机制。 第九章 网络操作系统 本章的学习目的是使学生了解网络操作系统和 Windows NT。要求理解网络操作系统提供的功能和服务,并了解客户/服务器模式及Windows NT网络命令。 第十章 分布式操作系统 本章的目的是使学生了解分布式操作系统的基本概念和近期发展动态,了解常见的一些分布式系统及其相关的支持技术和实现方案。 第十一章 安全性与保护机制 本章学习的目的是使学生能初步建立起系统安全性的概念。要求掌握数据加密、数字签名和认证的基本概念,了解访问控制技术和防火墙技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值