Linux调度程序需要上下文切换吗?

2024-03-02

我有一个关于 linux 调度程序和其他一些类似的内核系统调用的一般问题。

Linux调度程序是否被视为一个“进程”,并且对调度程序的每次调用都需要像另一个进程一样进行上下文切换?

假设我们有一个时钟滴答声,它会中断当前正在运行的用户模式进程,现在我们必须调用调度程序。对调度程序本身的调用是否会引发上下文切换?调度程序是否有自己的一组寄存器和 U 区以及每次调用时都必须恢复的内容?

上述问题也适用于许多其他系统调用。在上下文切换方面,内核进程的行为是否与常规进程类似,唯一的区别是它们拥有更多的权限和对 CPU 的访问权限?

我问这个是因为上下文切换开销非常昂贵。调用调度程序本身会引发上下文切换以恢复调度程序状态,然后调度程序调用另一个进程来运行,然后再次调用另一个上下文切换,这听起来很奇怪。


这是一个非常好的问题,除了硬件了解操作系统和任务调度程序的概念这一事实之外,答案是“是”。

在硬件中,您会发现仅限于“管理程序”模式的寄存器。无需过多介绍内部 CPU 架构的细节,就有“用户模式”和“管理程序模式”的基本程序执行寄存器的副本,后者只能由操作系统本身访问(通过内核设置的控制寄存器,表示当前是否正在运行内核或用户模式应用程序)。

所以你所说的“上下文切换”是交换/重置的过程用户模式寄存器(指令寄存器、堆栈指针寄存器等)等,但系统寄存器不需要被换出,因为它们与用户寄存器分开存储。

例如,x86 中的用户模式堆栈是 USP - A7,而管理程序模式堆栈是 SSP - A7。因此内核本身(包含任务调度程序)将使用主管模式堆栈和其他主管模式寄存器来运行自己,在运行时将主管模式标志设置为1,然后执行上下文切换在用户模式硬件上在应用程序之间交换并将超级用户模式标志设置为 0。

但在操作系统和任务调度的想法之前,如果您想做一个多任务系统,那么您必须使用您在问题中概述的基本概念:每 x 个周期使用硬件中断调用任务调度程序,然后将应用程序换成任务计划程序,然后换入新应用程序。但在大多数情况下,计时器中断将是您实际的任务调度程序本身,并且它会经过大量优化,以使其不再是上下文切换,而更像是一个简单的中断处理程序例程。

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

Linux调度程序需要上下文切换吗? 的相关文章

  • 任何退出 bash 脚本但不退出终端的方法

    当我使用exitshell 脚本中的命令 该脚本将终止终端 提示符 有什么方法可以终止脚本然后停留在终端中吗 我的剧本run sh预计通过直接获取或从另一个脚本获取来执行 编辑 更具体地说 有两个脚本run2 sh as run sh ec
  • 对于任何真实数据集,数据压缩比的最小可能值是多少

    我在写信ZLIB类似于嵌入式硬件压缩器的 API 它使用 deflate 算法来压缩给定的输入流 在进一步讨论之前 我想解释一下数据压缩率 数据压缩率定义为未压缩大小与压缩大小之间的比率 压缩比通常大于一 这意味着压缩数据通常比未压缩数据小
  • 如何在C(Linux utf8终端)中打印“盒子抽屉”Unicode字符?

    我正在尝试显示 方框图范围 2500 257F 中的 Unicode 字符 它应该是标准 utf8 Unicode 标准 版本 6 2 我根本做不到 我首先尝试使用旧的 ASCII 字符 但 Linux 终端以 utf8 显示 并且没有显示
  • Vagrant 遇到问题 - “404 - 未找到”

    我正在尝试使用 Vagrant 制作一个 LAMP 盒子 有人告诉我它使用起来非常简单 我对网络和虚拟机完全陌生 对 Linux Ubuntu 的经验也很少 我目前已尝试按照官方文档页面上的教程进行操作 http docs vagrantu
  • 在ubuntu中打开spyder

    我想在ubuntu中打开spyder Python IDE 通常我会在 shell 中编写 spyder 它会打开spyder IDE 现在 当我在shell中编写spyder时 它只是换行 什么也没有发生 类似于按 enter 我如何找回
  • 使用 systemctl 获取 systemd 进程的正常运行时间或停机时间?

    喜欢使用systemctl is active
  • bash 将输出重定向到文件,但结果不完整

    重定向命令输出的问题已经被问过很多次了 但是我有一个奇怪的行为 我使用的是 bash shell debian 版本 4 3 30 1 release 并尝试将输出重定向到文件 但并非所有内容都记录在文件中 我尝试运行的 bin 文件是 l
  • Ruby:在 Ubuntu 上安装 rmagick

    我正在尝试在 Ubuntu 10 04 上安装 RMagick 看起来here https stackoverflow com questions 1482823 is there an easy way to install rmagic
  • Crontab 每 5 分钟一次 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我如何告诉 crontab 每 5 分钟运行一次 但从每小时的第二分钟开始 换句话说 我想在以下时间执行我的脚本minute 5 2 例如 我的脚本应
  • “git add”返回“致命:外部存储库”错误

    我刚刚进入 git 的奇妙世界 我必须提交我对程序所做的一系列更改 位于名为的目录中 var www myapp 我创建了一个新目录 home mylogin gitclone 从这个目录中 我做了一个git clone针对公共回购 我能够
  • Linux无法删除文件

    当我找到文件时 我在删除它们时遇到问题 任务 必须找到带有空格的文件并将其删除 我的尝试 rm find L root grep i 但我有错误 rm cannot remove root test No such file or dire
  • 在汇编中使用 printf 会导致管道传输时输出为空,但可以在终端上使用

    无输出 https stackoverflow com questions 54507957 printf call from assembly do not print to stdout即使在终端上 当输出不包含换行符时也有相同的原因
  • 如何在线程创建和退出时调用函数?

    include
  • 在 Google Colab 中重新启动内核

    我正在尝试通过单元重新启动 Google Colab Jupyter Notebook 中的内核 前面给出的选项 import os os exit 00 没问题 但在我看来 这不是一种非常 Pythonic 的重新启动内核的方式 另一种选
  • 如何才能将 TCP 连接返回到同一端口?

    机器是 RHEL 5 3 内核 2 6 18 有时我在 netstat 中注意到我的应用程序有连接 建立了 TCP 连接本地地址 and 国外地址是一样的 其他人也报告了同样的问题 症状与链接中描述的相同 客户端连接到本地运行的服务器的端口
  • ioctl 命令的用户权限检查

    我正在实现 char 驱动程序 Linux 并且我的驱动程序中有某些 IOCTL 命令仅需要由 ADMIN 执行 我的问题是如何在 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL 您可以使用bool capable in
  • 在内核代码中查找函数的最佳方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我开始浏览内核代码 遇到的一件事是如何跟踪函数调用 结构定义等 有没有一种好的方法可以快速跳转到函数定义并退出 我尝试过 Source N
  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • docker 非 root 绑定安装权限,WITH --userns-remap

    all 尝试让绑定安装权限正常工作 我的目标是在容器中绑定安装卷 以便 a 容器不以 root 用户身份运行入口点 二 docker daemon 配置了 userns remap 这样容器 主机上没有 root c 我可以绑定挂载和读 写

随机推荐

  • Laravel 5.1 防止 CSRF 不匹配引发异常 [重复]

    这个问题在这里已经有答案了 我遇到向用户抛出 CSRF 异常的问题 发生这种情况的原因完全是无辜的 例如 如果有人在最 终提交表单时花了太长时间填写表单 则会话已过期并且令牌不匹配 现在显然这是一个错误 但它不需要杀死所有内容并抛出异常 有
  • 优化 Solr 的排序

    我正在使用 Solr 进行实时搜索索引 我的数据集大约有 60M 大文档 我需要按时间排序 而不是按相关性排序 目前 我在查询中使用排序标志按时间排序 这对于特定搜索效果很好 但是当搜索返回大量结果时 Solr 必须获取所有结果文档并在返回
  • RDD 中的分区数量和 Spark 中的性能

    在 Pyspark 中 我可以从列表创建 RDD 并决定有多少个分区 sc SparkContext sc parallelize xrange 0 10 4 我决定对 RDD 进行分区的分区数量如何影响性能 这与我的机器的核心数量有何关系
  • Java - 变量可能未初始化

    好的 所以无论我尝试什么 这个程序都无法工作 它只是一直说可变税可能未初始化 我可以拥有的唯一属性是收入 因此我无法申报高于此代码的税款 我发现如果我这样做的话 代码实际上可以被编译 显然这会导致数据过时 所以它没有用 请帮忙 public
  • 在编译时将文件复制到应用程序文件夹中

    如果我有一些文件想要从我的项目复制到 bin debug 编译时的文件夹 那么看来我必须将它们放入项目的根目录中 将它们放入子文件夹似乎将它们复制到 bin debug 文件夹的结构与它们存储的结构相同 有什么办法可以避免这种情况吗 只是要
  • Xcode 不兼容的指针类型

    语义问题 初始化时不兼容的指针类型NewCustomCell 带有类型的表达式UITableViewCell static NSString cellID customCell NewCustomCell cell tableView de
  • 从 C# 接口继承 XML 注释

    我想知道是否有人知道如何将接口 xml 注释链接到实现 问题是我希望基本评论首先来自我的界面 例子 interface myinterface
  • 我的 RestController 没有触发 @ControllerAdvice 和 @ExceptionHandler

    为了在整个应用程序中进行统一的异常处理 我正在使用使用 Spring 进行 REST 的错误处理 https www baeldung com exception handling for rest with spring解决方案 3 使用
  • MVC3 中的 POCO 类和 ViewModel

    我不是一名经验丰富的 MVC3 开发人员 但我正在努力成为一名经验丰富的 MVC3 开发人员 我熟悉 POCO 类和 ViewModel 因为前者描述了数据库的每个类 后者用于 mvc3 中的强类型视图 对于经验丰富的开发人员来说 我的问题
  • 用于插入、更新、删除后将数据按顺序输入日志表的 PL/SQL 触发器

    我正在解决家庭作业问题 我的触发器遇到了编译问题 并且无法理解如何创建引用序列和另一个表的触发器 并将这些值插入到我创建的日志表中 我读过 在表列条目上使用 SERIAL not null 可能会消除对序列和引用表的需要 http www
  • django:datediff sql 查询?

    我正在尝试在 Django 中执行与以下 SQL 等效的操作 SELECT FROM applicant WHERE date out date in gt 1 AND date out date in lt 6 我可以将其作为 RAW s
  • 将 div 扩展到滚动高度

    我需要扩展一个通过 css 将溢出设置为隐藏的 div 单击 展开 时 div 的高度将扩展到显示整个文本所需的高度 为了实现这一目标 我使用以下代码 expand click function mainDiv animate height
  • Safari/Chrome (Webkit) - 无法隐藏 iframe 垂直滚动条

    我有一个iframe在 www example com 上 指向 support example com 这是外部域的 CNAME 我自动调整 iframe 的高度 以便框架不需要任何滚动条来显示所包含的网页 在 Firefox 和 IE
  • 使用 stdin stdout 和 stderr 启动 exe/进程?

    使用 C 我如何使用 stdin stdout 和 stderr 启动 exe 进程 我知道如何在 NET 中执行此操作 我记得过去使用过 popen 但 popen 似乎允许 stdin 或 stdout 但不能同时使用 也不能全部使用
  • 如何在不使用 Amplify 的情况下使用 Amazon Cognito

    我现在刚刚开始研究 Cognito AWS 的设置相当简单 直接 我们有各种应用程序 网络应用程序和服务 我们希望它们能够使用 Cognito 服务 我有使用 Auth0 进行类似设置的经验 但由于我们一直在利用许多 Amazon Web
  • 并行启动测试时 Django 的“override_settings”装饰器如何工作

    我正在检查 Django 的设置模块是如何构建的以及如何覆盖设置 https docs djangoproject com en 3 2 topics testing tools django test override settings装
  • 在控件上使用 DoubleBuffer 的优点和缺点

    默认情况下 Windows 控件没有 DoubleBuffer 当我使用它时 我可以减少闪烁 为什么它在 Windows 控件中默认不使用 任何人都可以说出在控件上使用 DoubleBuffer 时的优点和缺点 Thanks 当我们想要创建
  • Web api 身份验证和 MVC 4

    我有以下解决方案 Web API 项目 MVC 4 项目 我需要通过使用 JSON 请求发送凭据来对用户进行身份验证 https 是必须的 这是一个好方法吗 以及如何在 Web api 和 MVC 上对用户进行身份验证 这是一个好方法吗 是
  • 如何在 django 中使 @cached_property 无效

    我目前正在使用 cached property在模型类上 我想在保存时删除它 以便可以在下次调用时重新填充它 我该怎么做呢 例子 class Amodel model fields cached property def db connec
  • Linux调度程序需要上下文切换吗?

    我有一个关于 linux 调度程序和其他一些类似的内核系统调用的一般问题 Linux调度程序是否被视为一个 进程 并且对调度程序的每次调用都需要像另一个进程一样进行上下文切换 假设我们有一个时钟滴答声 它会中断当前正在运行的用户模式进程 现