1、内核
看做是不断对请求进行响应的服务器
内核服务
2 内核抢占
内核抢占特点:一个内核态运行的进程,可能在执行内核函数期间被另外一个进程取代
用户抢占:内核即将返回用户空间的时候,如果need resched标志被设置,会导致schedule()被调用,此时就会发生用户抢占。在内核返回用户空间的时候,它知道自己是安全的。所以,内核无论是在从中断处理程序还是在系统调用后返回,都会检查need resched标志。如果它被设置了,那么,内核会选择一个其他(更合适的)进程投入运行。
简而言之,用户抢占在以下情况时产生:
(1)从系统调返回用户空间。
(2)从中断处理程序返回用户空间。
内核抢占目的:
减少用户态进程的分派延迟(diapatch tatency),即从进程变为可执行状态到它实际开始运行之间的时间间隔。
什么情况不允许内核抢占:当被current_thread_info()宏所引用的thread_info描述符的preempt_count字段大于0时,就禁止内核抢占。
内核抢占时机:只有当内核正在执行异常处理程序(尤其是系统调用),而且内核抢占没有被显式的禁用时(即preempt_count=0),才可能抢占内核。本地CPU必须打开本地中断,否则无法完成内核抢占。
3 同步原语