linux 系统定时

linux 0.11内核中,PC机的可编程定时芯片Intel 8253被设置成每隔10毫秒就发出一个时钟中断(IRQ0)信号。这个时间节拍就是系统运行的脉搏,称之为1个系统滴答。因此每经过一个滴答就会调用一次时钟中断处理程序(timer_interrupt)。该处理程序主要用来通过jiffies变量来累计自系统启动以来经过的时钟滴答数。每当发生一次时钟中断该值就增加1.然后从被中断程序的段选择附中取得当前特权级CPL作为参数调用do_timer()函数。

    do_timer()函数则根据特权级对当前进程运行时间做累计。如果CPL=0,则表示进程是运行在内核态时被中断,因此把进程的内核运行时间统计值stime增加1,否则把进程用户态运行时间统计值增加1。如果程序添加到定时器,则对定时器链表进行处理。若某个定时器时间到(递减后等于0),则调用给定时器的处理函数。然后对当前进程运行时间进行处理,把当前进程运行时间片减少1.如果当前进程时间片还大于0,表示其时间片还没用完,于是其时间片还没用完,于是就退出do_timer()继续运行当前进程。如果此时进程时间片已经递减为0,表示该进程已经用完了此次使用CPU的时间片,于是程序就会根据终端程序的级别来确定进一步处理的方法。若被中断的当前进程是工作在用户态(特权级别大于0),则调用do_timer()就会调用调度程序schedule()切换到其他进程去运行。如果被中断的当前进程工作在内核态,即在内核程序中运行是被中断,则do_timer()会立刻退出。因此这样的处理方式决定了linux系统在内核运行时不会被调度程序切换。内核态程序是不可抢占的,当时处于用户态的程序运行时可以被抢占。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值