根据我的理解,CPU有一个“硬件定时器”,当它的间隔到期时会触发中断。
内核使用此硬件定时器来实现进程的调度机制,因此如果硬件定时器触发数量为123
的中断,内核会将此中断号映射到执行调度程序代码(将决定下一个要执行的进程)。
我有两个问题:
编辑: 我更感兴趣的硬件架构是PC,但我想知道其他架构(例如:手机) ,覆盆子PI等)以类似的方式工作。
答案 0 :(得分:0)
详细信息是特定于硬件的(可能与各种主板,芯片组,处理器不同;请阅读SouthBridge)。阅读High Precision Event Timer(和APIC)。
另请参阅OSDEV wiki,特别是Programmable Interval Timer。
(所以两个问题的答案通常都是肯定的)
答案 1 :(得分:0)
从早期开始,IBM兼容PC就有PIT(可编程间隔定时器):IBM PC和IBM PC XT拥有Intel 8253,IBM PC AT推出了Intel 8254。
从1984年4月的IBM PC技术参考,第1-11页:
系统计时器
系统使用三个可编程定时器/计数器,如下所示:通道0是一个通用定时器,为实现时钟,通道1次和从直接存储器请求刷新周期提供恒定时基访问(DMA)通道和通道2支持扬声器的音调生成。 [...]
频道0正是您所要求的“恒定时基”,“间隔”。并且,为了回答你的1 st 问题,它是可以改变的;它是可编程间隔定时器。
然而,原始IBM PC内置的CPU是Intel 8088,基本上是带有8位数据总线的Intel 8086。真实模式是当时最先进的模式;几年后,使用英特尔80286引入了保护模式,因此当DOS占领市场时,有效的多任务处理,更不用说抢占式多任务处理或多线程处理,无关紧要。
快速转发到IBM PC AT,全世界都拥有一个支持保护模式的CPU,英特尔80286和英特尔8254,这是“8253的超集”。 (来自8254 PIT数据表)。如果您真的想要深入了解PIT,请阅读底部链接的8253/8254数据表。它也许值得一看Linux。由于最新的内核过于复杂而无法在20分钟内真正理解特定部分,因此我建议您先查看Linux 0.01,这是第一个版本。 _timer_interrupt
kernel/system_calls.s
中的================ ================
| Person | | Country |
|--------------| |--------------|
|- name |------------------|- id |
|- age | |- name |
|--------------| |- population |
|+ drinkWater()| ================
|+ drinkBeer() |
================
可能很有趣,从那里你就可以去任何你想去的地方。
关于你的2 nd 问题:有多个定时器源,但只有一个适用于间隔定时,即通道0.IBM兼容性仍然符合上面显示的系统定时器布局。它们保留了相同的功能,但可能会增加更多功能,或者更改硬件的工作方式和打包方式。如今,其他定时器确实存在,如高分辨率定时器,但将其用于中断定时会破坏兼容性。
答案 2 :(得分:0)
内核可以设置硬件定时器的间隔,还是一个无法以编程方式更改的固定数字的间隔?
您的问题完全取决于处理器。某些处理器具有可控定时器。其他人有固定间隔的定时器。但是,您可能遇到的大多数处理器都有可调节的计时器。
CPU是否有专用的硬件定时器用于调度,或者是否有许多硬件定时器,内核可以选择它想要用于调度的定时器吗?
某些处理器只有一个计时器。如今大多数处理器都有多个计时器。