版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章时间管理内容提要事件概述时间的度量睡眠定时器定时器文件10.1时间管理概述时间管理概述
时间管理作为操作系统的重要组成部分,无论对于内核和应用程序,均需利用时钟提供各种形式的时间服务,例如,超时、睡眠和定时器等。
为了满足在不同应环境下,应用程序对时间的要求,Linux系统为用户提供了各种形式的时间服务。内容包括:1.系统时间和进程时间2.睡眠(延迟执行)3.定时器应用编程接口分类API功能描述时间系统时间time/stime获取/设置系统时间gettimeofday/settimeofday获取/设置系统时间和时区clock_getres获取时钟精度clock_gettime/clock_settime获取/设置时钟进程时间times获取进程时间时间格式转换localtime日历型转换为分解型strftime分解型转换为可打印格式延迟/睡眠sleep低分辨率睡眠nanosleep/clock_nanosleep高分辨率睡眠alarm设置闹钟定时器定时器getitimer/setitimer获得/设置定时器POSIX定时器timer_create创建POSIX定时器timer_gettime/timer_settime获取/设置POSIX定时器timer_delete删除POSIX定时器文件通知定时器timerfd_create创建定时器文件timerfd_gettime获取定时器的当前状态timerfd_settime设置定时器10.2时间的度量系统时钟1.硬件时钟
硬件时钟有时也称为实时时钟,依靠电池供电,它是软件时钟的基础。2.软件时钟软件时钟提供一种周期性触发中断机制,用于度量流逝的时间。时钟中断的频率通常为100HZ,每秒产生100次,每隔10毫秒1次。系统时钟(续)3.时钟精度软件时钟可满足一般应用要求,高精度计时器自内核2.6.21版引入,通常,精度至少可达微秒级。4.到期延迟计时器到期事件的处理通常会延迟一段时间,时间的长短取决于时钟精度等因素,高精度计时器能减少延迟,要达到完全准确仍有一定的距离。系统时间和进程时间1.系统时间自Epoch(1970-01-0100:00:00)至今所经历的时间称为系统时间,单位为秒,显示的时间与系统所在的时区有关。2.进程时间进程时间是指进程运行所消耗的时间,根据所在空间的不同,进程时间可进一步划分为用户时间和内核时间。进程在用户态消耗的时间称为用户时间,在内核态消耗的时间则称为系统时间。获取/设置系统时间
头文件
#include<time.h>函数原型
time_t
time(time_t*tloc);
int
stime(const
time_t*tloc);功能 获取/设置系统时间。参数
tloc:系统时间。返回值
time函数成功返回系统时间,失败返回-1。
stime函数成功返回0,失败返回-1。获取/设置系统时间和市区头文件
#include<sys/time.h>函数原型
int
gettimeofday(struct
timeval*tv,struct
timezone*tz);
int
settimeofday(const
struct
timeval*tv,conststruct
timezone*tz);功能 获取/设置系统时间和时区。参数
tv:系统时间。
tz:时区。返回值 成功返回0,失败返回-1。时间类型的转换1.日历日历记录自1970年1月1日零时至今的秒数。2.分解时间
分解时间类型是将时间拆分成若干细小部分,便于用户提取,其格式如下所示。structtm{
int
tm_sec;//秒
int
tm_min;//分
int
tm_hour;//时
int
tm_mday;//日
int
tm_mon;//月
int
tm_year;//年
int
tm_wday;//星期几,0表示星期天
int
tm_yday;//一年中的第几天
int
tm_isdst;//夏令时标识,0为标准时,大于0为夏令时};3.打印格式
时间的打印格式是指以NULL结尾的字符串,例如,"WedJun3021:49:081993"。时间类型头文件
#include<time.h>函数原型
structtm*localtime(const
time_t*timep);
size_t
strftime(char*s,size_tmax,constchar*format,const
structtm*tm);功能 时间格式转换。参数
timep:日历时间。
s:可打印时间地址。
max:最大字节数。
format:时间格式。
tm:分解时间。返回值
localtime函数返回分解型时间。
strftime函数返回字符串长度。时间类型的转换头文件
#include<time.h>函数原型
structtm*localtime(const
time_t*timep);
size_t
strftime(char*s,size_tmax,constchar*format,const
structtm*tm);功能 时间格式转换。参数
timep:日历时间。
s:可打印时间地址。
max:最大字节数。
format:时间格式。
tm:分解时间。返回值
localtime函数返回分解型时间。
10.3睡眠延迟执行
进程有时需要挂起一段时间后继续运行,为此,Linux提供了两种面向不同精度的延迟,它们分别为低分辨率和高分辨率延迟。低精度延迟sleep函数头文件
#include<unistd.h>函数原型
unsignedint
sleep(unsigned
intseconds);功能 睡眠一段时间。参数
seconds:睡眠时间(秒)。返回值 若被信号中断,则返回剩余时间,否则返回0。高精度延迟nanosleep函数头文件
#include<time.h>函数原型
int
nanosleep(const
struct
timespec*req,struct
timespec*rem);功能 睡眠一段时间。参数
req:请求睡眠时间。
rem:剩余时间。返回值 成功返回0,失败返回-1。高精度延迟(续)3.clock_nanosleep函数头文件
#include<time.h>函数原型
int
clock_nanosleep(clockid_t
clock_id,int
flags,const
struct
timespec*request,struct
timespec*remain);功能 睡眠一段时间。参数
clock_id:时间度量方式。
flags:时间的参照坐标。
request:请求睡眠时间。
remain:剩余时间。返回值 成功返回0,失败返回-1。闹钟alarm函数头文件
#include<unistd.h>函数原型
unsignedint
alarm(unsigned
intseconds);功能 设置闹钟。参数
seconds:到期时间。返回值10.4定时器内容提要定时器概述传统的定时器POSIX定时器定时器概述
定时器有时也称为间隔定时器或间隔计时器,它是一种按固定时间间隔产生到期事件的计时方式,到期事件通常以信号的形式通知使用者。与alarm函数仅产生一次到期事件不同,定时器可连续产生到期事件。
Linux内核提供了两种定时器,一种是传统Unix使用的定时器,另一种是POSIX定时器。时间度量的方式1.真实时间真实时间是指系统真正流失的时间,无论进程处于何种状态,所有状态的时间都计算在内。2.虚拟时间虚拟时间是指进程处于用户态时间段之和。3.实用时间实用时间是指进程占有CPU的时间段之和,即用户时间与内核时间之和。时间度量的方式t6用户态:执行用户指令+=真实时间内核态:执行内核指令+睡眠:等待被重新调度+=实用时间时间t1t4t7t2t5t8t3t9用户态核心态休眠态传统定时器getitimer/setitimer函数头文件
#include<sys/time.h>函数原型
int
getitimer(intwhich,struct
itimerval*curr_value);
int
setitimer(intwhich,conststruct
itimerval*new_value,struct
itimerval*old_value);功能 获取/设置定时器。参数
which:计时器类型。
curr_value:指向当前间隔时间。
new_value:指向新间隔时间。
old_value:指向原间隔时间。返回值 成功返回0,否则返回?1。传统定时器(续)
struct
itimerval{
struct
timeval
it_interval; //间隔时间
struct
timeval
it_value; //首次到期时间,若为9,定时器禁止
};struct
timeval{longtv_sec; //秒
longtv_usec; //微妙};参数which含义ITIMER_REAL面向真实时间的定时器,若间隔时间到期,产生SIGALRM信号ITIMER_VIRTUAL面向虚拟时间的定时器,若间隔时间到期,产生SIGVTALRM信号ITIMER_PROF面向实用时间的定时器,若间隔时间到期,产生SIGPRT信号POSIX定时器
由于传统定时器仅支持标准信号,每类定时器仅能在进程中创建一个,加之支持的精度较低,为此,POSIX定义了功能更强精度更高的定时器,可支持实时信号,时间精度可达纳秒级。创建/删除POSIX定时器1.timer_create/timer_delete函数头文件
#include<signal.h> #include<time.h>函数原型
int
timer_create(clockid_t
clockid,struct
sigevent*sevp,timer_t*timerid);
int
timer_delete(timer_t
timerid);功能 创建/删除POSIX定时器。参数
clockid:定时器类型。
sevp:到期通知方式。
timerid:定时器ID。返回值 成功返回0,失败返回-1。创建/删除POSIX定时器(续)struct
sigevent{
int
sigev_notify;//通知方式
int
sigev_signo;//通知信号
unionsigval
sigev_value;//传递的数据
void(*sigev_notify_function)(unionsigval);//线程运行函数
void*sigev_notify_attributes;//通知线程属性
pid_t
sigev_notify_thread_id;//线程ID};sigev_notify成员变量含义SIGEV_NONE不通知SIGEV_SIGNAL以信号方式通知SIGEV_THREAD创建线程实例获取/设置POSIX定时器2.timer_gettime/timer_gettime函数头文件
#include<time.h>函数原型
int
timer_gettime(timer_t
timerid,struct
itimerspec*curr_value);
int
timer_settime(timer_t
timerid,int
flags,const
struct
itimerspec*new_value,struct
itimerspec*old_value);功能 获取/设置POSIX定时器。参数
timerid:POSIX定时器ID。
curr_value:指向当前间隔时间。
flags:首次到期时间的参照坐标。
new_value:指向新间隔时间。
old_value:指向原间隔时间。返回值 成功返回0,失败返回-1。struct
itimerspec{
struct
timespec
it_interval;//间隔时间
struct
timespec
it_value;//首次到期时间};10.5定时期文件定时器文件概述
Linux将定时器产生的间隔到期事件看做字节流,将定时器抽象为文件。Linux自内核2.6起引入定时器文件。
创建定时器文件1.timerfd_create函数头文件
#include<sys/timerfd.h>函数原型
int
timerfd_create(int
clockid,intflags);功能 创建定时器文件。参数
clockid:定时器类型。
flags:操作方式。返回值 成功返回文件描述符,失败返回-1。实例分析int
main(int
argc,char*ar
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年会计学原理基础会计第版李海波课后习题答案
- 2024年度火车站候车大厅装修工程合同
- 2024版版权许可使用合同标的为音乐作品授权
- 二零二四年度煤炭开采爆破技术服务合同
- 二零二四年度航空器材维修服务合同
- 喝酒惩罚合同范本
- 房屋腾空合同范本
- 2024年度软件许可合同:某企业向某软件公司购买软件使用权
- 2024年建筑节能膜项目可行性研究报告
- 2024年度软件许可及技术支持合同标的
- 2023年福建省厦门市集美区残疾人联合会招聘残疾人工作者17人笔试参考题库(共500题)答案详解版
- 八年级物理全册全套试卷综合测试卷(含答案)
- 安全风险辨识与评估方法
- 立式机组轴线调整及瓦间隙计算
- 数字媒体艺术与设计职业生涯规划书
- 幼儿园晨检记录表模板
- 食品安全总监职责、食品安全员守则
- 公文格式(政府发文与政府发文)
- 2023水轮发电机组润滑油系统运行维护导则
- 性格测试(考拉孔雀老虎猫头鹰)
- 化工设备图纸
评论
0/150
提交评论