- 论坛徽章:
- 1
|
本帖最后由 adidiaos丶丶 于 2016-12-15 20:05 编辑
中断的问题:
大家都知道中断上下文里面是不能睡觉的,我在网上看到这样一个描述: schedule()在切换进程时,保存当前的进程上下文(CPU寄存器的值、进程的状态以及堆栈中的内容),以便以后恢复此进程运行。中断发生后,内核会先保存当前被中断的进程上下文(在调用中断处理程序后恢复);但在中断处理程序里,CPU寄存器的值肯定已经变化了吧(最重要的程序计数器PC、堆栈SP等),如果此时因为睡眠或阻塞操作调用了schedule(),则保存的进程上下文就不是当前的进程context了.所以不可以在中断处理程序中调用schedule()。
这句话里面有三处提到进程上下文。蓝色、红色所说的进程上下文应该是同一个吧,粉色字体的进程上下文是指中断handler的上下文?是这样吗?当系统运行时候,某个时间段内,可能会有好多进程会被中断吧,内核是怎么管理这些被中断的进程的上下文呢?我应该看哪部分代码和数据结构呢?
锁的问题:
在一定的环境下锁的效率大概是 rcu > atomic > Spinlock >mutex这个排序是我认为的,可能有不对的。
内核里面给人的感觉是这些锁的使用为什么好像没有固定的章法,用起来都是很随意。
按我的理解应该大部分情况下使用rcu和atomic啊,但是rcu使用的是不多的。
|
|