一、总体概述
- 时间管理在内核中占有非常重要的地位。相对于事件驱动而言,内核中有大量的函数都是基于时间驱动的
- 其中有些函数是周期执行的,像对调度程序中的运行队列进行平衡调整或对屏幕进行刷新这样的函数,都需要定期执行,比如说,每秒执行100次
- 而另外一些函数,比如需要推后执行的磁盘I/O操作等,则需要等待一个相对时间后才运行——比如说,内核会在500ms后再执行某个任务
- 除了上述两种函数需要内核提供时间外,内核还必须管理系统的运行时间以及当前日期和时间
相对时间、绝对时间
- 请注意相对时间和绝对时间之间的差别
- 如果某个事件在5s后被调度执行,那么系统所需要的不是绝对时间,而是相对时间(比如,相对现在起5s后);相反,如果要求管理当前日期和当前时间,则内核不但要计算流逝的时间而且还要计算绝对时间。所以这两种时间概念对内核时间管理来说都至关重要
- 另外,还请注意周期性产生的事件与内核调度程序推迟到某个确定点执行的事件之间的差别:
- 周期性产生的事件——比如每10ms—次——都是由系统定时器驱动的。系统定时器是一种可编程硬件芯片,它能以固定频率产生中断。该中断就是所谓的定时器中断,它所对应的中断处理程序负责更新系统时间,也负责执行需要周期性运行的任务。系统定时器和时钟中断处理程序是Linux系统内核管理机制中的中枢,后面的将着重讨论它们
- 本章关注的另外一个焦点是动态定时器——一种用来推迟执行程序的工具。比如说,如果软驱马达在一定时间内都未活动,那么软盘驱动程序会使用动态定时器关闭软驱马达。内核可以动态创建或撤销动态定时器。后面的文章将介绍动态定时器器在内核中的实现,同时给出在内核代码中可供使用的定时器接口
二、内核中的时间概念
- 时间概念对计算机来说有些模糊,事实上内核必须在硬件的帮助下才能计算和管理时间。 硬件为内核提供了一个系统定时器用以计算流逝的时间,该时钟在内核中可看成是一个电子时间资源,比如数字时钟或处理器频率等。系统定时器以某种频率自行触发(经常被称为击中或射中时钟中断,该频率可以通过编程预定,称节拍率。当时钟中断发生时,内核就通过一种特殊的中断处理程序对其进行处理
- 因为预编的节拍率对内核来说是可知的,所以内核知道连续两次时钟中断的间隔时间。这个间隔时间就称为节拍,它等于节拍率分之一秒。正如你看到的,内核就是靠这种已知的时钟中断间隔来计算墙上时间和系统运行时间的。墙上时间(也就是实际时间)对用户空间的应用程序来说是最重要的。内核通过控制时钟中断维护实际时间,另外内核也为用户空间提供了一组系统调用以获取实际日期和实际时间。系统运行时间(自系统启动开始所经的时间)对用户空间和内核都很有用,因为许多程序都必须清楚流逝的时间。通过两次(现在和以后)读取运行时间再计算它们的差,就可以得到相对的流逝的时间了
- 时钟中断对于管理操作系统尤为重要,大量内核函数的生命周期都离不开流逝的时间的控制。下面给出一些利用时间中断周期执行的工作:
- 更新系统运行时间
- 更新实际时间
- 在smp系统上,均衡调度程序中各处理器上的运行队列。如果运行队列负载不均衡的话,尽量使它们均衡(前面“进程调度”文章介绍)
- 检査当前进程是否用尽了自己的时间片。如果用尽,就重新进行调度(前面“进程调度”文章介绍)
- 运行超时的动态定时器
- 更新资源消耗和处理器时间的统计值
- 这其中有些工作在每次的时钟中断处理程序中都要被处理——也就是说,这些工作随时钟的频率反复运行。另一些也是周期性地执行,但只需要每n次时钟中断运行一次,也就是说,这些函数在累计了一定数量的时钟节拍数时才被执行。在后面“定时器中断处理程序”文章中,我们将详细讨论时钟中断处理程序
转载:https://blog.csdn.net/qq_41453285/article/details/104175061
查看评论