Hit-oslab lab3 report

源代码在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是不同的)

Hit-oslab lab3 report_第1张图片

6.得到process.log文件,利用实验指导给出的python文件分析:

//时间片15

Hit-oslab lab3 report_第2张图片

 

7.修改时间片:修改/include/linux/sched.h中的宏定义 #define INIT_TASK 第一行0,15,15 -> 0,30,30

Hit-oslab lab3 report_第3张图片

8.重新编译内核,重复5-6步分析对比。

 

//时间片30

Hit-oslab lab3 report_第4张图片

//时间片7

Hit-oslab lab3 report_第5张图片

可以发现,时间片过长或过短都会导致进程的平均等待时间变长,同时我发现linux0.11的时间片设定也并不是可以兼顾各种使用场景的,我认为应该针对特定的使用场景进行特定的优化。

 

你可能感兴趣的:(操作系统/汇编)