精华内容
下载资源
问答
  • 进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建进程、撤销已有进程、实现进程状态转换等功能。在操作系统中,一般把进程控制用的程序段称为原语,原语的特点是执行期间不允许中断,它是一个不...
    进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。在操作系统中,一般把进程控制用的程序段称为原语,原语的特点是执行期间不允许中断,它是一个不可分割的基本单位。
    

    进程的创建

    允许一个进程创建另一个进程。此时创建者称为父进程,被创建的进程称为子进程。子进程可以继承父进程所拥有的资源。当子进程被撤销时,应将其从父进程那里获得的资源归还给父进程。此外,在撤销父进程时,也必须同时撤销其所有的子进程。

    在操作系统中,终端用户登录系统、作业调度、系统提供服务、用户程序的应用请求等都会引起进程的创建。操作系统创建一个新进程的过程如下(创建原语):
    1. 为新进程分配一个唯一的进程标识号,并申请一个空白的PCB(PCB是有限的)。若PCB申请失败则创建失败。
    2. 为进程分配资源,为新进程的程序和数据、以及用户栈分配必要的内存空间(在PCB 中体现)。注意:这里如果资源不足(比如内存空间),并不是创建失败,而是处于”等待状态“,或称为“阻塞状态”,等待的是内存这个资源。
    3. 初始化PCB,主要包括初始化标志信息、初始化处理机状态信息和初始化处理机控制信息,以及设置进程的优先级等。
    4. 如果进程就绪队列能够接纳新进程,就将新进程插入到就绪队列,等待被调度运行。

    进程的终止

    引起进程终止的事件主要有:正常结束,表示进程的任务已经完成和准备退出运行。异常结束是指进程在运行时,发生了某种异常事件,使程序无法继续运行,如存储区越界、保护错、非法指令、特权指令错、I/O故障等。外界干预是指进程应外界的请求而终止运行,如操作员或操作系统干预、父进程请求和父进程终止。

    操作系统终止进程的过程如下(撤销原语):
    1. 根据被终止进程的标识符,检索PCB,从中读出该进程的状态。
    2. 若被终止进程处于执行状态,立即终止该进程的执行,将处理机资源分配给其他进程。
    3. 若该进程还有子进程,则应将其所有子进程终止。
    4. 将该进程所拥有的全部资源,或归还给其父进程或归还给操作系统。
    5. 将该PCB从所在队列(链表)中删除。

    进程的阻塞和唤醒

    正在执行的进程,由于期待的某些事件未发生,如请求系统资源失败、等待某种操作的完成、新数据尚未到达或无新工作做等,则由系统自动执行阻塞原语(Block),使自己由运行状态变为阻塞状态。可见,进程的阻塞是进程自身的一种主动行为,也因此只有处于运行态的进程(获得CPU),才可能将其转为阻塞状态。

    阻塞原语的执行过程是:
    1. 找到将要被阻塞进程的标识号对应的PCB。
    2. 若该进程为运行状态,则保护其现场,将其状态转为阻塞状态,停止运行。
    3. 把该PCB插入到相应事件的等待队列中去。

    当被阻塞进程所期待的事件出现时,如它所启动的I/O操作已完成或其所期待的数据已到达,则由有关进程(比如,提供数据的进程)调用唤醒原语(Wakeup),将等待该事件的进程唤醒。

    唤醒原语的执行过程是:
    1. 在该事件的等待队列中找到相应进程的PCB。
    2. 将其从等待队列中移出,并置其状态为就绪状态。
    3. 把该PCB插入就绪队列中,等待调度程序调度。

    需要注意的是,Block原语和Wakeup原语是一对作用刚好相反的原语,必须成对使用。 Block原语是由被阻塞进程自我调用实现的,而Wakeup原语则是由一个与被唤醒进程相合作或被其他相关的进程调用实现的。

    进程切换

    对于通常的进程,其创建、撤销以及要求由系统设备完成的I/O操作都是利用系统调用而进入内核,再由内核中相应处理程序予以完成的。进程切换同样是在内核的支持下实现的,因此可以说,任何进程都是在操作系统内核的支持下运行的,是与内核紧密相关的。

    进程切换是指处理机从一个进程的运行转到另一个进程上运行,这个过程中,进程的运行环境产生了实质性的变化。

    进程切换的过程如下:
    1. 保存处理机上下文,包括程序计数器和其他寄存器。
    2. 更新PCB信息。
    3. 把进程的PCB移入相应的队列,如就绪、在某事件阻塞等队列。
    4. 选择另一个进程执行,并更新其PCB。
    5. 更新内存管理的数据结构。
    6. 恢复处理机上下文。

    注意,进程切换与处理机模式切换是不同的,模式切换时,处理机逻辑上可能还在同一进程中运行。如果进程因中断或异常进入到核心态运行,执行完后又回到用户态刚被中断的程序运行,则操作系统只需恢复进程进入内核时所保存的CPU现场,无需改变当前进程的环境信息。但若要切换进程,当前运行进程改变了,则当前进程的环境信息也需要改变。
    展开全文
  • 操作系统的主要功能是对系统中的所有进程实施有效的管理,它具有创建进程、撤销已有进程、实现进程状态转换等等功能。 在操作系统中,一般把进程控制用的程序段称为原语,原语的特点是执行期间不允许中断,它是一...

    操作系统的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等等功能。
    在操作系统中,一般把进程控制用的程序段称为原语,原语的特点是执行期间不允许中断,它是一个不可分割的基本单位。

    • 进程的创建
    1. 程序从硬盘中加载到内存中,操作系统为新进程分配一个唯一的进程标识号,并申请一个空白的PCB,若申请失败,则创建失败。失败原因:(1)大于用户可以创建的进程最大数;(2)系统内存不足
    2. 操作系统为进程分配资源,为新进程的程序和数据、以及用户栈分配必要的内存空间(PCB中均有体现)。如果资源分配不足(例如:仅有内存空间分配不足),并不会创建失败,而是出于“等待状态”或者是称为“阻塞状态”,并等待这个资源。
    3. 初始化PCB,主要包括初始化标志信息、初始化处理机状态信息和初始化处理机控制信息,以及设置进程的优先级等。
    4. 如果进程就绪队列可以容纳新的进程,就将新进程插入到就绪队列,等待被CPU调度运行。

    父进程创建子进程之后,子进程先于父进程退出,操作系统检测到进程退出,通知父进程,但是父进程没有对子进程进行处理,也没有关注这个通知,这个时候操作系统为了封锁现场(封锁子进程运行的情况),不会释放子进程资源,因为子进程的PCB中包含退出的原因,这个时候因为子进程既没有运行,也没有完全退出,因此处于将死状态,这种进程就是—僵尸进程。

    #include <stdio.h>
    #include <unistd.h>
    
    
    int main()
    {
        pid_t pid = fork();
        if(pid < 0){
            printf("进程创建失败!");
        }
        else if(pid == 0){
            printf("我是子进程!!!pid:%d\n", getpid());
        }
        else{
            printf("我是父进程!!!我的进程id:%d 我的儿子进程id: %d\n", getpid(), pid);
            sleep(1000);    //保证子进程运行完后先于父进程退出
        }
        printf("hello world\n");
        return 0;
    }
    

    在这里插入图片描述
    我们尝试使用kill -9 强制杀死该进程:

    在这里插入图片描述
    我们可以看到,直接强杀它是杀不死的,这就是“僵尸进程”这个名字由来。

    • 孤儿进程

    父进程创建子进程后,先于子进程退出,这时候子进程没有了父进程,这个进程就成为了孤儿进程,但是子进程必须把自己的运行终止结果的状态告诉
    自己的父进程,那这个时候父进程已经退出了怎么办呢?这个时候对于所有的父进程已经终止的所有进程,这时候会由 init 进程“收养”它们。这时候
    这些进程的父进程就变为了 init 进程。其中的操作大致为:一个进程终止时,内核逐个检查所有活动进程,以判断它是否是正要终止进程的子进程,如果是,
    该进程的父进程ID就变为1(init的进程ID)。init 进程是一个负责任的“养父”,会将每一个收养的子进程都养老送终!!!

    展开全文
  • 进程控制是进程管理中最基本的功能主要包括创建进程、终止已完成的进程、将因发生异常情况而无法继续运行的进程置于阻塞状态、负责进程运行中状态转换功能。 简单来说:进程控制就是要实现进程状态转换 2....

    一. 进程控制

    在这里插入图片描述

    1. 什么是进程控制?

    进程控制是进程管理中的最基本的功能,主要包括创建新进程、终止已完成的进程、将因发生异常情况而无法继续运行的进程置于阻塞状态、负责进程运行中的状态转换功能。

    简单来说:进程控制就是要实现进程状态的转换

    2. 如何实现进程控制呢?

    在这里插入图片描述

    3. 进程的切换需要修改PCB的内容,并放到相应的队列中去,假如没有修改PCB中的状态标志就把PCB放入到某个队列中去了,这种情况特别危险,怎么避免呢?

    在这里插入图片描述

    4. 进程控制原语做了哪些事情呢?

    在这里插入图片描述

    5. 进程创建

    在这里插入图片描述

    6. 进程终止

    在这里插入图片描述

    7. 进程的阻塞与唤醒

    在这里插入图片描述

    8. 进程的挂起和激活

    在这里插入图片描述

    9. 进程的切换

    在这里插入图片描述
    在这里插入图片描述

    二. 进程通信

    在这里插入图片描述
    在网络环境的应用领域主流的进程通信实现机制:客户机-服务器系统
    在这里插入图片描述

    1. 什么是进程通信呢?

    在这里插入图片描述

    2. 共享存储

    在这里插入图片描述

    3. 管道通信

    在这里插入图片描述

    4. 消息传递

    在这里插入图片描述

    三. 处理机调度

    在这里插入图片描述

    1. 什么是调度

    在这里插入图片描述
    在多道程序系统中,调度的实质是一种资源分配。

    处理机调度就是对处理机资源进行分配。

    2. 处理机调度的层次

    在多道批处理系统中,一个作业从提交到获得处理机执行,直至作业运行完毕,可能需要经历多级处理机调度

    注:作业和进程的区别

    作业(Job)是一个总任务,进程(Process)是总任务中的各个子项。
    例如:课室大扫除是一项总任务,它是一个作业;
    	  而其中擦桌子、扫地是各个子任务,擦桌子需要多次执行(每桌子执行一次),扫地只需要执行一次,这些就是在作业中调度的进程。
    

    (1). 高级调度

    在这里插入图片描述

    1. 什么是作业

    作业(job):是一个比程序更为广泛的概念,他不仅包含了通常的程序和数据,而且还应配有一份作业说明书,系统根据说明书对程序的运行进行控制。在批处理系统中,是以作业为基本单位从外存调入内存

    作业步:在作业运行期间,每个作业都必须经过若干个相对独立,又相互关联的顺序加工步骤才能得到结果。
    我们把其中的每一个加工步骤称为一个作业步,各作业步相互联系,上一个作业的输出是下一个作业的输入。
    
    例如:一个典型作业分为:编译作业步、链接装配作业步、运行作业步
    

    2. 作业里面含有什么?

    1. 程序

    2. 数据

    3. 作业说明书

    4. 作业控制块(Job control block,JCB)

       作业控制块是作业说明书在系统中生成的一张表格,
       在多道批处理系统中,它是作业在系统中存在的标志,其中保存了系统对作业进行管理和调度所需的全部信息
      

    3. 作业运行的三个阶段

    1. 收容阶段
    2. 运行阶段
    3. 完成阶段

    4. 作业调度的主要任务

    根据JCB中的信息,检查系统中的资源能否满足作业对资源的需求,以及按照一定的调度算法,从外存的后备队列选取某些作业调入内存,并为它们创建进程、分配资源。然后再将新创建的进程排在就绪队列上等待调度。

    (2). 中级调度

    在这里插入图片描述

    (3). 低级调度

    在这里插入图片描述
    在这里插入图片描述

    1. 进程调度的时机是什么?

    在这里插入图片描述
    用一个例题来解释:为什么进程在操作系统内核程序临界区中不能进行进程调度
    在这里插入图片描述

    2. 进程调度的方式

    在有的操作系统中,只允许进程主动放弃处理机,而不允许进程在运行的时候被迫的倍剥夺资源。
    有的操作系统中,进程可以主动的放弃处理机,当有更紧急的任务需要处理时,也会强行剥夺处理机(被动放弃)

    这样我们可以根据当前运行的进程是否可以被强行剥夺处理机资源这个问题我们引出
    进程调度的方式:
    在这里插入图片描述
    注:

    1. 非抢占方式

      采用了非抢占调度方式之后,还会引起进程调度的因素就只有以下几种情况

       正在执行的进程运行完毕,或因发生某事件而使其无法继续运行
       正在执行中的进程因提出I/O请求而暂停执行
       在进程通信或同步过程中,执行了某种原语操作,如block原语
      

      非抢占方式不能用于分时和大多数实时操作系统

    2. 抢占方式

      抢占不是任意的,而是有一定的规则

       优先级原则
       短进程有限原则
       时间片原则
      

    3. 进程切换的过程

    既然选择了一个进程要为他分配处理机的话,我们怎么进行进程切换呢?

    在这里插入图片描述

    4. 进程调度实现机制

    在这里插入图片描述
    为了实现进程调度,在进程调度机制中,应具备如下三个基本部分:

    1. 排队器

       为了提高进程调度的效率,应事先将系统中所有就绪进程按照一定的策略排列成一个或多个队列
      
    2. 分派器

       依据进程调度程序所选定的进程,将其从就绪队列中选取出来,
       然后进行从分派器到新选出进程间的上下文切换,将处理机分配给新进程
      
    3. 上下文切换器

       对处理机进程切换操作
       第一:保存当前进程上下文
       第二:移除分派车程序的上下文,把新的进程的CPU现场信息装入处理机
      

    4. 三种层次的比较

    在这里插入图片描述

    3. 调度算法

    1. 调度算法的评价指标

    在这里插入图片描述

    (1). CPU的利用率

    在这里插入图片描述

    (2). 系统吞吐量

    在这里插入图片描述

    (3). 周转时间

    在这里插入图片描述
    在这里插入图片描述

    (4). 等待时间

    在这里插入图片描述

    (5). 响应时间

    在这里插入图片描述

    2. 调度算法举例①(早期批处理系统使用的算法,交互性差)

    在这里插入图片描述

    (1). 先来先服务(FCFS, First Come First Server)

    在这里插入图片描述
    举例:
    在这里插入图片描述

    (2). 短作业优先(SJF,Shortest Job Frist)

    在这里插入图片描述
    举例1:非抢占式短进程优先(SPF,Shortest Process Frist)
    在这里插入图片描述
    举例2:最短进程优先算法的抢占式版本是最短剩余时间优先(Shortest Remaining Time Next, SRTN)算法
    在这里插入图片描述
    在这里插入图片描述
    短作业优先算法注意的小细节
    在这里插入图片描述

    (3). 高响应比优先(HRRN,Highest Response Ratio Next)

    从FCFS和FJS两种算法来思考,得出一个新的算法
    在这里插入图片描述
    在这里插入图片描述
    举例:
    在这里插入图片描述
    三种算法的比较
    在这里插入图片描述

    3. 调度算法举例②(适合用于交互式系统)

    (1). 时间片轮转(RR, Round Robin)

    在这里插入图片描述
    举例1:时间片轮转调度算法(时间片为2)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    举例1:时间片轮转调度算法(时间片为5)
    在这里插入图片描述
    注:时间轮转调度算法的时间片不能太大或太小
    在这里插入图片描述
    在这里插入图片描述

    (2). 优先级调度算法

    在这里插入图片描述
    举例1:非抢占式优先级调度算法
    在这里插入图片描述
    举例2:抢占式优先级调度算法
    在这里插入图片描述
    注:补充一些知识
    在这里插入图片描述

    (3). 多级反馈队列(Multileved feedback queue)调度算法

    在这里插入图片描述
    在这里插入图片描述

    举例:多级反馈队列调度算法的规则
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    三种算法总结:

    在这里插入图片描述

    四. 进程同步和进程互斥

    在这里插入图片描述

    1. 什么是进程同步

    在OS中引入进程之后,一方面可以使系统中的多道程序并发执行,这不仅能有效的改善资源利用率,还可以显著提高系统吞吐量,但是另一方面却使系统变得更加复杂
    如果不能采取有效措施,对多个进程的运行进行妥善管理,这些进程对系统资源的无序争夺对系统造成混乱。使每次处理结果都存在不确定性,即不可再现性

    在这里插入图片描述
    进程同步的目标:对多个进程在执行次序上进行协调,使并发执行的进程能按照一定规则共享系统资源,进行相互合作,使程序的执行具有可再现性

    2. 什么是进程互斥

    注:许多硬件资源如:打印机、磁带机等都属于临界资源,各进程间应采取互斥方式,实现对这种资源的共享

    在这里插入图片描述

    注:不论是硬件临界资源还是软件临界资源,多个进程必须互斥的对他进行访问
    人们把在每个进程值访问临界资源的那段代码称为临界区
    如果能够保证各进程互斥的进入临界区,就可以实现对临界资源的互斥访问

    在这里插入图片描述

    如果一个进程暂时不能进入临界区,那么该进程是否应该一直占着处理机?该进程有没有可能一直进不了临界区?
    在这里插入图片描述

    3. 如何实现进程互斥呢?

    (1). 进程互斥的软件实现方法

    在这里插入图片描述

    方法一:单标志法

    在这里插入图片描述
    缺点:
    在这里插入图片描述

    方法二:双标志先检查法

    在这里插入图片描述
    缺点:
    在这里插入图片描述

    方法三:双标志后检查法

    在这里插入图片描述

    缺点:
    在这里插入图片描述

    方法四:Peterson算法

    在这里插入图片描述
    在这里插入图片描述
    缺点:
    在这里插入图片描述

    (2). 进程互斥的硬件实现方法

    在这里插入图片描述

    方法一:中断屏蔽方法

    在这里插入图片描述

    方法二:Test and Set指令

    在这里插入图片描述

    方法三:Swap指令

    在这里插入图片描述

    4. 如何更好的实现进程同步和互斥呢?

    在这里插入图片描述

    1. 什么是信号量?

    在这里插入图片描述

    2. 有哪些信号量机制?

    信号量机制主要有:整型信号量机制、记录型信号量机制、AND信号量机制、信号量集机制
    而我们主要介绍以下两种:整型信号量机制、记录型信号量机制

    在这里插入图片描述

    (1). 整型信号量

    在这里插入图片描述

    (2). 记录型信号量

    在这里插入图片描述
    举例1:

    初始状态:
    在这里插入图片描述
    一开始CPU为进程P0服务:
    在这里插入图片描述
    之后CPU切换到P1进程,为P1进程服务:
    在这里插入图片描述
    然后CPU再为P2进程服务,此时没有打印机资源了,P2进程执行了block原语,进入等待队列
    在这里插入图片描述
    接下来,CPU转向了P3进程,为P3进程服务,同样在执行wait原语的时候,发现没有资源,主动执行block原语,进入等待队列队尾
    在这里插入图片描述

    然后CPU又转向了P0,为P0进行服务,P0使用完打印机之后,执行signal原语,在signal原语里面又执行力wakeup原语,用来唤醒等待队列队头的进程
    在这里插入图片描述
    P0进程执行完之后,CPU又为P2进程进行服务,P2就可以使用打印机资源,同时进行signal原语,唤醒P3进程
    在这里插入图片描述
    然后CPU又为P1进程服务,此时value加一之后大于0了,说明等待队列没有进程在等待了,所有就不需要执行wakeuo原语
    在这里插入图片描述
    最后CPU转到P3进程,为之服务,P3顺利执行到结束,系统回收打印机资源
    在这里插入图片描述
    总结:
    在这里插入图片描述

    (3). AND型信号量

    (4). 信号量集机制

    3. 如何使用信号量机制实现进程同步、互斥、前驱关系?

    在这里插入图片描述

    (1). 利用信号量实现进程互斥

    在这里插入图片描述

    (2). 利用信号量实现进程同步

    在这里插入图片描述
    在这里插入图片描述

    (3). 利用信号量实现前驱关系

    在这里插入图片描述

    5. 经典进程同步、互斥问题

    (1). 生产者消费者问题

    在这里插入图片描述
    当缓冲区当中有一个或者大于一个的空闲空间,此时就可以唤醒生产者进程,让他从阻塞态重新回到就绪队列
    在这里插入图片描述
    当消费者进程取空了缓冲区之后,消费者进程就会被阻塞
    在这里插入图片描述
    然后到生产者进程重新向缓冲区放数据的时候,消费者才会被唤醒,重新回到就绪队列
    在这里插入图片描述
    注:缓存区时临界资源,各进程必须互斥的访问
    因为:如果我们系统中出现了两个生产者进程,此时生成者进程发现缓存区每个地方都是空的,可以进行放数据,一个生产者在某一个地方放数据
    在这里插入图片描述
    在并发的环境下,另一个生成者也在同样一个地方放数据,导致前者数据被后者数据覆盖的情况
    在这里插入图片描述

    如何用信号量机制(P、V操作)实现生产者、消费者进程的这些功能呢?

    在这里插入图片描述
    在这里插入图片描述

    设置初始信号量
    在这里插入图片描述
    具体的代码实现
    在这里插入图片描述
    在这里插入图片描述
    能否改变相邻P、V操作顺序呢?
    在这里插入图片描述
    注:生产者生产一个产品和消费者消费一个产品操作能否放到互斥信号量P、V操作之内?
    逻辑上没有问题,从缓冲区取出一个产品,紧接着就使用产品
    但是这就导致了临界区代码量变大,消费者在访问临界区就需要耗费更长的时间,若此时也有别的进程想要访问临界区的话,它是会被阻塞的,使得进程之间的并发度降低。
    所以这两步代码不建议放到临界区之间

    在这里插入图片描述
    生产者消费者问题总结:

    在这里插入图片描述

    (2). 多生产者-多消费者问题

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    代码实现

    在这里插入图片描述
    可以不用互斥信号量吗?
    在这里插入图片描述
    结论:即使不设置专门的互斥变量mutex,也不会出现多个进程同时访问盘子的现象
    原因在于:本题的缓冲区大小为1,在任何时刻,Apple、orange、plate三个同步信号量中最多只有一个,因此在任何时候,最多只有一个进程的P操作,不会被阻塞,并顺利的进入临界区

    在这里插入图片描述
    总结:
    在这里插入图片描述
    在这里插入图片描述

    (3). 吸烟者问题

    在这里插入图片描述
    在这里插入图片描述
    设置信号量
    在这里插入图片描述
    代码实现:
    在这里插入图片描述
    是否需要设置一个专门的互斥信号量?
    缓存区大小为1,同一时刻,四个同步信号量中至多有一个值为1,不用设置互斥信号量

    总结:
    在这里插入图片描述

    (4). 读者-写者问题

    在这里插入图片描述
    如果两个写进程同时访问共享文件的话,两个写进程同时发现一块空闲空间,进而相继写入,会导致第二个写进程把第一个写进程数据覆盖了
    在这里插入图片描述
    问题分析
    在这里插入图片描述
    代码实现
    在这里插入图片描述
    解决方法:
    在这里插入图片描述
    此方法任然存在潜在问题:只要有读进程还在读,写进程就要一直阻塞等待,可能饿死,因此这种算法中,读进程是优先的

    解决方法:
    在这里插入图片描述
    总结:
    在这里插入图片描述

    (5). 哲学家进餐问题

    在这里插入图片描述
    方法一:
    在这里插入图片描述
    出现的问题:产生死锁
    在这里插入图片描述
    如何防止死锁的发生呢?

    1. 方案一:
      在这里插入图片描述

    2. 方案二:
      在这里插入图片描述

    3. 方案三:
      在这里插入图片描述

      代码实现

      情况1:0号哲学家,拿了左边的筷子,此时若进程切换为2号,但2号在进行mutex操作时,会被阻塞,直到0号哲学家拿到右边的筷子,并进行V(mutex)之后,2号才会被激活,执行下面代码,拿起左边和右边筷子
      在这里插入图片描述

      情况2:一开始0号,拿起了左边和右边筷子正在吃饭,此时1号也想拿起筷子,没有被mutex阻塞,但是左边还没有筷子,会发生阻塞,此时调度为2号,但是2号会被mutex阻塞,即使2号两边都有筷子
      在这里插入图片描述

      情况3:一开0号拿来左边和右边的筷子进行吃饭,当调度为4号,4号拿起了左边的筷子,但是右边没有筷子,发生阻塞
      因此这种方法并不能保证只有两边的筷子都可以使用时,才允许哲学家拿起筷子
      在这里插入图片描述
      在这里插入图片描述

    总结:
    在这里插入图片描述

    5. 管程

    在这里插入图片描述

    (1). 为什么要引入管程

    虽然信号量机制是一种既方便、又有效的进程同步机制,但每个要访问临界资源的进程都必须自备同步操作wait(S)、signal(S)。这就使得大量的同步操作分散在各个进程中,这不仅给系统的管理带来麻烦,还会因同步操作使用不当而导致系统死锁

    在这里插入图片描述

    (2). 管程的定义和基本特征

    官方定义:代表共享资源的数据结构以及由对该共享资源结构实施操作的一组过程所组成的资源管理程序共同构成了一个操作系统的资源管理模块,称之为管程
    Hansan为管程下定义:一个管程定义了一个数据结构和能为并发进程所执行的一组操作,这组操作能同步进程和改善管程中的数据结构

    在这里插入图片描述

    (3). 用管程解决生产者消费者问题

    在这里插入图片描述
    在这里插入图片描述

    (4). Java 中类似于管程的机制

    在这里插入图片描述

    (5). 总结

    在这里插入图片描述

    6. 死锁

    在这里插入图片描述

    (1). 什么是死锁(Deadlock)

    如果一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么该组进程是死锁的

    在这里插入图片描述

    (2). 死锁、饥饿、死循环的区别

    在这里插入图片描述

    (3). 死锁产生的必要条件

    在这里插入图片描述

    (4). 什么时候会发生死锁

    在这里插入图片描述

    (5). 死锁的处理策略

    在这里插入图片描述
    在这里插入图片描述

    1. 预防死锁

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    2. 避免死锁

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    找不到安全序列的例子
    在这里插入图片描述
    用代码实现银行家算法
    在这里插入图片描述
    银行家算法步骤
    在这里插入图片描述

    3. 死锁的检测和解除

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    总结:
    在这里插入图片描述

    展开全文
  • 进程控制的主要功能是对系统中所有的进程实施有效的管理,它具有创建进程、撤销已有进程、实现进程状态转换等功能。 简化理解:进程控制就是实现进程状态的转换。 如何实现进程控制 上图中,队列中的PCB个数...

    进程控制


    什么叫进程控制

    进程控制的主要功能是对系统中所有的进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。
    简化理解:进程控制就是实现进程状态的转换,比如"创建态 --> 就绪态"、“就绪态 --> 运行态”。
    在这里插入图片描述

    进程控制总览

    在这里插入图片描述上图中,队列中的PCB个数为蓝色块的个数,例如:上图表示就绪队列有两个PCB。

    如何实现进程控制

    什么是原语

    原语也是一种程序,但是原语有个特点:执行期间不允许中断,只能一气呵成。(这种不可被中断的操作即是原子操作)
    原语采用"关中断"指令和"开中断"指令实现,下面来看看他们是如何结合起来的。
    在这里插入图片描述显然,"关/开中断"指令的权限非常大,必然是CPU在核心态下才能执行的特权指令。 (假如应用程序能使用"关/开中断"指令,那意味着它可以一直占用CPU,显然这是不被允许的)

    进程控制为什么要用到原语

    为了说明进程控制为什么要用到原语,我们先说说不用原语的后果。
    举个例子:
    你去银行取100万,钱从ATM机吐出来了,这时别人叫你去吃饭,你是钱拿后再去吃饭,还是马上去吃饭,钱都不拿么?显然你是钱拿后再去吃饭。在这里,别人叫你去吃饭就是一个外中断信号,但是此时你不能去吃饭 (处理),因为你钱还没拿 (事情还没做好)。
    所以,假如在进行进程控制的时候,CPU收到了外中断信号而导致其退出进程控制程序(进入中断处理程序),这会导致进程控制程序执行的不完整,这个后果很严重,极易引起系统奔溃。(想一想100万没了,你是不是也极其奔溃)

    所以,CPU必须使用原语进行进程控制。

    进程控制相关的原语

    学习技巧:进程控制会导致进程状态的转换。无论哪个原语,要做的无非三类事情。

    1. 更新PCB中的信息 (如 修改进程状态标识、将运行环境保存到PCB、从PCB恢复运行环境)
      • 所有的进程控制原语一定会修改进程状态标志
      • 剥夺当前运行进程的CPU使用权必然需要保存其运行环境 (玩游戏的存档)
      • 某进程开始运行钱必然要恢复运行环境 (玩游戏的读档)
    2. 将PCB插入合适的队列
    3. 分配/回收资源

    下面开始介绍。

    进程的创建 ( 无 --> 创建态 --> 就绪态 )

    在这里插入图片描述

    进程的终止 ( 就绪态/阻塞态/运行态 --> 终止态 --> 无 )

    在这里插入图片描述

    进程的阻塞和唤醒 ( 运行态 <–> 阻塞态 )

    在这里插入图片描述

    进程的切换

    在这里插入图片描述进程的切换实现了被切换进程状态从"运行态 --> 阻塞态/就绪态"的转换,以及被调度进程状态从"就绪态 --> 运行态"的转换。

    总结

    在这里插入图片描述

    感谢

    以上内容大部分来自于王道操作系统系列视频教学。

    展开全文
  • 下面我们介绍一下进程控制 进程控制操作呢,主要是完成了进程 之间,进程的各状态之间... 所谓原语,有时候又称之为原子操作 那么它是完成某种特定功能的一段程序 比如说,完成创建,或者是完成阻塞,它是一段程
  • 操作系统三个小问题

    2019-03-19 15:33:10
    1.在多道程序设计系统中,如何理解“内存...2.试述创建进程原语的主要功能。 3.处于阻塞状态的一个进程,它所等待的事件发生时,就把它的状态由阻塞改变为就绪,让它到就绪队列里排队,为什么不直接将它投入运行呢?
  • 创建进程 ◆ 终止进程 ◆ 进程状态转换 进程控制是由OS内核完成。 2.2.1 进程创建 2.进程创建 调用进程创建原语Create(),按下述步骤创建一个进程 (1)申请空白PCB; (2)为新进程...
  • 进程控制

    2016-07-27 09:16:54
    进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建进程、撤销已有进程、实现进程状态转换等功能。在操作系统中,一般把进程控制用的程序段称为原语,原语的特点是执行期间不允许中断,它是一个不...
  • 进程的控制与同步

    2019-09-29 01:00:53
    1、进程控制 1、进程的创建 (1) 申请空白PCB(2) 为新进程分配...原语是由若干指令构成原子操作过程,作为整体实现功能,不可被打断。 2、进程的终止 (1) 根据进程标示符,检索出该进程PCB,读其状态。(2) 归还...
  • 进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建进程、撤销已有进程、实现 进程状态转换等功能。 简言之:进程控制就是要实现进程状态转换 1.2 进程控制实现 通过原语实现进程控制 NOTE: ...
  • 9.进程控制

    2020-12-30 14:18:27
    进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建进程、撤销已有进程、实现进程状态转换等功能。 进程控制的实现过程 操作系统对进程的组织是通过一系列队列组织的,因此进程的控制就是通过各种...
  • 所谓进程控制,就是系统使用一些具有特定功能的程序段来创建、撤销进程以及完成进程各状态间转换,从而达到多进程高效率并发执行和协调、实现资源共享目的。 在操作系统中,这些用于进程控制程序段被做成原语...
  • 三、进程控制

    2021-02-03 21:05:04
    进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建进程、撤销已有进程、实现进程状态之间的转换等功能。 简而言之就是:进程控制就是实现进程状态的转换。 二、如何实现进程控制 使用原语实现,...
  • 进程控制的主要功能是对系统总的所有进程实施有效的管理,它具有创建进程、撤销已有进程、实现进程状态转换等功能。 实现进程状态转换 图2.1 状态转换 图2.2 知识回顾 图2.3 进程调用中进程控制 如何实现进程...
  • 操作系统-进程控制

    2020-09-23 17:22:09
    进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建进程、撤销已有进程、实现进程状态转换等功能。 简化理解:进程控制就是要实现进程状态的转换。 如何实现进程控制? 图片来自王道考研B站视频...
  • 操作系统-05.进程控制

    2021-01-03 19:47:32
    答:进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建进程、撤销已有进程、实现进程状态转换等功能。 简化理解:反正进程控制就是要实现进程状态转换 2.如何实现进程控制? 答: 3.原语实现进程...
  • 进程控制的主要功能就是对系统中的所有进程实施有效的管理,比如;进程创建、撤销、实现进程状态转换等功能。 二、如何实现进程控制 用原语实现进程控制。原语的特点是执行期间不允许中断,只能一气呵成; 这种不...
  • 进程控制的主要任务: 进程控制是对系统中所有进程创建、执行到撤销的全过程实行有效的管理和控制。 进程控制一般是由操作系统内核的相应程序(原语)来实现。通常,操作系统内核运行在系统态。 一、原语 原语是...
  • 操作系统实验一 进程管理

    千次阅读 多人点赞 2019-05-18 14:59:09
    通过实验理解进程的概念,进程的组成(PCB结构),进程的并发执行和操作系统进行进程管理相关原语主要进程的创建、执行、撤消)。 2.实验内容 用C语言编程模拟进程管理,至少要有:创建的进程;查看运行...
  • 第二章 进程

    2018-09-26 20:48:36
    进程的亲属关系:系统...进程同步的主要任务:使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。 临界资源:一次仅允许一个进程使用的资源。 互斥:在操作系统中,当一个进程进入...
  • 2-1-3 进程控制

    2020-06-21 22:44:30
    进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建进程、撤销已有进程、实现进程状态转换等功能 总之,进程控制就是要实现进程状态转换 如何实现进程控制? 用“原语”实现。通过“关中断”...
  • 操作系统课程设计-进程管理-c++描述

    千次阅读 2019-05-31 09:32:08
    通过实验理解进程的概念,进程的组成(PCB结构),进程的并发执行和操作系统进行进程管理相关原语主要进程的创建、执行、撤消)。 2.实验内容 用C/C++语言编程模拟进程管理,至少要有:创建的进程;查看运行...
  • 1.进程控制基本过程 进程的创建 (1) 申请空白PCB (2) 为新进程分配资源  主要是内存资源处理 ...原语是由若干指令构成原子操作过程,作为整体实现功能,不可被打断。 进程的终止  引起终止事件:  ...

空空如也

空空如也

1 2 3
收藏数 52
精华内容 20
关键字:

创建进程原语的主要功能