您当前的位置: 首页 > 

衣舞晨风

暂无认证

  • 3浏览

    0关注

    1156博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

OS学习笔记四:同步机制

衣舞晨风 发布时间:2017-10-06 16:40:49 ,浏览量:3

一、 进程互斥 1、进程互斥
  • 由于各 进程 要求使用共享资源( 变量 、文件等),而 这些 资源需要排他性使用各进程之间 竞争使用这些 资源—— 这一关系称为 进程互斥

  • 临界资源:critical resource 系统中某些资源一次只允许一个进程使用,称这样的资源为 临界资源 或 互斥资源 或 共享变量

  • 临界区( ( 互斥区) ) :critical section(region) 各个进程中对某个临界资源(共享变量)实施操作 的程序 片段

2、临界区(互斥区)使用原则
  • 没有进程在临界区时,想进入临界区的进程可进入

  • 不允许两个进程同时处于其临界区 中

  • 临界区外运行的进程不得阻塞其他进程进入临界区

  • 不得使进程无限期等待进入临界区

3、实现互斥的解决方法
  • 软件方案

    • Dekker 解法、Peterson 解法
  • 硬件 方案

    • 屏蔽中断、TSL(XCHG) 指令
二、进程同步 1、进程同步

进程同步:synchronization 指系统中多个进程中发生的事件存在某种时序关系 ,需要相互合作,共同完成一项任务

具体地说,一个进程运行到某一点时,要求另一伙伴进程为它提供消息,在未获得消息之前,该进程进入阻塞态,获得消息后被唤醒进入就绪态

三、信号量及PV操作 1、信号量及PV操作
  • 一个特殊变量

  • 用于进程间传递 信 息 的 一个整数值

  • 定义如下:

struc semaphore
{
    int     count;
    queueType   queue;
}
  • 对信号量可以实施的操作:初始化、P 和V (P 、V 分别是荷兰语的test(proberen) 和increment(verhogen) )
2、p、v操作定义
P( s )
{
    s.count--;
    if ( s.count < 0 )
    {
        该进 状 态 置 为阻 塞 状 态 ;
        将 该进 插入相应的等待 队
        列 s.queue 末 尾 ;
        重新 调 度 ;
    }
}
P( s )
{
    s.count--;
    if ( s.count < 0 )
    {
        该进 状 态 置 为阻 塞 状 态 ;
        将 该进 插入相应的等待 队
        列 s.queue 末 尾 ;
        重新 调 度 ;
    }
}
3、有关说明
  • P 、V 操作为原语 操作(primitive or atomic action)

  • 在 信号量上定义了三个操作:初始化( 非负数) 、P 操作、V 操作

  • 最初提出的是二元信号量 (解决互斥 )之后, 推广 到一般信号量(多值)或计数信号量(解决同步)

四、管程的基本概念 1、管程的定义
  • 是一个特殊的模块

  • 有一个名字

  • 由关于共享资源的数据结构及在其上操作的一组过程组成

2、进程与管程

进程 只能通过调用 管程中的过程 来间接地访问管程中的数据结构

3、管程需要保证什么?
  • 作为一种同步机制,管程要解决两个问题

  • 互斥

    • 管程是 互斥 进入 的(为了保证管程中数据结构的数据完整性)
    • 管程的互斥性是由编译器负责保证的
  • 同步

    • 管程中设置 条件 变量及等待/ 唤醒操作 以 解决同步问题
    • 可以让一个进程或 线程在 条件变量上等待(此时,应先释放管程的使用权),也可以通过发送信号将等待在条件变量上的进程或线程唤醒
五、管程小结
  • 管程 : 抽象数据类型

    • 有一个明确定义的操作集合,通过它且只有通过它才能操纵该数据类型的实例
  • 实现管程结构必须保证下面几点:

    • (1)只能通过管程的某个过程才能访问资源;

    • (2) 管 程是互斥的 , 某个时刻只能有一个进程或线程调用 管程中 的过程

  • 条件变量:为 提供进程与其他进程通信或同步 而引入

    • wait/signal 或 wait/notify 或 wait/broadcast
六、进程间通信 1、基本通信方式
  • 消息传递

  • 共享 内存

  • 管道

  • 套接 字

  • 远程过程调用

2、原子操作
  • 不可分割,在执行完之前不会被其他任务或事件中断

  • 常用于实现资源的引用计数

3、屏障(BARRIER)
  • 一种同步机制( ( 又称栅栏、关卡) )

  • 用于对一组线程进行协调

  • 应用场景

    • 一组线程协同完成一项任务,需要所有线程都到达一个汇合点后再一起向前推进

本文整理自:《操作系统原理》北京大学_陈向群 讲义 个人微信公众号: 这里写图片描述

作者:jiankunking 出处:http://blog.csdn.net/jiankunking

关注
打赏
1647422595
查看更多评论
立即登录/注册

微信扫码登录

0.0846s