zoukankan      html  css  js  c++  java
  • 进程管理

    进程控制块(PCB)

    未建立PCB的程序都不能作为一个独立的单位参与运行。

    进程控制块是进程的唯一标志。

    PCB是有限的,创建进程需要申请PCB。

    进程控制块中的内容:

    为什么要区分就绪状态和等待状态?

    就绪状态是指进程仅缺少处理机,只要获得处理机资源就立即执行;

    等待状态是指进程需要其他资源(除了处理机)或等待某一事件。

    之所以把处理机和其他资源划分开,是因为在分时系统的时间片轮转机制中,每个进程分到的时间片是若干毫秒。也就是说,进程得到处理机的时间很短且非常频繁,进程在运行过程中实际上是频繁地转换到就绪状态的;而其他资源(如外设)的使用和分配或者某一事件的发生(如I/O操作的完成)对应的时间相对来说很长,进程转换到等待状态的次数也相对较少。这样看来,就绪状态和等待状态是进程生命周期中两个完全不同的状态,显然需要加以区分。

    进程状态

    1、运行状态

    进程正在处理机上运行,在单处理机环境下,每一时刻最多只有一个进程处于运行状态。

    2、就绪状态

    进程已处于准备运行的状态,即进程获得了除处理机之外的一切所需资源,一旦得到处理机即可运行。

    3、阻塞状态

    进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理机)或等待输入输出完成。即使处理机空闲,该进程也不能运行。

    4、创建状态

    进程正在被创建,尚未转到就绪状态。创建进程通常需要多个步骤:首先申请一个空白的PCB,并向PCB中填写一些控制和管理进程的信息;然后由系统为该进程分配运行时必需的资源;最后把该进程转入到就绪状态。

    5、结束状态

    进程正从系统中消失,这可能是进程正常结束或其他原因中断退出运行。当进程需要结束运行时,系统首先必须置该进程为结束状态,然后再进一步处理资源释放和回收等工作。

    进程状态转换

    1、就绪状态→运行状态

    处于就绪状态的进程获得了处理机资源。

    2、运行状态→就绪状态

    时间片用完了让出处理机;

    可剥夺操作系统中,优先级更高的进程被调度,正在执行的低优先级进程从运行状态转为就绪状态。

    3、运行状态→阻塞状态

    进程请求某一资源或等待某一事件的发生。

    4、阻塞状态→就绪状态

    进程等待的事件到来了(I/O操作结束或中断结束)。

    进程控制

    进程的创建

    子进程可以继承父进程所拥有的资源。

    子进程被撤销时,将从父进程那里获得的资源归还给父进程。

    撤销父进程时,必须同时撤销其所有的子进程。

    创建过程:

    1、为新进程分配一个唯一的进程标识号,并申请一个空白的PCB(PCB是有限的)。若PCB申请失败则创建失败。

    2、为进程分配资源,为新进程的程序和数据,以及用户栈分配必要的内存空间(在PCB中体现)注意:如果资源不足(比如内存空间),并不是创建失败,而是处于等待状态,等待的是内存这个资源。

    3、初始化PCB,主要包括初始化标志信息、初始化处理机状态信息和初始化处理机控制信息,以及设置进程的优先级等。

    4、如果进程就绪队列能够接纳新进程,就将新进程插入到就绪队列,等待被调度运行。

    进程的终止

    正常结束:进程的任务完成和准备退出运行。

    异常结束:进程运行时,发生了某种异常事件,使程序无法继续运行。(存储区越界、保护错、非法指令、特权指令错、I/O故障)

    外界干预:进程应外界的请求而终止运行。(操作员或操作系统干预、父进程请求和终止)

    终止过程:

    1、根据被终止进程的标识符,检索PCB,从中读出该进程的状态。

    2、若被终止进程处于执行状态,立即终止该进程的执行,将处理机资源分配给其他进程。

    3、若该进程还有子进程,则应将其所有子进程终止。

    4、奖该进程所拥有的全部资源,或归还其父进程或归还给操作系统。

    5、将该PCB从所在队列(链表)中删除。

     进程的阻塞和唤醒

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

     进程切换

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

  • 相关阅读:
    基本数据类型包装类
    LeetCode算法题-Robot Return to Origin(Java实现)
    LeetCode算法题-Two Sum IV
    LeetCode算法题-Set Mismatch(Java实现)
    LeetCode算法题-Maximum Average Subarray I(Java实现)
    LeetCode算法题-Average of Levels in Binary Tree(Java实现)
    LeetCode算法题-Sum of Square Numbers(Java实现)
    LeetCode算法题-Maximum Product of Three Numbers(Java实现)
    LeetCode算法题-Merge Two Binary Trees(Java实现)
    LeetCode算法题-Construct String from Binary Tree(Java实现)
  • 原文地址:https://www.cnblogs.com/cyx-b/p/11862529.html
Copyright © 2011-2022 走看看