当前位置:嗨网首页>书籍在线阅读

07-内核抢占

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

17.2 内核抢占

早期的Linux 1.x内核中没有内核抢占。这意味着当一个用户空间进程正在请求内核服务时,除非该进程处于阻塞状态(进入睡眠)并等待某个事件(一般是I/O事件)或者它请求的内核处理完成了,否则其他任务是不会被调度运行的。内核可抢占[3]则意味着当一个进程正在内核中运行时,即使它在内核中的处理还没有完成,另一个进程也可以抢占它并运行。图17-2说明了这一系列事件。

[3] 有趣的是,关于抢占(preemptable)一词的正确拼写方法还存在不少争论。我遵从Rick Lehrbaum通过网上问卷得到的调查结果:www.linuxdevices.com/articles/AT5136316996.html

在图17-2中,进程A通过系统调用进入内核。这可能是一个 write() 调用,用于向某个设备(比如控制台或磁盘文件)写入数据。当进程A正在内核中执行时,高优先级的进程B被一个中断唤醒了。这时,虽然进程A既没有被阻塞也没有完成它在内核中的处理,内核还是会抢占进程A并将处理器分配给进程B。

511.png

图17-2 内核抢占