美文网首页
操作系统(二)——进程管理

操作系统(二)——进程管理

作者: 花卷呀花卷 | 来源:发表于2020-03-25 10:37 被阅读0次

    程序活着的标志是进程,把进程总结为一个公式:进程=程序+状态。
    多个进程在内存中运行过程就像一场社交活动,需要交流,为了保证社交活动能够正常进行就要对进程的行为作出干预(调度)。因此需要对单个进程、多个进程的交流进行管理。

    image.png

    (一)进程

    1.什么是进程

    关于进程的定义有很多,其中一个定义是:进程是进程实体的运行过程,是系统进行资源分配调度的一个独立单位。

    其实进程也就是程序在内存中运行时的标志,当一个程序被执行时,它从外存被调入到内存中工作,通过进程来标志它的工作状态。因此需要创建小本本一样东西来记录它的状态,这个东西就要做进程控制块(Process Control Block,PCB),一旦PCB被创建了,也就意味着该程序的进程创建了。

    程序被调入内存.png

    2.进程为什么会出现

    由于多道批处理操作系统的出现,多个程序可以并发运行,并且可共享资源,这导致了它们失去了封闭性。一旦失去封闭性,某个程序执行的命令、使用的变量都会受到其他程序的影响,因此引入进程来管理程序的运行状态。

    3.进程有哪些特征

    每个程序运行都会创建一个进程,进程通过PCB来记录动态运行时的状态,既然PCB用于记录,那么要符合一定的约束条件,记录必须描述,才便于管理。由此可得出进程的特征:

    • 动态性,这是一个进程的生命周期
    • 并发性,多个程序可并发执行,使得多个进程可并发运行
    • 独立性,每个进程都是独立的模块,运行自己的生命周期
    • 异步性,由于进程是独立运行的,由于其运行速度不一致导致异步
    • 结构性,进程是由程序段、数据段和PCB组成

    4.如何创建一个进程

    程序放在外存中,当用户运行某个程序时,该程序会从外存调入到内存中,这是进程创建的过程。具体实现过程如下图所示:

    进程创建过程

    PCB记录进程的基本描述信息、控制和管理等一系列信息。其中一项——进程当前状态,不断更新进程的生命状态。进程有5种生命状态:新建、就绪、运行、阻塞和终止。
    进程一旦被创建就加入到就绪队列等待调度,此时进程获得除处理机以外的所有资源,只要进程获得处理机便进入到运行态;进程在运行一个时间片周期后,没有执行完毕,重新调回就绪队列中,如果执行过程中需要获取如打印机这类资源,则调入阻塞队列;只要进程等待事件到来,便重新加入就绪队列中。

    image.png

    5.什么是线程

    线程是“轻量级进程”。如果把进程比作工厂,那么线程就是工厂里的生产线,生产线上的元件是共享资源。
    同进程一样,线程可以创建和撤销子线程,多个线程之间可以并发执行,同时它也有就绪、阻塞和运行三种状态。

    线程示意图

    6.线程实现了什么

    由于进程的并发性,使得其在创建、相互切换等花费较大的时空开销,引入线程,目的就是为了实现减小程序在并发执行时所付出的时空开销。
    体现在以下方面:

    • 调度。引入线程后的操作系统,以线程作为独立调度的基本单位,而进程作为拥有资源的基本单位,如此,在同一进程内切换线程不会引起进程的切换,但是不同进程切换线程,会引起线程切换;
    • 资源。进程是拥有资源的基本单位,线程共享进程内的资源,这大大减少了资源开销;
    • 并发。多个线程可并发执行,提高系统吞吐量;
    • 通信。进程间通信需要进程同步和互斥手段辅助,线程间直接读/写进程数据段来进行通信。

    (二)调度

    1.进程调度史

    在多道批处理系统中,进程并发运行,争夺处理机,为了解决这个问题,使用处理机调度,利用公平、高效的算法选择一个进程运行。

    程序执行往往经历三级调度:

    • 作业调度:辅存与内存之间的调度,每个作业只调入一次,调出一次,每次调入分配内存、输入\输出等必要资源;
    • 中级调度:将暂时不用进程调到外存等待,此时的进程还拥有资源,一旦内存空闲且需要运行,则重新调入内存;
    • 进程调度:按照某种策略从就绪队列中选择一个进程运行


      调度层次

    2.调度方式

    如果某个进程A正在CPU上执行时,有一个优先级更高的进程B进入就绪队列,如何分配CPU?两种方式,第一种,等待A的时间片用完或者进入阻塞态后,才把CPU分配给B,第二种,直接暂停A,把CPU分配给B。
    这两种方式分别称为非剥夺调度方式剥夺调度方式

    调度方式

    非剥夺调度方式相比较剥夺调度方式来说优雅一些,比如你在排队在窗口买火车票,有个人很着急,他越过排在你后面的所有人,直接排在你后面,等你买完票后轮到他买,这就像非剥夺调度,而另一种人则直接把你从买票窗口推开,直接买票,这是剥夺式调度。

    3.调度算法

    操作系统中有6中常用的调度算法:

    • 先来先服务:哪个进程优先进入就绪队列,就先执行哪个进程。


      image.png
    • 短作业优先:根据进程运行时间长短选择最短的进程,这种算法下有非剥夺式短作业优先和剥夺式短作业优先。
      非剥夺式短作业优先:qq在处理机上执行,就绪队列中微信的运行程序比它短,但是微信等待qq从处理机上退出后才获得处理机;
      剥夺式短作业优先:由于就绪队列中的微信运行时间比qq短,直接暂停qq,把处理机分配给微信。


      image.png
    • 优先级调度:PCB中记录每个进程的优先级,将处理机分配给优先级高的进程,同短作业优先一样,这种算法下也有非剥夺式优先级调度和剥夺式优先级调度。
    image.png
    • 高响应比优先调度:这种调度方式常用与作业调度,根据公式选择响应比高的作业运行。
    image.png
    • 时间片轮转调度:主要用于分时系统,所有进程在就绪队列排队,每个进程依次定时使用处理机,如果规定时间范围内进程没有完成,则重新排队。
    • 多级反馈队列调度:该算法结合优先级调度和时间片轮转调度,将就绪队列分为不同级别优先级,对优先级不同的队列运行时间不同,优先级高的队列运行时间短,优先级低的队列运行时间长。
      如图:
      1.在优先级为3的队列上有3个进程等待运行,有1个进程在CPU上处理,当时间片用完时这些程序都没有执行完毕,则依次进入优先级为2的队列等待调度;2.qq、wechat在优先级为2的队列执行完毕,直接退出,而浏览器和lol没有执行完毕,它们进入第三个队列等待调度。
    image.png

    (三)进程同步

    1.进程之间的关系

    多个进程并发运行,它们之前有什么联系?协助和竞争,也就是同步和互斥。
    同步:多个进程为了完成同个任务而相互等待,它们之间是相互合作关系。
    互斥:多个进程因争夺某一临界资源而等待,只有一个进程使用完后,另一个程序才能使用,它们是竞争关系。

    2.解决同步、互斥的方法

    解决同步、互斥问题的原因主要是为了保护数据,避免产生与最终预期不一致的结果。
    1.软件实现方法
    2.硬件实现方法
    3.信号量

    (四)死锁

    1.死锁是什么

    计算机内部资源有限,如果多个进程并发执行,且每个进程在执行一开始获得部分资源,执行过程中需要申请其他资源,此时申请的资源被其他程序占用,使得多个进程无法向前推进,形成死锁。

    比如两辆车同时过河,它们上桥行驶一半后发现对方,但都不退让,使得双方都没办法继续先前行驶。


    image.png

    2.死锁产生的原因

    系统资源的竞争和进程推进顺序非法。

    系统资源的竞争:计算机内部存在不可剥夺的资源,一旦多个进程争夺这些资源,就有可能造成死锁;
    进程推进顺序非法:进程执行过程中会不断请求和释放资源,如果某一进程对资源需求量大,不断请求该资源,使得其他进程无法请求足够资源,也会导致死锁。

    3.什么条件下会产生死锁

    死锁产生的必要条件:

    • 互斥条件:进程之间存在竞争关系;
    • 不剥夺条件:进程只能主动释放资源,不能在运行中被剥夺;
    • 请求并保持条件:已有资源的进程在执行过程中申请被其他程序占用的资源;
    • 循环等待条件:每个已获得资源的进程同时被其他进程请求资源,形成循环链。

    4.避免死锁的策略

    避免死锁的策略以破坏以上四个必要条件为目的,在三个不同时机(事前、事中和事后)提出不同的策略。
    这三个时机分别对应:死锁预防、死锁避免和死锁检测。


    image.png image.png

    相关文章

      网友评论

          本文标题:操作系统(二)——进程管理

          本文链接:https://www.haomeiwen.com/subject/karbyhtx.html