这个内核函数可以更具可读性吗? (学术研究所需的想法!)

2023-12-06

按照我之前的问题关于极长函数背后的基本原理,我想提出一个关于一段代码我正在为我的研究而学习。它是 Linux 内核中的一个函数,相当长(412 行)且复杂(一个中冶指数共 133 条)。基本上,这是一个长而嵌套的 switch 语句

坦白说,我想不出有什么办法可以改善这个混乱局面。调度表看起来既庞大又低效,任何子例程调用都需要难以想象的参数数量才能覆盖足够大的代码段。

您是否认为可以以更易读的方式重写该函数,而不损失效率?如果没有,您觉得这段代码可读吗?

不用说,我的研究中出现的任何答案都将得到全额评分——无论是在此处还是在提交的论文中。

链接到在线源浏览器中的函数


我不认为这个功能是一团糟。我以前也写过这么乱七八糟的。

该函数是将微处理器制造商提供的表格代码转换为代码。这是非常低级的东西,为特定的中断或错误原因复制适当的硬件寄存器。在这种代码中,您通常无法触摸尚未由硬件填充的寄存器 - 这可能会导致总线错误。这可以防止使用更通用的代码(例如复制所有寄存器)。

我确实看到了一些代码重复。然而,在这个级别(在中断级别操作),速度更为重要。我不会在公共代码上使用提取方法,除非我知道提取的方法将被内联。


顺便说一句,当您在那里(内核)时,请务必捕获此代码的更改历史记录。我怀疑您会发现这里没有太多变化,因为它与硬件相关。此类代码随时间变化的性质与大多数用户模式代码经历的变化的性质有很大不同。

例如,当实施新的整合 IO 芯片时,这种情况就会发生变化。在这种情况下,更改很可能是复制粘贴并更改新副本,而不是修改现有代码以适应更改的寄存器。

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

这个内核函数可以更具可读性吗? (学术研究所需的想法!) 的相关文章

随机推荐

  • LocalDate.parse 是否默默地更正日期数字?

    String s 2020 Jun 31 DateTimeFormatter formatter DateTimeFormatter ofPattern yyyy MMM dd LocalDate date LocalDate parse
  • 尝试关闭 OpenCV 窗口没有效果

    我正在使用 OpenCV 捕获网络摄像头图像 效果很好 但是如果我想在按下按钮时关闭 OpenCV 它不起作用 尝试了cvDestroyWindow NameOfWindow and cvDestroyAllWindows 窗口保持打开状态
  • 如何为 Qt 独立应用程序创建清单文件

    我正在构建一个带有静态链接的 Qt 独立应用程序本指南 我遵循了除最后一步之外的每一步 最后一步包括将清单嵌入到可执行文件中 并且应用程序在许多机器上运行良好 然而 我发现可执行文件无法启动 因为计算机中缺少 MSVCP140 dll 这个
  • AngularJS - 如何在 ng-Repeat 中引用属性名称

    除了呈现对象中属性的值之外 我还想将属性名称呈现为标签 有没有办法做到这一点ng repeat 例如 ul li propertyName option li ul 可能会输出这样的内容 ul li Name John li li Phon
  • 如何在不选择新实例的情况下将一个查询的结果连接到另一个查询的结果中? [复制]

    这个问题在这里已经有答案了 我有一个类 它的数据来自两个不同的来源 一个是数据库 另一个是 Web API 数据库源为我提供了大部分数据 而 Web API 仅提供了一些属性 我使用 Dapper 从数据库获取数据 作为IEnumerabl
  • Rails 中不兼容的字符编码 - 如何明智地失败/跳过?

    我通过 IMAP 导入电子邮件主题时遇到问题 我遇到了一个问题 我认为与电子邮件主题中的 符号有关 花了几个小时浏览各种答案后 我似乎找不到任何有用的东西 如果我尝试以下操作 使用红宝石2 1 2 浏览量 电子邮件 索引 email sub
  • Excel VBA - 在某些条件下删除行

    如果一行有值INACTIVE in column D and N A in column H 我想删除该行 我试图用下面的代码来实现这一点 但实际上没有行被删除 Dim ws3 As Worksheet Dim r As Integer S
  • Bootstrap Datepicker - 如何将值发送到 URL?

    我必须承认我对 Javascript 毫无希望 PHP 更适合我 我正在尝试使用 Bootstrap Datepicker 进行预订系统 我正在尝试找到一种方法 当您单击日期时 它将重新加载页面并将日期发送到 URL 就像是 http ex
  • 无法读取反应中未定义的属性“someProperty”

    我正在开发一个应用程序 在该应用程序中 我使用状态从一个组件传递到另一个组件的 Navlink 中的变量值 然后将这些接收到的值加载到输入字段中 然后单击该另一个组件中的提交按钮以对值执行某些操作 当我提醒他们时 我的值会被正确接收并正确显
  • 添加到构造函数中的只读集合?

    是否有 C 语言构造允许我将项目添加到构造函数中的只读集合属性 我想做这样的事情 public class Node public IList
  • 设计从 gem 渲染默认视图而不是生成的视图?

    我在安装设备时为两个用户模型生成了视图 控制器 无论出于何种原因 正在渲染 gem 本身内部包含的视图 而不是我添加的视图 views users registrations new html erb views bizusers regi
  • jQuery 隐藏/显示并在悬停时滑动...更好的方法吗?

    基本上在使用悬停来隐藏或显示项目时遇到一些问题 想法很简单 悬停时显示一个 div 当不再悬停时 将其隐藏 问题是 如果鼠标悬停在 div 上并离开得太快 则显示 隐藏 div 将保持可见 我希望这是很容易解决的问题 而不是悬停事件的典型问
  • CUDA 9 shfl 与 shfl_sync

    自 CUDA 9 起 shfl 指令已弃用 应由 shfl sync 替换 但是 当它们表现不同时 我应该如何替换它们呢 代码示例 global static void shflTest int tid threadIdx x float
  • Chrome 和媒体查询错误

    我正在尝试制作一个基本上由一些垂直放置的幻灯片组成的网站 我一直希望做出响应式设计 以便我的 幻灯片 在更大的屏幕尺寸上适当调整大小 或者以奇怪的尺寸适当填充 这是我设置适当尺寸的 LESS 文件 html body width 100 h
  • 使用 Graph API 更新 M365 Group 的敏感度标签,PowerShell 抛出 401 错误

    UGH 当我尝试使用 Graph API 和 PowerShell 更新 M365 组敏感度标签信息时 我遇到了 401 错误 使用 Graph Explorer 野兽工作得很好 但使用 PowerShell 我收到一个错误Invoke R
  • 使用 Gluon 在 APK META-INF/INDEX.LIST 中复制的重复文件

    我正在 javafx 上的 netbeans 中使用最新的 gluon 版本开发代码 当我在笔记本电脑中运行它时 程序没有问题 但是当我尝试在 android 中运行时 我实现了这个消息 com android builder packag
  • 如何获取xml文件中每个节点的完整路径?

    我正在使用 xpath 遍历 xml 文件 我想知道是否有一种简单的方法来获取文件中每个节点的路径 我能想到的一种方法是收集数组中的所有节点 然后将其传递到一个函数 该函数将每个节点作为参数 并不断寻找父节点 直到到达文档根 所以 func
  • 如何使用状态访问器获取 Bot Framework 中的属性

    我的机器人的功能之一是处理购物车 用户可以在对话中的任何位置添加商品 然后完成购物以关闭产品购物车 为了避免将购物车从一个对话框传递到另一个对话框 我想创建一个UserProfile财产在UserState The UserProfile财
  • 如何将 Express 中的数据呈现为 HTML 表格?

    我有一个简单的server js应用 一种路由是 api showaccounts 路由 其范围是从 MongoDB 获取一系列帐户 包含用户名 余额和名称字段 app post api showaccounts async req res
  • 这个内核函数可以更具可读性吗? (学术研究所需的想法!)

    按照我之前的问题关于极长函数背后的基本原理 我想提出一个关于一段代码我正在为我的研究而学习 它是 Linux 内核中的一个函数 相当长 412 行 且复杂 一个中冶指数共 133 条 基本上 这是一个长而嵌套的 switch 语句 坦白说