欢迎来到天天文库
浏览记录
ID:20570193
大小:118.32 KB
页数:26页
时间:2018-10-13
《嵌入式linux内核开发教程之深入分析linux内核源码-进程调度(1)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、嵌入式Linux内核开发教程之深入分析Linux内核源码-进程调度(1)1Linux时间系统1.1时钟硬件1.2时钟运作机制1.3Linux时间基准1.4Linux的时间系统2时钟中断2.1时钟中断的产生2.2.Linux实现时钟中断的全过程和时钟中断相关的函数系统调用返回函数计算机最基本的时间单元是时钟周期,例如取指令、执行指令、存取内存等。时间系统是计算机系统非常重要的组成部分,特别是对于Unix类分时系统尤为重要。时间系统主要任务是维持系统时间并且防止某个进程独占CPU及其他资源,也就是驱动进程的调度。嵌入式Linux内核开发教程之1Linux时间系统大部分PC机中
2、有两个时钟源,他们分别叫做RTC和OS(操作系统)时钟。RTC(RealTimeClock,实时时钟)也叫做CMOS时钟,它是PC主机板上的一块芯片,它靠电池供电,即使系统断电,也可以维持日期和时间。由于它独立于操作系统,所以也被称为硬件时钟,它为整个计算机提供一个计时标准,是最原始最底层的时钟数据。Linux只用RTC来获得时间和日期;然而,通过作用于/dev/rtc设备文件,也允许进程对RTC编程。通过执行/sbin/clock系统程序,系统管理员可以配置时钟。嵌入式Linux内核开发教程之1.1时钟硬件OS时钟产生于PC主板上的定时/计数芯片,由操作系统控制这个芯片
3、的工作,OS时钟的基本单位就是该芯片的计数周期。在开机时操作系统取得RTC中的时间数据来初始化OS时钟,然后通过计数芯片的向下计数形成了OS时钟,它更应该被称为一个计数器。OS时钟只在开机时才有效,而且完全由操作系统控制,所以也被称为软时钟或系统时钟。下面我们重点描述OS时钟的产生。OS时钟输出脉冲信号,接到中断控制器上,产生中断信号,触发后面要讲的时钟中断,由时钟中断服务程序维持OS时钟的正常工作。嵌入式Linux内核开发教程RTC和OS时钟之间的关系通常也被称作操作系统的时钟运作机制。一般来说,RTC是OS时钟的时间基准,操作系统通过读取RTC来初始化OS时钟,此后二
4、者保持同步运行,共同维持着系统时间。保持同步运行是什么意思呢?就是指操作系统运行过程中,每隔一个固定时间会刷新或校正RTC中的信息。图2时钟运作机制我们可以看到,RTC处于最底层,提供最原始的时钟数据。OS时钟建立在RTC之上,初始化完成后将完全由操作系统控制,和RTC脱离关系。操作系统通过OS时钟提供给应用程序所有和时间有关的服务。嵌入式Linux内核开发教程之1.2时钟运作机制以上我们了解了RTC(实时时钟、硬件时钟)和OS时钟(系统时钟、软时钟)。下面我们具体描述OS时钟。OS时钟是由可编程定时/计数器产生的输出脉冲触发中断而产生的。输出脉冲的周期叫做一个“时钟滴答
5、”。计算机中的时间是以时钟滴答为单位的,每一次时钟滴答,系统时间就会加1。操作系统根据当前时钟滴答的数目就可以得到以秒或毫秒等为单位的其他时间格式。定义“时间基准”的目的是为了简化计算,这样计算机中的时间只要表示为从这个时间基准开始的时钟滴答数就可以了。“时间基准是由操作系统的设计者规定的。例如DOS的时间基准是1980年1月1日,Unix的时间基准是1970年1月1日上午12点,Linux的时间基准是1970年1月1日凌晨0点。嵌入式Linux内核开发教程之1.3Linux时间基准OS时钟记录的时间也就是通常所说的系统时间。系统时间是以“时钟滴答”为单位的,而时钟中断的
6、频率决定了一个时钟滴答的长短,例如每秒有100次时钟中断,那么一个时钟滴答的就是10毫秒(记为10ms),相应地,系统时间就会每10ms增1。Linux中用全局变量jiffies表示系统自启动以来的时钟滴答数目。在/kernel/time.c中定义如下:unsignedlongvolatilejiffies嵌入式Linux内核开发教程之1.4Linux的时间系统在jiffies基础上,Linux提供了如下适合人们习惯的时间格式,在/include/linux/time.h中定义如下:structtimespec{/*这是精度很高的表示*/longtv_sec;/*秒(se
7、cond)*/longtv_nsec; /*纳秒:十亿分之一秒(nanosecond)*/};嵌入式Linux内核开发教程structtimeval{/*普通精度*/int tv_sec; /*秒*/int tv_usec; /*微秒:百万分之一秒(microsecond)*/};structtimezone{ /*时区*/int tz_minuteswest;/*格林尼治时间往西方的时差*/int tz_dstti
此文档下载收益归作者所有