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
学习时间 2分钟
操作时间 0分钟
按键次数 0次
实验次数 1次
报告字数 1635字
是否完成 完成