您的位置:新葡亰496net > 电脑系统 > 新葡亰496net:进程调度总结,操作系统

新葡亰496net:进程调度总结,操作系统

发布时间:2019-09-29 17:47编辑:电脑系统浏览(85)

    处理机的调度

    标签(空格分隔): 进程调度 调度算法 操作系统


    进程调度

      

     基本属性

    1.多态性 从诞生、运行,直至消灭。

    2.多个不同的进程可以包括相同的程序

    3.三种基本状态 它们之间可进行转换

    4.并发性并发执行的进程轮流占用处理器

    在计算机系统中,可能同时有数百个批处理作业存放在磁盘的作业队列中,或者有数百个终端与主机相连接。如何从这些作业中挑选作业进入主存运行、如何在进程之间分配处理器时间,无疑是操作系统资源管理中的一个重要问题。这一涉及处理机分配的问题,称之为处理机调度。

    以下完全为个人总结——若发现问题请下方评论,定回

    基本概念

    定义
    : 操作系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源的有限性,必须按照一定的原则选择进程(请求)来占用资源, 我们称之为调度。

    其目的是控制资源使用者的数量,选取资源使用者许可占用资源或占用资源。处理机调度的三个层次:

    • 高级调度:作业调度, 调度对象为作业.
    • 中级调度:内存调度(实质是存储器的对换功能)
    • 低级调度:进程调度, 调度对象为进程或内核级线程

    作业调度的算法也适用于进程调度

    服务时间(T_s): 系统为作业或进程提供服务的时间
    周转时间(T_i): 作业或进程被提交给系统到作业或进程完成为止的时间间隔.
    通常包括:

    作业在外存后备队列上等待调度的时间.
    进程在就绪队列上等待进程调度的时间.
    进程在cpu上执行的时间.
    进程等待I/O操作完成的时间.

    平均周转时间:
    [T = frac{sum_{i=1}^n T_i}{n}]
    带权周转时间: 作业的周转时间与为它提供服务的时间之比
    [W_i = frac{T_i}{T_s}]
    平均带权周转时间:
    [W = frac{sum_{i=1}^n frac{T_i}{T_s}}{n}]

        基本状态

    1.等待态:等待某个事件的完成;

    2.就绪态:等待系统分配处理器以便运行;

    3.运行态:占有处理器正在运行。

    运行态→等待态 往往是由于等待外设,等待主存等资源分配或等待人工干预而引起的。

    等待态→就绪态 则是等待的条件已满足,只需分配到处理器后就能运行。

    运行态→就绪态 不是由于自身原因,而是由外界原因使运行状态的进程让出处理器,这时候就变成就绪态。例如时间片用完,或有更高优先级的进程来抢占处理器等。

    就绪态→运行态 系统按某种策略选中就绪队列中的一个进程占用处理器,此时就变成了运行态

    1、处理机调度的层次

    处理机调度分为三个级别:

    • 高级调度:又称为作业调度,他按照系统的预定调度策略决定把后背队列作业中的那些作业调入主存,并为之创建进程、启动他们运行,它发生在新进程的创建过程中,决定了一个进程能否被创建,或者创建后是否被指为就绪状态。
    • 中级调度:又称为平衡负载调度,它决定了主存储器中所能够容纳的进程数,这些进程允许参与竞争处理器资源。而暂时不能运行的进程,则被调出主存,挂起;它根据当前系统的负荷情况决定停留在主内存中进程数。
    • 低级调度:又称为进程调度,按照某种原则决定就绪队列中的那些进程可以获得处理器,并将处理机让出给它进行工作;
    ![](https://upload-images.jianshu.io/upload_images/3164170-1a29928bb1bc38b8.png)
    
    image.png
    

    进程管理


    • 操作系统最基本的两个特性 - 并发性及共享性
    • PCB(进程控制块)- 进程存在的唯一标志
    • 进程是进程实体的运行过程,使系统进行资源分配和调度的一个独立单位;
      进程是操作系统资源分配和独立运行的基本单位
      任何进程都是在操作系统的内核的支持下运行的,是与内核紧密相关的
      特性:动态性(最基本特征)、并发性、独立性、异步性、结构性
    • 进程实体组成:程序段、数据段、PCB;
    • 进程状态:运行状态、就绪状态、阻塞状态(等待状态)、创建状态、结束状态
    • 进程状态的转换中
      运行状态->阻塞状态 是一个主动的过程
      阻塞状态->就绪状态 是一个被动的过程需要其他程序的协助
    • 原语 一般把进程控制用的程序段称为原语
      特点: 执行期间不允许中断,是一个不可分割的基本单位
    • 进程创建
      分配唯一进程标识号,申请空白PCB失败则创建失败
      分配资源,失败则阻塞,等待状态并非创建失败
      初始化PCB
      入队,进入就绪队列;
    • 进程终止
      根据进程标识符,检索PCB,读进程状态
      若处于执行态,中止进程,将处理机资源分给其他进程
      若有子进程也全部终止
      将拥有的全部的资源归还父进程或操作系统
      将该PCB从所在队列删除
    • 进程阻塞/唤醒
      调用阻塞原语(Block)
      找到进程标识号对应的PCB
      若运行,保护现场,转换状态为阻塞,停止运行
      PCB插入等待队列
      调用唤醒原语(Wakeup)
      找到对应PCB
      移出等待队列,职位就绪状态
      PCB插入就绪队列
    • 进程切换
      指的是 处理机从一个进程上的运行转到另一个进程上运行,环境发生了实质性变化。
      保存处理机上下文,PC及各寄存器
      更新PCB,移动到相应队列
      更新为另一程序PCB,内存管理及数据结构
      回复处理机上下文
      进程的切换与处理机的切换不同
      处理机模式,可能同一进程的中断恢复后只需回复现场即可,无需改变当前进程环境信息,而进程切换就绪改变了;
    • PCB
      常驻内存,任意时刻可存取,进程结束后删除
      进程实体的一部分,是进程存在的唯一标志
      PCB 包含的信息:
      进程描述信息
      PID(进程标识符) - 唯一标识进程
      UID(用户标识符) - 进程归属用户,为共享和保护服务
      进程控制和管理信息
      进程当前状态 - 处理机调度分配依据
      进程优先级
      资源分配清单
      处理机相关信息
    • PCB组织方式 - 链接/索引
    • 进程高级通信方式(P/V操作是低级通信方式)
      1)共享存储
      低级 - 基于数据结构的共享
      高级 - 基于存储区的共享
      2)消息传递
      进程间数据以格式化消息为单位
      通过发送消息/接收消息两个原语
      直接通信 - 直接发送到对方的消息缓冲队列中;
      简接通信 - 消息发送到中间实体(信箱)
      3)管道通信
      管道:连接读/写进程实现他们之间通信的一个共享文件
      管道机制:互斥、同步、确定对方存在
      半双工通信,每次管道中写满后,才可读
    • 线程
      线程是被系统独立调度和分派的基本单位
      轻量级进程,一个基本的CPU执行单元,程序执行流的最小单元
      不拥有系统资源,只有运行时所必须的资源,同一进程下的各线程共享进程资源
      线程独立调度的基本单位,进程是拥有资源的基本单位
    • 内核线程 - 内核支持的线程,线程管理的工作由内核完成
    • 用户级线程 - 线程管理由应用程序完成(对操作系统透明)
    • 多线程模型(用户级线程->内核线程 对应关系)
      1)多对一模型
      优点:效率高
      缺点:当一个线程使用内核级线程被阻塞,全部阻塞
      2)一对一模型
      优点:并发能力较强
      缺点:开销大、影响程序性能
      3)多对多模型
      特点:前两种方法的折中,集两个方法之优;
    • 处理机调度
      1)作业调度(高级调度)
      使其获得竞争处理机的权利
      2)内存调度(中级调度)
      提高内存利用率和系统吞吐量
      3)进程调度(低级调度)(和切换程序为操作系统内核程序)
      按照某种最基本方法策略,最基本调度
      频度很高 几十毫秒一次
    • 作业调度为进程活动做准备,进程调度使进程活动起来,中级调度将不能运行的进程挂起
    • 不能进行调度及切换的情况
      处理中断过程
      进程在操作系统内核程序临界区
      其他需要完全屏蔽中断的原子操作过程
      进程调度方式
      1)非剥夺调度方式
      简单、系统开销小,适合大多数批处理系统,不适合分时系统实时系统;
      2)剥夺调度方式(抢占方式)
      提高系统吞吐率和响应效率
    • CPU利用率
    • 系统吞吐量 单位时间内CPU完成的作业的数量
    • 周转时间 作业完成时间 - 作业提交时间
      平均周转时间 =(作业1周转时间 作业2周转时间 ...)/n;
      带权周转时间 = 作业周转时间/作业实际运行时间;
    • 等待时间 进程处于等待处理机状态时间的总和;
      处理机调度算法影响的只有作业在就绪队列中等待的时间;
    • 响应时间 从用户提交请求到系统首次产生响应所用的时间;
    • 调度算法
      1)FCFS(first come first solve)
      特点:简单、效率低,对长作业有利,对短作业不利(相对SJF和高响应比来说),有利于CPU繁忙,不利于I/O繁忙;
      2)SJF(shortest job first)
      对长作业不利,容易产生饥饿现象,平均等待时间、平均周转时间最少;
      3)优先级调度(优先权调度,适合实时操作系统)
      非剥夺式优先级/剥夺式优先级
      静态优先级 - 进程创建时定好的,运行期间不变
      动态优先级 - 进程运行中,动态调整优先级
      4)高响应比优先调度(主要用于作业调度,适用分时系统)
      响应比 Rp=(等待时间 要求服务时间)/要求服务时间;
      有利于短作业
      前两种算法的兼顾,克服了饥饿状态,兼顾了长作业;
      5)时间片轮转调度(适用分时系统)
      就绪进程按照先来先服务排好序
      时间片长短决定于 系统响应时间、就绪队列中的进程数目,系统的处理能力
      6)多级反馈队列(适用分时系统)
      时间片与优先级的综合,动态调整优先级及时间片大小
      优势:
      终端型用户:短作业优先
      短批处理作业用户:周转时间短
      长批处理用户:不会发生饥饿

    Here comes the big case:


    • 进程同步
    • 临界资源 - 一次只允许一个进程使用的资源为临界资源;
    • 同步(直接制约关系)
    • 互斥(简介制约关系)
    • 为禁止两个进程同时进入临界区,同步机制应遵循以下准则
      空闲让进
      忙则等待
      有限等待
      让权等待

    同步问题单写了

    • 死锁问题
    • 死锁产生必要条件 -互斥条件 - 不剥夺条件 - 请求和保持条件 - 循环等待条件
    • 三种死锁处理策略
      死锁预防
      破坏互斥条件 / 破坏不剥夺条件 / 破坏请求和保持条件(预先静态分配) / 破坏循环等待(顺序资源分配)条件
      死锁避免
      系统安全状态(找到安全序列) / 银行家算法
      死锁检测
      资源分配图 / 死锁定理(简化资源分配图) / 死锁解除(资源剥夺、撤销进程、进程回退)

    调度时机、切换与过程

    进程调度和切换程序是操作系统内核程序。当请求调度的事件发生后,才可能会运行进程调度程序,当调度了新的就绪进程后,才会去进行进程间的切换。理论上这三件事情应该顺序执行,但在实际设计中,在操作系统内核程序运行时,如果某时发生了引起进程调度的因素,并不一定能够马上进行调度与切换。

    现代操作系统中,不能进行进程的调度与切换的情况有以下几种情况:

    1. 在处理中断的过程中:中断处理过程复杂,在实现上很难做到进程切换,而且中断处理是系统工作的一部分,逻辑上不属于某一进程,不应被剥夺处理机资源。

    2. 进程在操作系统内核程序临界区中:进入临界区后,需要独占式地访问共享数据,理论上必须加锁,以防止其他并行程序进入,在解锁前不应切换到其他进程运行,以加快该共享数据的释放。

    3. 其他需要完全屏蔽中断的原子操作过程中:如加锁、解锁、中断现场保护、恢复等原子操作。在原子过程中,连中断都要屏蔽,更不应该进行进程调度与切换。

    如果在上述过程中发生了引起调度的条件,并不能马上进行调度和切换,应置系统的请求调度标志,直到上述过程结束后才进行相应的调度与切换。

    应该进行进程调度与切换的情况有:

    1. 当发生引起调度条件,且当前进程无法继续运行下去时,可以马上进行调度与切换。如果操作系统只在这种情况下进行进程调度,就是非剥夺调度。

    2. 当中断处理结束或自陷处理结束后,返回被中断进程的用户态程序执行现场前,若置上请求调度标志,即可马上进行进程调度与切换。如果操作系统支持这种情况下的运行调度程序,就实现了剥夺方式的调度。

    进程切换往往在调度完成后立刻发生,它要求保存原进程当前切换点的现场信息,恢复被调度进程的现场信息。现场切换时,操作系统内核将原进程的现场信息推入到当前进程的内核堆栈来保存它们,并更新堆栈指针。内核完成从新进程的内核栈中装入新进程的现场信息、更新当前运行进程空间指针、重设PC寄存器等相关工作之后,开始运行新的进程。

        处理机

    高级、中级和低级调度作业从提交开始直到完成,往往要经历下述三级调度:

    高级调度:(High-Level Scheduling)又称为作业调度,它决定把后备作业调入内存运行;

    低级调度:(Low-Level Scheduling)又称为进程调度,它决定把就绪队列的某进程获得CPU;

    中级调度:(Intermediate-Level Scheduling)又称为在虚拟存储器中引入,在内、外存对换区进行进程对换。

    2、调度算法

    内存管理

    调度的方式

    • 非抢占方式
      一旦处理机分配给某进程后, 就一直让它运行下去, 决不会因为时钟中断或任何其他原因取抢占当前正在运行进程的处理机, 直至该进程完成, 或发生某事件而被阻塞时, 才把处理机分配给其他进程.
    • 抢占方式
      系统允许调度程序根据某种原则, 取暂停某个正在执行的进程, 将已分配个该进程的处理机重新分配给另一进程.
      "抢占"时应遵循一定的原则:
      • 优先权原则
      • 短进程优先原则
      • 时间片原则

       方式

    2.1、选取原则

    • 资源利用率--使得CPU或者其他资源的利用率尽可能的高且能够并行工作
    • 响应时间--使交互式用户的响应时间尽可能的小,或者尽快处理实时任务
    • 周转时间---批处理用户从作业提交给系统开始到作业完成获得结果为止的这段时间间隔称作业周转时间,应该使作业周转时间或作业平均周转时间尽可能短。
    • 吞吐量---使得单位时间处理的作业数尽可能多。
    • 公平性---确保每个用户每个进程获得合理的 CPU份额或其他资源份额。

    批处理系统的调度性能主要用作业周转时间和作业带权周转时间来衡量。如果作业i提交给系统的时刻是ts,完成时刻是tf,则其周转时间为:
    ti=tf-ts
    即作业在系统中的等待时间和运行时间之和

    从操作系统来说,为提高系统的性能,让若干用户的平均作业周转时间和平均带权周转时间最小:
    平均作业周转时间 T=(Σti)/n

    如果作业 i 的周转时间为 ti,所需运行时间为 tk,则称 wi=ti/tk 为该作业的带权周转时间。因为,ti 是等待时间与运行时间之和,故带权周转时间总大于 1。
    平均作业带权周转时间 W = (Σwi) / n

    通常,用平均作业周转时间来衡量对同一作业流施行不同作业调度算法时,它们呈现的调度性能;用平均作业带权周转时间来衡量对不同作业流施行同一作业调度算法时,它们呈现的调度性能。这两个数值均越小越好。

    典型的调度算法

    非剥夺方式

    分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生某事件而阻塞时,才把处理机分配给另一个进程。

    3、批处理作业的管理与调度

    多道批处理操作系统采用脱机控制方式,它具体独立的作业管理模块,为了有效管理作业,为每一个作业建立作业控制块。每个作业的生命周期内都顺序的处于以下四个状态:

    1. 输入状态:此时作业的信息正在从输入设备上预输入
    2. 后备状态:此时作业预输入结束但尚未被选中执行
    3. 执行状态:作业已经被选中并构成进程去,竞争处理器资源以获取运行
    4. 完成状态:作业以及运行结束,正在等待缓输出

    多道批处理操作系统的处理机调度,至少包括作业调度和进程调度。

    新葡亰496net 1

    image.png

    先来先服务调度算法(first-come first-served):

    即FCFS调度算法, 既可用于作业调度, 也可用于进程调度. 系统按照作业到达的先后次序(优先考虑在就绪队列中等待时间最长的作业)进行调度.
    缺点:未考虑作业的紧迫程度, 只能顺序运行

    剥夺方式

    当一个进程正在运行时,系统可以基于某种原则,剥夺已分配给它的处理机,将之分配给其它进程。剥夺原则有:优先权原则、短进程优先原则、时间片原则。

    例如,有三个进程P1、P2、P3先后到达,它们分别需要20、4和2个单位时间运行完毕。

    假如它们就按P1、P2、P3的顺序执行,且不可剥夺,则三进程各自的周转时间分别为20、24、26个单位时间,平均周转时间是23.33个时间单位。

    假如用时间片原则的剥夺调度方式,可得到:P1、P2、P3的周转时间分别为26、10、6个单位时间(假设时间片为2个单位时间),平均周转时间为14个单位时间。

    衡量进程调度性能的指标有:周转时间、响应时间、CPU-I/O执行期。

    3.1、 批处理作业的调度方法

    对成批进入系统的用户作业,按一定的策略选取若干个作业使它们可以去获得处理器运行,这项工作称为作业调度。

    短作业(进程)优先的调度算法(short job first):

    为短作业而设立, 因为操作系统中大多为短作业.系统在作业运行时, 选出运行时间最短的作业将其调入内存.

    1. SJF(不可抢占):算法以作业的长短(作业需要运行的时间)来计算优先级, 作业越短, 其优先级越高.
    2. SPF(可抢占):同上, 但是当有作业优先级较高时, 便可以抢占资源优先执行.

    缺点:

    • 必须预知作业的运行时间
    • 对作业程不利
    • 无法实现人机交互
    • 没有考虑到作业的紧迫程度

        算法

    3.1.1、 先来先服务算法(FCFS )

    此种方法,按照作业进入系统的先后顺序来挑选作业,考虑了作业等待时间,而未考虑作业要求服务时间的长短。此种不利于短作业而优化了长作业。
    例如:下面三个作业同时到达系统并立即进入调度:

              作业名    所需 CPU 时间
              作业1        28
              作业2        9
              作业3        3                           
    

    假设系统中没有其他作业,现采用 FCFS 算法进行:

       平均作业周转时间: T=(28 (28 9) (28 9 3))/3=35
    

    优先级调度算法(priority-scheduling algorithm):

    PSA算法基于作业的紧迫程度, 由外部赋予作业相应的优先级, 根据作业优先级进行调度.

    3.1.2、 最短作业优先算法(SJF)

    此种方法已进入系统的作业所提出运算的计算时间为标准,选取估计计算时间最短的作业投入运行。它忽略了作业等待时间,且估算作业时间并不容易;

    例如:下面四个作业同时到达系统并立即进入调度:

              作业名    所需 CPU 时间
              作业1        9
              作业2        4
              作业3        10  
              作业4        8                             
    

    假设系统中没有其他作业,现采用 SJF 算法进行: 此时作业调度顺序为: 2--4--1--3

       平均作业周转时间: T=(4 (4 8) (4 8 9) (4 8 9 10))/4=17
       平均带权作业周转时间:W=(4/4 (4 8)/8 (4 8 9)/9 (4 8 9 10)/10)/4=1.98
    

    而采用FCFS调度算法:

       平均作业周转时间: T=(9 13 23 31)/4=19
       平均带权作业周转时间:W=(9/9 13/4 23/10 31/8)/4=2.51
    

    对比可以看出,SJF算法较FCFS调度算法,性能较好;

    高响应闭优先调度算法(highest request ratio next):

    HRRN算法即考虑了作业的等待时间, 又考虑了作业运行时间. 为没有作业引入一个动态优先级:

    优先权 = (等待时间 要求服务时间) / 要求服务时间

    可缩写为:

    R = 响应时间 / 要求服务时间

    特点:

    1. 作业等待时间相同, 则要求服务时间越短, 优先权越高越, 类似于SJF算法, 有利于短作业
    2. 作业要求服务时间相同时, 则作业等待时间约长, 优先权越高, 类似于FCFS算法, 有利于长作业
    3. 对于长作业(要求服务时间长), 随着等待的时间足够长, 也可获得较高的优先级. 不会一直等下去.

    一、先来先服务和短作业(进程)优先调度算法

    3.1.3、 响应比最高者有限算法(HRN)

    前面两者的调度算法都比较片面,而HRN算法使两者的折衷算法。
    响应比=已等待时间/估计计算时间
    限显然,计算时间短的作业容易得到较高的响应比,此算法优待短作业

    例如:下面四个作业同时到达系统并立即进入调度:

              作业名    所需 CPU 时间       到达时间
              作业1        20                0
              作业2        15                5
              作业3        5                 10
              作业4        10                15             
    

    假设系统中没有别的作业,现对实施SJF调度算法,此时作业调度顺序为:1--3--4--2

       平均作业周转时间: T=(20 15 20 45)/4=25
       平均带权作业周转时间:W=(20/20 15/5 25/10 45/15)/4=2.25
    

    如果对它们施行 FCFS 调度算法,

       平均作业周转时间 T = (20 30 30 35)/4 = 38.75
       平均带权作业周转时间 W = (20/20 30/15 30/5 35/10)/4 = 3.13 
    

    采用HRN算法:

    • 开始只有作业1,作业1被选中,执行时间20
    • 作业1执行完毕后,响应比依次为15/15,10/5,5/10,作业3被选中,执行时间为5
    • 作业 3 执行完毕后,响应比依次为 20/15、10/10,作业 2 被选中,执行时间 15;
    • 作业 2 执行完毕后,作业 4 被选中,执行时间 10;
       平均作业周转时间 T = (20 15 35 35)/4 = 26.25
       平均带权作业周转时间 W = (20/20 15/5 35/15 35/10)/4 = 2.42 
    

    时间片轮转调度算法(RR)

    原理: 系统根据FCFS策略将所有的就绪进程排成一个就绪队列, 并设置每隔一段时间产生依次中断, 激活系统中的进程调度程序, 完成依次调度, 将cpu分配给新的队首进程(或新到达的紧迫进程).

    进程切换

    1. 若一个时间片尚未用完, 正在运行的进程便已完成, 则立即激活调度程序, 将其从执行队列中删除, 在调度就绪队列的队首进程运行, 并启动一个新的时间片.
    2. 在一个时间片用完时, 计时中断处理程序被激活, 如果进程尚未运行完毕, 则调度程序将它送往就绪队列末尾, 并调度就绪队列的队首进程运行, 并启动新时间片.

    注意新葡亰496net:进程调度总结,操作系统。:时间片选取过小, 则将频繁的执行进程调度和进程长下文切换, 增加系统开销; 时间片选取过长, 则RR算法退化为FCFS算法, 无法满足短作业和交互式用户需求. 时间片应选取略大于依次典型的交互所需要的时间, 是大多数进程在一个时间片内完成.

    1.先来先服务调度算法

    先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。

    3.1.4、 优先数法

    根据确定的优先数来选取作业,每次总选择优先级高的作业。

    多级反馈队列调度算法(multileved feedback queue):

    1. 设置多个就绪队列, 并为每个队列赋予不同的优先级, 优先级越高的队列其时间片越小.优先级最高的队列最先进入待调度的队列
    2. 队列之间采用FCFS调度算法.只有高优先级队列中的全部进程完成时才调度下一队列
    3. 队列内的进程按照轮转算法调度.新进程进入内存后首先进入优先级最高的队列
    4. 在低优先级队列运行时, 若有新进程到达, 那么在运行完这个时间片后,CPU马上分配给新到达的作业(抢占式)。

    2.短作业(进程)优先调度算法

    短作业(进程)优先调度算法SJ(P)F,是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程优先(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。

    3.1.5、分类调度算法

    分类调度算法按照一定的原则将作业划分为若干类,以达到均衡使用操作系统的资源和兼顾大小作业的目的。分类原则包括作业计算时间、对内存的需求、对外围设备的需求等。作业调度时还可以为每类作业设置优先级,从而照顾到同类作业中的轻
    重缓急。

    实时系统中的进程调度算法

    实时系统是指系统能及时响应外部事件的请求并及时处理这些请求.基于这一特性, 实时系统在工业(武器)控制, 多媒体等系统中常见.
    实时系统中通分为存在一个截止时间, 硬实时任务(HRT)要求在开始截止时间前必须执行, 在结束截止时间前必须结束. 软实时任务同上, 但并不严格.
    在实时系统中有两类算法值得注意:最早截止时间优先算法(Earliest Deadline First)和最低松弛度优先算法(Least Laxity First).两类算法都可用抢占式和非抢占式调度, 但后者常用于抢占式调度.
    在m个周期性的实时调度中, 每个实时任务的处理时间(C_i), 周期时间(P_i), 在但处理机的情况下, 需满足条件:$sum_{i=1}^mfrac{C_i}{P_i} (小于1; 多处理机条件下, 须满足条件)sum_{i=1}^mfrac{C_i}{P_i} $小于N, N为处理机数量.

    二、高优先权优先调度算法

    4、进程调度

    进程调度又称为低级调度,其负责将处理器分配给进程 。

    • 记录进程的状态
    • 记录某个进程什么时候获取处理器,以及占用多长时间
    • 把处理器分配给进程
    • 收回处理器

    最早截止时间优先算法(EDF)

    该算法在实时系统中根据任务的截止时间确定其优先级.

    1. 非抢占式

    2. 抢占式

    1.优先权调度算法的类型

          为了照顾紧迫型作业,使之在进入系统后便获得优先处理,引入了最高优先权优先(FPF)调度算法。此算法常被用于批处理系统中,作为作业调度算法,也作为多种操作系统中的进程调度算法,还可用于实时系统中。当把该算法用于作业调度时,系统将从后备队列中选择若干个优先权最高的作业装入内存。当用于进程调度时,该算法是把处理机分配给就绪队列中优先权最高的进程,这时,又可进一步把该算法分成如下两种。

    1) 非抢占式优先权算法

          在这种方式下,系统一旦把处理机分配给就绪队列中优先权最高的进程后,该进程便一直执行下去,直至完成;或因发生某事件使该进程放弃处理机时,系统方可再将处理机重新分配给另一优先权最高的进程。这种调度算法主要用于批处理系统中;也可用于某些对实时性要求不严的实时系统中。

    2) 抢占式优先权调度算法

          在这种方式下,系统同样是把处理机分配给优先权最高的进程,使之执行。但在其执行期间,只要又出现了另一个其优先权更高的进程,进程调度程序就立即停止当前进程(原优先权最高的进程)的执行,重新将处理机分配给新到的优先权最高的进程。因此,在采用这种调度算法时,是每当系统中出现一个新的就绪进程i 时,就将其优先权Pi与正在执行的进程j 的优先权Pj进行比较。如果Pi≤Pj,原进程Pj便继续执行;但如果是Pi>Pj,则立即停止Pj的执行,做进程切换,使i 进程投入执行。显然,这种抢占式的优先权调度算法能更好地满足紧迫作业的要求,故而常用于要求比较严格的实时系统中,以及对性能要求较高的批处理和分时系统中。

    4.1、进程调度算法

    1. 新葡亰496net:进程调度总结,操作系统。先来先服务算法

    2. 时间片轮转算法:又称为时间片调度。具体做法是调度程序每次把 CPU 分配给就绪队列首进程使用一个时间片,例100ms,就绪队列中的每个进程轮流地运行一个这样的时间片。当这个时间片结束时,就强迫一个进程让出处理器,让它排列到就绪队列的尾部,等候下一轮调度。实现这种调度要使用一个间隔时钟,例如,当一个进程开始运行时,就将时间片的值置入间隔时钟内,当发生间隔时钟中断时,就表明该进程连续运行的时间已超过一个规定的时间片。此时,中断处理程序就通知处理器调度进行处理器的转换工作。这种调度策略可以防止那些很少使用外围设备的进程过长的占用处理器而使得要使用外围设备的那些进程没有机会去启动外围设备。

    3. 优先权调度,每个进程给出一个优先数,调度每次选择就绪进程中优先数最大者,让它占用处理器运行。

    4. 多级反馈队列调度,又称之为反馈循环队列。其主要思想是将就绪进程分为两级或多级,系统相应建立两个或多个就绪进程队列,较高优先级的队列一般分配给较短的时间片。处理器调度每次先从高级的就绪进程队列中选取可占有处理器的进程,只有在选不到时,才从较低级的就绪进程队列中选取

      新葡亰496net 2

      image.png

    5. 保证调度算法,一种完全不同的调度算法是向用户做出明确的性能保证,然后去实现它。为了实现所作的保证,系统必须跟踪各个进程自创建以来已经使用了多少 CPU 时间。然后它计算各个进程应获得的 CPU 时间,即自创建以来的时间除以 n。由于各个进程实际获得的 CPU 时间已知,所以很容易计算出实际获得的 CPU 时间和应获得的CPU 时间之比,于是调度将转向比率最低的进程。

    6. 彩票调度算法,为进程发放针对系统各种资源(如 CPU 时间)的彩票。当调度程序需要做出决策时,随机选择一张彩票,持有该彩票的进程将获得系统资源。对于 CPU调度,系统可能每秒钟抽 50 次彩票,每次中奖者可以获得 20ms 的运行时间。

    最低松弛度优先算法(LLF)

    在该法中根据任务的紧急程度(松弛程度)赋予其优先级, 越紧急的任务优先级越高.

    任务的松弛程度 = 必须完成时间 - 其本身运行时间 - 当前时间

    系统的任务按照松弛度排成一个就绪队列, 松弛度低的任务排在队列前面, 即调度程序优先执行.

    2.高响应比优先调度算法

          在批处理系统中,短作业优先算法是一种比较好的算法,其主要的不足之处是长作业的运行得不到保证。如果我们能为每个作业引入前面所述的动态优先权,并使作业的优先级随着等待时间的增加而以速率a 提高,则长作业在等待一定的时间后,必然有机会分配到处理机。

          由于等待时间与服务时间之和就是系统对该作业的响应时间,故该优先权又相当于响应比RP。

    由上式可以看出:

    (1) 如果作业的等待时间相同,则要求服务的时间愈短,其优先权愈高,因而该算法有利于短作业。

    (2) 当要求服务的时间相同时,作业的优先权决定于其等待时间,等待时间愈长,其优先权愈高,因而它实现的是先来先服务。

    (3) 对于长作业,作业的优先级可以随等待时间的增加而提高,当其等待时间足够长时,其优先级便可升到很高,从而也可获得处理机。简言之,该算法既照顾了短作业,又考虑了作业到达的先后次序,不会使长作业长期得不到服务。因此,该算法实现了一种较好的折衷。当然,在利用该算法时,每要进行调度之前,都须先做响应比的计算,这会增加系统开销。

    4.2、 分时调度

    实时系统是那些时间因素非常关键的系统。通常分为硬实时系统和软实时系统。前这意味着存在必须满足的时间限制,后则意味着偶尔超过时间限制可以容忍的。

    三、基于时间片的轮转调度算法

    5、多处理器的调度算法

    大量的实验数据证明,随着处理器数目的增多,复杂进程调度算法的有效性却逐步下降。因此在大多数采取动态分配策略的多处理器系统中,进程调度算法往往采用最简单的先来先服务算法或优先数算法,就绪进程组成一个队列或多个按照优先数排列的队列。
    多处理器调度算法主要研究线程调度算法

    1.时间片轮转法

    1) 基本原理

          在早期的时间片轮转法中,系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU 分配给队首进程,并令其执行一个时间片。时间片的大小从几ms 到几百ms。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程在一给定的时间内均能获得一时间片的处理机执行时间。换言之,系统能在给定的时间内响应所有用户的请求。

    5.1、均分负载调度算法

    均分负载(load sharing)调度算法的基本思想是:进程并不分配给一个处理器,系统维护一个就绪线程队列,当一个处理器空闲时,就选择一个就绪线程占有处理器运行。这一算法有如下优点:

    • 把负载均分到所有的可用处理器上,保证了处理器效率的提高。
    • 不需要一个集中的调度程序,一旦一个处理器空闲,操作系统的调度程序就可以运行在该处理器上以选择下一个运行的线程。
    • 运行线程的选择可以采用各种可行的策略(雷同与前面介绍的各种进程调度算法)。

    这一算法也有一些不足:

    • 就绪线程队列必须被互斥访问,当系统包括很多处理器,并且同时有多个处理器同时挑选运行线程时,它将成为性能的瓶颈。
    • 被抢占的线程很难在同一个处理器上恢复运行,因此当处理器带有高速缓存时,恢复高速缓存的信息会带来性能的下降。
    • 如果所有的线程都被放在一个公共的线程池中的话,所有的线程获得处理器的机会是相同的。如果一个程序的线程希望获得较高的优先级,进程切换将导致性能的折衷。

    2.多级反馈队列调度算法

          前面介绍的各种用作进程调度的算法都有一定的局限性。如短进程优先的调度算法,仅照顾了短进程而忽略了长进程,而且如果并未指明进程的长度,则短进程优先和基于进程长度的抢占式调度算法都将无法使用。而多级反馈队列调度算法则不必事先知道各种进程所需的执行时间,而且还可以满足各种类型进程的需要,因而它是目前被公认的一种较好的进程调度算法。在采用多级反馈队列调度算法的系统中,调度算法的实施过程如下所述。

    (1) 应设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低。该算法赋予各个队列中进程执行时间片的大小也各不相同,在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小。例如,第二个队列的时间片要比第一个队列的时间片长一倍,……,第i 1个队列的时间片要比第i个队列的时间片长一倍。

    (2) 当一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第二队列的末尾,再同样地按FCFS原则等待调度执行;如果它在第二队列中运行一个时间片后仍未完成,再依次将它放入第三队列,……,如此下去,当一个长作业(进程)从第一队列依次降到第n队列后,在第队列便采取按时间片轮转的方式运行。

    (3) 仅当第一队列空闲时,调度程序才调度第二队列中的进程运行;仅当第1~(i-1)队列均空时,才会调度第i队列中的进程运行。如果处理机正在第i队列中为某进程服务时,又有新进程进入优先权较高的队列(第1~(i-1)中的任何一个队列),则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i队列的末尾,把处理机分配给新到的高优先权进程。

    5.2、群调度

    群调度(gang scheduling)算法的基本思想是:把一组相关的线程在同一时间一次性调度到一组处理器上运行

        实现

    引起原因

    • 正在执行的进程执行完毕或因发生某事件而不能再继续执行;

    • 执行中的进程因提出I/O请求而暂停执行;

    • 在进程通信或同步过程中执行了某种原语操作如P操作、阻塞、挂起原语等;

    • 在可剥夺式调度中,有比当前进程优先权更高的进程进入就绪队列;

    • 在时间片轮转法中,时间片完;

    △通常系统是按先来先服务或优先权形式来组织调度队列。

    其中,RQ为就绪队列指针,EP为运行队列指针。

       功能

    记录系统中所有进程的执行情况

    进程调度的具体功能可总结为如下几点:

          作为进程调度的准备,进程管理模块必须进程调度将系统中各进程的执行情况和状态特征记录在各进程的PCB表中。并且,根据各进程的状态特征和资源需求等、进程管理模块还将各进程的PCB表排成相应的队列并进行动态队列转接。进程调度模块通过PCB变化来掌握系统中存在的所有进程的执行情况和状态特征,并在适当的时机从就绪队列中选择出一个进程占据处理机。

    选择占有处理机的进程

          进程调度的主要功能是按照一定的策略选择—个处于就绪状态的进程,使其获得处理机执行。根据不同的系统设计目的,有各种各样的选择策略,例如系统开销较少的静态优先数调度法,适合于分时系统的轮转法(Round RoLin)和多级互馈轮转法(Round Robin with Multip1e feedback)等。这些选择策略决定了调度算法的性能。

    进行进程上下文切换

          —个进程的上下文(context)包括进程的状态、有关变量和数据结构的值、机器寄存器的值和PCB以及有关程序、数据等。一个进程的执行是在进程的上下文中执行。当正在执行的进程由于某种原因要让出处理机时,系统要做进程上下文切换,以使另一个进程得以执行。当进行上下文切换时点统要首先检查是否允许做上下文切换(在有些情况下,上下文切换是不允许的,例如系统正在执行某个不允许中断的原语时)。然后,系统要保留有关被切换进程的足够信息,以便以后切换回该进程时,顺利恢复该进程的执行。在系统保留了CPU现场之后,调度程序选择一个新的处于就绪状态的进程、并装配该进程的上下文,使CPU的控制权掌握在被选中进程手中。

        时机

    引起进程调度的原因有以下几类:

    进程调度发生在什么时机呢?这与引起进程调度的原因以及进程调度的方式有关。

    1. 正在执行的进程执行完毕。这时,如果不选择新的就绪进程执行,将浪费处理机资源。
    2. 执行中进程自己调用阻塞原语将自己阻塞起来进入睡眠等状态。
    3. 执行中进程调用了P原语操作,从而因资源不足而被阻塞;或调用了v原语操作激活了等待资源的进程队列。
    4. 执行中进程提出I/O请求后被阻塞。
    5. 在分时系统中时间片已经用完。
    6. 在执行完系统调用等系统程序后返回用户进程时,这时可看作系统进程执行完毕,从而可调度选择一新的用户进程执行。
    7. 就绪队列中的某进程的优先级变得高于当前执行进程的优先级,从而也将引发进程调度。

         以上都是在可剥夺方式下的引起进程调度的原因。在CPU执行方式是可剥夺时.还有两种占用CPU的方式

    可剥夺式 (可抢占式preemptive):就绪队列中一旦有优先级高于当前执行进程优先级的进程存在时,便立即发生进程调度,转让处理机。

    不可剥夺式 (不可抢占式non_preemptive):即使在就绪队列存在有优先级高于当前执行进程时,当前进程仍将占用处理机直到该进程自己因调用原语操作或等待I/O而进入阻塞、睡眠状态,或时间片用完时才重新发生调度让出处理机。

        上下切换

          进程上下文由正文段、数据段、硬件寄存器的内容以及有关数据结构等组成。硬件寄存器主要包括存放CPU将要执行的下条指令虚拟地址的程序计数器PC,指出机器与进程相关联的硬件状态的处理机状态寄存器PS,存放过程调用(或系统调用)时所传递参数的通用寄存器R以及堆栈指针寄存器S等。数据结构则包括PCB等在内的所有与执行该进程有关的管理和控制用表格、数组、链等。在发生进程调度时系统要做进程上下文切换。

    在进程(上下文)中切换的步骤

    1. 保存处理器的上下文,包括程序计数器和其它寄存器
    2. 用新状态和其它相关信息更新正在运行进程的PCB
    3. 把原来的进程移至合适的队列-就绪、阻塞
    4. 选择另一个要执行的进程
    5. 更新被选中进程的PCB
    6. 从被选中进程中重装入CPU 上下文

        性能评价

          进程调度虽然是在系统内部的低级调度,但进程调度的优劣直接影响作业调度的性能。那么,怎样评价进程调度的优劣呢?反映作业调度优劣的周转时间和平均周转时间只在某种程度上反映了进程调度的性能,例如,其执行时间部分中实际上包含有进程等待(包括就绪状态时的等待)时间,而进程等待时间的多少是要依靠进程调度策略和等待事件何时发生等来决定的。因此,进程调度性能的商量是操作系统设计的一个重要指标。

          我们说进程调度性能的衡量方法可分为定形和定量两种。在定形衡量方面,首先是调度的可靠性。包括一次进程调度是否可能引起数据结构的破坏等。这要求我们对调度时机的选择和保存CPU现场十分谨慎。另外,简洁性也是衡量进程调度的一个重要指标,由于调度程序的执行涉及到多个进程和必须进行上下文切换,如果调度程序过于繁琐和复杂,将会耗去较大的系统开销。这在用户进程调用系统调用较多的情况下,将会造成响应时间大幅度增加。

          进程调度的定量评价包括CPU的利用率评价、进程在就绪队列中的等待时间与执行时间之比等。实际上由于进程进入就绪队列的随机模型很难确定,而且进程上下文切换等也将影响进程的执行效率,LL而对进程调度进行解析是很困难的。一般情况下,大多利用模拟或测试系统响应时间的方法来评价进程调度的性能。

       实时系统

    综述

          实时系统与其他操作系统不同在于计算机要能及时响应外部事件的请求,在规定的严格时间内完成对该事件的处理,并控制所有实时设备和实时任务协调一致地工作,对于对时间要求严格性的不同,实时系统又分为硬实时系统和软实时系统,其中硬实时系统是指这种时限的要求是绝对的,任何一个实时任务都能够在时限之前完成;而软实时系统的要求就没有这么严格,允许偶尔有实时任务不满足时限的要求.实时系统一般用于嵌入式的系统中,分为实时过程控制和实时通信处理,其中实时过程控制主要用于工业控制,军事控制领域;时事通信用于电信,银行,飞机订票等领域,正是由于在这些特殊领域的运用使得实时操作系统设计时主要追求的是:对外部请求在严格时间范围内做出反应,有高可靠性和完备性.为达到时间要求,进程的调度策略就显得尤为重要.

    优先级

          最简单最直观的进程调度策略是基于优先级的调度,多数实时系统采用基于优先级的调度,每个进程根据它重要程度的不同被赋予不同的优先级,调度器在每次调度时,总选择优先级最高的进程开始执行.

          首先要考虑的问题是如何分配优先级,对于进程优先级的分配可以采用静态和动态两种方式,静态优先级调度算法:这种调度算法给那些系统中得到运行的所有进程都静态地分配一个优先级.静态优先级的分配可以根据应用的属性来进行,比如进程的周期,用户优先级,或者其它的预先确定的策略.单调率算法(RM)调度算法是一种典型的静态优先级调度算法,它根据进程的执行周期的长短来决定调度优先级,那些具有小的执行周期的进程具有较高的优先级.动态优先级调度算法:这种调度算法根据进程的资源需求来动态地分配进程的优先级,其目的就是在资源分配和调度时有更大的灵活性.在实时系统中,最早期限优先算法(EDF)算法是使用最多的一种动态优先级调度算法,该算法给就绪队列中的各个进程根据它们的截止期限(Deadline)来分配优先级,具有最近的截止期限的进程具有最高的优先级.

          分配好优先级之后下一个要考虑的问题是何时让高优先级进程掌握CPU的使用权,这取决于操作系统的内核,有不可抢占式和可抢占式两种.

    不可抢占式内核要求每个进程自我放弃CPU的所有权,各个进程彼此合作共享一个CPU.异步事件还是由中断服务来处理.中断服务可以使一个高优先级的进程由挂起状态变为就绪状态.但中断服务以后控制权还是回到原来被中断了的那个进程,直到该进程主动放弃CPU的使用权时,那个高优先级的进程才能获得CPU的使用权.这就出现了响应时间的问题,高优先级的进程已经进入了就绪状态但不能执行,这样进程的响应时间变得不再确定这与实时系统的要求不符,因此一般的实时操作系统都要求是可抢占式的内核,当一个运行着的进程使一个比它优先级高的进程进入了就绪态,当前进程的CPU使用权就被剥夺了,或者说被挂起了,那个高优先级的进程立刻得到了CPU的控制权,如果是中断服务子程序使一个高优先级的进程进入就绪态,中断完成时,中断了的进程被挂起,优先级高的那个进程开始运行.在这种内核设置下,多个进程可能处于并发的状态,这就出现了多个进程共享资源的情况,因此我们需要设置信号量来保证临界资源的正确使用,任何一个想使用临界资源的进程在进入临界区之前必须拥有使用临界资源的信号量,否则不可以执行临界区代码.

          这样基于优先级的可抢占式进程调度策略就基本架构完成,但此时仍然有系统崩溃的危险,假设系统中有3个进程,分别为p1,p2和p3. p1的优先权高于p2,而p2的优先权高于p3.恰在此时p1和p2 因某种原因被阻塞,这时候系统调度p3执行.p3执行一段时间后,p1被唤醒.由于采取的是PBP的调度策略,因此p1抢占 p3的CPU, p1执行.p1执行一段时间后要进入临界区,但此时p3占有此临界资源的信号量.因此p1被阻塞,处于等待状态,等待p3 释放此信号量.经过这么一段时间后,p2此时此刻处于就绪状态.因此系统调度p2执行.如果p3在p2的执行期间一直没有能够被调度执行的话,那p1和p3将一直等到p2执行完后才能执行,p1更要等到p3释放它所把持的信号量才能执行;而这段时间完全有可能超出p1的Deadline,使得p1崩溃.我们看到在这个过程中,由于临界资源的使用问题使得优先级低的进程先于优先级高的进程先执行,这就出现了优先级反转的问题,从而造成了系统崩溃,对于这个问题可以采用优先级继承的办法来进行解决.在优先级继承方案中,当高优先级进程在等待低优先级的进程占有的信号量时,让低优先级进程继承高优先级进程的优先级,即把低优先级进程的优先权提高到高优先级进程的优先级;当低优先级进程释放高优先级进程等待的信号量时,立即把其优先权降低到原来的优先权.采用这种方法可以有效地解决上面所述的优先权反转的问题.当高优先级进程p1想要进入临界区时,由于低优先级进程p3占有这个临界资源的信号量,导致p1被阻塞.这时候,系统把p3的优先权升到p1的优先权,此时优先权处于p1和p3之间的进程p2,即使处于就绪状态也不可以被调度执行,因为此时p3的优先权已经高于p2,所以p3此时被调度执行.当p3释放p1需要的信号量时,系统立即把p3的优先权降到原来的高度,来保证p1和p2正常有序执行,有许多实时系统是采用这种方法来防止优先级反转的,如VXWORKS.

    比例共享

          虽然基于优先级的调度简单而且易于实现,是目前使用最广泛的实时系统的进程调度策略,但对于一些软实时系统而言这种方法不再适用,比如实时多媒体会议,在这种情况下我们可以选择基于共享的进程调度算法,其基本思想就是按照一定的权重(比例)对一组需要调度的进程进行调度,让它们的执行时间与它们的权重完全成正比.我们可以通过两种方法来实现比例共享调度算法:第一种方法是调节各个就绪进程出现在调度队列队首的频率,并调度队首的进程执行;第二种做法就是逐次调度就绪队列中的各个进程投入运行,但根据分配的权重调节分配个每个进程的运行时间片.比例共享调度算法的一个问题就是它没有定义任何优先级的概念;所有的进程都根据它们申请的比例共享CPU资源,当系统处于过载状态时,所有的进程的执行都会按比例地变慢.所以为了保证系统中实时进程能够获得一定的CPU处理时间,一般采用一种动态调节进程权重的方法.

    时间

          对于那些具有稳定,已知输入的简单系统,可以使用时间驱动的调度算法,它能够为数据处理提供很好的预测性.这种调度算法本质上是一种设计时就确定下来的离线的静态调度方法.在系统的设计阶段,在明确系统中所有的处理情况下,对于各个进程的开始,切换,以及结束时间等就事先做出明确的安排和设计.这种调度算法适合于那些很小的嵌入式系统,自控系统,传感器等应用环境.这种调度算法的优点是进程的执行有很好的可预测性,但最大的缺点是缺乏灵活性,并且会出现有进程需要被执行而 CPU 却保持空闲的情况.

         对于不同要求下的实时系统可以采用不同的进程调度策略来进行设计,也可以将这些方法进行综合之后得到更适合的调度策略.

    本文由新葡亰496net发布于电脑系统,转载请注明出处:新葡亰496net:进程调度总结,操作系统

    关键词: