need_resched 是怎么使用的(ZT)
来源:互联网 发布:sql气压罐有效容积 编辑:程序博客网 时间:2024/06/11 05:04
终于在《情景》&think hard地情况下,想明白了!
一 系统调用do_fork()
1 当前进程调用fork()创建子进程,进入kernel
2 当前进程分一半多时间片给子进程,
3 如果当前进程时间片剩余为0,设定当前进程need_sched=1,
4 从系统调用退出
5 到达ret_from_sys_call
6 到达ret_with_reschedule
7 发现当前进程要求调度,跳转到reschedule
8 调用schedule()
9 schedule()处理当前进程的调度要求,
10 如果有其他进程可运行,将在schedule()内发生切换。
二 定时钟断do_timer()
11 当定时钟断发生时8235->irq0->do_timer_interrupt()->do_timer()
12 ->update_process_times()递减当前进程的时间片,
13 如果当前进程时间片为0,设定当前进程need_sched=1,
14 从中断调用退出,
15 到达ret_from_intr
16 到达ret_with_reschedule ,
17 发现当前进程要求调度,跳转到reschedule
18 调用schedule()
19 schedule()处理当前进程的调度要求,
20 如果有其他进程可运行,将在schedule()内发生切换。
三 唤醒进程wake_up_process()
21 当前进程调用fork()创建子进程,进入kernel
22 当前进程调用了wake_up_process来唤醒进程x
23 使进程x状态为RUNNING,并加入runqueue队列,
24 调用reschedule_idle()
25 发现进程x比当前进程更有资格运行,设定当前进程need_sched=1,
26 从系统调用退出
27 到达ret_from_sys_call
28 到达ret_with_reschedule
29 发现当前进程要求调度,跳转到reschedule
30 调用schedule()
31 schedule()处理当前进程的调度要求,
32 如果有其他进程可运行,将在schedule()内发生切换。这次大多数可能切换到进程x
四 改变进程的调度策略setscheduler()
33 进入系统调用setscheduler()
34 改变进程x的调度策略
35 提前进程x在runqueue队列的位置
36 设定当前进程need_sched=1,
37 从系统调用退出
38 到达ret_from_sys_call
39 到达ret_with_reschedule
40 发现当前进程要求调度,跳转到reschedule
41 调用schedule()
42 schedule()处理当前进程的调度要求,
43 如果有其他进程可运行,将在schedule()内发生切换。
五 系统调用礼让 sys_sched_yield()
44 进入系统调用sys_sched_yield()
45 如果有其他的进程,进行礼让,
46 设定当前进程need_sched=1,
47 从系统调用退出
48 到达ret_from_sys_call
49 到达ret_with_reschedule
50 发现当前进程要求调度,跳转到reschedule
51 调用schedule()
52 schedule()处理当前进程的调度要求,
53 如果有其他进程可运行,将在schedule()内发生切换。
need_sched 表示CPU从系统空间返回到用户空间前夕要进行一次调度。
一 系统调用do_fork()
1 当前进程调用fork()创建子进程,进入kernel
2 当前进程分一半多时间片给子进程,
3 如果当前进程时间片剩余为0,设定当前进程need_sched=1,
4 从系统调用退出
5 到达ret_from_sys_call
6 到达ret_with_reschedule
7 发现当前进程要求调度,跳转到reschedule
8 调用schedule()
9 schedule()处理当前进程的调度要求,
10 如果有其他进程可运行,将在schedule()内发生切换。
二 定时钟断do_timer()
11 当定时钟断发生时8235->irq0->do_timer_interrupt()->do_timer()
12 ->update_process_times()递减当前进程的时间片,
13 如果当前进程时间片为0,设定当前进程need_sched=1,
14 从中断调用退出,
15 到达ret_from_intr
16 到达ret_with_reschedule ,
17 发现当前进程要求调度,跳转到reschedule
18 调用schedule()
19 schedule()处理当前进程的调度要求,
20 如果有其他进程可运行,将在schedule()内发生切换。
三 唤醒进程wake_up_process()
21 当前进程调用fork()创建子进程,进入kernel
22 当前进程调用了wake_up_process来唤醒进程x
23 使进程x状态为RUNNING,并加入runqueue队列,
24 调用reschedule_idle()
25 发现进程x比当前进程更有资格运行,设定当前进程need_sched=1,
26 从系统调用退出
27 到达ret_from_sys_call
28 到达ret_with_reschedule
29 发现当前进程要求调度,跳转到reschedule
30 调用schedule()
31 schedule()处理当前进程的调度要求,
32 如果有其他进程可运行,将在schedule()内发生切换。这次大多数可能切换到进程x
四 改变进程的调度策略setscheduler()
33 进入系统调用setscheduler()
34 改变进程x的调度策略
35 提前进程x在runqueue队列的位置
36 设定当前进程need_sched=1,
37 从系统调用退出
38 到达ret_from_sys_call
39 到达ret_with_reschedule
40 发现当前进程要求调度,跳转到reschedule
41 调用schedule()
42 schedule()处理当前进程的调度要求,
43 如果有其他进程可运行,将在schedule()内发生切换。
五 系统调用礼让 sys_sched_yield()
44 进入系统调用sys_sched_yield()
45 如果有其他的进程,进行礼让,
46 设定当前进程need_sched=1,
47 从系统调用退出
48 到达ret_from_sys_call
49 到达ret_with_reschedule
50 发现当前进程要求调度,跳转到reschedule
51 调用schedule()
52 schedule()处理当前进程的调度要求,
53 如果有其他进程可运行,将在schedule()内发生切换。
need_sched 表示CPU从系统空间返回到用户空间前夕要进行一次调度。
- need_resched 是怎么使用的(ZT)
- need_resched 是怎么使用的(ZT)
- CreateDIBSection 是怎么使用内存的?
- cocos2dx是怎么使用lua引擎的
- JNI的使用(ZT)
- zt 女人是用来疼的
- 唯一缺的是SB用户(ZT)
- zt围棋是世界上最大的伪科学
- 我的丈夫是个程序员zt
- 【ZT】delete this的使用
- 【ZT】使用JQuery的each
- 看看360的同学日常是怎么使用python的
- 怎么是空白的
- OEMAddressTable 内存映射表是怎么被wince使用的
- MySQL是怎么使用索引条件下推的?
- Composer是干嘛的,怎么用它。(2) 使用
- Observer Pattern 在C#是怎么使用的(一)
- MySQL是怎么使用索引条件下推的?
- fib_info
- 日期
- 回首间
- 偶得女朋友^_^
- 深入浅出的《网络socket编程指南》
- need_resched 是怎么使用的(ZT)
- 项目又延长了一周
- 如何在内核中唤醒和睡眠用户进程??(zt)
- 验证控件
- 揭开隐藏的面纱
- XP以Registry限制电脑使用权
- 最近在linux下学习一段时间
- 路由功能、交换性能的三层交换~
- 轻轻松松双机互联!