课堂练习3.3:进程的调度

fc12054ca0be43c4a1b8b76d42ddced4.png

3-6 课堂练习3.3:进程的调度

在内存中一般存放着数目远大于计算机 CPU 个数的进程,进程调度的作用是选择合适的进程来使用CPU,进程调度器对系统性能有重要影响。本实训分析Linux 0.11的进程调度算法,该操作系统采用了一种时间片与优先级相结合的调度算法,在当前进程的时间片用完后会进行调度,调度时会选择剩余时间片最大的就绪进程。

dfc3577829444772a763f26ad4892396.png

 

第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

94131b9c442641aca067c450afc62e04.png

cd os/linux-0.11-lab
tar -zxvf ../1.tgz 1

de0ebd3263cc4230a9de53bf430dcc0c.png

rm -rf cur
ln -s 1 cur
ls

f12d91d64d9c4b5db1cbd88daf504c59.png

cd 1/linux
make

ee35757477f1428b93032742a723085e.png

cd ../..
./rungdb

23f0bde27ee344dd940cda4d4cb7acf8.png

另开一个终端

cd os/linux-0.11-lab
./mygdb

164f5c0adaf1445daea419b6f8c24e68.png

49cdd8b79f824a4f9b3d5e3b9784d557.png945975a85d6848a1af37c67187fd9c0f.pnge82fc7459fe04417a1e12c30e98a74d7.png383ada4bf14144d0889177734c86f6d1.png

答案

3ac61a5ad0a94d70916dcf5d13226bd8.png

 

第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

94131b9c442641aca067c450afc62e04.png

cd os/linux-0.11-lab
tar -zxvf ../1.tgz 1

de0ebd3263cc4230a9de53bf430dcc0c.png

rm -rf cur
ln -s 1 cur
ls

f12d91d64d9c4b5db1cbd88daf504c59.png

cd 1/linux
make

ee35757477f1428b93032742a723085e.png

cd ../..
./rungdb

23f0bde27ee344dd940cda4d4cb7acf8.png

另开一个终端

cd os/linux-0.11-lab
./mygdb

164f5c0adaf1445daea419b6f8c24e68.png

8e87d604c22e439494a228357716f086.png 8ebcf9ad3ed849c18b405c15e41d17cf.png 1ff8e3b04a3f44528b6439a63e9ae0b4.png 251fb5b957434bfcac17eb1f2befb149.png 0003aeeaba194f7494f63156b96a5863.png 3ea710b0578f44f2a1a17dcce19530d7.png 0e7f3516e3234cde80d33294674d7530.png 3c80c730a99a44478935ede9c98f2ca2.png dab329ff4a9b43d7a4a0f22e92c8d6d6.png 1ed2013797f24448adb99641d2129135.png c40c0f9ee03843328bd95ddd5ec5e4ab.png

答案

ac8a5b4ae7a34bdbae2be00293e871ae.png

 

3-7 课后作业3.3:进程的调度

在内存中一般存放着数目远大于计算机 CPU 个数的进程,进程调度的作用是选择合适的进程来使用CPU,进程调度器对系统性能有重要影响。本实训分析Linux 0.11的进程调度算法,该操作系统采用了一种时间片与优先级相结合的调度算法,在当前进程的时间片用完后会进行调度,调度时会选择剩余时间片最大的就绪进程。

cdeadc341b584bb9badb58932bcbb7cc.png

第1关版本1.2内核的进程调度过程分析

任务描述

在内核版本 1.2(1.2.tgz)运行时,如果忽略掉空格,那么输出的字符序列用正则表达式描述是 010(10100)*,如下图所示:

 

9074aa738c98aa476a09b57a754296c1.png

本关任务回答问题: 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

738082511c60406abc575fae49b02ed5.png

cd os/linux-0.11-lab
tar -zxvf ../1.2.tgz 1.2

dafe2d003ce146669639f70bce4e2d4c.png

rm -rf cur
ln -s 1.2 cur
ls
7992f03cf27142838731de06b6b52fe3.png

 

cd 1.2/linux
make

fb5931e250b64c318b84b9afb6e551f5.png

cd ../..
./rungdb

23f0bde27ee344dd940cda4d4cb7acf8.png

另开一个终端

cd os/linux-0.11-lab
./mygdb

164f5c0adaf1445daea419b6f8c24e68.png

20680832adf045b294ed5ed683773eb1.png2c769cf4f5394674baaed2fa48088471.png565b8a63989c40018b58391da4eac9a8.png387379fe28e348e0b5918af7b4de38ce.pngd8eb9746ab034526b46a8a57f6b4127e.pngfcec6821ad0c4fb79646eeafcaf3913a.png99a6e72d0d504f1c94f4fc99cae74aad.png

答案

3ae69b842c014e82ac2025b8d8b13a37.png

 

第2关两个进程的严格交替输出

任务描述

本关任务: 只修改版本 1.2 内核的 schedule 函数,使得 0 号进程和 1 号进程严格交替输出信息,如下图所示:

 

b188121b2d86203d8cf3e39048119faf.png

相关知识

为了完成本关任务,你需要掌握: 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

738082511c60406abc575fae49b02ed5.png

cd os/linux-0.11-lab
tar -zxvf ../1.2.tgz 1.2

dafe2d003ce146669639f70bce4e2d4c.png

rm -rf cur
ln -s 1.2 cur
ls
7992f03cf27142838731de06b6b52fe3.png

 

cd 1.2/linux
make

fb5931e250b64c318b84b9afb6e551f5.png

cd ../..
./rungdb

23f0bde27ee344dd940cda4d4cb7acf8.png

另开一个终端

cd os/linux-0.11-lab
./mygdb

164f5c0adaf1445daea419b6f8c24e68.png

打开桌面上vscode e5f545ce8b2e4314b0b9bd78b70ccbdf.png 0145cd58e893463da4eb5f97ea7d57a1.png 1fc5a94b31604ce78ac58483a33e5788.png c2149977068444208557aeb046325971.png 1aaea2a4610d451bb6e2f28fa5bc0c50.png 6d7a05d0351a415892c42a8ad4dbffc2.png改为如下所示 441818334ff747808481f8edd81b7be5.png
f869229e560f465d856979c5b9175a65.png 470712440e754e3b8da6507f32e7b402.png 3716b825731743bbbaff12c964b3609a.png

3-8 课后作业3.3.2:进程的调度

在内存中一般存放着数目远大于计算机 CPU 个数的进程,进程调度的作用是选择合适的进程来使用CPU,进程调度器对系统性能有重要影响。本实训分析Linux 0.11的进程调度算法,该操作系统采用了一种时间片与优先级相结合的调度算法,在当前进程的时间片用完后会进行调度,调度时会选择剩余时间片最大的就绪进程。

 

 

 

第1关版本 0 内核中的进程调度分析

任务描述

当程序 01.c 运行时(在版本 0 内核中),会在父子两个进程(假设分别为 6 号和 7 号进程)中分别输出字符串01。 请问:从 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

738082511c60406abc575fae49b02ed5.png

cd os/linux-0.11-lab
tar -zxvf ../1.2.tgz 1.2

dafe2d003ce146669639f70bce4e2d4c.png

rm -rf cur
ln -s 1.2 cur
ls
7992f03cf27142838731de06b6b52fe3.png

 

cd 1.2/linux
make

fb5931e250b64c318b84b9afb6e551f5.png

cd ../..
./rungdb

23f0bde27ee344dd940cda4d4cb7acf8.png

另开一个终端

cd os/linux-0.11-lab
./mygdb

164f5c0adaf1445daea419b6f8c24e68.png

 

  • 14
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
实验内容是进行进程调度模拟程序,假设有10个进程需要在CPU上执行。根据实验要求,我们采用先进先出调度算法,简称FIFO。首先,我们需要了解FIFO调度算法的原理和实现过程。 FIFO调度算法是一种简单且常用的调度算法,它按照进程到达的顺序进行调度。在该算法中,先到达的进程将被先执行,后到达的进程将排在后面等待执行。不论进程的优先级和执行时间长短,FIFO调度算法都严格地按照先到先执行的原则进行调度。 接下来,我们使用模拟程序进行实验。首先,我们需要准备10个进程,每个进程都有自己的进程号和执行时间。这些进程将按照到达的顺序进行排序,先到达的进程先执行。当进程执行完成后,下一个进程将开始执行。 为了更好地模拟实验情况,我们可以使用计时器来记录进程执行的时间。当某个进程的执行时间达到预定时间后,它将被置于等待队列中,而下一个进程将开始执行。当所有进程执行完毕时,我们可以得出FIFO调度算法的执行结果。 通过这个实验,我们可以更好地理解FIFO调度算法的工作原理和效果。我们可以观察到,FIFO调度算法有一定的先来先服务的优势,但也可能导致后到达的进程需要等待较长时间才能执行。 总之,通过这个实验,我们可以对进程调度的FIFO算法有更深入的认识,了解先来先服务的特点和不足,并为后续的调度算法研究提供参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ItsNorth

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值