2019-2020-1 学号《Linux内核原理与分析》第三周作业
完成一个简单的时间片轮转多道程序内核代码
实验步骤
在实验楼环境下运行mykernel
- 查看mykernel相关源代码
- 查看mymain.c
(上图循环为启动操作系统的代码)
- 查看myinterrupt.c
修改内核
- 利用make重新编译
- 然后再次输入:qemu -kernel arch/x86/boot/bzImage 启动内核
代码分析
-
三个程序的主要作用
-
mypcb.h : 进程控制块PCB结构体定义。
-
mymain.c: 初始化各个进程并启动0号进程。
-
myinterrupt.c:时钟中断处理和进程调度算法。
-
-
系统分析
- 这里 my_timer_handler 函数会被内核周期性的调用,每调用1000次,就去将全局变量my_need_sched的值修改为1,通知正在执行的进程执行调度程序my_schedule。
在my_schedule函数中,完成进程的切换。
进程的切换分两种情况,一种情况是下一个进程没有被调度过,另外一种情况是下一个进程被调度过,可以通过下一个进程的state知道其状态。
进程切换依然是通过内联汇编代码实现,无非是保存旧进程的eip和堆栈,将新进程的eip和堆栈的值存入对应的寄存器中。
实验总结
- 通过本讲的学习和实验,我知道操作系统的两个核心功能是进程调度和中断机制
进程调度是指系统中处于就绪状态的进程对处理机的竞争是由进程调度程序来协调的。调度是依照确定的策略将一批进程排序,从就绪队列中移出一个进程并给它提供处理机的使用权。
中断机制是指在操作系统中,linux内核要对连接到计算机上的所有硬件设备进行管理,这是它份内的工作。而想要管理这些设备,首先要能和它们互通音信才行。
-
计算机有三个法宝:存储程序计算机、函数调用堆栈、中断。
-
操作系统有两把宝剑:中断上下文、进程上下文切换。
由于CPU只有一套寄存器,同一时间只能处理一个进程(暂且只考虑单核CPU),所以理论上只能单任务顺序执行,但基于三个法宝和两把宝剑,操作系统得以实现多任务操作。