分类: LINUX
2008-05-01 11:23:36
今天在看进程调度的时候,里面涉及到了Linux的时钟中断,在这里我就顺便说一下Linux的时钟中断。
在对8253进行初始化的时候,会让8253每隔10ms发送一个中断,系统就会调用时钟中断处理程序timer_interrupt,这个过程在system_call中定义的。它的工作就是让系统的嘀哒数加1,并调用do_timer()函数,这个函数会根据特权级对当前进程的运行时间做累计,也就说根据当前进程是内核态还是用户态对相应的时间统计加1。然后检查如果当前进程的时间片减1后仍然大于0,则直接返回。否则,就说明当前进程的时间片用完了,检查当前进程是用户进程还是系统,如果是用户进程,则调用schedule()执行进程调度,如果是系统进程,则直接返回,因为系统的运行是不可抢占的。