精华内容
下载资源
问答
  • 实现进程互斥需要遵循的原则

    千次阅读 2019-04-10 21:33:26
    1.、空闲让进 当临界区空闲时,可以允许一个请求进入临界区的...对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿)。 4、让权等待 当进程不能进入临界区时,应立即释放处理机,防止进程忙等待。 ...

    1.、空闲让进
    当临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区。
    2、忙则等待
    当已有进程进入临界区时,其他试图进入临界区的进程必须等待。
    3、有限等待
    对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿)。
    4、让权等待
    当进程不能进入临界区时,应立即释放处理机,防止进程忙等待。

    展开全文
  • 849 进程同步

    2020-10-08 10:09:45
    遵循的原则 1)空闲让进:临界区空闲时间,允许一个请求进入临界区的进程立即进入临界区 2)忙则等待:已有进程进入临界区后,其他试图进入临界区的进程必须等待 3)有限等待:对于请求进入访问临界区的进程,在有时间内进入...

    基本概念

    临界资源:
    一次只允许一个进程使用的资源
    临界资源的访问过程
    进入区:检查进程是否可以进入临界区
    临界区:可以访问临界资源的代码
    退出区:将正在访问临界区的标志清除
    剩余区:代码中剩余部分
    同步
    直接制约关系:为了完成某种任务而建立的多个进程,相互合作,所以要进行通信同步
    遵循的原则
    1)空闲让进:临界区空闲时间,允许一个请求进入临界区的进程立即进入临界区
    2)忙则等待:已有进程进入临界区后,其他试图进入临界区的进程必须等待
    3)有限等待:对于请求进入访问临界区的进程,在有时间内进入临界区
    4)让权等待:进程不能进入临界区的时候,应该立即释放处理机
    互斥:
    间接制约关系,当一个进程访问临界资源的时候,其他进程不能访问

    实现临界区互斥的方法

    软件实现方法
    1.单标志法:
    两个进程交替进入临界区
    优点:实现简单
    缺点:两个进程可能同时进入临界区,违背忙则等待
    2.双标志先检查:
    每个进程在访问临界区资源前,先检查临界资源是否被访问,如果空闲才能进入;
    优点:不用交替进入可以连续使用
    缺点:两个进程可能同时进入临界区,违背忙则等待
    3.双标志后检查:
    先设置自己的标志,表示自己想进入,检查对方标志,如果对方也要进入,那么就等待,否则就进入.
    优点:不会导致两个进程同时进入临界区
    缺点:双方可能会互相谦让,导致饥饿现象
    4.皮特森算法:
    防止两个进程无线等待,在双标志后检查法的基础上增加了一个标志位,从而防止饥饿。
    优点:解决了饥饿问题
    缺点:算法复杂
    硬件实现方法
    1.中断屏蔽法:
    对终端进行屏蔽、关中断
    优点:关中断非常方便
    缺点:限制了处理机交替执行程序的能力
    2.硬件指令法
    读出指定标志后,将该标志置为真

    优缺点:
    优点
    1.适用于任意数目的进程
    2.简单且容易验证正确性
    3.支持进程内有多个临界区
    缺点
    1.不能实现让权等待
    2.可能会导致饥饿现象

    信号量

    整形信号量
    wait:资源-1 ;signal = 资源+1

    wait(S)
    		while(S <= 0);
    		S = S-1;
    
    Signal(S)
    	S=  S +1
    

    没有遵循让权等待机智,会导致进程处于“忙等”状态
    记录型信号量

    typedef struct{
    	int value;
    	struct process *L; //阻塞队列
    }semaphore;
    
    
    void wait(semaphore S){
    S.value --;
    if(S.value <0){
    	add this process ti S.L; //将进程添加到对应的阻塞队列中
    	block(S.L) //阻塞该进程
    	}
    }
    
    
    void signal(semaphore S){
    	S.value++if(S.value <= 0{
    	remove a process P form S.L;  //从阻塞队列对头选取一个进程
    	wakeup(P)//唤醒该进程
    	}
    }
    
    
    

    记录型信号量不存在“忙等”现象

    管程

    定义
    一组数据以及定义在这组数据之上的对这组数据的操作组成的软件模块,这组操作能初始化并改变管程中的数据并同步进程
    组成
    1.局部于管程的共享结构的数据说明
    2.对该数据结构进行操作的一组过程
    3.对局部于管程的共享数据设置初始值的语句
    管程类似于c++中的类结构,1.局部于管程的数据结构 是私有变量 ,2.对数据结构操作的一组过程是类内的函数,3.初始化语句是类内对私有变量进行初始化的语句
    基本特性
    1.局部于管程的数据只能被局部与管程内的过程所访问
    2.一个进程只能通过调用管程内的过程才能进入管程访问共享数据
    3.每次仅允许一个进程在管城内执行某个过程

    展开全文
  • 操作系统复习04

    2019-12-25 09:49:23
    每个进程中访问临界资源那段程序称为临界区 同步机制遵循原则 为了实现进程互斥,设置同步机制来协调诸进程,但进程必须遵循下述4条准则: 空闲让进 忙则等待 有限等待 让权等待 信号量机制 记录型信号量机制...

    进程的同步与通信

    进程间的联系

    1. 资源共享关系
    2. 相互合作关系

    临界资源的含义

    采取互斥的方式,实现共享的资源 ,一次只能供一个进程使用

    临界资源典型案例

    在这里插入图片描述

    临界区的含义

    每个进程中访问临界资源那段程序称为临界区

    同步机制遵循原则

    为了实现进程互斥,设置同步机制来协调诸进程,但进程必须遵循下述4条准则:

    • 空闲让进
    • 忙则等待
    • 有限等待
    • 让权等待

    信号量机制

    记录型信号量机制

    信号量除初始化外,仅能通过两个标准的原子操作wait(s)signal(s)来访问,也称为P、V操作,这是两个原子操作

    P、V操作——执行时不可中断的,同时也是互斥的

    P–wait(s)

    V–signal(s)

    相应的,wait(s)和signal(s)操作可描述如下:

    void wait(static semaphore s)//申请资源
    {
        s.value--;//表示资源数目
        if(s.value<0)
            block(s,L);//自我阻塞
    }
    void signal(static semaphore s)//释放资源
    {
        s.value++;
        if(s.value<=0)
            wakeup(s,L);//唤醒进程访问临界资源
    }
    

    注意:wait()和signal()必须成对出现

    缺少wait()导致系统混乱,不能保证对临界资源的互斥访问

    缺少signal()将会使临界资源永远不被释放,导致等待该资源的进程不被唤醒

    实例

    看图写代码
    在这里插入图片描述

    main(){
    	semaphore a=b=c=d=e=f=g=0;
        cobegin{
            {T1;signal(a);signal(b);}//T1用完后,释放资源,空闲资源供T2,T3可用
            {wait(a);T2;signal(c);signal(d);}//T2申请资源a,T2用完后,释放资源,空闲资源T4,T5可用
            {wait(b);T3;signal(e);}//T3申请资源b,T3用完后,释放资源e
            {wait(c);T4;signal(f);}//T4申请资源c,T4用完后,释放资源f
            {wait(d);T5;signal(g);}//T5申请资源d,T5用完后,释放资源g
            {wait(e);wait(f);wait(g);T6;}//T6使用资源必须在e,f,g都释放之后才可以使用
        }
    }
    

    生产者消费者问题

    英文普及

    生产者——Producer

    消费者——Consumer

    代码分析

    semaphore mutex=1,empty=n,full=0;
    item buffer[n];
    int in=out=0;
    void producer(int i)
    {
        while(1)
        {
    		···
            produce an item in nextp;
            ···
            wait(empty);//申请放,请求空的区域,看是否能放
            wait(mutex);//看进程是否可申请到临界资源
            buffer[in]=nextp;
            in=(in+1) mod n;
            signal(mutex);//释放临界资源
            signal(full);//放操作
        }
    }
    void consumer(int j)
    {
        while(1)
        {
    		···
            produce an item in nextp;
            ···
            wait(full);//申请取,请求满的区域,看是否能取
            wait(mutex);//看进程是否可申请到临界资源
            nextc=buffer[out];
            out=(out+1) mod n;
            signal(mutex);//释放临界资源
            signal(empty);//取操作
        }
    }
    

    生产者-消费者问题中应注意以下几点

    • wait(mutex)和signal(mutex)必须成对出现
    • 对资源信号量empty和full的wait和signal操作,同样需要成对出现
    • 先执行对资源信号量的wait操作,在执行对互斥信号量的wait操作,否则可能引起死锁

    若缓冲池全空,消费者无法取,若全满,生产者无法放

    死锁定义

    多个进程在执行过程中,因争夺被另一个进程占有且永远不会释放的资源的现象称为死锁

    死锁的例子

    产生死锁的原因

    • 竞争资源
      • 竞争可剥夺性资源
        • 进程优先权竞争处理机
      • 竞争非剥夺性资源
        • 进程资源环形链——I/O设备共享时的死锁情况
      • 竞争临时性资源
    • 进程推进顺序不当

    环路等待情况(竞争非剥夺性资源)

    在这里插入图片描述

    R1分配给P1,R2分配给了P2

    P1请求着R2,P2请求着R1(而R1在P1手里,未释放,R2在P2手里,未释放)

    因此形成一种环形链,进入死锁状态

    产生死锁的必要条件

    • 互斥条件
    • 请求和保持条件
    • 不剥夺条件
    • 环路等待条件

    解决死锁的基本方法

    • 预防死锁
    • 避免死锁
      • 银行家算法
    • 监测死锁
    • 解除死锁

    银行家算法

    具有代表性的避免死锁的算法是Dijkstra的银行家算法

    展开全文
  • 进程-PV操作

    2017-09-27 10:46:00
    在多道程序系统中,进程是并发执行,这些进程间存在不同相互制约关系。 一、临界资源 ...进程访问临界资源那段代码称为临界区,也叫临界段。  访问临界资源应遵循如下原则: 1、空闲让进(或有...

    在多道程序系统中,进程是并发执行的,这些进程间存在不同的相互制约关系。

    一、临界资源

      进程在运行过程中,一般会与其他的进程共享资源,而有些资源具有排他性。一次只能为一个进程所使用,通常把这种一次仅允许一个进程使用的资源称为临界资源(如:打印机、绘图机、一些进程间共享的变量、缓存区)。进程访问临界资源的那段代码称为临界区,也叫临界段。

      访问临界资源应遵循如下原则:

    1、空闲让进(或有空即进):当进程处于临界区时,可以允许一个请求进出临界区的进程立即进出自己的临界区。

    2、忙则等待(或无空则等):当已有进程进入临界区时,其他试图进入临界区的进程必须等待。

    3、有限等待:对要求访问临界资源的进程,应保证能在有限的时间内进入自己的临界区。

    4、让权等待:当进程不能进入自己的临界区时,应释放处理机。

    二、同步互斥

    1、同步

         同步是合作进程间的直接制约问题。

         进程间的同步是指进程间完成一项任务时直接发生相互作用的关系。

    2、互斥

          互斥是申请临界资源进程间的间接制约问题。

          进程互斥是指系统中各进程互斥使用临界资源。

     

    三、信号量

          1、定义:一个整型变量,根据控制对象的不同被赋予不同的值。

          2、分类:公用信号量和私用信号量。

            公用信号量——实现进程间的互斥,初值为1或资源的数目。

            私用信号量——实现进程间的同步,初值为0或某个正整数。

          3、 信号量的物理意义:

            S>=0,表示某资源的可用数;

            S<0,则其绝对值表示阻塞队列中等待该资源的进程数。

     

    四、P操作

         1、定义:

           S:=S-1

      若S>=0,则执行P操作的进程继续执行;

      若S<0,则置该进程为阻塞状态(因为无可以用资源),并将其插入阻塞队列。

         2、操作过程:

      Procedure P(Var S:Semaphore)

      {

        S--;

        if(S<0)

        {

                阻塞该进程;

          将该进程插入信号量S的等待队列;

           }

      }

       Semphore表示所定义的变量是信号量。

     

    五、V操作

         1、定义:

            S:=S+1

            若S>0,则执行V操作的进程继续执行;

            若S<=0,则从阻塞状态唤醒一个进程,并将其插入就绪队列,然后执行V操作的进程继续执行。

         2、操作过程:

           Procedure V(Var S:Semaphore)

       {

        S++;

        if(S <= 0)

        {

           从信号量的等待队列中取出队首进程;

          将其插入就绪队列;

          }

       }

     

     

     


     

    转载于:https://www.cnblogs.com/chenshikun/p/7600518.html

    展开全文
  • 为了实现对临界资源互斥访问,同时保证系统整体性能,需要遵循以下原则: 空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区; 忙则等待。当已有进程进入临界区时,其他试图进入临界区的...
  • 首先说明同步机制遵循的原则: ①空闲让进:无进程处于临界区时,请求进入临界区的进程可立即进入。 ②忙则等待:有进程处于临界区时,请求进入临界区的进程必须等待。 ③有限等待:要访问临界资源的进程,须保证...
  • 进程同步与通信

    2019-05-06 16:53:33
    进程之间的联系: 资源共享关系(彼此并不知道存在,但可以共享cpu等资源) ...同步机制应遵循的原则: 空闲让进(无进程操作时,可使进程进去享用资源) 忙则等待(相应的临界资源正被访问,其他进入临界区的进...
  • 2.3进程同步

    2020-12-20 21:15:52
    为了实现对临界资源互斥访问,同时保证系统整体性能,需要遵循以下原则: 1.空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区。 2.忙则等待。当已有进程进入临界区时,其他试图进入临界区...
  • 进程同步互斥

    2020-04-27 16:35:15
    互斥访问遵循的原则 空闲让进 忙着等待 有限等待 让权等待 单标志法 int turn = 0; //turn 表示当前允许进入临界区的进程号 P0: while(turn != 0); //进入区 critical section; //临界区 turn = 1; //退出区 ...
  • 进程同步与互斥

    2020-06-01 22:53:38
    1.概念 进程同步概念:亦称直接制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而产生的...进程互斥需要遵循的原则有: 空闲让进:临界区空闲时,应允许一个进
  • 实现进程互斥应当遵循的四大基本原则: 1)空闲让进 当临界资源处于空闲状态,允许一个请求进入临界区的进程立即进入临界区,从而有效的利用资源。 2)忙则等待 已经有进程进入临界区时,意味着相应的临界资源正...
  • 进程同步与互斥 进程同步:系统中多个进程中发生时间存在...设计一个进程之间写作机制——同步机制,以实现进程之间对各自临界区访问的互斥 同步机制遵循原则 空闲让进 忙则等待 有限等待 让权等待 ...
  • 第2章 进程管理 2.3

    2018-09-26 20:51:38
    3)临界区:每个进程中访问临界资源的那段代码叫临界区。为了正确同步,对临界区的代码要增加控制 4)同步机制应遵循的规则:实现互斥的方法应符合如下每条原则 空闲让进:资源使用最基本原则。忙则等待:保证互斥。...
  • 进程同步 1)进程同步的主要任务: ...每个进程中访问临界资源的那段代码叫临界区。 为了正确同步,对临界区的代码要增加控制 4)同步机制应遵循的规则 实现互斥的方法应符合如下每条原则 ...
  • 算法思想:两个进程早访问临界区后会把使用临界区的权限转交给另一个进程。也就是说每个进程进入临界区的权限只能被另一个进程赋予。 实现同一时刻最多只允许一个进程访问临界区。 主要问题:不遵循“空闲让进”...
  • 开始盘一下进程同步、进程互斥 同步:直接制约关系,进程需要在某些位置协调他们工作次序而产生制约关系 1.两种资源共享方式 互斥共享 一个时间段只允许一个进程访问该资源 ...临界区访问临界资源那段代码 ...
  • 2021-01-23

    2021-01-23 20:45:16
    1.进程的常见状态?以及各种状态之间的转换条件 ...同步机制遵循的原则 空闲让进 忙则等待(保证对临界区的互斥访问) 有限等待(有限的时间,避免死等) 让权等待(当线程不能进入自己的临界区时,应释放处
  • 10. 同步机制必须遵循的原则:空闲让进、忙则等待、有限等待、让权等待。 11. P, V 操作的定义 P(S):S = S − 1; 若S≥0,则当前进程继续运行; 若S,则将当前进程插入到S 的等待队列中去。 V(S):S = S + 1; 若S...
  • 操作系统常见面试题 进程的常见状态?以及各种状态之间的转换条件?... 同步机制遵循的原则:  (1)空闲让进;  (2)忙则等待(保证对临界区的互斥访问);  (3)有限等待(有限代...
  • 精通Qt4编程(第二版)源代码

    热门讨论 2014-01-19 13:07:18
    \10.2.1 临界区问题 265 \10.2.2 使用QMutex 265 \10.2.3 使用QSemaphore 266 \10.2.4 使用QWaitConditon 269 \10.3 线程其他问题 271 \10.3.1 优先级问题 271 \10.3.2 死锁及优先级反转问题 274 \10.3.3 ...
  • 精通qt4编程(源代码)

    热门讨论 2010-03-17 19:10:40
    \10.2.1 临界区问题 265 \10.2.2 使用QMutex 265 \10.2.3 使用QSemaphore 266 \10.2.4 使用QWaitConditon 269 \10.3 线程其他问题 271 \10.3.1 优先级问题 271 \10.3.2 死锁及优先级反转问题 274 \10.3.3 本地存储...

空空如也

空空如也

1 2
收藏数 21
精华内容 8
关键字:

临界区访问遵循的原则