完成一个简单的时间片轮转多道程序内核代码

陈良 + 原创作品转载请注明出处 + 《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. 总结

操作系统的运行过程就是不断地进行进程切换的过程,切换过程主要就是发生中断,保存现场再恢复现场的过程。