我知道调度是由内核完成的.让我们假设一个
Linux中的进程(P1)当前正在处理器上执行.
由于当前进程对时间片一无所知
并且内核当前没有在处理器上执行,内核如何安排下一个进程执行?
是否有某种中断告诉处理器切换执行内核或任何其他机制?
解决方法:
简而言之,它是一个中断,它将控制权交还给内核.中断可能由于任何原因而出现.
大多数情况下,内核由于定时器中断而获得控制权,或者按键中断可能会唤醒内核.
中断通知外围系统IO或几乎任何改变系统状态的内容都可能
唤醒内核.
更多关于中断的信息:
这样的中断分为上半部分和下半部分.底部半部分用于从中断上下文中推迟工作.
上半部分:在禁用中断的情况下运行因此应该是超高速的,通常会尽快放弃CPU
1) stores interrupt state flag and disables the interrupts(reset
some pin on the processor),
2) communicates with the hardware, stores state information,
delegates remaining responsibility to bottom-half,
3) restores the interrupt state flag and enables the interrupt((set
some pin on the processor).
下半部分:处理延迟工作(上半部分的委托工作)在启用中断的情况下运行,因此可能需要一段时间才能完成.
两种机制用于实现下半部分处理.
1) Tasklets
2) Work queues
.
If timer is the interrupt to switch back to kernel, is the interrupt a hardware interrupt???
在我们讨论的上下文中感兴趣的定时器中断是硬件定时器中断,
在内核中,字定时器中断可能意味着(与架构相关的)硬件定时器中断或软件定时器中断.
阅读this以获得简要概述.
更多关于timers
记住“计时器”是一个高级话题,难以理解.
is the interrupt a hardware interrupt??? if it is a hardware
interrupt, what is the frequency of the timer?
阅读Chapter 10. Timers and Time Management
if the interval of the timer is shorter than time slice, will kernel give the CPU back the same process, which was running early?
这取决于许多因素:使用sheduler,加载系统,处理优先级,类似的东西.
最受欢迎的CFS并不真正依赖于抢先的时间片概念!
CFS选择的下一个合适的进程将获得CPU时间.
定时器滴答,时间片和上下文切换之间的关系不是那么直截了当.
每个进程都有自己的(动态计算的)时间片.内核跟踪进程使用的时间片.
在SMP上,CPU特定活动(例如监视当前正在运行的进程的执行时间)由本地APIC计时器引发的中断完成.
本地APIC定时器仅向其处理器发送中断.
但是,默认时间片在include/linux/sched/rt.h中定义
阅读this.