linux0.11进程调度分析
来源:互联网 发布:西咸新区大数据交易所 编辑:程序博客网 时间:2024/04/30 13:06
10ms时钟中断 --> 时钟中断函数timer_interrupt,将jiffier加1 --> 调用do_timer函数,将当前进程counter计数减1,如果--counter大于0,则返回继续执行该任务,否则 --> 调用schedule函数,代码如下:
void schedule(void){int i,next,c;struct task_struct ** p;/* check alarm, wake up any interruptible tasks that have got a signal */for(p = &LAST_TASK ; p > &FIRST_TASK ; --p)if (*p) {if ((*p)->alarm && (*p)->alarm < jiffies) {(*p)->signal |= (1<<(SIGALRM-1));(*p)->alarm = 0;}if (((*p)->signal & ~(_BLOCKABLE & (*p)->blocked)) &&(*p)->state==TASK_INTERRUPTIBLE)(*p)->state=TASK_RUNNING;}/* this is the scheduler proper: */while (1) {c = -1;next = 0;i = NR_TASKS;p = &task[NR_TASKS];while (--i) {if (!*--p)continue;if ((*p)->state == TASK_RUNNING && (*p)->counter > c)c = (*p)->counter, next = i;}if (c) break; // 如果找到最大counter不为0的任务,则跳出while(1),切换到next任务,或者没有找到state==0的任务,则也跳出while(1),切换到任务0。for(p = &LAST_TASK ; p > &FIRST_TASK ; --p)if (*p)(*p)->counter = ((*p)->counter >> 1) +(*p)->priority;}switch_to(next);}
注意:任务0并没有在任务结构指针数组中,FIRST_TASK 指向的是init_task。
0 0
- linux0.11进程调度分析
- Linux0.11内核分析三之进程调度
- linux0.11分析之创建进程
- 由Linux0.11进程调度小窥内存分段机制
- Linux0.11内核--进程的调度schedule和switch_to解析
- 对Linux0.11 中 进程0 和 进程1分析
- Linux0.12任务调度与进程切换
- linux0.11中的进程
- linux0.11 进程切换
- Linux0.11 进程0
- linux0.11init进程及shell原理分析
- Linux0.11内核--进程的调度(就绪态和运行态之间的转换)
- Linux0.11内核--进程的调度(运行态(就绪态)和睡眠态之间的转换)
- 《Linux0.11内核完全注释》读后小结 --- 进程调度与信号
- Linux0.11内核--进程的调度(就绪态和运行态之间的转换)
- 由linux0.11进程调度小窥内存分段机制(转)
- linux0.11相关进程数据结构
- Linux0.11内核进程数据结构
- 第16周-统计小写字母出现次数并排序
- kindel 乱码
- C++指向常对象的指针变量
- navigation的pushViewController卡顿问题
- 封装同步的UIActionSheet
- linux0.11进程调度分析
- 混迹CSDN也有一些时日了,决定从今天开始记录我的程序生涯中的点点滴滴
- 17230 计算轴承半径[C]
- Sqlite SQL格式化输入函数splite3_mprintf
- I2C总线
- 紫外线消毒器:紫外线杀菌消毒装置的技术要求详解
- Java虚拟机学习 - 体系结构 内存模型
- NSSortDescriptor:Array,Set和Core Data中排序的实现
- 走马观花: Linux 系统调用 open 七日游(一)