【系统面试篇】进程与线程类(2)(笔记)——进程调度、中断、异常、用户态、核心态

目录

一、相关面试题

1. 进程的调度算法有哪些?

调度原则

(1)先来先服务调度算法

(2)最短作业优先调度算法

(3)高响应比优先调度算法

(4)时间片轮转调度算法

(5)最高优先级调度算法

(6)多级反馈队列调度算法

2. 说一说僵尸进程和孤儿进程

(1)孤儿进程

(2)僵尸进程

二、其他问题

1. 什么是中断和异常?它们有什么区别?

(1)中断

(2)异常

(3)区别综述

2. 用户态和核心态

(1)用户态和内核态的区别?

(2)在什么场景下,会发生内核态和用户态的切换?


一、相关面试题

1. 进程的调度算法有哪些?

        一旦 操作系统 把进程 切换到 运行状态,也就意味着该 进程 占用着 CPU 在执行,但是当操作系统把进程 切换 到其他状态时,那就不能在 CPU 中执行了,于是 操作系统会 选择 下一个 要运行的 进程。选择一个 进程运行 这一功能是在 操作系统 中完成的,通常称为调度程序(scheduler)

        在进程的生命周期中,当进程从一个运行状态到另外一状态变化的时候,都会触发一次调度。如;

  • 从就绪态 -> 运行态:当进程被 创建时,会进入到 就绪队列,操作系统会 从就绪队列 选择一个进程 运行;
  • 从运行态 -> 阻塞态:当进程发生 I/O 事件 而阻塞时,操作系统 必须选择 另外一个 进程运行;
  • 从运行态 -> 结束态:当进程 退出结束后,操作系统得从 就绪队列 选择另外一个 进程运行;

        如果 硬件时钟 提供 某个频率的 周期性中断,那么 可以 根据 如何处理 时钟中断,把调 度算法 分为两类:

  • 非抢占式调度算法:挑选一个进程,然后 让该进程 运行 直到被阻塞,或者 直到 该进程 退出,才会 调用 另外一个 进程,也就是说 不会理时钟中断 这个事情
  • 抢占式调度算法:挑选一个进程,然后 让该进程 只运行 某段时间,如果 在该时段结束时,该进程 仍然在 运行时,则会把它 挂起,接着 调度程序 从就绪队列 挑选另外一个 进程。这种 抢占式调度处理,需要 在时间间隔的 末端 发生时钟中断,以便 把 CPU 控制 返回给 调度程序 进行调度,也就是常说的 时间片机制

调度原则

  • CPU 利用率:调度程序应 确保 CPU 是 始终匆忙的 状态,这可提高 CPU 的 利用率;
  • 系统吞吐量:吞吐量 表示的是 单位时间内 CPU 完成 进程的数量,长作业的 进程会 占用 较长的 CPU 资源,因此会 降低 吞吐量,相反,短作业的 进程会 提升 系统吞吐量;
  • 周转时间:周转时间是 进程运行+阻塞时间+等待时间的 总和,一个进程的 周转时间 越小越好;
  • 等待时间:这个 等待时间 不是阻塞状态的 时间,而是 进程 处于 就绪队列的 时间,等待的 时间越长,用户 越不满意;
  • 响应时间:用户 提交请求 到系统 第一次 产生响应 所花费的 时间,在 交互式 系统中,响应时间是 衡量 调度算法 好坏 的主要标准。

(1)先来先服务调度算法

        非抢占式的 先来先服务(First Come First Serve, FCFS)算法。

        每次 从 就绪队列 选择 最先进入队列 的进程,然后 一直运行,直到 进程退出 或被 阻塞,才会继续 从队列中 选择 第一个 进程 接着运行。

        当一个 长作业 先运行了,那么 后面的 短作业 等待的时间 就会很长,不利于 短作业。FCFS 对长作业有利,适用于 CPU 繁忙型 作业的 系统,而 不适用于 I/O 繁忙型作业的系统。

(2)最短作业优先调度算法

        最短作业优先(Shortest Job First, SJF)调度算法优先选择 运行时间最短 的 进程来运行,这有助于 提高系统的 吞吐量。

        这显然对长作业不利,很容易造成一种极端现象。

        比如,一个 长作业 在就绪队列 等待运行,而这个 就绪队列有 非常多的短作业,那么就会 使得 长作业 不断的 往后推,周转时间变长,致使 长作业 长期不会被运行。

(3)高响应比优先调度算法

        上述「先来先服务调度算法」和「最短作业优先调度算法」都没有很好的 权衡 短作业和长作业

        高响应比优先(Highest Response Ratio Next, HRRN)调度算法 主要是 权衡了 短作业和长作业。每次 进行 进程调度时,先计算「响应比优先级」,然后把「响应比优先级」最高的 进程 投入运行,「响应比优先级」的计算公式:

从上面的公式,可以发现:

  • 如果两个进程的「等待时间」相同时,「要求的服务时间」越短,「响应比」就越高,这样 短作业的进程 容易 被选中运行;
  • 如果 两个进程「要求的服务时间」相同时,「等待时间」越长,「响应比」就越高,这就 兼顾 到了长作业 进程,因为 进程的响应比 可以 随时间等待的增加 而提高,当其 等待时间 足够长时,其 响应比 便可以 升到很高,从而 获得运行 的机会

(4)时间片轮转调度算法

        最古老、最简单、最公平且 使用最广的算法 就是 时间片轮转(Round Robin, RR)调度算法

        每个进程被分配一个时间段,称为 时间片(Quantum),即 允许 该进程在 该时间段中 运行。

  • 如果 时间片 用完,进程 还在运行,那么 将会 把此进程从 CPU 释放出来,并把 CPU 分配给另外一个进程;
  • 如果 该进程在时间片 结束前 阻塞或结束,则 CPU 立即 进行切换;

关于 时间片的长度

  • 如果时间片设得太短会导致过多的进程上下文切换,降低了 CPU 效率;
  • 如果设得太长又可能引起对短作业进程的响应时间变长。

一般来说,时间片设为 20ms~50ms 通常是一个比较合理的折中值。

(5)最高优先级调度算法

        「时间片轮转算法」做了个假设,即 让所有的 进程 同等重要,运行时间都一样。但是,对于多用户 计算机系统 希望调度 是有优先级的,即 希望调度程序 能 从就绪队列中 选择 最高优先级的 进程进行运行,这称为 最高优先级(Highest Priority First, HPF)调度算法

        进程的优先级可以分为,静态优先级和动态优先级

  • 静态优先级:创建进程时候,就已经确定了优先级了,然后 整个运行时间 优先级 都不会变化;
  • 动态优先级:根据 进程的 动态变化 调整优先级,比如 如果进程 运行 时间增加,则 降低其 优先级,如果 进程 等待时间(就绪队列的 等待时间)增加,则升高其 优先级,也就是 随着时间的 推移 增加 等待进程的 优先级。

        该算法也有 两种 处理优先级高的 方法,非抢占式和抢占式

  • 非抢占式:当 就绪队列中 出现优先级高的 进程,运行完 当前进程,再 选择优先级高的 进程。
  • 抢占式:当 就绪队列中 出现 优先级高的 进程,当前进程 挂起,调度 优先级高 的 进程运行。但是 依然有 缺点,可能会导致 低优先级的 进程永远不会运行

(6)多级反馈队列调度算法

        多级反馈队列(Multilevel Feedback Queue) 调度算法是「时间片轮转算法」和「最高优先级算法」的综合和发展

  • 「多级」:表示有多个队列,每个队列 优先级 从高到低,同时 优先级越高 时间片越短。
  • 「反馈」:表示 如果 有新的进程 加入优先级高的 队列时,立刻 停止当前 正在运行的 进程,转而去 运行优先级高的 队列。

它是如何工作的:

  • 设置了 多个队列,赋予 每个队列不同的 优先级,每个队列 优先级 从高到低,同时 优先级 越高时间片越短;
  • 新的进程会 被放入到 第一级队列的 末尾,按 先来先服务的 原则 排队 等待被调度,如果在 第一级队列 规定的 时间片 没运行完成,则 将其 转入到 第二级队列的 末尾,以此类推,直至完成;
  • 当 较高优先级的 队列为空,才 调度 较低优先级 的队列中的 进程运行。如果 进程运行时,有 新进程 进入 较高优先级的 队列,则 停止当前 运行的 进程 并将其 移入到 原队列 未尾,接着让 较高优先级的 进程运行;

        可以发现,对于 短作业 可能可以在 第一级 队列很快被处理完。对于长作业,如果在 第一级 队列处理 不完,可以 移入 下次队列 等待 被执行,虽然 等待的时间 变长了,但是 运行时间 也变 更长了,所以 该算法 很好的兼顾了 长短作业,同时有 较好的 响应时间。

  • 银行设置了 多个排队(就绪)队列,每个队列 都有不同的 优先级,各个队列 优先级 从高到低,同时 每个队列 执行时间片的长度也不同,优先级 越高的 时间片越短。
  • 新客户(进程)来了,先进入 第一级 队列的 未尾,按 先来先服务 原则 排队等待 被叫号(运行)。如果 时间片 用完客户的 业务 还没办理完成,则让 客户进入到 下一级队列的 末尾,以此类推,直至 客户业务 办理完成。
  • 当 第一级队列 没人排队 时,就会 叫号 二级队列的 客户。如果 客户办理业务 过程中,有新的 客户加入 到较高 优先级的 队列,那么 此时 办理中的 客户需要 停止办理,回到 原队列的 末尾 等待再次叫号,因为 要把 窗口让给 刚进入 较高优先级队列的 客户。

        可以发现,对于 要办理短业务的 客户来说,可以 很快的 轮到并解决。对于 要办理 长业务的客户,一下子解决不了,就可以 放到下一个 队列,虽然 等待的 时间稍微 变长了,但是 轮到自己的办理时间 也变长了,也可以接受,不会造 成极端的现象,可以说是综合上面几种算法的优点。

2. 说一说僵尸进程和孤儿进程

(1)孤儿进程

        一个 父进程 退出,而 它的 一个 或 多个 子进程 还在运行,那么那些 子进程 将成为 孤儿进程。孤儿进程 将被 init 进程(进程号 为 1)所 收养,并由 init 进程 对它们 完成 状态收集 工作。

(2)僵尸进程

        一个 进程 使用 fork 创建 子进程,如果 子进程 退出,而 父进程 并没有 调用 wait(阻塞) 或 waitpid(非阻塞) 获取 子进程的 状态 信息,那么 子进程 的 进程描述符 仍然 保存在 系统中。这种 进程 称之为 僵尸进程

二、其他问题

1. 什么是中断和异常?它们有什么区别?

        中断和异常都会 导致处理器 暂停 当前正在执行的 任务,并 转向 执行一个 特定的 处理程序(中断处理程序 或 异常处理程序)。然后 在处理完 这些特殊情况 后,处理器 会返回 到被打断的 任务继续执行。

(1)中断

        中断 是由 计算机系统 外部事件触发的,通常 与硬件设备 相关。中断的 目的是 为了 及时 响应 重要事件 而暂时 中断正常的 程序执行。典型的 中断 包括 时钟中断、I/O 设备中断(如 键盘输入、鼠标事件)和 硬件错误中断等。

        操作系统 通常会 为每种类型的 中断 分配一个 中断处理程序,用于 处理相应的事件。

(2)异常

        异常 是由 计算机系统 内部事件触发的,通常 与正在执行的 程序或指令 有关,比如 程序的 非法操作码、地址越界、运算溢出等 错误引起的 事件,异常 不能被 屏蔽,当出现异常时,计算机系统会 暂停正常的 执行流程,并 转到 异常处理程序 来处理 该异常

(3)区别综述

  • 中断 是由 外部设备 或 其他 处理器 产生的,它们 通常是 异步的,也就是 说,它们 可以 在 任何时候 发生,与 当前 执行的 指令无关。例如,键盘输入、鼠标移动、网络数据 到达 等 都会 产生 中断信号,通知 CPU 去处理 这些 事件。
  • 异常是 由 CPU 内部 产生的,它们 通常是 同步的,也就是说,它们 只会在 执行 某些 指令时发生,与 当前 执行的 指令有关。例如,除法运算时 除数为零、访问 非法 内存地址、执行 非法指令等 都会 产生 异常信号,通知 CPU 去处理 这些 错误 或 故障
  • 中断 可以 被屏蔽 或 禁止,这 意味着 CPU 可以 通过 设置 某些标志位 或 寄存器 来 忽略 或 延迟响应 某些 中断信号。这样 可以避免 中断过于 频繁 或 干扰 重要的 任务。
  • 异常 不能 被 屏蔽 或 禁止,这 意味着 CPU 必须 立即 响应异常信号,并 进行相应的 处理。这样可以 保证程序的 正确性 和 系统的 稳定性。

2. 用户态和核心态

(1)用户态和内核态的区别?

        用户态 (user Mode)和 内核态(Kernel Mode) 是操作系统 为了 保护系统资源 和 实现 权限控制 而设计的 两种不同的 CPU 运行级别,可以 控制进程 或 程序 对 计算机硬件资源的 访问权限 和 操作范围

  • 用户态:在用户态下,进程 或 程序 只能 访问受限的 资源 和 执行受限的 指令集,不能 直接访问 操作系统的 核心部分,也不能 直接访问 硬件资源。
  • 核心态:核心态是 操作系统的 特权级别,允许 进程 或 程序执行 特权指令 和 访问操作系统的 核心部分。在核心态下,进程 可以 直接访问 硬件资源,执行 系统调用,管理内存、文件系统等 操作。

(2)在什么场景下,会发生内核态和用户态的切换?

  • 系统调用:当用户程序 需要请求 操作系统 提供的服务 时,会 通过 系统调用 进入内核态。
  • 异常:当 程序执行过程中 出现错误 或 异常情况 时,CPU 会自动 切换到 内核态,以便 操作系统能够 处理 这些异常。
  • 中断:外部设备(如键盘、鼠标、磁盘等)产生的 中断信号 会使 CPU 从用户态 切换到 内核态。操作系统会 处理这些 中断,执行 相应的 中断处理 程序,然后再 将 CPU 切换回 用户态。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

这下热闹了:电商巨头粗暴杀入物流自动化领域

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 在全球物流行业竞争日趋白热化的今天,一向以互联网和电商见长的阿里巴巴集团旗下菜鸟,突然以一记重拳杀入物流自动化设备领域。 其自主研发的直线窄带分拣机不…

新安装的Ubuntu 24.04.1安装Python模块报错?(error: externally-managed-environment)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 错误现象及原因📝 解决方案1. **创建虚拟环境**创建虚拟环境的步骤:2. **使用 pipx 管理应用**安装 `pipx`:3. **直接覆盖安装(不推荐)**4. **使用 `apt` 安装系统级包**📝 总结⚓️ 相关链接 ⚓️�…

前后端分离,Jackson,Long精度丢失

案例:后端接口放回一个Long数据 GetMapping("/testForLong")public Map<String, Object> testForLong() {Map<String, Object> map new HashMap<>();map.put("aaa", 1234567890123456789L);return map;}实际前端接收的数据 前后端数据…

【主机游戏】森林之子游戏介绍

《森林之子》是一款开放世界恐怖生存模拟游戏&#xff0c;玩家被派到孤岛上寻找失踪的亿万富翁&#xff0c;却陷入被食人生物占领的炼狱之地。他一经上线不仅饱受好评&#xff0c;还被玩家开发出来众多奇奇怪怪的玩法 https://pan.quark.cn/s/f903c978b071 当然他里边包含不限…

解线性方程组(一)

实验类型&#xff1a;●验证性实验 ○综合性实验 ○设计性实验 实验目的&#xff1a;进一步熟练掌握高斯顺序消去法解线性方程组的算法并编写程序&#xff0c;进一步熟练掌握高斯列主元消去法解线性方程组的算法并编写程序&#xff0c;提高编程能力和解算线性方程组问题的实践…

Ubuntu使用Qt虚拟键盘,支持中英文切换

前言 ​最近领导给了个需求&#xff0c;希望将web嵌入到客户端里面&#xff0c;做一个客户端外壳&#xff0c;可以控制程序的启动、停止、重启&#xff0c;并且可以调出键盘在触摸屏上使用(我们的程序虽然是BS架构&#xff0c;但程序还是运行在本地工控机上的)&#xff0c;我研…

数学建模(基于Python实现)--灰色关联分析法讲解,含案例

前言 这是去年底学数学建模老哥的建模课程笔记&#xff1b; 未来本人将陆陆续续的更新数学建模相关的一些基础算法&#xff0c;大家可以持续关注一下&#xff0c;主要在于运用&#xff1b; 提示&#xff1a;数学建模只有实战才能提升&#x1f525;​&#x1f525;​&#x1f…

jmeter结合ansible分布式压测--1数据准备

一、搭建ansible环境 ansible是基于python开发&#xff0c;通过ssh连接客户机执行任务。ansible可以批量系统配置、批量程序部署、批量运行命令等。 1、安装yum install ansible 2、检查ansible的版本:ansible --version 二、利用ansible在其他机器上准备压测数据 1、本地准…

网络:ARP的具体过程和ARP欺骗

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言ARP具体过程ARP欺骗原理总结 前言 本文仅作为ARP具体过程和ARP欺骗的知识总结 硬件类型 &#xff1a;指定发送和接受ARP包的硬件类型&am…

AI大模型的广泛应用时代该如何重塑软件开发流程?

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于AI大模型如何重塑软件开发流程的相关内容…

影响神经网络速度的因素- FLOPs、MAC、并行度以及计算平台

影响神经网络速度的四个主要因素分别是 FLOPs&#xff08;浮点操作数&#xff09;、MAC&#xff08;内存访问成本&#xff09;、并行度以及计算平台。这些因素共同作用&#xff0c;直接影响到神经网络的计算速度和资源需求。 1. FLOPs&#xff08;Floating Point Operations&a…

springboot基于SpringBoot的旅游网站的设计与实现

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff0c;旅游网站当然也不能排除在外&#xff0c;随着旅游网站的不断成熟&#xff0c;它彻底改变了过去传统的旅游网站方式&#xff0c;不仅使旅游管理…

2.2 python数据库-mysql

以mysql为例&#xff0c;数据库的操作包括&#xff1a;连接、断开、新增库表、新增数据、查询数据、删除数据和修改数据 1. 连接与关闭 #!/usr/bin/python3import pymysqldb pymysql.connect(hostlocalhost,usertestuser,passwordtest123,databaseTESTDB)# 使用 cursor() 方…

微信小程序的汽车维修预约管理系统

文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 系统功能简述 前台用于实现用户在页面上的各种操作&#xff0c;同时在个人中心显示各种操作所产生的记录&#xff1a;后…

Python | Leetcode Python题解之第540题有序数组中的单一元素

题目&#xff1a; 题解&#xff1a; class Solution:def singleNonDuplicate(self, nums: List[int]) -> int:low, high 0, len(nums) - 1while low < high:mid (low high) // 2mid - mid & 1if nums[mid] nums[mid 1]:low mid 2else:high midreturn nums[l…

7.2 设计模式

设计模式 7.3.1 设计模式的要素7.3.2 创建型设计模式7.3.3 结构性设计模式1. Adapter (适配器)2. Bridge(桥接)3.Composite(组合)4.Decorator(装饰)5.Facade(外观)6.Flyweight(享元)7.Proxy(代理)8. 结构型模式比较 7.3.4 行为型设计模式1 Chain of Responsibility [ &#xff…

使用ffmpeg播放rtsp视频流

获取IPC摄像机视频流一般使用GB28181或者RTSP协议&#xff0c;这两款协议是比较常见的&#xff1b;两者都有开源的库&#xff0c;下面介绍如何使用RTSP获取进行IPC视频流&#xff1b; 准备库 ffmepg是个开源的库,该库集成了rtsp协议&#xff0c;可以直接使用&#xff1b;首先…

python之数据结构与算法(数据结构篇)-- 队列

一、队列的概念 1.“队列”这个概念&#xff0c;其实可能我们在进行排队的时候是差不多的。 2.例如&#xff0c;在结账时&#xff0c;顾客按照到达顺序排队等待付款&#xff0c;这是现实生活中的一个队列示例。同样地&#xff0c;在计算机程序中&#xff0c;当多个任务需要按顺…

网卡多队列介绍

一、多队列网卡 1.1 什么是多队列网卡 多队列网卡&#xff08;Multi-Queue NIC&#xff09;支持将网络流量分发到多个处理队列中&#xff0c;以提高系统的网络处理性能和吞吐量。传统上&#xff0c;单队列网卡只有一个硬件队列用于处理所有的输入和输出流量&#xff0c;这可能…

文本语义分块、RAG 系统的分块难题:小型语言模型如何找到最佳断点?

文本语义分块、RAG 系统的分块难题&#xff1a;小型语言模型如何找到最佳断点&#xff1f; 转自jina最新的关于文本语义分块的分享和模型 之前我们聊过 RAG 里文档分块 (Chunking) 的挑战&#xff0c;也介绍了 迟分 (Late Chunking) 的概念&#xff0c;它可以在向量化的时候减…