zoukankan      html  css  js  c++  java
  • 操作系统精髓与设计原理(四)——并发性:互斥和同步

    并发的原理

    在单处理多道程序设计系统中,进程交替执行,表现出一种同时执行的外部特征。在多处理器系统中,不仅可以交替执行进程,而且可以重叠执行进程。

    进程间的资源竞争

    程序的资源临界区,使用一个不可共享的资源的程序。
    互斥的要求,资源分配一给一个进程,其他进程不能获取。
    死锁,两个进程相互等待对方拥有的资源,造成无限等待。
    饥饿,一个进程无限期被拒绝访问资源。

    进程间通过共享合作

    进程间通过通信合作

    通信提供了同步和协调各种活动的方法。
    不需要互斥。

    互斥的要求

    1. 必须强制实施互斥,在与相同资源或共享对象的临界区有关的所有进程中,一次只允许一个进程进入临界区。
    2. 在非临界区停止的进程不能干涉其他进程。
    3. 不允许需要访问临界区的经常被无限延迟。
    4. 没有进程在临界区时,任何需要进入的进程可以立即进入。

    互斥:硬件的支持

    中断禁用

    临界区不能被中断,所以可以保证互斥。但是会降低程序的执行效率。在多处理器系统中,禁用中断是不能保证互斥的。

    专用机器指令

    提出机器指令,保证两个动作的原子性。

    信号量

    定义:用于进程间传递信号的一个整数值。只有三种操作:初始化、递减和增加。都是原子操作。递减用于阻塞进程,增加用于接触阻塞。
    基本原理:两个或多个进程可以通过简单的信号进行合作,一个进程可以被迫在某一位置停止,直到它接收到一个特定的信号。

    1. 信号量初始化为非负数;
    2. semWait操作使信号减一,如果变成负数,则执行semWait的进程被阻塞,否则进程继续执行;
    3. semSignal操作使信号量加一,如果值大于等于零,则被semWait操作阻塞的进程被解除阻塞。
      负值等于正在解除阻塞的进程数量。

    互斥

    通过信号量来解决互斥问题的方法。每个进程中进入临界区前执行semWait如果s为负数,则进程被挂起,如果值为1,则s被减为0,进程立即进入临界区,由于s不再为正,其他进程都无法进入临界区。

    生产者消费者问题

    管程

    管程是一个而程序设计语言结构,它提供了与信号量同样的功能,但更易于控制。
    管程是由一个或多个过程、一个初始化序列和局部数据组成的软件模块,特点:

    • 局部变量只能被管程访问,任何外部过程都不能访问。
    • 一个进程通过调用管程的一个过程进入管程。
    • 只能由一个进程进入管程中执行,其他调用管程的进程都被阻塞。

    消息传递

    进程交互必须满足同步和通信。为了实施互斥,进程必须同步。为了合作,进程必须进程交换数据。

  • 相关阅读:
    Windows 7系统安装MySQL5.5.21图解
    VB中DateDiff 函数解释
    curl命令具体解释
    SecureCRT 6.7.1 注冊机 和谐 破解 补丁 方法
    CSDN--十年
    SxsTrace工具用法
    Gamma校正及其OpenCV实现
    Linux--对文件夹下的配置文件批量改动IP
    sublime配置全攻略
    awk笔记
  • 原文地址:https://www.cnblogs.com/lippon/p/14117719.html
Copyright © 2011-2022 走看看