完成一个简单的时间片轮转多道程序内核代码
陈良 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://www.xuetangx.com/courses/course-v1:ustcX+USTC001+_/about
1. 打开mymain.c文件:
每循环10万次后打印一行提示。
2. 打开myinterrupt.c文件:
周期性my_timer中断并输出一行提示。
3. 执行qemu:
4. 分析精简的操作系统程序:
myinterrupt.c中的my timer调度
timer没计数1000次就将调度信息my_need_sched设置为1,需要调度。
之后分析mymain.c:
每循环1千万次后检查一次my_need_sched是否被timer设置为了1,如果设置为1,执行调度程序
×以下是进程切换
图中描绘了切换进程的过程
(1)首先将ebp寄存器压栈
(2)接着将esp寄存器存入prev的esp内
(3)再把next的esp提取到esp寄存器内
(4)把1:位置保存到eip寄存器中
(5)把next的eip压栈
5. 总结
操作系统的运行过程就是不断地进行进程切换的过程,切换过程主要就是发生中断,保存现场再恢复现场的过程。