操作系统复习知识点(第三章)

2023-11-07

处理机调度

1.高级调度、中级调度、低级调度

  • 高级调度:根据某种算法,把外存上处于后备队列中的那些作业调入内存。(作业调度)
  • 中级调度:为了提高内存利用率和系统吞吐量,使那些暂时不能运行的进程不再占用内存资源,将它们调至外存等待,把进程状态改为就绪驻外存状态或挂起状态。(进程调度)
  • 低级调度:保存处理机的现场信息,按某种算法先取进程,再把处理器分配给进程。

2.作业、作业步、作业流

  • 作业:包含通常的程序和数据,还配有作业说明书,系统根据该说明书对程序的运行进行控制。批处理系统中是以作业为基本单位从外存调入内存的
  • 作业步:是指每个作业运行期间都必须经过若干个相对独立互相关联的顺序加工的步骤。
  • 作业流:是指若干个作业进入系统后依次存放在外存上形成的输入作业流;在操作系统的控制下,逐个作业进程处理,于是形成了处理作业流。

3.JCB(作业控制块)

  • 每当作业进入系统时,系统便为每个作业建立一个作业控制块JCB,根据作业类型将它插入到相应的后备队列中。
  • 作业控制块(JCB)的内容
    • 作业号
    • 作业类别
    • 用户名及用户账号
    • 作业状态
    • 提交到系统的时间
    • 优先级别(或者响应比)
    • 作业所在的外存设置
    • 资源需求
    • 运行长度
    • 已经运行时间
    • 其他信息(收费标准,JCB队列指针)

4.在抢占调度方式中,抢占的原则是什么?

  • 时间片原则(分时系统的调度算法:时间片轮转法)
  • 优先权原则(实时系统的调度算法:最早截止时间优先即EDF)
  • 短作业优先权原则(批处理系统的调度算法:短作业优先)

5.作业调度算法

  • FCSF先来先服务调度算法

    • 作业等待时间得长短。比较有利于长作业(进程),而不利于短作业(进程)。
  • SJF短作业优先调度算法

    • 优点:能有效的降低作业的平均等待事件,提高系统吞吐量。
    • 缺点:对长作业不利;该算法完全未考虑作业的紧迫程度,因而不能保证紧迫性作业(进程)会被及时处理;由于作业(进程)的长短含主观因素,不一定能真正做到短作业优先。

 周转时间 = 作业完成时刻 - 作业到达时刻

 带权周转时间 = 周转时间 / 服务时间

  • 高响应比优先调度算法

  • 高响应比优先调度算法主要用于作业调度,该算法是对FCFS调度算法和SJF调度算法的一种综合平衡,同时考虑每个作业的等待时间和估计的运行时间。在每次进行作业调度时,先计算后备作业队列中每个作业的响应比,从中选出响应比最高的作业投入运行。

作业 到达时间 服务时间
0 6
B 3 2
C 4 4
D 4 1

1.先执行A作业,其余再通过响应比判断执行哪个;

作业 到达时间 服务时间 开始时间 结束时间 周转时间 带权周转时间
A 0 6 0 6 6 1
B 3 2
C 4 4
D 4 1

 2.根据响应比,执行D作业;

  • R(B) = 1 + (6 - 3)/ 2 = 2.5
  • R(C) = 1 + (6 - 4)/ 4 = 1.5
  • R(D)= 1 + (6 - 4) / 1 = 3
作业 到达时间 服务时间 开始时间 结束时间 周转时间 带权周转时间
A 0 6 0 6 6 1
B 3 2
C 4 4
D 4 1 6 7 3 3

3.根据响应比,执行B作业;

  • R(B) = 1 + (7 - 3)/ 2 = 2
  • R(C) = 1 + (7 - 4)/ 4 = 0.75
作业 到达时间 服务时间 开始时间 结束时间 周转时间 带权周转时间
A 0 6 0 6 6 1
B 3 2 7 10 7 3.5
C 4 4
D 4 1 6 7 3 3

4.执行最后C作业。

作业 到达时间 服务时间 开始时间 结束时间 周转时间 带权周转时间
A 0 6 0 6 6 1
B 3 2 7 10 7 3.5
C 4 4 10 14 10 2.5
D 4 1 6 7 3 3

响应比Rp = (等待时间+要求服务时间)/ 要求服务时间 =1 +(等待时间 / 要求服务时间)

等待时间 = 上一个作业调入完成时间 - 该作业到达的时间

  • 当作业的等待时间相同时,则要求服务时间越短,其响应比越高,有利于短作业;
  • 当要求服务时间相同时,作业的响应比由其等待时间决定,等待时间越长,其响应比越高,因而它实现的是先来先服务;
  • 对于长作业,作业的响应比可以随等待时间的增加而提高,当其等待时间足够长时,其响应比便可升到很高,从而也可获得处理机,克服了饥饿状态,兼顾了长作业。

6.死锁

  • 死锁的概念

    • 死锁是指多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都将永远不能再向前推进。死锁一定是“循环等待对方手里的资源”导致的,因此如果有死锁现象,那至少有两个或两个以上的进程同时发生死锁。另外,发生死锁的进程一定处于阻塞态
  • 死锁的必要条件

    • 互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁(如哲学家的筷子、打印机设备)。像内存、扬声器这样可以同时让多个进程使用的资源是不会导致死锁的(因为进程不用阻塞等待这种资源)。
    • 不剥夺条件:进程所获得的资源在未使用完之前,不能由其他进程强制夺走,只能主动释放。
    • 请求和保持条件:进程已经保持了至少一个资源但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放
    • 循环等待条件:存在一种进程资源的循环等待链,链中的每一个进程已获得的资源同时被下一个进程所请求发生死锁时一定有循环等待,但是发生循环等待时不一定
  • 产生死锁的原因

    • 对临界资源的竞争:各进程对不可剥夺的资源的竞争可能引起死锁。
    • 进程推进顺序非法请求和释放资源的顺序不当,同样会导致死锁。例如,并发执行的进程P1、P2两者分别申请并占有了资源R1、R2,之后进程P1又紧接着申请资源R2,而进程P2又申请资源R1,两者会因为申请的资源被对方占有而阻塞,从而发生了死锁。
  • 解决死锁问题的方法

    • 预防死锁最容易实现
      • 摒弃“请求和保持”条件
      • 摒弃“不剥夺”条件
      • 摒弃“环路等待”条件
    • 避免死锁(银行家算法)
    • 检测和解除死锁

7.银行家算法

  • 安全序列:是指一个进程序列{P1,…,Pn}是安全的,即对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和。
  • 安全状态:如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。安全状态一定是没有死锁发生
  • 不安全状态:如果分配了资源以后,系统找不出任何一个安全序列,就进入了不安全状态。这就意味着可能所有进程都无法顺利进行下去。如果系统处于不安全状态,不一定发生死锁,但发生死锁一定是在不安全状态

数据结构:

  • 可利用资源向量Available:是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目。如果Available[j]=K,则表示系统中现有Rj类资源K个。
  • 最大需求矩阵Max:这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K。
  • 分配矩阵Allocation:这也是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已分得Rj类资源的数目为K。
  • 需求矩阵Need:这也是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成其任务。

下面是三者之间的关系:

Need[i,j]=Max[i,j]-Allocation[i,j]

(尚需资源数=最大资源需求数-已分配资源数)

银行家算法步骤:

请求向量Request(i):是进程Pi的请求向量,如果Request(i)[j]=k,表示进程Pi需要K个R(j)类型的资源。当Pi发现资源请求后系统将进行下列步骤:

  1. 如果Request(i)[j] <= Need[i,j],即请求量未超过尚需量,继续执行步骤2,否则认为出错,因为它所请求的资源数已超过它所宣布的最大值。
  2. 如果Request(i)[j] <= Available[i,j],即请求量未超过可分配资源量,继续执行步骤3,否则,表示尚无足够资源,Pi需等待。
  3. 系统试探着把资源分配给进程Pi,并需要修改下面数据结构中的数值;                           

Available[j] = Available[j] - Request(i)[j];(可利用资源数减少)

Allocation[i,j] = Allocation[i,j] + Request(i)[j];(已分配资源数增加)

Need[i,j] = Need[i,j] - Request(i)[j];(尚需资源数减少)

      4.系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,已完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程Pi等待。

安全性算法步骤:

(1)设置两个向量:

  • 工作向量Work:表示系统可供进程继续运行所需的各类资源数目,它有m个元素,开始时,Work=Available;
  • Finish:表示系统是否有足够的资源分配给进程,使之运行完成。开始时,Finish[i] = false;当有足够资源分配给进程时,再令Finish[i] = true。

(2)从进程集合中找到一个能满足下述条件的进程:

              1.Finish[i] = false

              2.Need[i,j] <= Work[j](进程所需资源量未超过可分配资源量);

              3.若都满足,执行步骤(3),否则执行步骤(4)

(3)当进程Pi获得资源后,可顺利执行至完成,并释放分配给它的资源,故应执行:

            Work[j] = Work[j] + Allocation[i,j];

Finish[i] = true;

go to step (2);

(4)所有进程的Finish[i] = true,表示系统处于安全状态;否则,系统处于不安全状态。

                           

举例:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作系统复习知识点(第三章) 的相关文章

  • 在 Docker 容器中以主机用户身份运行

    在我的团队中 我们在进行开发时使用 Docker 容器在本地运行我们的网站应用程序 假设我正在开发 Flask 应用程序app py具有依赖关系requirements txt 工作流程大致如下 I am robin and I am in
  • 将node.js +expressjs应用程序的NODE_ENV设置为ubuntu下的守护进程

    我按照这些说明让守护进程正常工作 http kevin vanzonneveld net techblog article run nodejs as a service on ubuntu karmic http kevin vanzon
  • 如何在 Linux/OS X 上温和地终止 Firefox 进程

    我正在使用 Firefox 进行一些自动化操作 尽管我可以从 shell 打开 Firefox 窗口 但我无法正确终止它 如果我kill火狐进程与kill 3 or kill 2当我下次打开新的 Firefox 窗口时 命令会询问我是否要在
  • Python将文件从Linux复制到WIndows

    我正在构建一个网站 该网站有一个表单 可以捕获用户数据并在用户数据上运行一些cgi cgi 的第一步是需要将文件从 Linux Web 服务器复制到 Windows 计算机 服务器将使用 Active Directory 角色帐户作为复制凭
  • 如何反汇编、修改然后重新组装 Linux 可执行文件?

    无论如何 这可以做到吗 我使用过 objdump 但它不会产生我所知道的任何汇编器都可以接受的汇编输出 我希望能够更改可执行文件中的指令 然后对其进行测试 我认为没有任何可靠的方法可以做到这一点 机器代码格式非常复杂 比汇编文件还要复杂 实
  • 提高mysql导入速度[关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我有一个很大的数据库22GB 我曾经用过进行备份mysqldumpgzip 格式的命令 当我提取 gz 文件时 它会生成 sql文件的
  • 如何在特定的Java版本上运行应用程序?

    如何运行具有特定 Java 版本的应用程序 我安装了三个 Java 版本 myuser mysystem sudo update alternatives config java There are 3 choices for the al
  • 用于时间线数据的类似 gnuplot 的程序

    我正在寻找一个类似 gnuplot用于在时间轴中绘制数据图表的程序 类似 gnuplot 在 Linux 上运行 命令行功能 GUI 对我帮助不大 可编写脚本的语法 输出为 jpg png svg 或 gif 输出应该是这样的 set5 s
  • 套接字发送调用被阻塞很长时间

    我每 10 秒在套接字上发送 2 个字节的应用程序数据 阻塞 但发送调用在下面的最后一个实例中被阻塞超过 40 秒 2012 06 13 12 02 46 653417 信息 发送前 2012 06 13 12 02 46 653457 信
  • aarch64 Linux 硬浮点或软浮点

    linux系统有arm64 有arm架构armv8 a 如何知道 Debian 运行的是硬浮动还是软浮动 符合 AAPCS64 GNU GCC for armv8仅提供硬浮动aarch64工具链 这与 armv7 a 的 GCC 不同 后者
  • 亚马逊 Linux - 安装 openjdk-debuginfo?

    我试图使用jstack在 ec2 实例上amazon linux 所以我安装了openjdk devel包裹 sudo yum install java 1 7 0 openjdk devel x86 64 但是 jstack 引发了异常j
  • Linux >2.6.33:可以使用 sendfile() 来实现更快的“猫”吗?

    必须将大量大文件连接成一个更大的单个文件 我们目前使用 cat file1 file2 output file but are wondering whether it could be done faster than with that
  • 如何在 Linux 中向热敏打印机发送 ESC/POS 命令

    我正在尝试在热敏打印机上发送 ESC POS 命令 但每当我发送它们时 热敏打印机都会将它们打印为文本 而不是作为命令执行它们 我在 prn 文件中编写这些命令 每当我执行 lp 命令来打印文件时 这些 prn 文件也会被打印 但作为文本
  • C++ Linux GCC 应用程序中的 GUID

    我有很多服务器运行这个 Linux 应用程序 我希望他们能够生成一个碰撞概率较低的 GUID 我确信我可以从 dev urandom 中提取 128 个字节 这可能没问题 但是有没有一种简单易用的方法来生成与 Win32 更等效的 GUID
  • BeagleBone Black 如何用作大容量存储设备?

    是否可以使用 BB 作为大容量存储设备 我希望将其连接到可以从 USB 连接 例如 USB 闪存驱动器 读取文件的音频播放器并充当包含一个特定文件夹的数据存储设备 及其子文件夹 从文件系统 如果可能 在连接到开发板的闪存驱动器上 正如设备规
  • 我可以在 Ubuntu 上使用 Homebrew 吗?

    我只是尝试使用 Homebrew 和 Linuxbrew 在我的 Ubuntu 服务器上安装软件包 但都失败了 这就是我尝试安装它们的方法 sudo apt get install build essential curl git m4 r
  • 通过名称获取进程ID

    我想在 Linux 下获得一个给定其名称的进程 ID 有没有一种简单的方法可以做到这一点 我还没有在 C 上找到任何可以轻松使用的东西 如果追求 易于使用 char buf 512 FILE cmd pipe popen pidof s p
  • Linux 中的 Windows NAmed Pipes 替代品

    我们正在将现有的 Windows 代码移植到 Linux 我们使用 ACE 作为抽象层 我们使用 Windows 命名管道与多个客户端进行通信并执行重叠操作 linux 下这个相当于什么 我检查了linux命名管道 FIFO 但它们似乎只支
  • 点击界面没有出现

    我决定添加一个点击界面并在我的代码中使用它 但我能够得到它的状态 sudo ip f link tuntap add tap10 mode tap sudo ip link set tap10 up 之后当我执行 ip link 时 tap
  • 如何在 Ubuntu/Linux 发行版中安装 Tesseract-OCR 3.03?

    我和一个朋友有兴趣为 CV 项目训练 tesseract OCR 引擎 我们尝试使用一些包装器 例如 PyTesser 和 pyocr 但结果目前不如我们需要的那么准确 因此 我们希望尝试训练超立方体以更好地实现我们的目的 即识别食品标签上

随机推荐

  • python基础—图形开发

    python基础 图形开发 python图形界面开发 认识tkinter模块 窗体的基本设置方法 几何布局管理器 pack布局管理器 grid布局管理器 place布局管理器 使用tkinter设计计算器程序 Python事件处理 常用tk
  • C++11实现的数据库连接池

    它什么是 数据库连接池负责分配 管理和释放数据库连接 它允许应用程序重复使用一个现有的数据库连接 而不是再重新建立一个 类似的还有线程池 为什么要用 一个数据库连接对象均对应一个物理数据库连接 每次操作都打开一个物理连接 使用完都关闭连接
  • markdown使用文档(Typora 快捷键)

    markdown 更简洁 更高效 强烈建议开发者认真阅读本文档 掌握md及HBuilderX对md的强大支持 窄屏幕下 可按Alt 滚轮横向滚动 很多人只把markdown用于网络文章发表 这糟蹋了markdown markdown不止是H
  • 对numpy.c_的理解

    文章目录 文档描述 关于python科学计算 pandas numpy 中axis 轴 的理解 理解 文档描述 来自官方文档的叙述 这里只简单翻译一部分 numpy c numpy c
  • Python 7.OpenCV 获取执行时间 抠图添加到另一个图、按位运算

    与运算 对掩膜的白色区域保留 黑色区域去除 非运算 取反运算 黑变白 白变黑 import cv2 import numpy as np from matplotlib import pyplot as plt img1 cv2 imrea
  • 1.4 新倚天屠龙之Java传--夜谈Java的运行

    黑夜迅速从地球另一端弥漫而来 重新又笼罩起了这块孤独的荒岛 但是冰火岛中这一束火光打破了这无边的寂寥 带了了一丝丝温馨 张翠山夫妇和谢逊 还有这便宜儿子Neo吃起了简陋的篝火晚餐 虽然只有烤鱼跟野菜汤 但是因为殷素素的精心准备还是比较可口的
  • Apache log4j2远程代码执行漏洞复现

    Apache Log4j2远程代码执行漏洞 声明 漏洞描述 漏洞影响范围 漏洞复现 验证工具 JNDI注入 JNDI注入原理 jndi注入的利用条件 复现过程 深度利用 反弹shell 防御措施 缓解措施 声明 首先声明一下 图片上有Fre
  • input框输入实时检测校验

    1 只能输入英文 数字且必须以英文开头
  • 黑马程序员并发笔记-juc并发以及锁原理-总集篇-结合自己的思考和心得完整版

    黑马程序员并发编程笔记 一 进程的概念 黑马程序员并发编程笔记 二 java线程基本操作和理解 java并发编程笔记 三 管程 一 java并发编程笔记 三 管程 二 java并发编程笔记 三 管程 三 java并发编程笔记 三 管程 四
  • 同步和异步的区别

    同步 同指一个进程在执行某个请求的时候 若该请求需要一段时间才能返回信息 那么这个进程将会一直等待下去 直到收到返回信息才继续执行下去 异步 是指进程不需要一直等下去 而是继续执行下面的操作 不管其他进程的状态 当有消息返回时系统会通知进程
  • 关于socket的各种错误码

    1 INVALID SOCKET 表示该 socket fd 无效 如 accept 2 或 socket 2 等在创建socketfd时 int m socket socket AF INET SOCK STREAM 0 if m soc
  • Python操作MySQL数据库

    1 查询操作 注意 Python查询Mysql使用 fetchone 方法获取单条数据 使用fetchall 方法获取多条数据 fetchone 该方法获取下一个查询结果集 结果集是一个对象 fetchall 接收全部的返回结果行 rowc
  • SpringBoot日志

    application properties logging level com atguigu trace spring profiles active dev logging path 不指定路径在当前项目下生成springboot l
  • 启用springboot security后登录web页面需要用户名和密码之默认的用户名和密码

    问题 注意 本人使用的Spring Boot 2 0 2 对1 5 x系列未必有用 官方文档在这里 直接解决办法 0 移除spring boot starter security依赖 如果没有实际使用security的功能 可以直接移除sp
  • RHEL 7.3 根密码重置

    环境 win10 RedHat Enterprise Linux 7 2 目的 重置Root 用户密码 操作 1 界面选择首项 e 进入编辑界面 2 linuxefi vmlinuz 3 10 0 327 末尾UTF 8 后添加 rd br
  • JS:颜色的格式转换(rgb、十六进制)

    简介 偶尔需要转换颜色格式 然后使用 如rgb和十六进制之间的互相转换 具体实现 使用 import TzColorExchangeStyle from colorExchange js console log TzColorExchang
  • 搜狗双拼口诀

    今天给大家介绍一下搜狗双拼口诀 掌握搜狗双拼输入法的难点是将其26个韵母对应的字母键位记忆到脑海中 比如 自然码方案的ang韵母对应于H键 ao韵母对应于K键 如果你没记住对应关系 那么搜狗双拼输入也就无从谈起了 通过搜狗双拼口诀 你可以很
  • IDEA添加自定义浏览器

    比如添加搜狗浏览器 1 打开setting 2 Tools gt Web Browsers 点 添加浏览器 3 点击文件夹图标 修改浏览器路径 4 找到搜狗浏览器的exe文件 5 修改浏览器的名字 然后点ok 6 完成 运行直接点击图标即可
  • Windows下php和apache的安装及启动

    php版本 php5 6 httpd版本 apache2 4 php5 6 在D盘下创建php文件夹 并在其下解压压缩包 修改系统变量PATH 末尾新增 D php D php ext httpd2 4 在D盘下创建Apache24文件夹
  • 操作系统复习知识点(第三章)

    处理机调度 1 高级调度 中级调度 低级调度 高级调度 根据某种算法 把外存上处于后备队列中的那些作业调入内存 作业调度 中级调度 为了提高内存利用率和系统吞吐量 使那些暂时不能运行的进程不再占用内存资源 将它们调至外存等待 把进程状态改为