进程管理的部分内容

进程管理的部分内容

1进程的基本概念

1.关于程序执行顺序

描述进程执行前后关系的图
有向无循环图(DAG)
Pi结点:描述一个程序段、进程、或一条语句。
有向边“”:结点之间的偏序或前序关系
PiPk,则Pi是Pk的直接前趋,Pk是Pi的直接后继。
注:前趋图关注的是前趋关系,不能有循环。
3)程序的并发执行分析
多个程序如果无序并发,得到的只能是混乱的执行结果,
多道程序运行,走走停停的可能顺序有很多种,符合前趋图的关系才是合理并发。

2.进程

1)定义
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
*可并发执行的程序在一个数据集合上的一次执行过程。
*程序的一次执行
*是一个程序与其数据一道通过处理机的执行所发生的活动
三种基本状态
(1)就绪状态(Ready)
进程获得除CPU之外的所有必需资源,一旦得到CPU控制权,可立即运行。
(2)运行状态(Running)
进程已获得所有运行必需的资源,正在处理机上执行。
(3)阻塞状态(Blocked)
正在执行的进程由于发生某事件(请求I/O、申请缓冲、时间片到)而暂时无法执行时,便放弃CPU后暂停

3.进程控制块PCB

进程实体:代码段+数据段+PCB
进程控制块定义
存放进程的管理和控制信息的数据结构称为进程控制块。

2进程控制

进程的创建过程
(1) 申请空白PCB
(2) 为新进程分配资源
主要是内存资源的处理
(3) 初始化进程控制块
标识符(包括父进程的)、程序计数器指向程序入口地址,就绪态、优先级等信息的填写。
(4) 将新进程插入就绪队列
阻塞和唤醒的过程
由进程调用阻塞原语阻塞自己,是主动行为:
(1)将PCB中的状态改为阻塞
(2)该PCB加入到阻塞队列中
(3)转进程调度,将处理机分配给另一进程
(4)进行进程切换,即根据两切换进程的PCB,保护与重新设置处理机状态
进程的挂起与激活
挂起原语将指定进程或阻塞进程挂起。
(1)检查被挂起进程的状态,活动就绪则改为静止就绪,活动阻塞则改为静止阻塞
(2)将该PCB复制到内存(方便检查)/外存(对换)指定区域
(3)*若挂起的进程是执行态,则需重新进行进程调度。
激活原语的执行过程
若挂起进程在外存上,将其调入内存
检查进程状态,若处于静止就绪,则改为活动就绪,若处于静止阻塞,则改为活动阻塞

3进程同步

  1. 进程同步的基本概念
    1)进程同步的主要任务:
    使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性
    2)临界资源
    一次仅允许一个进程使用的资源。
    信号量机制

  2. 整形信号量
    信号量定义为一个整型量;
    根据初始情况赋相应的值;
    仅能通过两个原子操作来访问。
    P操作 wait(S):
    While S<=0 do no-op;
    S:=S-1;
    V操作 signal(S):
    S:=S+1;

  3. 记录型信号量
    PV操作也有所变化
    不仅修改资源数,还要处理进程的阻塞、唤醒等操作。先修改资源数,再。
    P操作wait():
    S.value = S.value - 1;
    if S.value < 0 then block(S,L)
    V操作signal():

    S.value = S.value + 1;
    if S.value <= 0 then wakeup(S,L)
    例题
    设有一自助餐厅,可容纳10名顾客就餐,餐厅满时顾客需在门外排队等候;顾客若能进入则自取食物后到款台付款;收款员负责在收款台等待顾客付款,付款完毕顾客自行就餐后离开。分析该问题中的同步关系,试写出顾客进程和收款员进程信号量机制下的同步算法,注意写明信号量的初值和作用。
    【】分析顾客存在争抢进店的竞争关系,设置一个资源信号量r,初值为10;
    收款员与顾客间存在双向有序合作关系,收款员需等待顾客付款,顾客需等待收款员确认付款完毕,需设置两个同步信号量money,ok,初值均为0.
    【算法伪代码如下】
    semaphore r=10,money=0,ok=0;
    顾客:
    void custom(){
    while(true){
     wait(r);
    //资源信号量操作成对正确
    enter;
    take something;
     signal(money);
    pay money;
    wait(ok);
    signal®;
    leave;
    }}
    售货员:
    void seller(){
    while(true){
      wait(money);
    //同步信号操作配对正确
      accept money,give changes 
    signal(ok);
    //同步信号操作配对正确
    }}
    但是这个问题中没有涉及到互斥问题。
    再如:
    【有一只铁笼子,每次只能放入一只动物,猎手向笼中放入老虎,农民向笼中放入猪,动物园等待取笼中的老虎,饭店等待取笼中的猪,试用信号量机制实现猎手、农民、动物园、饭店之间同步执行的程序。】
    分析:
    这个问题中是有互斥的,以为往笼子里放一种动物的时候,不能放另
    一种动物,也不能往外取动物。
    所以设信号量
    Semaphore empty=1//笼子的剩余容量
    t=0//笼子里老虎的数量
    p=0//……………猪……………
    mutex=1//互斥信号量
    1.void hunter(){//猎人函数
    while(1){
    wait(mutex);
    if(empty>0)
    {
    wait(empty);
    放一只老虎在笼子里;
    signal(t);
    }
    signal(mutex)
    }}
    2.Void zoo{//动物园
    While(1){
    Wait(mutex){
    If(empty0&&t>0){
    Wait(t)
    从笼子中取出老虎;
    Signal(empty)
    }
    Signal(mutex)
    }}
    3.void farmer(){//农民
    while(1){
    wait(mutex);
    if(empty>0)
    {
    wait(empty);
    放一头猪在笼子里;
    signal§;
    }
    signal(mutex)
    }}
    4.Void restaurant{//饭店
    While(1){
    Wait(mutex){
    If(empty
    0&&p>0){
    Wait§
    从笼子中取出猪;
    Signal(empty)
    }
    Signal(mutex)
    }}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值