2020-12-31 操作系统复习第三章

3. 同步、通信和死锁

3.1 并发

进程执行的并发性:一组进程的执行在时间上是重叠的。

Bernstein条件:若两个进程的程序P1和P2能满足引用变量集与改变变量集的交集为空集,则并发进程的执行与时间无关

与时间有关的错误:一是结果不唯一,二是永远等待

进程的关系:竞争与协作;(同步)

互斥会产生死锁和饥饿问题;进程同步指为完成共同任务的并发进程需要协调它们的活动,需要在某些位置上排定执行的先后次序而等待所产生的协作关系。

3.2 临界区

临界区调度的原则

  • 一次至多一个进程能够进入临界区内执行;
  • 如果已有进程在临界区,其他试图进入的进程应等待;
  • 进入临界区内的进程应在有限时间内退出,以便让等待进程中的一个进入。

Peterson算法:为每个进程设置标志,当标志值为true时表示此进程要求进入临界区,另外,再设置一个指示器turn以指示可以由哪个进程进入临界区,当turn=i时则可由进程pi进入临界区

实现临界区管理的硬件设施

  • 关中断
  • 测试并设置指令
  • 兑换指令

以上这些软件算法和硬件设施所实现的互斥方案都是正确的,但都是忙等待方案。

3.3 信号量和pv操作

操作系统实现进程同步的机制称为同步机制。主要包括:信号量,锁,管程,消息传递

1965年E.W.Dijkstra提出了新的同步工具--信号量和P、V操作。操作系统中,信号量表示物理资源的实体,它是一个与队列有关的整型变量。实现时,信号量是一种记录型数据结构,有两个分量:一个是信号量的值,另一个是信号量队列的列指针

P(s);将信号量s减去l,若结果小于0,则调用P(s)的进程被置成等待信号量s的状态,将其加入队列list。V(s):将信号量s加1,若结果不大于0,则从list中取出一个(等待信号量s)进程,并释放它。

解决5个哲学家问题

解决生产者-消费者问题:

有n个生产者和m个消费者,连接在一个有k个单位缓冲区的有限缓冲上。

producer和consumer都是并发进程,只要缓冲区未满,producer生产的产品就可投入缓冲区;只要缓冲区不空,consumer就可从缓冲区取走并消耗产品。

读者-写者问题:

读者优先,当存在读者时,写者将被延迟,只要有一个读者,后面的读者都可以读,写者就会长时间等待

3.4 管程

3.5 进程通信

包括信号通信机制、管道通信机制、消息传递通信机制、信号量通信机制、共享内存通信机制

3.6 死锁

死锁产生的条件:

  • 互斥条件
  • 占有和等待条件:等待时不释放已有资源
  • 不剥夺条件
  • 循环等待条件:存在循环等待链

死锁防止:通过设定一些规则,按照这些规则申请和分配资源,就(一定)不会产生死锁。

死锁避免:不用设定规则。在资源分配前,用算法检测分配资源后是否会产生死锁,如果不会,则进行分配;否则,不予分配。

死锁检测和解除:不用设定规则,分配资源前不做检测。而是在运行过程中周期性地检测是否会发生死锁,如果会,则采取一定的措施消除死锁(例如,收回某些已经分配的资源或者回滚)。

Available:当前可用资源

Claim:各进程对各类资源的最大需求

Allocation:各进程已占有的各类资源的数量

Need:各进程还需要的各类资源数量

Work:可用的资源数量

如图,寻找安全序列时初始work为available,然后用claim-allocation得到need,寻找need<work的进程,填入表,possible标为T,把进程的work+allocation作为下一次的work,重复操作。如果存在F,则不安全

分配时检查request是否超出了need,和request是否超出了available。超出则拒绝

原子操作在执行过程保证不被打断

自旋锁是忙式等待

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值