zoukankan      html  css  js  c++  java
  • 操作系统学习(四)-- 操作系统之进程同步和死锁

    操作系统之进程同步和死锁

    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.资源申请必须按序进行

    • 死锁避免:银行家算法,每次申请都执行,时间效率低

    • 死锁检测+恢复

  • 相关阅读:
    Maven简介,安装,配置
    Centos 安装 Tomcat 并验证
    Centos 安装 jdk 和配置环境变量
    java基本数据类型
    centos7中docker安装并启动jpress
    在docker中访问网络
    在docker中运行一个nginx
    Centos7 安装docker 及使用其简单命令
    Centos7安装dnf工具管理rpm包
    C#获取外网IP地址;C#获取所在IP城市地址
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/7141148.html
Copyright © 2011-2022 走看看