“操作系统原理与实践(南阳理工学院)”实验报告

进程运行轨迹的跟踪与统计

1、1.内核init/main.c修改如下

①打开main.c

②修改

向kernel/printk.c中添加打印日志的功能

寻找进程切换点

3.1新建(N)状态的切换点,

在kernel/fork.c修改内容:

3.2 就绪(J)状态

(1)在此处为准备完毕的时候

在3.1中已经修改

(2)另一个就绪状态是在schedule()函数中

位置kernel/sched.c

(3)进程时间片到期。

位置kernel/sched.c

(4)转到就绪态,在sleep_on()中

位置kernel/sched.c

(5)在interruptible_sleep_on()中

位置kernel/sched.c(6)在wake_up()中。唤醒不可中断

位置kernel/sched.c

3.3 运行(R)状态

在上面3.2的“(3)进程时间片到期”已经修改

3.4 睡眠(W)状态:运行到睡眠依靠的是sleep_on()和interruptible_sleep_on(),还有进程主动睡觉的系统调用sys_pause()和sys_waitpid();

(1)sys_pause()

位置kernel/sched.c

2)sleep_on()

在上面3.2的“(4)转到就绪态,在sleep_on()中”已经添加

(3)interruptible_sleep_on()

在上面3.2的“(5)在interruptible_sleep_on()中” 已经添加

(4)在exit.c中的sys_waitpid()中3.5 退出(E)状态

在上面3.4的“(4)在exit.c中的sys_waitpid()中”已经添加

重新编译内核

4 创建进程。process.c,将process.c 传到内核根文件系统中,重启bochs。

运行oslab目录下的mount-hdc,挂载虚拟硬盘:

cd ~/oslab/oslab

sudo ./mount-hdc

cd hdc/usr/root

cd ~/oslab/oslab

sudo umount hdc

cd linux-0.11

make

../run

ls

gcc -o process process.c

./process

tail -f /var/process.log

图片描述

图片描述

图片描述

图片描述

图片描述

图片描述

图片描述

图片描述

最新评论
暂无评论~