3-6 课堂练习3.3:进程的调度
在内存中一般存放着数目远大于计算机 CPU 个数的进程,进程调度的作用是选择合适的进程来使用CPU,进程调度器对系统性能有重要影响。本实训分析Linux 0.11的进程调度算法,该操作系统采用了一种时间片与优先级相结合的调度算法,在当前进程的时间片用完后会进行调度,调度时会选择剩余时间片最大的就绪进程。
第1关第一次由时钟中断引发的进程调度
任务描述
本关任务回答问题: 第一次由时钟中断引发进程调度时: 1.当时 bochs 虚拟机输出的 0/1 字符串是什么?(忽略空格) 2.该次中断是第几次时钟中断?当时处于几号进程的上下文? 该进程的剩余时间片是多少? 3.1 号进程当时处于什么状态?1 号进程控制块的 alarm 成员的值是多少?该定时器截止时间到了吗?
相关知识
为了完成本关任务,你需要掌握: 1.如何跟踪到由时钟中断引发的进程调度; 2.如何查看进程的剩余时间片; 3.如何查看 1 号进程的信息; 4.进程控制块中的 alarm 成员的作用是什么?
实验准备
本关卡使用版本 1 内核进行分析,内核文件存放在/data/workspace/myshixun/exp1
中,使用 gdb 进行调试。
实验过程及答案
实验过程
ls /data/workspace/myshixun/exp1 cp /data/workspace/myshixun/exp1/1.tgz ~/os
cd os/linux-0.11-lab tar -zxvf ../1.tgz 1
rm -rf cur ln -s 1 cur ls
cd 1/linux make
cd ../.. ./rungdb
另开一个终端
cd os/linux-0.11-lab ./mygdb
答案
第2关前三次进程调度
任务描述
本关任务回答问题:
-
第一次进程调度时,当前进程是几号进程?内核函数调用栈的栈底函数是什么?其上一层函数是什么?0 号进程处于什么状态?1 号进程处于什么状态?选中了几号进程?
-
第二次进程调度时,当前进程是几号进程?内核函数调用栈的栈底函数是什么?其上一层函数是什么?0 号进程处于什么状态?1 号进程处于什么状态?选中了几号进程?
-
第三次进程调度时,当前进程是几号进程?内核函数调用栈的栈底函数是什么?其上一层函数是什么?0 号进程处于什么状态?1 号进程处于什么状态?选中了几号进程?
相关知识
为了完成本关任务,你需要掌握: 1.Linux 0.11 的进程调度算法是怎样的; 2.在执行一次 pause 系统调用时,可能引发几次进程调度; 3.如何查看进程的剩余时间片; 4.如何查看 1 号进程的信息。
环境准备
本关卡使用版本 1 内核进行分析,可以直接使用上一关卡的环境,使用 gdb 进行调试。
实验过程及答案
可以直接使用上一关卡的环境,使用 gdb 进行调试,如果需要配置请按如下操作。
实验过程
ls /data/workspace/myshixun/exp1 cp /data/workspace/myshixun/exp1/1.tgz ~/os
cd os/linux-0.11-lab tar -zxvf ../1.tgz 1
rm -rf cur ln -s 1 cur ls
cd 1/linux make
cd ../.. ./rungdb
另开一个终端
cd os/linux-0.11-lab ./mygdb
答案
3-7 课后作业3.3:进程的调度
在内存中一般存放着数目远大于计算机 CPU 个数的进程,进程调度的作用是选择合适的进程来使用CPU,进程调度器对系统性能有重要影响。本实训分析Linux 0.11的进程调度算法,该操作系统采用了一种时间片与优先级相结合的调度算法,在当前进程的时间片用完后会进行调度,调度时会选择剩余时间片最大的就绪进程。
第1关版本1.2内核的进程调度过程分析
任务描述
在内核版本 1.2(1.2.tgz)运行时,如果忽略掉空格,那么输出的字符序列用正则表达式描述是 010(10100)*,如下图所示:
本关任务回答问题: 1.从输出第 2 个字符1
到输出第 3 个字符1
,产生了几次调度?各调度的原因是什么? 2.从输出第 3 个字符1
到输出第 4 个字符1
,产生了几次调度?各调度的原因是什么? 3.从各进程的第二次循环开始,在一次循环期间,0 号进程会产生几次调度?1 号进程会产生几次调度?
相关知识
为了完成本关任务,你需要掌握: 1.Linux 0.11 的进程调度算法是怎样的; 2.如何跟踪到输出第 2 个字符1
; 3.如何判断产生进程调度的原因; 4.如果发生由系统调用中的延迟调度产生的进程调度,如何分析具体是由哪个系统调用的执行引发的; 5.在执行一次 pause 系统调用时,可能引发几次进程调度。
实验准备
本关卡使用版本 1.2 内核进行分析,版本 1.2 内核相对于版本 1 内核只修改了 schedule 函数,使得 0 号进程和 1 号进程交替执行,修改内容如下: 在1/linux/kernel/sched.c
中对以下内容进行修改。
@@ -107,6 +107,14 @@
int i,next,c;
struct task_struct ** p;
+ if (current == task[0])
+ next = 1;
+ else
+ next = 0;
+ task[next]->counter = 15;
+ switch_to(next);
+ return;
+
/* check alarm, wake up any interruptible tasks that have got a signal */
for(p = &LAST_TASK ; p > &FIRST_TASK ; --p)
实验过程及答案
实验过程
ls /data/workspace/myshixun/exp2 cp /data/workspace/myshixun/exp2/1.2.tgz ~/os
cd os/linux-0.11-lab tar -zxvf ../1.2.tgz 1.2
rm -rf cur ln -s 1.2 cur ls
cd 1.2/linux make
cd ../.. ./rungdb
另开一个终端
cd os/linux-0.11-lab ./mygdb
答案
第2关两个进程的严格交替输出
任务描述
本关任务: 只修改版本 1.2 内核的 schedule 函数,使得 0 号进程和 1 号进程严格交替输出信息,如下图所示:
相关知识
为了完成本关任务,你需要掌握: 1.Linux 0.11 的进程调度算法是怎样的; 2.如何判断产生进程调度的原因; 3.如果发生由系统调用中的延迟调度产生的进程调度,如何分析具体是由哪个系统调用的执行引发的; 4.在执行一次 pause 系统调用时,可能引发几次进程调度。
实验准备
本关卡使用版本 1.2 内核进行分析,版本 1.2 内核相对于版本 1 内核只修改了 schedule 函数,使得 0 号进程和 1 号进程交替执行,修改内容如下: 在1/linux/kernel/sched.c
中对以下内容进行修改。
@@ -107,6 +107,14 @@
int i,next,c;
struct task_struct ** p;
+ if (current == task[0])
+ next = 1;
+ else
+ next = 0;
+ task[next]->counter = 15;
+ switch_to(next);
+ return;
+
/* check alarm, wake up any interruptible tasks that have got a signal */
for(p = &LAST_TASK ; p > &FIRST_TASK ; --p)
实验过程及答案
可以直接使用上一关卡的环境,使用 gdb 进行调试,如果需要配置请按如下操作。
实验过程
ls /data/workspace/myshixun/exp2 cp /data/workspace/myshixun/exp2/1.2.tgz ~/os
cd os/linux-0.11-lab tar -zxvf ../1.2.tgz 1.2
rm -rf cur ln -s 1.2 cur ls
cd 1.2/linux make
cd ../.. ./rungdb
另开一个终端
cd os/linux-0.11-lab ./mygdb
打开桌面上vscode 改为如下所示
3-8 课后作业3.3.2:进程的调度
在内存中一般存放着数目远大于计算机 CPU 个数的进程,进程调度的作用是选择合适的进程来使用CPU,进程调度器对系统性能有重要影响。本实训分析Linux 0.11的进程调度算法,该操作系统采用了一种时间片与优先级相结合的调度算法,在当前进程的时间片用完后会进行调度,调度时会选择剩余时间片最大的就绪进程。
第1关版本 0 内核中的进程调度分析
任务描述
当程序 01.c 运行时(在版本 0 内核中),会在父子两个进程(假设分别为 6 号和 7 号进程)中分别输出字符串0
和1
。 请问:从 6 号进程刚创建完 7 号进程开始,在接下来的 9 次进程调度中,每次调度时,6 号和 7 号进程的剩余时间片是多少?选中的新进程是几号?
相关知识
为了完成本关任务,你需要掌握: 1.如何将文件放入 bochs 虚拟机; 2.如何跟踪到一个程序(在版本 0 内核中)的开始运行; 3.如何跟踪到一个进程刚创建完; 4.Linux 0.11 的进程调度算法是怎样的; 5.如何在每次进程调度时自动显示剩余时间片和新进程号。
实验准备
本关卡使用版本 0 内核进行分析,01.c 存放在/data/workspace/myshixun/exp5
中。
实验过程及答案
实验过程
ls /data/workspace/myshixun/exp2 cp /data/workspace/myshixun/exp2/1.2.tgz ~/os
cd os/linux-0.11-lab tar -zxvf ../1.2.tgz 1.2
rm -rf cur ln -s 1.2 cur ls
cd 1.2/linux make
cd ../.. ./rungdb
另开一个终端
cd os/linux-0.11-lab ./mygdb