Linux内核开发 — 进程调度
2014-09-09 10:51
218 查看
本节简单介绍内核开发中,进程调度的相关知识点。
非实时类调度策略
主动式抢占
当前进程因为需要等待资源等原因主动放弃执行权限,主动要求切换到下一个进程执行。
主动放弃CPU的例子:
current->state = TASK_INTERRUPTIBLE;
schedule();
被动式抢占
当前进程因为优先级、进程属性等原因被迫让出CPU执行权限。
1)用户抢占
在完成系统调用返回用户空间时
在完成中断处理后返回用户空间时
2) 内核抢占
·在不支持内核抢占的系统中,进程/线程一旦运行于内核空间,是不允许被抢占的,必须要等到内核线程执行完成、主动放弃CPU或者时间片耗尽后才会释放CPU。
·而在支持内核抢占的系统中, 高优先级的进程/线程是可以抢占正在内核空间运行的低优先级的进程/线程。
·但是在支持的内核抢占的系统中,以下四种情况也是不允许内核抢占的:
内核正在进行中断处理
内核正处于中断上下文
内核正在执行调度
进程持有自旋锁或者readlock/writelock等资源时
·Linux 为了保证在以上四种情况不会被抢占,抢占式内核提供了一个变量(preempt_count)用于记录以上状态。当内核进入以上四种状态时preempt_count变量会加1,当退出以上几种状态时preempt_count会减1,preempt_count 变量放置于thread_info结构体中。
选择下一个要运行的程序 (pick_next_task)
设置新进程的运行环境
进程上下文切换
什么是进程调度
进程调度就是在已经就绪的进程中选择一个最合适的进程执行的过程。进程调度策略
实时类调度策略非实时类调度策略
进程调度时机
当前进程因为需要等待资源等原因主动放弃执行权限,主动要求切换到下一个进程执行。
主动放弃CPU的例子:
current->state = TASK_INTERRUPTIBLE;
schedule();
当前进程因为优先级、进程属性等原因被迫让出CPU执行权限。
1)用户抢占
在完成系统调用返回用户空间时
在完成中断处理后返回用户空间时
2) 内核抢占
·在不支持内核抢占的系统中,进程/线程一旦运行于内核空间,是不允许被抢占的,必须要等到内核线程执行完成、主动放弃CPU或者时间片耗尽后才会释放CPU。
·而在支持内核抢占的系统中, 高优先级的进程/线程是可以抢占正在内核空间运行的低优先级的进程/线程。
·但是在支持的内核抢占的系统中,以下四种情况也是不允许内核抢占的:
内核正在进行中断处理
内核正处于中断上下文
内核正在执行调度
进程持有自旋锁或者readlock/writelock等资源时
·Linux 为了保证在以上四种情况不会被抢占,抢占式内核提供了一个变量(preempt_count)用于记录以上状态。当内核进入以上四种状态时preempt_count变量会加1,当退出以上几种状态时preempt_count会减1,preempt_count 变量放置于thread_info结构体中。
进程调度步骤
清理当前运行中的进程选择下一个要运行的程序 (pick_next_task)
设置新进程的运行环境
进程上下文切换
相关文章推荐
- Linux内核进程调度以及定时器实现机制(转)
- Linux内核进程调度schedule深入理解
- Linux内核学习笔记三——进程调度
- Linux内核-进程调度
- linux内核CFS进程调度策略
- linux内核进程调度以及定时器实现机制(转载)
- Linux内核——进程管理与调度
- linux内核--进程调度(一)
- Linux内核进程调度schedule深入理解
- Linux内核设计与实现之进程调度
- 深入分析Linux内核源码-第五章进程调度(时间片从何而来,如何分配给进程,讲解详细)
- Linux内核进程调度schedule深入理解
- Linux内核学习之四--进程、进程调度、系统调用、proc文件系统和内核异常分析
- LINUX内核设计思想之进程调度
- linux内核设计与实现笔记之第四章进程调度
- 嵌入式linux开发之我见-第一章 linux内核启动之后的第一件事—— init进程
- QNX驱动开发——操作系统之进程调度和进程通信
- Linux内核进程调度以及定时器实现机制
- linux内核--进程调度
- Linux内核设计与实现 读书笔记(4)进程的调度