源代码在github库:
https://github.com/Focus5679/hit-oslab
1.编写process.c文件
参考:
https://www.cnblogs.com/dongguolei/p/8086346.html //fork的使用
https://www.cnblogs.com/LUO77/p/5804436.html //wait/waitpid的使用
2.在/init/main.c中添加建立日志的代码语句
参考:main.c
3.在/kernerl/printk.c中添加fprintk函数
参考:printk.c
4.在多个系统文件中找到进程切换的语句,并添加相应的日志记录语句。
fork.c:
copy_process()函数 //1.创建进程2.使进程进入就绪状态。
sched.c:
schedule()函数 //1.检测alarm,从可中断睡眠状态->就绪状态
//2.选出运行时间短的进程运行,从就绪状态->运行状态
//3.将正在运行的进程替换,从运行状态->就绪状态
sys_pause()函数 //将进程从运行的进程进入可中断睡眠,从运行状态->睡眠状态
sleep_on()函数 //1.将进程从运行的进程进入不可中断睡眠,从运行状态->睡眠状态
//2.唤醒队列中的睡眠进程,睡眠状态->就绪状态
interruptible_sleep_on() //上同
wake_up() //唤醒一个进程,睡眠状态->就绪状态
exit.c:
do_exit()函数 //程序退出,运行状态->退出状态
sys_waitpid()函数 //等待其他进程,运行状态->睡眠状态
5.将process.c拷贝到linux0.11下编译运行:(注意此处的main.c就是process.c 与系统中的main.c是不同的)
6.得到process.log文件,利用实验指导给出的python文件分析:
//时间片15
7.修改时间片:修改/include/linux/sched.h中的宏定义 #define INIT_TASK 第一行0,15,15 -> 0,30,30
8.重新编译内核,重复5-6步分析对比。
//时间片30
//时间片7
可以发现,时间片过长或过短都会导致进程的平均等待时间变长,同时我发现linux0.11的时间片设定也并不是可以兼顾各种使用场景的,我认为应该针对特定的使用场景进行特定的优化。