中断 & 时间管理
- 中断和中断处理
- 中断就是由硬件来打断操作系统,内核会随时响应中断。
- 中断处理程序就是普通的C函数,不过它们运行在中断上下文中(原子上下文)。中断不能被阻塞,这限制了它们所能做的事情。
- 上半部和下半部,中断处理程序是上半部,能够被允许稍后完成的工作会推迟到下半部。例子:网卡接受数据,拷贝最新的数据到内存非常重要,需要在上半部,数据的处理和操作在下半部执行。
- 进程上下文可以睡眠,但是中断上下文不可以睡眠,中断上下文的代码应该迅速简洁,尽量把工作从中断中抽离出来放到下半部执行。
- 内核提供的接口包括注册和注销中断处理程序,禁止中断,屏蔽中断等
- 下半部和推后执行的工作
- 为什么要工作推后执行以及在什么时候推后执行非常关键,你希望尽量减小中断处理程序需要完成的工作量。
- 下半部分可以稍后执行,而且执行期间可以响应中断。
- 下半部的实现:软中断,tasklet,工作队列。如果推后执行的任务需要睡眠,那么就选择工作队列,不需要睡眠就选择另外两种。下半部中还相当程度的用到了同步和并发。
- 时间概念对计算机来说有些模糊,事实上内核必须要在硬件的帮助下才能计算和管理时间。硬件为系统提供了一个系统定时器,系统定时器以某种频率自行触发,该频率可以通过编程预定,称作节拍率
- 时钟中断对管理操作系统尤为重要。更高的时钟中断频率能使内核定时器以更高的频率和准确度运行,提高进程的抢占的准确度,但是也会使系统的负担加重
- 定时器
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通