操作系统(三)进程运行轨迹的跟踪与统计

Jan 于 2024-09-10 发布 浏览量

实验内容

现在的 Linux 0.11 采用 TSS(后面会有详细论述)和一条指令就能完成任务切换,虽然简单,但这指令的执行时间却很长,在实现任务切换时大概需要 200 多个时钟周期。

而通过堆栈实现任务切换可能要更快,而且采用堆栈的切换还可以使用指令流水的并行优化技术,同时又使得 CPU 的设计变得简单。所以无论是 Linux 还是 Windows,进程/线程的切换都没有使用 Intel 提供的这种 TSS 切换手段,而都是通过堆栈实现的。

本次实践项目就是将 Linux 0.11 中采用的 TSS 切换部分去掉,取而代之的是基于堆栈的切换程序。具体的说,就是将 Linux 0.11 中的 switch_to 实现去掉,写成一段基于堆栈切换的代码。

本次实验包括如下内容:

实验过程

添加process.c

修改main.c、printk.c、fork.c、sched.c、exit.c

修改后编译测试

cd path/oslab/linux-0.11
make all

./run
#进入bochs
gcc -o process process.c
sync

#关闭bochs后查看
./mount-hdc

vi hdc/usr/root/process.c

chmod +x process.c

python stat_log.py hdc/var/process.log 6 7 8 9 10 11 12 13 14 15 16

修改linux-0.11/include/linux/sched.h

#define INIT_TASK \
    { 0,15,15, 
// 上述三个值分别对应 state、counter 和 priority;我们修改第三个值(默认值15)

修改为15

image-20240910113057502

修改为5

image-20240910113145733

修改为25

image-20240910113241062

修改为50

image-20240910113324095

结论: 时间片变小,进程因时间片到时产生的进程调度次数变多,该进程等待时间越长。 然而随着时间片增大,进程因中断或者睡眠进入的进程调度次数也增多,等待时间随之变长。 故而需要设置合理的时间片,既不能过大,也不能过小。

修改文件如下

zip

作于2024年09月10日