A. unix系统v的进程调度是采用怎样的调度算法完成的
答案为D。 多级反馈队列轮转法
调度算法(作业调度、进程调度)
1、先来先服务调度算法(FCFS)
按进入后备(或就绪)队列的先后选择目标作业(或进程)。
有利于长作业(进程),不利于短作业(进程)。
2、最短作业优先调度算法SJ(P)F
从后备(或就绪)队列中选择估计运行时间最短的作业(或进程) tn+1=a tn+(1-a) tn tn为实际值, tn为预测值
SJF有效地降低作业的平均等待时间,提高了系统的吞吐量。
对长作业(或进程)不利,可能死等,且未考虑作业的紧迫程度。
3、时间片轮转调度算法(进程调度)
系统将所有的就绪进程按先来先服务原则,排成一个队列,每次调度时把CPU分配给队首进程,令其执行一个时间片。
就绪队列中所有进程,在一个给定的时间内,均能获得一个时间片的处理机执行时间。T=nq
4、优先权调度算法
适用于作业调度和进程调度。
非抢占式、抢占式优先权调度算法
优先权类型:静态优先权、动态优先权
5、高响应比优先调度算法(作业调度)
响应比RP= 响应时间/要求服务时间=(等待时间+要求服务时间)/要求服务时间 = 1+等待时间/要求服务时间
同时到达的作业(等待时间相同),要求服务时间越短(短作业),响应比越高,有利于短作业。
要求服务时间相同的作业,等待时间越长,响应比越高,相当于先来先服务。
长作业在等待足够长时间后,响应比上升,也可被调度,避免长作业的死等。
每次调度需计算响应比,增加系统的开销。
6、多级队列调度
根据作业的性质或类型的不同,将就绪进程队列分成若干个子队列,各个作业固定分属于一个队列。每个队列采用各自的调度算法。
7、多级反馈队列调度算法
UNIX系统中的进程调度算法。
处理方法:
设置多个就绪队列,每个队列赋予不同的优先权(S1>S2……>Sn ),且各队列中进程执行的时间片的大小各不相同(q,2q……nq)。
新进程进入内存,首先放在S1的末尾,按FCFS排队调度,执行q时间片,若未完成,该进程转入S2,依次类推。
仅当Si空闲,才会调度Si+1中进程。
能较好地满足各种类型用户的需要。
B. 【linux内核】cpu时间片的概念
Linux内核中的CPU时间片是指CPU分配给各个进程或线程执行的时间段。以下是关于CPU时间片的详细解释:
定义与作用:时间片是操作系统为了公平分配CPU资源而引入的机制。每个进程或线程在执行时都会被分配一个固定的时间段,即时间片。在时间片内,该进程或线程可以独占CPU资源运行。当时间片用完后,CPU会切换到下一个进程或线程,从而实现宏观上的多任务并行处理。
实现原理:Linux内核采用时间片轮转法来实现进程调度。系统将所有就绪进程按先入先出原则排成队列,每次调度时选取队首进程执行一个时间片。当进程用完时间片后,CPU会切换给下一个就绪队列的队首进程。这种机制确保了所有进程都能获得公平的处理机执行时间。
时间片长度:时间片的大小对系统性能有显着影响。在Linux/Unix系统中,时间片长度通常为5至800毫秒不等,具体取决于系统配置。过短的时间片会导致过多的进程切换,增加系统开销;而过长的时间片则可能影响交互式请求的响应速度。因此,在实践中通常会选择一个平衡点,如100毫秒左右,以达到较好的系统性能。
进程切换:当进程在时间片结束前阻塞或结束时,CPU会当即进行切换,将CPU资源分配给下一个就绪进程。这种切换需要一定的时间开销,包括保存当前进程的状态、加载下一个进程的状态等。因此,时间片的设置需要权衡进程切换开销和CPU使用效率之间的关系。
应用场景:时间片轮转调度算法主要用于分时系统中的进程调度。在分时系统中,多个用户同时请求CPU资源时,通过时间片轮转法可以确保每个用户都能获得公平的处理时间,从而提高系统的整体性能和用户体验。
C. linux进程调度的三种策略是什么
linux内核的三种主要调度策略:
1,SCHED_OTHER 分时调度策略,
2,SCHED_FIFO实时调度策略,先到先服务
3,SCHED_RR实时调度策略,时间片轮转
实时进程将得到优先调用,实时进程根据实时优先级决定调度权值。分时进程则通过nice和counter值决定权值,nice越小,counter越大,被调度的概率越大,也就是曾经使用了cpu最少的进程将会得到优先调度。
SHCED_RR和SCHED_FIFO的不同:
当采用SHCED_RR策略的进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平。
SCHED_FIFO一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃。
如果有相同优先级的实时进程(根据优先级计算的调度权值是一样的)已经准备好,FIFO时必须等待该进程主动放弃后才可以运行这个优先级相同的任务。而RR可以让每个任务都执行一段时间。
相同点:
RR和FIFO都只用于实时任务。
创建时优先级大于0(1-99)。
按照可抢占优先级调度算法进行。
就绪态的实时任务立即抢占非实时任务。
所有任务都采用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。
系统中既有分时调度,又有时间片轮转调度和先进先出调度:
1,RR调度和FIFO调度的进程属于实时进程,以分时调度的进程是非实时进程。
2,当实时进程准备就绪后,如果当前cpu正在运行非实时进程,则实时进程立即抢占非实时进程。
3,RR进程和FIFO进程都采用实时优先级做为调度的权值标准,RR是FIFO的一个延伸。FIFO时,如果两个进程的优先级一样,则这两个优先级一样的进程具体执行哪一个是由其在队列中的未知决定的,这样导致一些不公正性(优先级是一样的,为什么要让你一直运行?),如果将两个优先级一样的任务的调度策略都设为RR,则保证了这两个任务可以循环执行,保证了公平。
Ingo Molnar-实时补丁
为了能并入主流内核,Ingo Molnar的实时补丁也采用了非常灵活的策略,它支持四种抢占模式:
1.No Forced Preemption (Server),这种模式等同于没有使能抢占选项的标准内核,主要适用于科学计算等服务器环境。
2.Voluntary Kernel Preemption (Desktop),这种模式使能了自愿抢占,但仍然失效抢占内核选项,它通过增加抢占点缩减了抢占延迟,因此适用于一些需要较好的响应性的环境,如桌面环境,当然这种好的响应性是以牺牲一些吞吐率为代价的。
3.Preemptible Kernel (Low-Latency Desktop),这种模式既包含了自愿抢占,又使能了可抢占内核选项,因此有很好的响应延迟,实际上在一定程度上已经达到了软实时性。它主要适用于桌面和一些嵌入式系统,但是吞吐率比模式2更低。
4.Complete Preemption (Real-Time),这种模式使能了所有实时功能,因此完全能够满足软实时需求,它适用于延迟要求为100微秒或稍低的实时系统。
实现实时是以牺牲系统的吞吐率为代价的,因此实时性越好,系统吞吐率就越低。