MyOS 之 定时器

定时器每隔一段时间(0.01秒)就发送一个中断信号给CPU。这其实是一个中断。要使用定时器,需要设置PIT(Programmable Interval Timer)可编程的间隔型定时器,设定PIT可以设定定时器每隔多少秒就产生一次中盾。它连着IRQ0,只要设定了PIT就可以设定IRQ0的中断间隔。现在已经和PIC一样被集成到别的芯片里了。电脑里用的定时器是8254芯片。设定3次OUT指令就可以了。

mov al, 0x34
out 0x43, al
mov al, 中断周期低8位
out 0x40, al
mov al, 中断周期高8位
out 0x40, al

如果指定周期是0,会被看作为65536,实际中断产生的频率是单位时间时钟周期(主频)/设定的数值,例如设定值为1000,那么终端频率为1.19KHz,设定值为10000,中断产生频率就是119Hz,如果设定为11932,中断产生的频率大约为100Hz,就是10ms。

电脑主频率是指计算机的CPU的单位时间内发出的脉冲数  。

通常来讲,在同系列微处理器,主频越高就代表计算机的速度也越快,但对于不同类型的处理器,它就只能作为一个参数来作参考。

在设置PIT还是GDT和IDT都是需要关闭中断,因此cli放到最后吧。

然后设计中断处理程序IRQ0就可以了。

挺简单的。彻底成功了,最后注意的就是

        mov al, 0x60 
        out PIC0_OCW2, al 

定时器实际上是计数器,它通过累计已知时间间隔的个数来计算时间。被累计的时间间隔若是系统时钟,计数器就变成了定时器。实际的中断产生频率是单位时间时钟周期数(主频)/设定的数值。

因此你若想每隔n秒中断一次,你必须获知CPU的主频,然后可以很轻松地设置PIT中断。而通过汇编获取主频的话,你需要很清楚你现在是什么CPU,在这里的话,qemu现在应该是.386或者.486。现在的话,可以随便设设,找到大约1秒的地方就行了。

在这里,即便弄到0xffff(65535),仍然很快,具体看书上怎么说就好了。现在的话是1秒内发生100次中断。

但是实际测试的话,是10大约0.5秒左右。

这个对于多进程而言至关重要。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值