操作系统之进程与线程2

进程与线程-调度算法

  • 进程行为分类

    • 进程按计算和IO操作的多少分为IO密集型应用计算密集型应用
    • 计算密集型应用因为可以一直利用CPU去计算而同等时间内CPU利用率较高。
    • IO密集型应用因为需要等待IO请求,因此等待的时间造成了CPU的空闲,因此同等时间内CPU利用率较低。
    • 因此对于IO密集型应用我们一般开启多个进程,进行频繁的线程切换,在IO等待的时间将CPU交给其他进程运行,以此来充分利用CPU。
  • 调度算法分类

    • 按照是否规定执行时间来分为抢占非抢占式。
    • 非抢占式算法会挑选一个进程让其运行直到其结束、等待IO、阻塞或主动让出CPU,才会去选择下一个进程去运行。
    • 抢占式算法会挑选一个进程让其运行一段时间,若时间到了还未阻塞或结束则将此进程挂起,转而去选择另一个进程去运行。
    • 简而言之就是非抢占式是一直占用CPU直到主动放弃,抢占式是可以由调度程序根据一些情况来使其放弃CPU。
  • 调度算法的目标

    • 吞吐量、周转时间、CPU利用率、响应时间、均衡性、。。。
  • 进程切换的成本

    • 进程切换有时又称作上下文切换,需要保存装入寄存器的值、切换内存映像、清除并重新调入高速缓存以及一些状态或表格的更新。因此频繁的进程切换可能会产生很大的成本。因此应当避免频繁的进程切换。
  • FCFS先来先服务算法

    • FCFS是非抢占式的。
    • 线程按照请求CPU的顺序来使用CPU,存在一个等待队列,若cpu被其他线程使用时新加入的线程加入到队尾,如果正在使用 cpu的线程阻塞了则将这个线程也加入到队列队尾。
    • 缺点
      • 1.平均等待时间过长。
      • 2.对于一个计算密集型应用和多个IO密集型应用同时存在时,会导致cpu密集型应用一直运行到结束,此时IO设备空闲且IO密集应用又必须等待,当只剩下IO密集型应用时又会因为发出IO请求后进程阻塞而放弃CPU,此时又导致CPU空闲。
  • SJF最短作业优先算法

    • SJF是非抢占式的。
    • 调度程序挑选当前排队的进程中运行需要时间最小的进程来运行,其等待队列的排序方式是按照预测的运行时间来排序的。
    • 缺点
      • 1.对于长作业不利,若一直有短作业到来会导致需要长时间的进程一直无法运行。
      • 2.运行时间的预测可能存在问题,由用户程序提供无法公平公正。
  • SRTN最短剩余时间优先算法

    • SRTN是抢占式的,属于SJF的抢占式改进版。
    • 当一个新的进程到来时,根据此进程所需要的运行时间与当前占用CPU的进程的剩余时间比较,挑选时间最短的来运行。
    • SRTN的缺点同SJF的缺点一样,都存在长作业不利和运行时间预测问题。
  • RR轮转算法

    • RR是抢占式的。
    • RR算法的调度程序给每一个进程分配了一个时间片,当其时间片用完时还未停止则会产生中断,将时间片用光的进程放到等待队列的队尾。
    • 缺点
      • 如果时间片设置过小会导致较频繁的进程切换,因此会导致很大的切换成本,降低了CPU的效率。
      • 如果时间片设置过大又会导致一些交互的进程不得不等待较长时间来下一次获得时间片运行,使得交互请求响应时间变长。
  • 优先级调度

    • 在之前的RR算法中把所有进程都视为了同等重要,但很多时候我们希望先运行一些重要的进程,因此我们可以按照优先级来区分进程,在轮转甚至其他算法中把优先级也考虑进去。
    • 进程调度算法优先运行优先级高的进程,当时间片运行结束后也是寻找优先级较高的进程来运行,直到优先级较高的进程都消失了再去运行优先级较低的进程。
    • 有时优先级也可以由系统决定,一种简单的优先级判定算法是一个进程的优先级等于1/f,f为它上一次占用CPU时所用掉的时间片长度的比例。此时如果是IO密集应用其使用的时间片比重必然很小因此它的优先级会变得很高,而将全部时间片用完的计算密集型进程会获得很低的优先级。
  • CTSS多级队列算法

    • CTSS是抢占式的。根据给计算密集应用以较短的时间片而导致频繁切换的消耗大于给予其较长的时间片带来的较少的进程切换,而提出的算法。
    • 原理
      • CTSS根据优先级进行队列分类,其每一个优先级存在一个队列,且优先级越高的队列中的进程获得的时间片就越小,而优先级较低的队列中进程获得的时间片就较长。
      • 每一个进程在运行完时间片后会被送入较低优先级的队列中,因此当其再次运行时获得的时间片会更长。
      • 刚刚开始的进程会被放到最高优先级上,得到一个较短的执行,之后慢慢降低优先级并获得较长的执行时间。
    • 实际上的算法应用时存在一些提供优先级的判断来进行一些优化,例如用户与进程交互了则将这个进程的优先级提高等。
    • 优点
      • 短批处理作业用户:周转时间较短。
      • 长批处理作业用户:经过前面几个队列得到部分执行,不会长期得不到处理。
  • 用户线程与内核线程

    • 可以看到操作系统的调度是针对于进程来说的,而线程的调度是否通过操作系统是取决于线程的实现方式,常见的方式有两种,一种是用户线程,一种是内核线程。

    • 用户线程

      • 优点
        • 线程的创建极其方便无需陷入内核态,一个进程内线程共享资源方便,创建删除开销较少。
        • 用户线程的调度只是在用户态,减少了操作系统从内核态到用户态的切换开销。
        • 每个进程中的线程调度可以自定义实现。
      • 缺点
        • 当进程中的一个线程因为系统调用阻塞时,因为操作系统不清楚用户线程的存在,整个进程都会被阻塞。
        • 无法充分利用多核cpu。因为一个进程只被进程调度程序分给一个cpu。
    • 内核线程

      • 优点
        • 线程的调度由操作系统管理,不会因为一个线程的系统调用阻塞而造成整个进程的阻塞。
        • 线程调度程序会为每个线程分配一个cpu,而不是每个进程。可以充分利用cpu。
      • 缺点
        • 由内核进行调度,总在内核态和用户态间进行切换,调度消耗较高。
    • 一对一多对多

      • 为了综合两者的优点,现在流行的方式为一个内核线程对应一个用户线程,或多个内核线程对应更多个用户线程的实现方式,这样弥补了用户线程无法充分利用多核cpu以及进程阻塞的缺点,并且实现了内核进程的复用,还避免了频繁的内核态线程创建。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值