课堂练习3.3:进程的调度

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 号进程)中分别输出字符串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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/231804.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文件重命名:轻松高效,批量重命名文件只需掌握一点技巧

在日常工作和生活中,经常要对文件进行重命名。有时候可能要对一批文件进行重命名,如果一个个手动重命名,不仅费时费力,还容易出错。如何掌握一些文件重命名的技巧,那就能轻松高效地完成这项任务。接下来就讲解云炫文件…

华为ensp实验——基于全局地址池的DHCP组网实验

目录 前言实验目的实验内容实验结果 前言 该实验基于华为ensp,版本号是1.3.00.100 V100R003C00SPC100,只供学习和参考,不作任何商业用途。 具体的DHCP命令可以看系列文章链接,计算机网络实验(华为eNSP模拟器&#xff…

win11+RTX4070Ti 安装 CUDA + cuDNN(图文教程)

win11RTX4070TI 安装 CUDA cuDNN(图文教程) 教程基本信息介绍查看电脑是否有最新显卡驱动并确定已安装下载CUDA安装CUDA查看CUDA是否安装成功安装cuDNN验证cuDNN是否安装成功 教程基本信息介绍 此教程为本人安装记录,仅供参考 本教程时间&am…

BI技巧丨RowNumber应用介绍

白茶在之前的文章中&#xff0c;给大家介绍过Rank函数的应用场景&#xff0c;其实与Rank函数同时推出的还有RowNumber函数&#xff0c;二者之间有一些差异&#xff0c;但是总体应用的场景基本类似。 RowNumber函数基本语法 ROWNUMBER ( [<relation>][, <orderBy>…

CSPNet: A New Backbone that can Enhance Learning Capability of CNN(2019)

文章目录 -Abstract1 Introduction2 Related workformer work 3 Method3.1 Cross Stage Partial Network3.2 Exact Fusion Model 4 Experiments5 Conclusion 原文链接 源代码 - 梯度信息重用&#xff08;有别于冗余的梯度信息&#xff09;可以减少计算量和内存占用提高效率&am…

算法:合并两个有序数组(双指针)

时间复杂度 O(m n)&#xff0c;空间复杂度 O(1) /*** param {number[]} nums1* param {number} m* param {number[]} nums2* param {number} n* return {void} Do not return anything, modify nums1 in-place instead.*/ var merge function(nums1,m,nums2,n) {let p1 m-1…

redis之缓存穿透,击透,雪崩~

以下为一个我们正常的缓存流程&#xff1a; 缓存雪崩&#xff1a; 在双十一的时候&#xff0c;淘宝的首页访问量是非常大的&#xff0c;所以它的很多数据是放在redis缓存里面&#xff0c;对应redis中的key&#xff0c;假设设置了缓存失效的时间为3小时&#xff0c;超过这三个小…

【Hadoop_02】Hadoop运行模式

1、Hadoop的scp与rsync命令&#xff08;1&#xff09;本地运行模式&#xff08;2&#xff09;完全分布式搭建【1】利用102将102的文件推到103【2】利用103将102的文件拉到103【3】利用103将102的文件拉到104 &#xff08;3&#xff09;rsync命令&#xff08;4&#xff09;xsync…

smarty模版 [BJDCTF2020]The mystery of ip 1

打开题目 点击flag给了我们一个ip 点击hint&#xff0c;查看源代码处告诉了我们要利用这个ip bp抓包&#xff0c;并添加X-Forward-For头 所以这道题是XFF可控 本来联想到XFF漏洞引起的sql注入&#xff0c;但是我们无论输入什么都会正常回显&#xff0c;就联想到ssti注入 我们…

前端开发_移动Web+动画

平面转换 作用&#xff1a;为元素添加动态效果&#xff0c;一般与过渡配合使用 概念&#xff1a;改变盒子在平面内的形态&#xff08;位移、旋转、缩放、倾斜&#xff09; 平面转换又叫 2D 转换 平移 属性&#xff1a;transform: translate(X轴移动距离&#xff0c;Y轴移动…

研习代码 day52 | 单调栈问题——柱状图中最大的矩形

一、柱状图中最大的矩形 1.1 题目 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1: 输入&#xff1a;heights [2,1,5,6,2,3] 输出&#xff1a;…

获取类class对象的方式

一、什么是class对象 Class类位于java核心包lang包中&#xff0c;它是反射的源头。Class对象用于记录每个类的运行时数据结构&#xff0c;或者说是在内存中访问类的静态数据的接口&#xff0c;每个类都有一个唯一的Class对象。Class对象不能直接通过new来获取&#xff0c;因为…

Bomb Lab环境配置及解题

Bomb Lab环境配置及解题 前言&#xff1a; 自上次做Lab隔了不少时间&#xff0c;环境配置也有点忘了&#xff0c;上次用的是mac搭docker这次直接用windows虚拟机&#xff0c;很简单&#xff0c;打开虚拟机用命令安装一下gdb和wget&#xff0c;然后用wget把官网的实验材料下载…

tomcat源码学习记录

tomcat 学习记录 tomcat 编译ant 下载编译运行 源码Debug运行 Bootstrap运行Tomcat查看状态 pom.xml测试EmbeddedTomcat 参考书籍博客 tomcat 编译 下载 tomcat 10 源码&#xff0c;解压然后idea导入 包存放的默认位置如下&#xff1a;base.path${user.home}/tomcat-build-lib…

【操作系统笔记】-文件系统

引言 之前已经学习过数据在内存中是如何表示&#xff0c;如何存储&#xff0c;但是这些存储在PC断电后数据便消失。因此我们需要一个可以持久化存储并且容量远远大于内存的结构&#xff0c;这一篇我们将学习&#xff0c;文件是如何被组织和操作的&#xff0c;这是一个操作系统…

VS2009和VS2022的错误列表可复制粘贴为表格

在VS2019或VS2022中&#xff0c;可看到如下错误列表&#xff1a; 如果复制这两行错误信息&#xff1a; 然后把它粘贴到word文件&#xff0c;就可以看到以下表格&#xff1a; 严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) E0020 未定义标识符 "dd"…

爱智EdgerOS之深入解析AI图像引擎如何实现AI视觉开发

一、前言 AI 视觉是为了让计算机利用摄像机来替代人眼对目标进行识别&#xff0c;跟踪并进一步完成一些更加复杂的图像处理。这一领域的学术研究已经存在了很长时间&#xff0c;但直到 20 世纪 70 年代后期&#xff0c;当计算机的性能提高到足以处理图片这样大规模的数据时&am…

有源滤波装置在水处理行业配电系统中的应用

摘要&#xff1a;在水处理行业供配电系统中&#xff0c;涉及曝气风机、提升泵、污泥脱水设备等负荷设备&#xff0c;导致异步电动机产生较多无功功率和大量的谐波&#xff0c;使系统功率因数下降&#xff0c;以及谐波对配电系统、负载产生较大的危害。就此&#xff0c;水处理行…

53. Protocol buffer 的Go使用

文章目录 一、介绍二、安装三、protoc3语法1、 protoc3 与 protoc2区别2、proto3生成go代码包Message内嵌Message字段单一标量字段单一message字段可重复字段slicemap字段枚举 一、介绍 Protobuf是Google旗下的一款平台无关&#xff0c;语言无关&#xff0c;可扩展的序列化结构…