进程的描述与控制

2.1 前驱图和程序执行

在早期未配置 OS 的系统和单道批处理系统中,程序的执行方式是顺序执行;而在多道程序系统中,由于内存可以同时装入多个程序,使它们共享系统资源,并发执行。

2.1.1 前驱图

所谓的前驱图,是指一个邮有向无循环图。

P1
P2
P3
P4
P5
P6
P7
P8
P9

2.1.2 程序顺序执行

  • 程序的顺序执行
    I 代表输入操作,C 代表计算操作,P 为打印操作
I
C
P
  • 程序顺序执行时的特征
    ①顺序性;②封闭性;③可再现性。

2.1.3 程序并发执行

  • 程序的并发执行
I1
C1
P1
I2
C2
P2
I3
C3
P3
  • 程序并发执行时的特征
    ①间断性;②失去封闭性;③不可再现性。

2.2 进程的描述

2.2.1进程的定义和特征

  • 进程的定义
    • 进程是程序的一次执行。
    • 进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
    • 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度一个独立单位。
  • 进程和程序的区别
    • 进程是一次运行的过程,属于一种动态的概念;而程序是指令的集合,是静态的概念。
    • 进程可以并发执行,而程序不能。
    • 进程是有生命周期的,而程序是永久的。
    • 进程是系统资源分配的基本单位,而程序则不行。
    • 一个进程可以包含几个程序;一个程序也可以对应多个进程。
  • 进程的特征
    ①动态性;②并发性;③独立性;④异步性;⑤结构特征。

2.2.2 进程的组成

进程通常由三部分组成:程序、数据和进程控制块 PCB。

  • 进程是动态的,为了记录进程的情况以及控制进程的运行,系统为每一个进程设置了一个数据结构——进程控制块 PCB。
  • 系统根据 PCB 对进程进行管理,PCB 是进程存在的唯一标志。
  • 当系统创建一个进程时,必须为它设置一个 PCB,在进程结束后,系统要收回它的 PCB,进程也随之消亡。
  • 进程控制块 PCB 的内容:①描述信息;②控制信息;③资源管理信息;⑤CPU 现场保护区。
  • 进程的组织方式:①线性表方式;②链表(进程队列)方式;③索引表方式。

2.2.3 进程的基本状态及转换

  • 进程的三种基本状态
    ①就绪状态;②执行状态;③等待状态(阻塞状态、封锁状态、睡眠状态)。
    引起进程等待的事件有:请求I/O、申请缓冲区、等待信件(信号)等等。
  • 三种基本状态的转换
    • 处于就绪状态的进程,在调度程序为之分配了处理机之后,该进程状态便转换为执行
    • 正在执行的进程如果因分配给它的时间片以完而被剥夺处理机暂停执行,或在采用抢先式 优先级调度算法的系统中,当有更高优先级的进程要运行而被迫让出处理机时,其状态便转换为就绪
    • 如果因发生某件事件,致使当前进程的执行受阻,使之无法执行,则该进程状态将转换为等待
    • 处于等待状态的进程,在其等待的事件已经完成时,该进程状态便转换为就绪
  • 创建状态和终止状态

2.3 进程控制

进程控制的职责是对系统中的全部进程实施有斯奥的管理,它是处理机管理的一部分。

2.3.1 操作系统内核

  • 支撑功能
    ①中断处理;②始终管理;③原语操作。
  • 资源管理功能
    ①进程管理;存储器管理;设备管理。

原语:是机器指令的延申,由若干条机器指令构成的,用以完成操作系统的特定功能的程序段。为保证原语操作的正确性,原语在执行期间是不可分割(被中断)的。

进程控制原语:进程创建原语,进程撤销原语,进程阻塞原语,进程唤醒原语,进程挂起原语,进程激活与原语。

2.3.2 进程的创建

一个进程可以通过创建原语来产生一个新的进程。创建进程称为父进程,被创建的进程称为子进程,子进程还可以通过创建原语创建自己的子进程,这样就形成了一个进程家族树。

  • 子进程可以继承父进程所拥有的资源。
  • 当子进程被撤销时,应将从父进程那里获得的资源归还给父进程。
  • 在撤销父进程时,也必须同时撤销其所有的子进程。

创建原语的主要功能:创建一个指定标识符的进程。

进程的创建过程

  1. 申请一个空白的进程控制块 PCB 表,并向其中填入进程标识符、进程优先级、进程起始地址等有关参数;
  2. 置该进程为 “就绪” 状态,其它资源从父进程哪里继承;
  3. 将该 PCB 插入就绪队列和进程家族队列。

创建原语的形式为:Create(name, Priority, strat_addr)

Created with Raphaël 2.2.0 入口 查PCB总链 有同名? 出错 申请一个空的PCB结构 有空PCB? 取空PCB(i) 将入口参数填入PCB(i)相应项 将PCB(i)入就绪队列和PCB总链 返回 yes no yes no

2.3.3 进程的撤销

进程完成任务后应给予撤销,以便及时释放它所占用的各种资源和 PCB 结构本身。

撤销原语的主要功能:收回被撤销进程占用的所有资源,并撤销它的 PCB。

进程的撤销过程

  1. 从 PCB 集合中检索被撤销进程的PCB,读出该进程的状态;
  2. 若被撤销的进程正在执行,应立即终止该进程的执行,并设置调度标志为真。以知识该进程被撤销后系统应重新调度;
  3. 若该进程还有子进程,则还应将其所有子进程撤销;
  4. 若该进程所拥有的全部资源,或者归还给其父进程,或者归还给系统。
  5. 将被撤销进程的 PCB 从所在队列中清除,放回到空白 PCB 队列中。

撤销原语的形式为:destory(name)

Created with Raphaël 2.2.0 入口 查PCB总链或进程家族 有此PCB? 该PCB有子进程? 释放该进程所占有的资源 释放该进程的PCB结构 返回 出错 yes no yes no

2.3.4 进程阻塞(等待)

处于运行状态的进程,在其运行过程中期待某一事件发生,如等待键盘输入或等待其它进程发送一个消息等,当被等待的事件还没有发生时,该进程调用等待原语将自己挂起。以但被挂起,它只能由另一个进程唤醒。

阻塞原语的作用:将该进程由执行状态转换为等待状态。

阻塞原语的过程

  1. 中断处理机的执行,并保存该进程的 CPU 现场信息;
  2. 将被阻塞进程的状态设置为 “等待” 状态,把该进程的 PCB 插入到相应的等待队列中去;
  3. 转进程调度程序从就绪队列中选择一个新的进程投入运行。

阻塞原语的形式为:block()

Created with Raphaël 2.2.0 入口 保存需等待进程的CPU现场 设置该进程的状态为“等待” 需等待进程的PCB入等待队列 转进程调度

2.3.5 进程唤醒

当被等待进程所期待的事件已经发生,则由有关进程调用唤醒原语,将该等待该事件的进程唤醒。

唤醒原语的作用:将进程由等待状态转换为就绪状态。

唤醒原语执行的操作

  1. 在等待队列中中找到相应进程的 PCB,将其从等待队列中摘下;
  2. 设置其状态为就绪状态,把该进程的 PCB 插入就绪队列;
  3. 转进程调度程序或返回现行进程。

唤醒原语的形式为:wake(name)

Created with Raphaël 2.2.0 入口 从等待队列中摘下被唤醒进程 将被唤醒进程状态设置为就绪 将被唤醒进程插入就绪队列 转进程调度程序或返回

2.3.6 进程挂起

当需要把某个进程换出内存而挂起时调用挂起原语。

挂起原语的作用:将进程由活动状态变为静止状态。

挂起原语执行的操作

  1. 在相应的活动队列中找到相应进程的PCB,将其从该队列中摘下;
  2. 设置其状态为相应的静止状态,把该进程的PCB插入相应的静止队列;
  3. 转进程调度程序或返回原进程。

挂起原语的形式为:suspend(n, a)

Created with Raphaël 2.2.0 入口 从相应活动队列中摘下相应的进程 将该进程状态设置为相应静止状态 将该进程的PCB插入相应静止队列 转进程调度程序或返回

2.3.7 进程激活

当需要把某个进程换进内存而激活时调用激活原语。

激活原语的作用:使处于静止状态的进程变为活动状态。

激活原语执行的操作

  1. 在相应的静止队列中找到相应进程的PCB,将其从该队列中摘下;
  2. 设置其状态为相应的活动状态,把该进程的PCB插入相应的活动队列;
  3. 转进程调度程序或返回元进程。

激活原语的形式为:active(n)

Created with Raphaël 2.2.0 入口 从相应静止队列中摘下相应的进程 将该进程状态设置为相应活动状态 将该进程的PCB插入相应活动队列 转进程调度程序或返回

2.4 进程互斥

2.4.1 互斥的概念

  • 资源共享引起的制约——间接制约

  • 临界资源临界区

    临界区:每个进程访问临界资源的那一部分程序。(临界区使对某一资源而言的,对于不同资源的临界区,它们之间是无关的,所以不必互斥地执行)

  • 互斥:进程的互斥就是两个或两个以上的进程不能同时进入共享同一临界资源的(相关)临界区。

  • 对临界区管理的原则:

    • 若有多个进程同时要求进入它们的临界区时,应在有限的时间内让其中之一进入临界区,而不应相互阻塞,以至于各进程都不能进入临界区;
    • 每次至多只允许一个进程处于临界区;
    • 进程在临界区内仅停留有限的时间。
  • 临界区的调度原则:

    • 空闲让进:当进程处于临界区内时,允许一个进程进入临界区;
    • 忙则等待:当某一个进程已进入临界区时,其它欲进入临界区的进程必须等待;
    • 优先等待:对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入 “死等” 状态;
    • 让权等待:当进程不能进入自己的临界区是,应立即释放处理机,以免陷入 “忙等” 状态。

进程互斥的实现可以采用软件的方法,也可以通过系统提供的同步机构来协调进程间的关系。

实现进程互斥的同步机构:锁机制、信号量和 PV 操作机制、管理机制。

2.4.2 锁机制

  • 锁:使用一个标志或一个变量来代表临界资源的状态。

    • W = 1 为锁被关闭,表示该资源已占用;
    • W = 0 为锁已打开,表示该资源空闲,未被占用。

    系统提供一对在锁位 W 上进行操作的上锁原语 Lock(W) 和开锁原语 UnLock(W)。

  • 上锁原语 Lock(W):

    测试 W 的值:
    ①W = 1,表示资源正在使用,继续反复测试;
    ②W = 0,则设置W = 1(上锁)。

    • 上锁原语算法:

        lock(W)
        begin
        	test : if (w = 1)
        				goto test
        		   else w = 1
        end
      
Created with Raphaël 2.2.0 入口 w = 0? w ⬅ 1 返回 yes no
  • 开锁原语 UnLock(W):

    设置 W = 0(开锁)。

    • 开锁原语算法:

        Unlock(w)
        begin
        	w = 0;
        end
      
Created with Raphaël 2.2.0 入口 w ⬅ 0 返回
  • 用上锁原语和开锁原语实现进程互斥

    任何申请进入临界区的进程,必须先执行上锁原语。若上锁原语顺利通过,则进程可以进入临界区,这时临界区已被上锁原语锁住,其它申请进入临界区的进程只能等到临界区开锁之后才有可能进入临界区;当进程完成对资源的访问退出临界区时再执行开锁原语,以释放该临界资源。

。。。待更

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值