是否有可能改变硬件定时器的时间与调度器的帮助下或以某种方式在运行时?

问题描述 投票:-1回答:1

我学习在操作系统的入门课程,我是试图建立一个调度器可以给一个很好的权衡过程的周转时间和响应时间之间。

我想知道我是否能够改变定时器中断的间隔。如果我能做到这一点,也许我可以不同的定时器时间间隔之间相对于在给定的时间间隔更大完成该工序数进行切换。例如,如果我完成过去10毫秒7个处理,定时器的时间间隔为10毫秒,并且因此切换到15毫秒,一个响应调度器之间进行切换,以最小化周转时间,并因此获得更好的平均值两者的调度器。

谢谢。

operating-system hardware scheduler
1个回答
0
投票

让我们将这个分成多个部分,..

计时器

很多现代的内核是“滴答”。这意味着(而不是具有定时器以固定频率产生IRQ)定时器/ s的在操作“一步法”模式(一个IRQ时产生的请求的时间的流逝)和内核确定时,下一次事件需要出现,将其设定为当进行下一次时间事件的IRQ。这种方法对电源管理的好处(没有不必要的IRQ碰撞闲置的CPU / s的出节电状态)和精密的好处(例如,如果计时器发生过1 MHz的时钟运行,那么内核可以要求定时器的IRQ与没有具有百万的IRQ的开销1个微秒粒度它会带以获得具有固定的频率相同的粒度)。当然也有对定时器很多用途(网络超时,睡眠()等),因此,“最快的时间事件”可能什么都没有做,当当前任务已经消耗了它的时间片。

注:现代的硬件也可以有定时器/ s的CPU的频率(例如“TSC期限模式”,在最近的80×86芯片的本地APIC定时器),其中“滴答”意味着你通常可以得到“好于1纳秒”精确运行。

当然对于“滴答”的,因为内核设置一个新的计定时器(为新的“最快”时间事件)每个IRQ发生时,这是非常容易的调度使用它喜欢的任何原因,任何时间片长度它喜欢。

任务切换的原因

对于一个真正的操作系统,大多数任务开关造成的,因为当前正在运行的任务必须等待的东西(等待从文件或交换空间数据,等待来自网络的数据包,等待缓冲成为“不完整的”,所以它。可以把更多的数据放入它,等待数据从另一个进程经由到达管道或消息,等待互斥被释放等);或者是因为一些任务在等待发生。调度的计时器只对有恶意占用大量CPU资源和稀有的CPU密集型任务不需要等待任何提供一个上限。

需要注意的是(对于像使用固定频率定时轮询调度)这会导致问题。例如,如果每个任务都有一个10 ms的时间片,而是一个任务切换有因为任务必须等待的东西后4.321毫秒出现,那么你不想浪费的CPU时间5.679毫秒等待下一次定时器IRQ,但你也不想给下一个任务5.679毫秒,而不是10毫秒它应该得到的。相反,你可能会配置定时器产生一个IRQ每隔1毫秒,这样接下来的任务就交给时间可以四舍五入到最接近的(例如给下一个任务9.679毫秒,而不是5.679毫秒,而不是10毫秒)。然而,这增加的处理不必要的IRQ开销,并会降低性能,并且是原因之一使用“滴答”(摆脱不必要的IRQ和减少“轮最近的”错误)。

潜伏期轮循

对于轮转调度“负载下的延迟”是一个残缺的笑话,这已无关的定时器。问题是,需要低延迟的任务必须等待一个未知数量的其他任务有轮到自己。例如,如果有,都应该起床的每个CPU时间10毫秒200个任务,每个这些200个任务实际消耗的每个CPU时间5毫秒的平均(因为大多数块/等待一些自己的时间切片的前结束);那么,“低延迟”的任务可能要等待长达1000毫秒它获得CPU时间之前。改变从10毫秒到5毫秒的定时器的时间间隔可能意味着这200个任务消耗的4毫秒,而本“低延迟”的任务仍然必须等待800毫秒CPU时间的平均值。

注:从理论上讲,为了避免这个问题的一种办法是把最近停在头等待“的任务变得下一CPU时间”列表中,使其尽快获得CPU时间为当前正在运行的任务完成使用CPU的任务。在实践中,这允许一个任务在每个时间片结束等待极其简单故意霸占CPU时间,迅速得到了一个全新的时间片,并通过一对协作任务的恶意软件可以确保没有其他任务,不断得到任何CPU时间。出于这个原因,你从来没有把一个任务在头“的任务变得下一CPU时间”名单。

任务优先级

如果你分配一个优先给每个任务,让调度知道一个任务有多么重要?

在这种情况下,如果一个任务需要低延迟你可以告诉它具有高优先级调度,而当任务停止等待的东西(如等待用户按一个键,等待网络数据包到达,等)调度可以在任务的优先级比较当前正在运行的任务的优先级,实现了“低延迟”任务具有更高的优先级,并立即做任务切换(无需等待其他200个任务有自己的圈)。在这种情况下,延迟可能是“几乎为零”,即使在操作系统下重的负载。

这样也制造了潜在的问题(高优先级的CPU猪),但问题是微不足道的其他方式来解决(例如,如果一个高优先级任务需要太多的CPU时间,而不做任何事情,可能会导致其堵塞/等待,或者减少其优先级或终止其为“反应迟钝”)。

如果你看一下在现代操作系统的调度,你会发现,他们没有单独使用循环赛。通常,“循环”只有当两个以上的任务具有相同的优先级使用(但不是一个真正的好主意,我会告诉你为什么在下一节)。此外,大多数操作系统都提供了多种调度策略(例如,也许一个OS可以提供​​使用“最早截止”软实时调度策略,加上采用“最高优先赢”一“低延迟”调度策略,再加上“一般用”可能会利用政策‘优先级决定多少时间切片’,再加上一个‘空闲任务’可能使用政策‘优先级决定时间片’)的大小;其中调度给CPU时间与最好的政策任务(例如,如果有想要的CPU,那么闲置的任务,甚至不会被认为是一个实时的任务),每种政策不同的规则。

平均工作完成时间

让我们假设只有一个CPU;一个任务要处理的网络分组,并发送一个响应,该处理将CPU时间50毫秒;并在同一时间的另一个过程要处理来自用户的按键和参与也将采取50毫秒的处理。如果调度任务之间切换每隔1毫秒,则第一个任务后,99毫秒完成后100毫秒的第二个任务将完成,它需要为完成其工​​作任务的平均时间为99.5毫秒。然而,如果调度不任务之间的任何时间后切换(如只是让当前正在运行的任务运行,直到它完成其工作,并等待下一个工作做),那么第一个任务后,50毫秒和完成经过100毫秒第二个任务将完成,它需要为完成其工​​作任务的平均时间为75毫秒(而不是99.5毫秒)。

换句话说,事件驱动的任务(例如在一些发生和任务的同时处理运行,然后等待下一个事件),轮询调度(固定频率切换任务)可以使平均完成时间更糟糕的近50%比其他大多数调度算法(例如,“最早开始时间第一”,“最高优先级的赢”,...)。

结论

一)是,它是完全可能的,或者通过使用一个空循环设计,或者通过使用不同的值的固定频率计时器设计的“每时刻的IRQ片”来调整时间片长度。

b)对于轮循调度器,调整所述时间片长度不会帮助延迟多少(特别是在负载下)。

C)入门课程的介绍 - 他们打算提供信息(在将来的某个时候)会帮助你学习更高级的概念(和不打算提供的二手“原样”在实践中)的信息。轮转调度它们是在经常把在引进的事情之一,部分原因是因为它的简单,但部分原因是因为他们自然导致他们为什么吮吸讨论/ s和如何避免这些问题(这是最开始先进的理念)。

© www.soinside.com 2019 - 2024. All rights reserved.