日期:2014-05-16 浏览次数:20581 次
时钟中断是系统中最重要的中断,每个时钟滴答都会产生时钟中断,它的中断矢量为(0100)或(0103)。
0533: . = 100^.
0534: kwlp; br6
0535: kwlp; br6
0569: .globl _clock
0570: kwlp: jsr r0,call; _clock
显然,时钟中断会通过call例程调用_clock函数,对clock函数,11.1小节有详细的介绍。
我在这里只谈几个问题:
1.参数
clock(dev, sp, r1, nps, r0, pc, ps)有7个参数,想要逐一了解他们,请回头看看上面的栈图;
2.时钟中断是典型的“多用途”中断,它需要进行多个层次的处理。实际上,clock函数对时间进行
3个维度的处理:
(1)时钟滴答
修改p_cpu值,对于大多数进程来说,p_cpu就是占用的cpu滴答数,但如果进程执行时间较长的话,
p_cpu的值会有一个回归——其作用是防止进程的优先级变的太低而导致饿死。
检查定时器,看是否需要执行操作。
(2)秒
修改u.stime、u.utime、time[ ]等以秒为单位的计时器。
甚至还有以4s为单位的系统进程唤醒。
(3)时间片
此版本的unix正好使用1秒作为一个时间片,故与秒的处理发生了重叠。
3.Clock函数的各项工作的“Priority”
显然,在clock函数的多项工作中,优先级是不同的,而且各项工作对于时延的容忍程度是不同的。
对秒级、时间片级的工作——即使是推迟几个时钟滴答再处理对整体的影响也不大。
于是,clock函数内对低优先级、高耗时的工作进行了控制——会进行这