操作系统学习(四)-- 操作系统之进程同步和死锁
操作系统之进程同步和死锁
L16 进程同步和信号量
- 
进程同步之前讲过用上锁的方式 
- 
两个合作的进程都要修改counter 
  
- 
进程合作:多进程共同完成一个任务 
- 
示例1:司机和售票员相互合作,等信号和发信号 
- 
信号-->信号量,等待是进程同步的核心 
  
信号量分析视频
- 
信号同步,等待,唤醒 
- 
P1,P2都是休眠的进程 
- 
根据程序,P2是不会唤醒的,这样就有问题了? 
- 
不仅要知道缓冲区的大小counter,而且要记录休眠的进程个数 
- 
不能根据counter决定是不是发信号,而是根据信号量来决定是否发信号 
  
- 
信号量分析 
- 
根据信号量来分析 
  
- 
sem负数表示有多少个进程阻塞,正数表示还有多少个空闲的缓冲区
  
- 
信号量是负数,(生产者)进程来时阻塞等待,消费者来时唤醒;信号量为正数,(生产者)进程来时,执行即可,消费者来时,执行.[12分钟处] 
- 
信号量的实现 
- 
P操作,申请资源才能阻塞;V操作:生产资源 
- 
P,V操作要做成内核态,系统调用;上层应用再调用P,V. 
  
V(semaphire s)
{
   s.value++;
   if(s.value<=0) //等于符号
      wakeup(s.queue);
}
- 用信号量解生产者和消费者
- 关键在什么是停...
- 消费者先test(P)是否阻塞
- mutex是互斥信号量
- 信号量的含义:
  
L17 对信号量的临界区保护
- 
确保信号量必须正确 
- 
共同修改信号量引出问题 
  
- 
临界区概念 
  
- 
临界区代码保护的原则 
  
- 
轮换法(值日法) 
- 
不满足有空让进 
  
- 
标记法 
- 
不满足有限等待 
  
- 
非对称标记 Peterson算法
- 
结合标记和轮转两种思想 
  
  
- 
多进程-面包店算法 
  
- 
保护临界区的另一类解法--从硬件层处理 
- 
开关中断 
  
- 
硬件原子指令法 
  
L18 信号量的代码实现
- 
中断保护临界区 
- 
根据信号量的值判断是否进程切换 
  
- 
if 或者 while实现信号量
L19 死锁处理
- 
概念 
  
- 
死锁的必要条件 
  
- 
死锁处理方法概述 
- 
死锁预防,死锁避免,死锁检测+恢复,死锁忽略 
  
- 
死锁预防:1.一次性申请所有需要的资源,2.资源申请必须按序进行 
- 
死锁避免:银行家算法,每次申请都执行,时间效率低 
  
  
- 
死锁检测+恢复 
  
    C/C++基本语法学习
STL
C++ primer
 
                    
                     
                    
                 
                    
                

 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号