调研调度算法

 调度算法:

        根据系统的资源分配策略所规定的资源分配算法。对于不同的的系统和系统目标,通常采用不同的调度算法,例如,在批处理系统中,为了照顾为数众多的段作业,应采用短作业优先的调度算法;又如在分时系统中,为了保证系统具有合理的响应时间,应当采用轮转法进行调度。目前存在的多种调度算法中,有的算法适用于作业调度,有的算法适用于进程调度;但也有些调度算法既可以用于作业调度,也可以用于进程调度。

调度算法的要求:

      高资源利用率、高吞吐量、用户满意等原则。

1.批处理系统:增加系统吞吐量和提高系统资源的利用率;

2.分时系统:保证每个分时用户能容忍的响应时间。

3.实时系统:保证对随机发生的外部事件做出实时响应。

先来先服务(FCFS)

先来先服务(FCFS, First Come First Serve)是最简单的调度算法,按先后顺序进行调度。

1. FCFS算法

按照作业提交或进程变为就绪状态的先后次序,分派CPU; 当前作业或进程占用CPU,直到执行完或阻塞,才出让CPU(非抢占方式)。 在作业或进程唤醒后(如I/O完成),并不立即恢复执行,通常等到当前作业或进程出让CPU。最简单的算法。

2. FCFS的特点

比较有利于长作业,而不利于短作业。 有利于CPU繁忙的作业,而不利于I/O繁忙的作业。

         

轮转法(Round Robin)

轮转法(Round Robin)是让每个进程在就绪队列中的等待时间与享受服务的时间成正比例。

1. 轮转法

将系统中所有的就绪进程按照FCFS原则,排成一个队列

每次调度时将CPU分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。

在一个时间片结束时,发生时钟中断

调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前的队首进程。? 进程可以未使用完一个时间片,就出让CPU(如阻塞)。

2. 时间片长度的确定

多级反馈队列算法

多级反馈队列算法时间片轮转算法和优先级算法的综合和发展。优点:2 为提高系统吞吐量和缩短平均周转时间而照顾短进程。2 为获得较好的I/O设备利用率和缩短响应时间而照顾I/O型进程。2 不必估计进程的执行时间,动态调节。

1. 多级反馈队列算法2 设置多个就绪队列,分别赋予不同的优先级,如逐级降低,队列1的优先级最高。每个队列执行时间片的长度也不同,规定优先级越低则时间片越长,如逐级加倍。2 新进程进入内存后,先投入队列1的末尾,按FCFS算法调度;若按队列1一个时间片未能执行完,则降低投入到队列2的末尾,同样按FCFS算法调度;如此下去,降低到最后的队列,则按“时间片轮转”算法调度直到完成。2 仅当较高优先级的队列为空,才调度较低优先级的队列中的进程执行。如果进程执行时有新进程进入较高优先级的队列,则抢先执行新进程,并把被抢先的进程投入原队列的末尾。

2. 几点说明

时间片长度变化的影响2 过长->退化为FCFS算法,进程在一个时间片内都执行完,响应时间长。2 过短->用户的一次请求需要多个时间片才能处理完,上下文切换次数增加,响应时间长。

对响应时间的要求:T(响应时间)=N(进程数目)*q(时间片)

就绪进程的数目:数目越多,时间片越小

系统的处理能力:应当使用户输入通常在一个时间片内能处理完,否则使响应时间,平均周转时间和平均带权周转时间延长。

linux进程调度算法

实时进程将得到优先调用,实时进程根据实时优先级决定调度权值,分时进程则通过nice和counter值决

定权值,nice越小,counter越大,被调度的概率越大,也就是曾经使用了cpu最少的进程将会得到优先调

度。

所有任务都采用linux分时调度策略时。

1. 创建任务指定采用分时调度策略,并指定优先级nice值(-20~19)。

2. 将根据每个任务的nice值确定在cpu上的执行时间(counter)。

3. 如果没有等待资源,则将该任务加入到就绪队列中。

4. 调度程序遍历就绪队列中的任务,通过对每个任务动态优先级的计算(counter+20-nice)结果,选择

计算结果最大的一个去运行,当这 个时间片用完后(counter减至0)或者主动放弃cpu时,该任务将被放在

就绪队列末尾(时间片用完)或等待队列(因等待资源而放弃cpu)中。

5. 此时调度程序重复上面计算过程,转到第4步。

6. 当调度程序发现所有就绪任务计算所得的权值都为不大于0时,重复第2步。

所有任务都采用FIFO时:

1. 创建进程时指定采用FIFO,并设置实时优先级rt_priority(1-99)。

2. 如果没有等待资源,则将该任务加入到就绪队列中。

3. 调度程序遍历就绪队列,根据实时优先级计算调度权值(1000+rt_priority),选择权值最高的任务使用

cpu,该FIFO任务将一直占有cpu直到有优先级更高的任务就绪(即使优先级相同也不行)或者主动放弃(等

待资源)。

4. 调度程序发现有优先级更高的任务到达(高优先级任务可能被中断或定时器任务唤醒,再或被当前运行

的任务唤醒,等等),则调度程序立即在当前任务 堆栈中保存当前cpu寄存器的所有数据,重新从高优先级

任务的堆栈中加载寄存器数据到cpu,此时高优先级的任务开始运行。重复第3步。

5. 如果当前任务因等待资源而主动放弃cpu使用权,则该任务将从就绪队列中删除,加入等待队列,此时

重复第3步。

所有任务都采用RR调度策略时

1. 创建任务时指定调度参数为RR,并设置任务的实时优先级和nice值(nice值将会转换为该任务的时间片

的长度)。

2. 如果没有等待资源,则将该任务加入到就绪队列中。

3. 调度程序遍历就绪队列,根据实时优先级计算调度权值(1000+rt_priority),选择权值最高的任务使用

cpu。

4. 如果就绪队列中的RR任务时间片为0,则会根据nice值设置该任务的时间片,同时将该任务放入就绪队

列的末尾。重复步骤3。

5. 当前任务由于等待资源而主动退出cpu,则其加入等待队列中。重复步骤3。

猜你喜欢

转载自blog.csdn.net/Amour_Old_flame/article/details/83113627