MIPS处理器下Linux调度器的调度时机
来源:互联网 发布:家装颜色搭配技巧知乎 编辑:程序博客网 时间:2024/05/17 01:55
1. Linux的调度器,N多书有介绍,但是这些介绍基本都是给个大致概念,具体还要看代码。这部分的实现,不同的内核版本有一定的差异,我看的内核版本是2.6.21.7。
2. 关于调度器,我的理解,无外乎3点:什么时候去检查是否需要调度(调度时机),如何选择应该运行的任务(调度策略),怎样做任务的切换。任务的切换,也就是上下文切换,相对简单。调度策略,Linux下有SCHED_RR, SCHED_FIFO,SCHED_OTHER, N多书上对他们差别的讲解足够,且易于理解。我主要学习了调度时机。
3. 由于要进行调度,需要调用schedule()函数,在Linux内核里搜索调用这个函数的地方,可以大致将调度时机分成如下4类:
a) 各种驱动主动的调用schedule函数,这种情况在代码里看到的最多;
b) 进程从中断返回时,调用ret_from_irq,ret_from_irq会检查need_sched, 如果thread_info->flag的TIF_NEED_RESCHED位置位,则调用函数preempt_schedule_irq()进而调用schedule. need_sched 在N多书里说是task_struct的一个成员,在实际实现的时候,作为thread_info->flag的一个Bit实现的,可以加速访问。
具体何处会设置need_sched标识,可以搜索函数set_tsk_need_resched(struct task_struct *tsk), set_need_resched(), 前者指定要设置的task,后者是设置current。可见一个主要的地方是在task_running_tick中,task_running_tick是在tick timer的中断中调用的,task_running_tick检查当前运行task的time_slice是否用完,如果用完,且是SCHED_RR,会把当前task放到rq->active的队尾&重新赋值time_slice。 如果是SCHED_FIFO,没time_slice概念。如果不是上面两种realtime的policy,还会将rq->active和expire进行调换。realtime的并不调换,说明在realtime下,如果有高优先级的处于task_running状态,低优先级的永远得不到运行,这和vxworks相同。
c)从异常返回时也会检查是否need_resched, 具体看代码;
d) 当进程调用函数,yield, sleep, exit等函数时,这些函数内部也会在改变task状态后,去调用下schedule。其中yield不改变进程状态,是将处理器让给同优先级的任务使用,sleep让给低优先级的使用。
4. 如果是SMP方式的多核,做balance的是SCHED_SOFTIRQ。
- MIPS处理器下Linux调度器的调度时机
- Linux进程调度时机
- Linux进程调度时机
- Linux进程调度时机
- Linux进程调度时机
- Linux 进程调度时机
- Linux调度时机
- Linux进程调度时机总结
- 调度时机
- Linux的进程调度时机(Schedule函数何时调用)
- Linux的进程调度时机(Schedule函数何时调用)
- Linux的进程调度时机(Schedule函数何时调用)
- Linux内核分析-9/进程的调度时机
- 处理器调度
- 处理器调度
- linux下任务的调度
- Linux内核分析:理解进程调度时机跟踪分析进程调度与进程切换的过程
- 理解进程调度时机跟踪分析进程调度与进程切换的过程(Linux)
- png图片透明色在IE6显示错误的问题解决方法
- .Net组件开发介绍 开发ajax控件
- fork与vfork
- POJ 1511 Invitation Cards //spfa
- 字符串的经典hash算法
- MIPS处理器下Linux调度器的调度时机
- acfun
- 排列组合问题之捆绑法和插空法
- 存储层次结构、cache、编译
- USB转串口之minicom的设置
- 将已经存在的文件在aspx网页中输出的方法
- TCP加密通讯附记,实践中出现的问题。
- System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本的解决方案【转】
- 如何在C#.Net中获取、屏蔽鼠标键盘消息?