- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统课程设计--内核定时器7l3n1tcg
摘要 1
1 设计题目与要求 2
1.1设计题目:内核定时器 2
1.2设计要求:通过研究内核的时间管理算法,学习内核源代码;然后应用这些知识并且使用“信号”建立一种用户空间机制来测量一个多线程程序的执行时间。 2
2 总的设计思想及系统平台、语言、工具 2
2.1 设计思想: 2
2.1.1Linux内核对定时器的描述 2
2.1.2Linux 内核定时器 3
2.1.3Linux 信号signal处理机制 6
2.1.4多线程编程 7
2.1.5内核定时器机制的实现 9
2.2. 系统平台: 12
2.3. 编程工具: 12
3.数据结构与模块说明(功能与流程图) 12
3.1.定时器使用: 12
3.2 多线程程序: 13
3.3程序流程图: 14
4. 源程序: 14
5.运行结果与运行情况 15
6.调试记录: 16
7.自我评析和总结: 17
8.参考文献 17
内核定时器
摘要
每个正在系统上运行的程序都是一个。每个进程包含一到多个线程。进程也可能是整个或者是部分程序的动态执行。线程是一组的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为运行的上下文。指明线程执行操作系统代码已经经过了多少个100ns的CPU时间一般地,在使用虚拟内存技术的多任务系统上,内核和应用有不同的地址空间,因此,在内核和应用之间以及在应用与应用之间进行数据交换需要专门的机制来实现,当一个进程希望获得信号量时, 如果信号量已经被占有, 则该进程将会被放到等待队列上sleep直到cpu将其唤醒。相对于spinlock来说开销太大,适用于长时间占有的lock。不可用于中断状态,因为它拥有信号量的进程可以sleep, 可以被抢占信号量可以设置为同时允许的进程数struct timer_list {
struct list_head list;
unsigned long expires;
unsigned long data;
void (*function)(unsigned long);
};
各数据成员的含义如下:
(1)双向链表元素list:用来将多个定时器连接成一条双向循环队列。
(2)expires:指定定时器到期的时间,这个时间被表示成自系统启动以来的时钟滴答计
数(也即时钟节拍数)。当一个定时器的expires值小于或等于jiffies变量时,我们就说这个
定时器已经超时或到期了。在初始化一个定时器后,通常把它的expires域设置成当前expires
变量的当前值加上某个时间间隔值(以时钟滴答次数计)。
(3)函数指针function:指向一个可执行函数。当定时器到期时,内核就执行function
所指定的函数。而data域则被内核用作function函数的调用参数。
内核函数init_timer()用来初始化一个定时器。实际上,这个初始化函数仅仅将结构中的
list成员初始化为空。如下所示(include/linux/timer.h):
static inline void init_timer(struct timer_list * timer)
{
timer-list.next = timer-list.prev = NULL;
}
由于定时器通常被连接在一个双向循环队列中等待执行(此时我们说定时器处于pending
状态)。因此函数time_pending()就可以用list成员是否为空来判断一个定时器是否处于
pending状态。如下所示
(include/linux/timer.h):
static inline int timer_pending (const struct timer_list *
timer)
{
return timer-list.next != NULL;
}
时间比较操作
在定时器应用中经常需要比较两个时间值,以确定timer是否超时,所以Linux内核在
timer.h头文件中定义了4个时间关系比较操作宏。这里我们说时刻a在时刻b之后,就意味着
时间值a≥b。Linux强烈推荐用户使用它所定义的下列4个时间比较操作宏
(include/linux/timer.h):
#define time_after(a,b) ((long)(b) - (long)(a) 0)
#define time_before(a,b) time_after(b,a)
#define time_after_eq(a,b) ((long)(a) - (long)(b) = 0)
#define time_before_eq(a,b) time_after_eq(b,a)
2.1.2Lin
您可能关注的文档
- 抽水蓄能可逆式水泵水轮机运行规程oxdbbcq2.docx
- 抽水蓄能电站砂石料加工系统建设及砂石料供应工程灰窑子沟料场边坡支护施工脚手架搭设专项施工方案yrw6acfy.doc
- 护理学导论第一章绪论完整ig89gsm7.ppt
- 报废汽车材料分类与利用7zqpfavw.ppt
- 抽黄灌溉泵站更新改造工程可行性研究报告gu43b6ra.doc
- 护理质量持续改进探讨2wkg6ekf.ppt
- 担保公司担保贷款风险管理问题探讨mxktl9ib.doc
- 担保项目评审意见书mbo8ic2j.doc
- 抽黄大型灌溉泵站更新改造工程项目可行性研究报告zghbvrd4.doc
- 拉丝及绞线工艺学oywbdkvi.doc
文档评论(0)