《操作系统》 2018/11/17

本文深入解析进程管理核心概念,涵盖进程定义、基本状态、PCB结构及其重要性,详述进程控制、同步机制,包括信号量应用及经典同步问题解决方案。

chapter 2 进程管理

2.1 进程的基本概念

    1. 关于程序执行顺序
      1)引入前趋图
      前趋图关注的是前趋关系,不能有循环
      在这里插入图片描述
      2)程序顺序执行时的特征
      (1) 顺序性:处理机的操作严格按程序规定顺序执行
      (2) 封闭性:程序一旦开始执行,其计算结果不受外界因素影响。
      (3) 可再现性:程序执行只要初始条件一样,不论如何停顿,重复执行多少次结果都一样。
      3)程序的并发执行分析
      i.要符合前趋关系
      ii.并发不是随意的
      4)并发程序执行时的特征
      间断性(运行表现)
      失去封闭性
      结果不可再现性

在这里插入图片描述

    1. 进程
      1)进程的定义:
      进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
      **进程其他角度定义:
      i.可并发执行的程序在一个数据集合上的一次执行过程。
      ii.程序的一次执行
      iii.是一个程序与其数据一道通过处理机的执行所发生的活动。

      2)进程的特征
      i.结构性特征,进程的根本——PCB
      ii.动态性,进程最基本特征
      iii.并发性,多个进程实体同存于内存中,在一段时间内同时运行。有PCB的程序才能并发。
      iv.独立性
      v.异步性

      1. 进程的基本状态
        i.就绪状态(Ready)
        ii.运行状态(Running)
        iii.阻塞状态(Blocked)
        在这里插入图片描述
        在这里插入图片描述
    1. 进程控制块PCB
      i.进程实体:代码段+数据段+PCB
      ii.进程控制块定义:Process Control Block
      存放进程的管理和控制信息的数据结构称为进程控制块。
      • Pcb的重要性
          • 进程控制块是进程存在的唯一标志:进程创建时,PCB建立并伴随进程运行的全过程,直到进程撤消而撤消。PCB就象我们的户口。
          • 进程管理和控制的最重要的数据结构
            1)进程控制块中的信息(pcb内)在这里插入图片描述
            i.进程标识符信息
            • 每个进程都必须有一个唯一的标识符
              * 内部标示符:唯一的数字序号,方便系统使用
              * 外部标示符:方便用户使用,用户进程访问某进程时使用
              ii.处理机状态信息
              主要由处理机的各种寄存器中的内容组成,被中断时这些信息要存放到PCB。
              通用寄存器:用户程序访问的,暂存信息
              指令计数器:下一条指令地址
              程序状态字PSW:一些状态信息
              用户栈指针:每个用户进程都有的存放过程和系统调用参数及调用地址的一组系统栈。
              iii.进程调度信息
              进程状态
              进程优先级
              进程调度所需的其他信息:调度算法相关信息
              事件:状态转换有关的事件
              iv.进程控制信息
              程序和数据的地址(单个进程)
              数据所在的内外存地址
              进程同步和通信机制(多进程间)
              同步和通信机制的信号量、消息队列指针等
              资源清单
              链接指针(PCB的组织)
              本PCB所在队列的下一个进程PCB首地址。
              2)PCB信息的存放
              系统运行中有若干个程序的PCB,它们常驻内存的PCB区。
              采用的数据结构:PCB结构体,PCB链表或队列
              3)PCB的组织方式
            • 链接方式
            • 索引方式
              在这里插入图片描述在这里插入图片描述

2.2 进程控制

    1. 进程的创建
      • 创建过程
        • (1) 申请空白PCB
        • (2) 为新进程分配资源: 主要是内存资源的处理
        • (3) 初始化进程控制块:标识符(包括父进程的)、程序计数器指向程序入口地址,就绪态、优先级等信息的填写。
        • (4) 将新进程插入就绪队列
    1. 进程的终止
      i.引起进程终止的事件
      正常结束
      异常结束
      外界干预
      ii.终止过程
      (1) 根据进程标示符,检索出该进程PCB,读其状态。
      (2) 归还全部资源至其父进程或系统。
      (3) 将该进程PCB从所在队列或链表中移出。
  1. 进程的阻塞与唤醒
  2. 进程的挂起和激活

2.3 进程同步

    1. 进程同步的基本概念
      1)进程同步的主要任务: 使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。
      2)临界资源:一次仅允许一个进程使用的资源。
      3)临界区:每个进程中访问临界资源的那段代码叫临界区。为了正确同步,对临界区的代码要增加控制
      * 4)同步机制应遵循的规则
      * 空闲让进:资源使用最基本原则
      * 忙则等待:保证互斥
      * 有限等待:合适时被唤醒防止死等
      * 让权等待:能主动释放CPU防止忙等
      硬件同步机制
      - 关中断
      - Test-and-Set指令
      - 利用Swap指令实现进程互斥
      1. 信号量机制
        1) 整型信号量在这里插入图片描述

2)记录型信号量
整型信号量符合“有限等待”原则
信号量结构信息发生变化
不仅要有值的处理,还有队列的处理。
此时形成记录型数据结构,包括两部分:
整型变量value(代表资源数目)
进程链表L(链接所有等待进程):

  • P、V操作也有所变化

    • 定义信号量semaphore代表可用资源实体的数量。又叫信号灯。
      当≥0,代表可供并发进程使用的资源实体数
      当<0,表示正在等待使用该资源的进程数。
      建立一个信号量必须经过说明,包括
      信号量所代表的意义
      赋初值
      建立相应的数据结构,以便指向等待使用临界区的进程。
      除初值外,信号量的值仅能由标准原子操作P、V操作来改变。
      3)信号量的基本应用
      实现进程互斥
      实现进程间的前趋关系(有序)

        	* 实现有序
        	前趋关系:
        		并发执行的进程P1和P2中,分别有代码C1和C2,要求C1要在C2开始前完成;
        	为每对前趋关系设置一个同步信号量S12,并赋初值为0。则只有V操作所在进程获得cpu时能运行
        	控制同步顺序的注意点
        	信号量值为0的点是限制的关键所在;
        	成对使用P和V原语(在有先后关系的两个进程中),不能次序错误、重复或遗漏,否则同步顺序出错。
      

3)用信号量实现司机和售票员的同步。
在这里插入图片描述
4)AND型信号量
出现原因:一些应用往往需要两个或多个共享资源,而不是前述的一个资源。进程同时要求的共享资源越多,发生死锁可能性越大。
解决思想:
一次性分配给进程所需资源,用完一起释放。Wait操作时对它所有需要的资源都要判断,有AND条件,故称“AND同步”、“同时wait”。

5)信号量集
引入原因:每次只能获得或释放一个单位的资源,低效;某些时候资源分配有下限的限制;
修改:在大于可分配设置的下界值t前提下,每次可分配d个。

2.4 经典同步问题

    1. 生产者—消费者问题
      互斥、同步
      1)两个生产者同时的情况
      假设的时间片轮转顺序如下
      produce;
      produce;
      wait(e);
      wait(m);
      buffer(in):=nexp;
      wait(e);
      wait(m);
      buffer(in):=nexp;
      in:=(in+1)mod n;
      signal(m);
      signal(f);
      in:=(in+1)mod n;
      signal(m);
      signal(f);
      i. 1号生产者的wait操作使e=n-1,m=0
      当1号正在in=0的buffer[0]放入产品时,2号来到,wait(e)仍通过,e=n-2;但wait(m)会使2号阻塞。m=-1,e=n-2。
      ii. 转入1号生产者执行使in=1,,唤醒m上的等待者——2号生产者,但可能并不立即切换到2号运行,而是 其分到的cpu时间完成后再转到2号。此时m=0,f=1。
      iii. 回到2号进程后,将产品放入缓冲区;in=2;m=1;f=2。
      2)生产者等待消费者情况
      假设的时间片轮转顺序如下
      produce;
      wait(e);
      wait(m);
      buffer(in):=nexp;
      wait(f);
      wait(m);
      nextc:=buffer(out);
      in:=(in+1)mod n;
      signal(m);
      signal(f);
      out:=(out+1) mod n;
      signal(m);
      signal(e);
      consume;
      i. 设当前运行到一个临界点,缓冲区满了,而生产者先来了要生产。
      ii. e=0;m=1;f=n
      iii. 注意:signal原语唤醒的因wait阻塞的进程后该进程并不需再重新执行wait。
      3)2个生产者2个消费者同步模拟分析
      *AND信号量的方式
      consumer :
      repeat

         	    nextc:=buffer(out);
         	    out:=(out+1) mod n;
         	
         	    consume the item in nexc;
         	until  false;
      
    1. 哲学家就餐问题
      互斥
      1)记录型信号量解决哲学家进餐问题
      筷子是临界资源,在一段时间内只允许一个哲学家使用。为实现对筷子的互斥使用,用一个信号量表示一只筷子,五个信号量构成信号量数组。
      Var chopstick: array [0, …, 4] of semaphore;
      所有信号量均被初始化为1。

      第i 位哲学家的活动可描述为:
      repeat
      wait(chopstick[ i ]);
      wait(chopstick[ ( i +1) mod 5] );

      eat;

      signal(chopstick[ i ]);
      signal(chopstick[ ( i +1) mod 5] );

      think;
      until false;

      2)就餐死锁问题
      假如五位哲学家同时饥饿而各自拿起左边的筷子时,就会使五个信号量chopstick均为0,当他们再试图去拿右边的筷子时,都将因无筷子可拿而无限等待。

      解决方法:
      数量控制:
      至多只允许有四位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用毕后释放出他用过的两只筷子,从而使更多的哲学家能够进餐。—限制并发执行的进程数
      抛砖引玉:
      一个房间,只允许进入6个人,如何用信号量进行控制?

        	一刀切:
        			仅当哲学家的左右两只筷子均可用时,才允许他拿起筷子进餐。---采用AND信号量。
        	
        	
        	
        	IF编程控制
        			   规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子;偶数号哲学家则相反。保证总会有一个哲学家能同时获得两只筷子而进餐
        	if I mod 2=0
        		…
        	else
        		…
      
    1. 读者——写者问题
      有条件的互斥

        读者Reader : 
      

      begin
      repeat

       if Readcount=0 then
       Readcount :=Readcount +1;
       
       …
       perform read operation;
       …
       
       Readcount :=Readcount -1;
       if Readcount=0 then
      

      until false;
      end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值