概述
可以把内核看作是请求进行响应的服务器,这些请求可能来自在CPU上执行的进程,也可能来自发出中断请求的外部设备。这些请求可能引起竞争条件,因此需要采用适当的同步机制对这种情况进行控制。
一.内核如何为不同的请求提供服务
- 内核抢占:无论是抢占内核还是非抢占内核中,运行在内核态的进程都可以自动放弃CPU,比如,其原因可能是,进程由于等待资源而不得不转入睡眠状态;所有的进程切换都由宏switch_to来完成。抢占内核的主要特点是:一个在内核运行的进程,可能在执行内核函数期间被另外一个进程取代。使用内核可抢占的目的是减少用户态进程的分派延迟,即从进程变为可执行状态到它实际开始运行之间的时间间隔。内核抢占对执行及时被调度的任务的进程确实是有好处的,因为它降低了这种进程被另一个运行在内核态的进程延迟的风险。只有当内核正在执行异常处理程序(尤其是系统调用),而且内核抢占没有被显式地禁用时,才可能抢占内核。
- 什么时候同步是必需的:临界区一段代码,在其他的内核控制路径能够进入临界区前,进入临界区的内核控制路径必须全部执行完这段代码。交叉内核控制路径使内核开发者的工作变得复杂:那必须特别小心地识别出异常处理程序、中断处理程序、可延迟函数和内核线程中的临界区。一旦临界区被确定,就必须对其采用适当的保护措施,以确保在任意时刻只有一个内核控制路径位于临界区。
- 什么时候同步是不必要的:上章内核控制路径的同步(1)所有的中断处理程序响应来自PIC的中断并禁用IRQ线,此外,在中断处理程序结束之前,不允许产生相同的中断事件;(2)中断处理程序、软中断和tasklet既不可以被抢占也不能被阻塞,所以它们不可能长时间处于
最后
以上就是鲤鱼巨人为你收集整理的深入理解Linux内核(学习笔记)_第五章内核同步的全部内容,希望文章能够帮你解决深入理解Linux内核(学习笔记)_第五章内核同步所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复