【系统面试篇】进程与线程类(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 切换回 用户态。
相关文章:

【系统面试篇】进程与线程类(2)(笔记)——进程调度、中断、异常、用户态、核心态
目录 一、相关面试题 1. 进程的调度算法有哪些? 调度原则 (1)先来先服务调度算法 (2)最短作业优先调度算法 (3)高响应比优先调度算法 (4)时间片轮转调度算法 &am…...

基于MySQL的企业专利数据高效查询与统计实现
背景 在进行产业链/产业评估工作时,我们需要对企业的专利进行评估,其中一个重要指标是统计企业每一年的专利数量。本文基于MySQL数据库,通过公司名称查询该公司每年的专利数,实现了高效的专利数据统计。 流程 项目流程概述如下&…...

热成像手机VS传统热成像仪:AORO A23为何更胜一筹?
热成像技术作为一种非接触式测温方法,广泛应用于石油化工巡检、电力巡检、应急救援、医疗、安防等“危、急、特”场景。提及热成像设备,人们往往会首先想到价格高昂、操作复杂且便携性有限的热成像仪。但是,随着技术的不断进步,市…...

Spring IoC——依赖注入
1. 依赖注入的介绍 DI,也就是依赖注入,在容器中建立的 bean (对象)与 bean 之间是有依赖关系的,如果直接把对象存在 IoC 容器中,那么就都是一个独立的对象,通过建立他们的依赖关系,…...

Linux 中,flock 对文件加锁
在Linux中,flock是一个用于对文件加锁的实用程序,它可以帮助协调多个进程对同一个文件的访问,避免出现数据不一致或冲突等问题。以下是对flock的详细介绍: 基本原理 flock通过在文件上设置锁来控制多个进程对该文件的并发访问。…...

CentOS下载ISO镜像的方法
步骤 1:访问CentOS官方网站 首先,打开浏览器,输入CentOS的官方网站地址:Download 在网站上找到ISO镜像的下载链接,通常位于“Downloads”或类似的页面上。 选择所需的CentOS版本和架构(如x86_64…...

Node.js 入门指南:从零开始构建全栈应用
🌈个人主页:前端青山 🔥系列专栏:node.js篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来node.js篇专栏内容:node.js-入门指南:从零开始构建全栈应用 前言 大家好,我是青山。作…...

MYSQL 真实高并发下的死锁
https://pan.baidu.com/s/1nM3VQdbkNZhnK-wWboEYxA?pwdvwu6 下面是风控更新语句 ------------------------ LATEST DETECTED DEADLOCK ------------------------ 2023-08-04 01:00:10 140188779017984 *** (1) TRANSACTION: TRANSACTION 895271870, ACTIVE 0 sec starting …...

Zookeeper 简介 | 特点 | 数据存储
1、简介 zk就是一个分布式文件系统,不过存储数据的量极小。 1. zookeeper是一个为分布式应用程序提供的一个分布式开源协调服务框架。是Google的Chubby的一个开源实现,是Hadoop和Hbase的重要组件。主要用于解决分布式集群中应用系统的一致性问题。 2. 提…...

设计模式之结构型模式---装饰器模式
目录 1.概述2.类图3.应用场景及优缺点3.1 应用场景3.2 优缺点3.2.1 优点3.2.2 缺点 4.实现4.1 案例类图4.2 代码实现4.2.1 定义抽象构建角色4.2.2 定义具体构建角色4.2.3 定义抽象装饰器角色4.2.4 定义具体装饰角色4.2.5 装饰器模式的使用 1.概述 装饰器模式是指在不改变现有对…...

Android Pair
Pair在Android中是一种轻量级的工具类,并不是严格意义上的数据结构。 数据结构是一组有组织的方式来存储和管理数据的方式,如数组、链表、栈、队列、树、图等,它们有自己的特性和操作规则。而Pair更像是一个简单的封装,用于在需要…...

华为荣耀曲面屏手机下面空白部分设置颜色的方法
荣耀部分机型下面有一块空白区域,如下图红框部分 设置这部分的颜色需要在themes.xml里面设置navigationBarColor属性 <item name"android:navigationBarColor">android:color/white</item>...

《C#语法一篇通》,有20万字,需8MB字节,宜48小时阅读,没准会继续完善
本文摘录了C#语法的主要内容,接近20万字。 所有鸡汤的味道都等于马尿! 如果你相信任何所谓的鸡汤文章,智商堪忧。 计算机语言没有”好不好“之说,骗子才会告诉你哪个语言好,学好任何一本基础语言(C&#…...

嵌入式硬件工程师的职业发展规划
嵌入式硬件工程师可以按照以下阶段进行职业发展规划: 1. **初级阶段(1-3 年) ** - **技术学习与积累**: **电路基础强化**: 深入学习模拟电路和数字电路知识,能够熟练分析和设计基本的电路,…...

QT for android 问题总结(QT 5.15.2)
1.配置好的sdk,显示设置失败 Android SDK Command-line Tools run. Android Platform-Tools installed. Command-line Tools (latest) 版本过高导致报错 ,下载一个低版本的latest ,替换掉之前latest中的文件。即可,latest 路径如…...

PyTorch实战-手写数字识别-MLP模型
1 需求 包懂,40分钟掌握PyTorch深度学习框架,对应神经网络算法理论逐行讲解用PyTorch实现图像分类代码_哔哩哔哩_bilibili 10分钟入门神经网络 PyTorch 手写数字识别_哔哩哔哩_bilibili pytorch tutorial: PyTorch 手写数字识别 教程代码 从零设计并训…...

(附项目源码)Java开发语言,基于Java的高校实验室教学管理系统的设计与开发 50,计算机毕设程序开发+文案(LW+PPT)
摘 要 随着高校实验室教学与管理的复杂性增加,传统的手动管理系统已经无法满足日益增长的需求。实验室教学不仅涉及到学生的教学安排和管理,还需要对实验设备、实验材料、实验室资源等进行有效的调配和管理。而目前实验室教学管理的各项工作,…...

【日常问题排查小技巧-连载】
线上服务CPU飙高排查 先执行 top,找到CPU占用比较高的进程 id,(比如 21448) jstack 进程 id > show.txt(jstack 21448 > show.txt) 找到进程中CPU占用比较高的线程,线程 id 转换为 16 进…...

elastic search查找字段的方法
一,比如:elastic search 查找id为“ien9292voewew”的方法 此id为主键id,意思就是唯一id,在ES中是_id, 在 Elasticsearch 中,如果你想要查找特定 ID 的文档,可以使用 _get API。以下是如何通过 RESTful 请求或使用 Python 客户端来查找 ID 为 ien9292voewew 的文档的方…...

MATLAB下的四个模型的IMM例程(CV、CT左转、CT右转、CA四个模型),附下载链接
基于IMM算法的目标跟踪。利用卡尔曼滤波和多模型融合技术,能够在含噪声的环境中提高估计精度,带图像输出 文章目录 概述源代码运行结果代码结构与功能1. 初始化2. 仿真参数设置3. 模型参数设置4. 生成量测数据5. IMM算法初始化6. IMM迭代7. 绘图8. 辅助函…...

无人机之中继通信技术篇
一、定义与原理 无人机中继通信技术是指通过无人机搭载中继设备,将信号从一个地点传输到另一个地点,从而延长通信距离并保持较好的通信质量。其原理类似于传统的中继通信,即在两个终端站之间设置若干中继站,中继站将前站送来的信号…...

阳光保险隐忧浮现:业绩与股价双双而下,张维功能否力挽狂澜?
10月28日晚间,作为国内新生代险企,也是一家赴港上市的保险集团——阳光保险(HK:06963)一口气对外正式披露了三则财务报告,分别是集团旗下阳光人寿和阳光财险今年前三季度未经审议的财务数据,以及截至三季度…...

【OJ题解】在字符串中查找第一个不重复字符的索引
💵个人主页: 起名字真南 💵个人专栏:【数据结构初阶】 【C语言】 【C】 【OJ题解】 目录 1. 引言2. 题目分析示例: 3. 解题思路思路一:双重循环思路二:哈希表 4. C代码实现5. 代码详解6. 时间和空间复杂度分析7. 优化方…...

处理配对和拆分内容 |【python技能树知识点1~2 习题分析】
目录 一、编程语言简史(配对)题目要求:程序设计: 二、 编程语言发明家(拆分)题目要求程序实现while和for循环 python技能树知识点中的一些习题练习和分析。熟悉python编程模式和逻辑。 一、编程语言简史&am…...

HBuilderX自定义Vue3页面模版
HBuilderX自定义Vue3页面模版 首先在HBuilderX工具下的任意一个项目添加新建自定义页面模版 新建模版文件,并打开进行编辑 vue3-setup-js.vue文件里填写样式模版(根据自己的需要进行修改) <template><view class"">&…...

计算机网络——TCP中的流量控制和拥塞控制
TCP中的流量控制和拥塞控制 流量控制 什么是流量控制 如果发送者发送数据过快,接收者来不及接收,那么就会出现分组丢失,为了避免分组丢失,控制发送者的发送速度,使得接收者来得及接收,这就是流量控制。 …...
BFV/BGV全同态加密方案浅析
本文主要为翻译内容,原文地址:Introduction to the BFV encryption scheme、https://www.inferati.com/blog/fhe-schemes-bgv 之前的一篇博客我们翻译了CKKS全同态加密方案的内容,但该篇上下文中有一些知识要点,作者在BFV/BGV中已…...

Elasticsearch 实战应用详解!
Elasticsearch 实战应用详解 一、概述 Elasticsearch 是一个高度可扩展的开源全文搜索引擎,它能够处理大量数据并提供实时搜索和分析能力。基于 Lucene 构建,Elasticsearch 通过简单的 RESTful API 接口隐藏了 Lucene 的复杂性,使全文搜索变…...

最新最全面的JAVA面试题免费下载
面对求职市场的激烈竞争,掌握全面且深入的Java知识已成为每一位Java开发者必不可少的技能。《2023最新版Java面试八股文》是一份精心整理的面试准备资料,旨在帮助广大开发者系统复习,从容应对Java及相关技术栈的面试挑战。这份文档不仅汇聚了…...

修改sql server 数据库的排序规则
文章目录 引言I 解决方案案例II 知识扩展排序规则SQL SERVER支持的所有排序规则引言 新增sql server 数据库实例的默认排序规则不支持中文存储,导致乱码 解决方案: 修改排序规则为Chinese_PRC_CI_AS 或者 Chinese_PRC_Stroke_CI_AS_WS或者Chinese_PRC_CI_AI_KS_WS 仅对新增…...