社区
C语言
帖子详情
linux c 下一个进程中如何开启两个定时器
zscedu
2011-08-31 05:38:43
我现在有个进程在处理一些消息,我在进程里已经起了一个定时器,到一定时间后会对消息进行汇总,现在想等到一定的时间后再对汇总过得消息再进行第二次汇总,当然这两个时间是 不一样的,能不能用两个定时器实现?如何实现?请高手指点
...全文
419
9
打赏
收藏
linux c 下一个进程中如何开启两个定时器
我现在有个进程在处理一些消息,我在进程里已经起了一个定时器,到一定时间后会对消息进行汇总,现在想等到一定的时间后再对汇总过得消息再进行第二次汇总,当然这两个时间是 不一样的,能不能用两个定时器实现?如何实现?请高手指点
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zscedu
2011-09-02
打赏
举报
回复
还有没有其他简单的方法?
zscedu
2011-09-01
打赏
举报
回复
[Quote=引用 7 楼 freezezdj 的回复:]
引用 6 楼 zscedu 的回复:
引用 4 楼 freezezdj 的回复:
select+小顶堆实现。看看libevent超时事件触发的实现。
这个怎么用呢?没有听说过,难道还要下个开发包?
自己实现呀,把你的定时时间存在小顶堆里,然后传给select,poll,epoll等,让它们超时返回。
[/Quote]有没有个小例子呀?本人愚笨,请多指点
冻结
2011-09-01
打赏
举报
回复
[Quote=引用 6 楼 zscedu 的回复:]
引用 4 楼 freezezdj 的回复:
select+小顶堆实现。看看libevent超时事件触发的实现。
这个怎么用呢?没有听说过,难道还要下个开发包?
[/Quote]
自己实现呀,把你的定时时间存在小顶堆里,然后传给select,poll,epoll等,让它们超时返回。
zscedu
2011-09-01
打赏
举报
回复
[Quote=引用 4 楼 freezezdj 的回复:]
select+小顶堆实现。看看libevent超时事件触发的实现。
[/Quote]
这个怎么用呢?没有听说过,难道还要下个开发包?
mymtom
2011-08-31
打赏
举报
回复
POSIX不保证能同时提供两个实时定时器。
冻结
2011-08-31
打赏
举报
回复
select+小顶堆实现。看看libevent超时事件触发的实现。
zscedu
2011-08-31
打赏
举报
回复
[Quote=引用 1 楼 qq120848369 的回复:]
开两个线程,每个线程里调用select等待一段时间或者sleep也可以。
[/Quote]
处理消息的是一个死循环,起两个线程,那这两个线程什么时候起比较合适呢?
ericming200409
2011-08-31
打赏
举报
回复
两个定时器的timeout时刻是交替出现的,有这个规律就可以利用起来
qq120848369
2011-08-31
打赏
举报
回复
开两个线程,每个线程里调用select等待一段时间或者sleep也可以。
Linux
进程
的睡眠和唤醒
1
Linux
进程
的睡眠和唤醒 在
Linux
中
,仅等待CPU时间的
进程
称为就绪
进程
,它们被放置在
一个
运行队列
中
,
一个
就绪
进程
的状 态标志位为TASK_RUNNING。一旦
一个
运行
中
的
进程
时间片用完,
Linux
内核的调度器会剥夺这个
进程
对CPU的控制权,并且从运行队列
中
选择
一个
合适的
进程
投入运行。 当然,
一个
进程
也可以主动释放CPU的控制权。函数 schedule()是
一个
调度函数,它可以被
一个
进程
主动调用,从而调度其它
进程
占用CPU。一旦这个主动放弃CPU的
进程
被重新调度占用 CPU,那么它将从上次停止执行的位置开始执行,也就是说它将从调用schedule()的下一行代码处开始执行。 有时候,
进程
需要等待直到某个特定的事件发生,例如设备初始化完成、I/O 操作完成或
定时器
到时等。在这种情况下,
进程
则必须从运行队列移出,加入到
一个
等待队列
中
,这个时候
进程
就进入了睡眠状态。
Linux
中
的
进程
睡眠状态有两种:一种是可
中
断的睡眠状态,其状态标志位TASK_INTERRUPTIBLE; 另一种是不可
中
断 的睡眠状态,其状态标志位为TASK_UNINTERRUPTIBLE。可
中
断
实验四
Linux
中
断与异常编程技术
实验目的和要求: 1了解
linux
时钟
中
断的原理 2 学习
进程
定时器
技术 实验条件: 1、装有
Linux
操作系统的微型计算机; 实验过程 1 使用
定时器
的主要是为了周期性的执行某一任务,或者是到了
一个
指定时间去执行某
一个
任务。在工程实践
中
,一般有
两个
常见的比较有效的方法。
一个
是用
linux
内部的三个
定时器
,另
一个
是用sleep, usleep函数让
进程
睡眠一段时间,使用alarm定时发出
一个
信号,还有那就是用gettimeofday, difftime等自己来计算时间间隔,然后时间到了就执行某一任务,但是这种方法效率低,所以不常用。
Linux
内置的3个
定时器
Linux
为每个任务安排了3个内部
定时器
: ITIMER_REAL:实时
定时器
,不管
进程
在何种模式下运行(甚至在
进程
被挂起时),它总在计数。定时到达,向
进程
发送SIGALRM信号。 ITIMER_VIRTUAL:这个不是实时
定时器
,当
进程
在用户模式(即程序执行时)计算
进程
执行的时间。定时到达后向该
进程
发送SIGVTALRM信号。 ITIMER_PROF:
进程
在用户模式(即程序执行时)和核心模式(即
进程
调度用时)均计数。
linux
系统分析与高级编程技术.rar
linux
系统分析与高级编程技术.rar
清华大学
Linux
操作系统原理与应用
第1章 操作系统概述 1 1.1 认识操作系统 1 1.1.1 从使用者角度 1 1.1.2 从程序开发者角度 2 1.1.3 从操作系统在整个计算机系统
中
所处位置 2 1.1.4 从操作系统设计者的角度 3 1.2 操作系统的发展 4 1.2.1 操作系统的演变 4 1.2.2 硬件的发展轨迹 5 1.2.3 软件的轨迹 6 1.2.4 单内核与微内核操作系统 7 1.3 开放源代码的Unix/
Linux
操作系统 8 1.3.1 Unix的诞生和发展 8 1.3.2
Linux
的诞生 9 1.3.3 操作系统标准POSIX 9 1.3.4 GNU和
Linux
9 1.3.5
Linux
的开发模式 10 1.4
Linux
内核 10 1.4.1
Linux
内核的位置 10 1.4.2
Linux
内核的作用 11 1.4.3
Linux
内核子系统 11 1.5
Linux
内核源代码 13 1.5.1 多版本的内核源代码 13 1.5.2
Linux
内核源代码的结构 13 1.5.3
Linux
内核源代码分析工具 14 习题1 15 第2章 内存寻址 17 2.1 内存寻址简介 17 2.1.1 Intel x86 CPU寻址方式的演变 18 2.1.2 IA32寄存器简介 19 2.1.3 物理地址、虚拟地址及线性地址 21 2.2 分段机制 22 2.2.1 地址转换及保护 24 2.2.2
Linux
中
的段 24 2.3 分页机制 25 2.3.1 页与页表 25 2.3.2 线性地址到物理地址的转换 28 2.3.3 分页示例 28 2.3.4 页面高速缓存(cache) 29 2.3.5
Linux
中
的分页机制 30 2.4
Linux
中
的汇编语言 31 2.4.1 AT&T与Intel汇编语言的比较 31 2.4.2 AT&T汇编语言的相关知识 32 2.5
Linux
系统地址映射示例 33 习题2 35 第3章
进程
37 3.1
进程
介绍 37 3.1.1 程序和
进程
37 3.1.2
进程
的层次结构 38 3.1.3
进程
状态 39 3.1.4
进程
实例 40 3.2
进程
控制块 41 3.2.1
进程
状态 42 3.2.2
进程
标识符 43 3.2.3
进程
之间的亲属关系 43 3.2.4
进程
控制块的存放 44 3.3
进程
的组织方式 45 3.3.1
进程
链表 45 3.3.2 散列表 46 3.3.3 可运行队列 47 3.3.4 等待队列 47 3.4
进程
调度 48 3.4.1 基本原理 48 3.4.2 时间片 50 3.4.3
Linux
进程
调度时机 50 3.4.4
进程
调度的依据 51 3.4.5 调度函数schedule()的实现 52 3.5
进程
的创建 54 3.5.1 创建
进程
55 3.5.2 线程及其创建 56 3.6 与
进程
相关的系统调用及其应用 58 3.6.1 fork系统调用 58 3.6.2 exec系统调用 59 3.6.3 wait系统调用 60 3.6.4 exit系统调用 62 3.6.5
进程
的一生 63 3.7 与调度相关的系统调用及应用 63 习题3 65 第4章 内存管理 67 4.1
Linux
的内存管理概述 67 4.1.1 虚拟内存、内核空间和用户空间 67 4.1.2 虚拟内存实现机制间的关系 69 4.2
进程
用户空间的管理 70 4.2.1
进程
用户空间的描述 71 4.2.2
进程
用户空间的创建 74 4.2.3 虚存映射 76 4.2.4
进程
的虚存区示例 76 4.2.5 与用户空间相关的系统调用 78 4.3 请页机制 79 4.3.1 缺页异常处理程序 79 4.3.2 请求调页 81 4.3.3 写时复制 83 4.4 物理内存的分配与回收 83 4.4.1 伙伴算法 85 4.4.2 物理页面的分配 86 4.4.3 物理页面的回收 88 4.4.4 slab分配模式 89 4.4.5 内核空间非连续内存区的分配 93 4.5 交换机制 95 4.5.1 交换的基本原理 95 4.5.2 页面交换守护
进程
kswapd 99 4.6 内存管理实例 99 4.6.1 相关背景知识 100 4.6.2 代码体系结构介绍 100 4.6.3 实现步骤 103 4.6.4 程序代码 103 习题4 108 第5章
中
断和异常 110 5.1
中
断的基本知识 110 5.1.1
中
断向量 110 5.1.2 外设可屏蔽
中
断 111 5.1.3 异常及非屏蔽
中
断 112 5.1.4
中
断描述符表 112 5.1.5 相关汇编指令 113 5.2
中
断描述符表的初始化 114 5.2.1 IDT表项的设置 114 5.2.2 对陷阱门和系统门的初始化 115 5.2.3
中
断门的设置 116 5.3
中
断处理 116 5.3.1
中
断和异常的硬件处理 116 5.3.2
中
断请求队列的建立 117 5.3.3
中
断处理程序的执行 119 5.3.4 从
中
断返回 121 5.4
中
断的下半部处理机制 121 5.4.1 为什么把
中
断分为两部分来处理 122 5.4.2 小任务机制 122 5.4.3 下半部 124 5.4.4 任务队列 125 5.5
中
断应用——时钟
中
断 125 5.5.1 时钟 125 5.5.2 时钟运作机制 126 5.5.3
Linux
的时间系统 127 5.5.4 时钟
中
断处理程序 128 5.5.5 时钟
中
断的下半部处理 129 5.5.6
定时器
及其应用 129 习题5 132 第6章 系统调用 133 6.1 系统调用与应用编程接口、系统命令、内核函数的关系 133 6.1.1 系统调用与API 133 6.1.2 系统调用与系统命令 134 6.1.3 系统调用与内核函数 134 6.2 系统调用处理程序及服务例程 135 6.2.1 初始化系统调用 136 6.2.2 system_call()函数 136 6.2.3 参数传递 137 6.2.4 跟踪系统调用的执行 139 6.3 封装例程 140 6.4 添加新系统调用 141 6.5 实例——利用系统调用实现
一个
调用日志收集系统 143 6.5.1 代码体系结构 143 6.5.2 把代码集成到内核
中
146 6.5.3 实现步骤 148 习题6 148 第7章 内核
中
的同步 149 7.1 临界区和竞争状态 149 7.1.1 临界区举例 149 7.1.2 共享队列和加锁 150 7.1.3 确定保护对象 151 7.1.4 死锁 152 7.1.5 并发执行的原因 153 7.2 内核同步方法 153 7.2.1 原子操作 153 7.2.2 自旋锁 155 7.2.3 信号量 156 7.3 并发控制实例 157 7.3.1 内核任务及其并发关系 158 7.3.2 实现机制 158 7.3.3 关键代码解释 162 7.3.4 实现步骤 163 习题7 164 第8章 文件系统 165 8.1
Linux
文件系统基础 165 8.1.1
Linux
文件结构 165 8.1.2
Linux
文件系统 166 8.1.3 文件类型 167 8.1.4 文件访问权限 168 8.2 虚拟文件系统 168 8.2.1 虚拟文件系统的引入 168 8.2.2 VFS
中
的数据结构 170 8.2.3 VFS超级块数据结构 171 8.2.4 VFS的索引节点 173 8.2.5 目录项对象 174 8.2.6 与
进程
相关的文件结构 176 8.2.7 主要的数据结构之间的关系 179 8.3 文件系统的注册、安装与卸载 180 8.3.1 文件系统的注册和注销 180 8.3.2 文件系统的安装 181 8.3.3 文件系统的卸载 183 8.4 页缓冲区 183 8.4.1 address_space对象 183 8.4.2 address_space对象的操作函数表 184 8.5 文件的打开与读写 185 8.5.1 打开文件 185 8.5.2 读写文件 187 8.6 编写
一个
文件系统 189 8.6.1
Linux
文件系统的实现要素 189 8.6.2 什么是romfs文件系统 191 8.6.3 romfs文件系统的布局与文件结构 191 8.6.4 具体实现的对象 192 习题8 195 第9章 设备驱动 196 9.1 概述 196 9.2 设备驱动程序基础 198 9.2.1 I/O端口 199 9.2.2 设备文件 200 9.2.3
中
断处理 201 9.2.4 设备驱动程序框架 203 9.3 字符设备驱动程序 204 9.3.1 字符设备驱动程序的注册 204 9.3.2 简单的字符设备驱动程序示例 205 9.4 块设备驱动程序 208 9.4.1 块设备驱动程序的注册 209 9.4.2 块设备请求 212 习题9 215 附录A 内核
中
的链表 216 A.1 链表数据结构简介 216 A.2 内核链表数据结构的定义及初始化 217 A.3 操作链表的接口 218 A.4 遍历链表 219 附录B 内核模块 221 B.1 什么是模块 221 B.2 编写
一个
简单的模块 221 B.3 模块编程的基础知识 222 B.4 模块的编译 224 B.5 模块实用程序modutils 226 附录C
Linux
内核编译 228 C.1 内核简介 228 C.2 为什么重新编译内核 228 C.3 内核编译模式 229 C.4 新版本内核的获取和更新 229 C.5 内核编译 230 C.6 修改并重启管理器 232 附录D
Linux
编程基础(C语言环境) 233 D.1
Linux
编程常识 233 D.1.1 相关标准(ANSI C、POSIX、SVID、XPG) 233 D.1.2 函数库和系统调用 234 D.1.3 在线文档(man、info、HOWTO) 235 D.1.4 C语言编程风格 237 D.2
Linux
上的C/C++编译器和调试器 238 D.2.1 运行gcc/egcs 238 D.2.2 gcc/egcs的主要选项 240 D.2.3 gdb简介 240 D.2.4 gdb的常用命令 241 D.2.5 gdb使用示例 242 D.3 GNU make和makefile 243 D.3.1 GNU make 243 D.3.2 makefile的基本结构 243 D.3.3 makefile的变量 244 D.3.4 GNU make的主要预定义变量 245 D.3.5 GNU make的隐含规则 245 D.3.6 运行make 246
Linux
2.6内核标准教程(共计8-- 第1个)
共计8个压缩包 本压缩包是:part01.rar 出版社:人民邮电出版社 ·页码:368 页 ·出版日期:2008年 ·ISBN:7115187118/9787115187116 ·条形码:9787115187116 ·包装版本:1版 ·装帧:平装 ·开本:16 ·
中
文:
中
文 ·附带品描述:附光盘一张 ·市场价格:49元 内容简介
Linux
内核是
Linux
操作系统
中
最核心的部分,用于实现对硬件部件的编程控制和接口操作。《
Linux
2.6内核标准教程》深入、系统地讲解了
Linux
内核的工作原理,对
Linux
内核的核心组件逐一进行深入讲解。 全书共8章,首先讲解
Linux
系统的引导过程;然后对
Linux
内核的3大核心模块——内存管理、
进程
管理、
中
断和异常处理进行了深入的分析; 在此基础上,对时间度量、系统调用进行了分析和讨论;最后讲解了
Linux
内核
中
常见的同步机制,使读者掌握每处理器变量和RCU这两种新的 同步机制。 《
Linux
2.6内核标准教程》适合
Linux
内核爱好者、
Linux
驱动开发人员、
Linux
系统工程师参考使用,也可以作为计算机及相关专业学生深入学 习操作系统的参考书。 引用: 目录 第1章
Linux
内核学习基础 1 1.1 为什么研究
Linux
内核 2 1.1.1
Linux
的历史来源 2 1.1.2
Linux
的发展现状 3 1.1.3
Linux
的前景展望 3 1.2 选择什么版本进行研究 3 1.3 内核基本结构 4 1.3.1 内核在操作系统
中
的地位 4 1.3.2
Linux
2.6内核源代码目录树简介 5 1.3.3
Linux
2.6内核的新特性 8 1.4 如何阅读本书 9 1.4.1 内核探索工具 10 1.4.2 推荐阅读方法 12 第2章 引导过程分析 14 2.1 内核镜像的构建过程 15 2.1.1 编译内核的步骤及分析 15 2.1.2 内核镜像构建过程分析 16 2.2 系统引导过程分析 18 2.2.1 傀儡引导扇区 18 2.2.2 探测系统资源 21 2.2.3 解压内核镜像 35 2.2.4 进入保护模式 40 2.2.5 系统最终初始化 47 2.3 系统引导过程总结 47 第3章 内存管理 50 3.1 基础知识 51 3.1.1 存储器地址 51 3.1.2 分段机制 52 3.1.3 分页机制 59 3.2 内核页表的初始化过程 65 3.2.1 启用分页机制 65 3.2.2 构建内核页表 68 3.3 物理内存的描述方法 76 3.3.1 内存节点 77 3.3.2 内存区域 81 3.3.3 物理页框 85 3.4 物理内存的初始化过程 86 3.4.1 探测系统物理内存 87 3.4.2 初始化内存分配器 89 3.5 物理内存的分配与回收 101 3.5.1 伙伴分配算法 101 3.5.2 对象缓冲技术 103 3.6 内核地址空间 105 3.6.1 常规映射地址空间 105 3.6.2 固定映射地址空间 107 3.6.3 长久内核映射空间 109 3.6.4 临时内核映射空间 116 3.6.5 非连续映射地址空间 119 第4章
进程
管理 128 4.1
进程
与线程的概念 129 4.1.1 程序与
进程
129 4.1.2
进程
与线程 129 4.2
进程
描述符 131 4.2.1
进程
标识符 132 4.2.2
进程
的状态 132 4.2.3
进程
上下文 134 4.2.4 当前
进程
139 4.3
进程
的组织形式 143 4.3.1
进程
标识符构成的哈希表 143 4.3.2 所有
进程
构成的双向链表 148 4.3.3 执行态
进程
组成的运行队列 149 4.3.4 阻塞态
进程
组成的等待队列 152 4.4
进程
的创建过程 155 4.4.1
进程
创建的接口函数 156 4.4.2
进程
创建的处理过程 162 4.5
进程
调度算法 177 4.5.1
进程
的分类 178 4.5.2
进程
优先级 178 4.5.3 时间片分配 181 4.5.4
进程
调度时机 182 4.6
进程
切换过程分析 183 4.6.1 选取合适
进程
183 4.6.2 完成上下文切换 184 4.7 空闲
进程
的初始化 187 4.7.1 空闲
进程
的内核态栈 187 4.7.2 空闲
进程
的内存描述符 188 4.7.3 空闲
进程
的硬件上下文 190 4.7.4 空闲
进程
的任务状态段 190 第5章
中
断和异常 192 5.1 基础知识 193 5.1.1
中
断和异常的定义 193 5.1.2
中
断和异常的分类 193 5.1.3
中
断和异常的对比 194 5.2 处理机制 195 5.2.1 IA32架构下的处理机制 195 5.2.2 Linu
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章