内置和可加载模块的 __init 和 __exit 宏用法

2024-05-16

我正在阅读有关linux内核开发的内容,我刚刚读了一些我不明白的文字。以下段落讨论了模块的 __init 和 __exit 宏:

这演示了内核 2.2 及更高版本的一个功能。注意变化 在 init 和 cleanup 函数的定义中。 __init 宏 导致 init 函数被丢弃并释放其内存。 init 函数完成内置驱动程序,但不完成可加载模块。 如果您考虑一下 init 函数何时被调用,这使得 完美的感觉。

还有一个 __initdata 其工作方式与 __init 类似,但针对的是 init 变量而不是 功能。

__exit 宏会导致函数在以下情况下被省略: 该模块内置于内核中,就像 __exit,对可加载模块没有影响。同样,如果您考虑清理函数何时运行

我明白了;宏观__init一旦内置驱动程序的 init 函数完成,就会导致 init 函数被丢弃并释放其内存。但why?不适用于可加载模块?我无法理解它。

我知道这是一件愚蠢的事情,但我想了一会儿却无法完全理解。为什么是内置驱动程序而不是可加载模块?变量、地址等分配在__init两者都需要,对吗?


你说得对;即使在模块中,也可能存在初始化后实际上不需要的函数,因此原则上可以将它们从内存中删除。原因__init对模块没有影响更多的是关于它的实现容易程度。

这是对有关性质的问题的回答__init https://stackoverflow.com/a/8832142/460258阐明了这个主题。本质上,内核构建系统会查找所有标记为的函数__init,跨越内核的所有部分,并对它们进行排列,以便它们都位于同一内存块中。

然后,当内核启动时,它可以一次性释放这块内存。

这种预排序的想法对于模块来说不太适用。加载模块时必须加载init代码,因此它不能与其他init代码共享空间。相反,内核必须从每个模块中挑选几百个字节并单独释放它们。

然而,硬件页面大小通常为 4KB,因此很难以小于该大小的块释放内存。所以试图释放__init每个单独模块中的功能可能比它的价值更麻烦。

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

内置和可加载模块的 __init 和 __exit 宏用法 的相关文章

  • 如何返回源 bash 脚本?

    我在 bash 脚本中使用 source 如下所示 bin bash source someneatscriptthatendsprematurely sh 我想退出 someneatscriptthatendsprematurely sh
  • 编写我自己的 init 可执行文件

    我想创建自己的 init 并为下雪的周末带来一些 Linux 乐趣 我知道 内核使用 rootfs 启动 并在加载驱动程序和安装磁盘后将流程提供给 sbin init 我下载了ubuntu云镜像并尝试使用kvm直接启动内核 如下所示 kvm
  • Liferay:从 init() 获取 PortletID 和 companyID

    也许通过 init PortletConfig 中的 PortletConfig 问题是使用 PortletConfigImpl portletConfig getPortletId 不再允许 因为在 package properties
  • Python:如何让我的 tkinter 应用程序正确退出?

    我需要知道如何在 Mac 上执行此操作 因为每当我尝试退出它时 我都必须强制退出它 当用户单击退出按钮时 是否有正确的方法使 Tkinter 正常退出 我知道怎么做了 我只是放了一个简单的exit 主循环之后的命令
  • 在 Powershell 中用于退出 Python 的 Ctrl-C 现在不起作用

    在 Powershell 命令提示符中使用 Ctrl C 时 Python 无法退出 而是给出 KeyboardInterrupt 字符串 最近我重新安装了 Windows 10 在重新安装之前 Ctrl C 退出 python 3 5 2
  • 从 Azure Pipeline .yaml 干净退出?

    有没有比让脚本抛出错误更好 更干净 更惯用的方法来退出基于 yaml 的 Azure Pipeline 例如 这可行 但感觉很笨拙 task PowerShell 2 displayName Exit inputs targetType i
  • 有没有办法防止捕获 sys.exit() 引发的 SystemExit 异常?

    文档说调用 sys exit 会引发 SystemExit 异常 该异常可以在外部级别捕获 我遇到一种情况 我想明确且毫无疑问地从测试用例内部退出 但是 unittest 模块捕获 SystemExit 并阻止退出 这通常很好 但我试图处理
  • 带有 upstart 和 syslog 的 Ubuntu docker 容器

    四处搜寻后 我仍然很困惑你是否可以拥有码头集装箱运行 Ubuntu 并运行初始化系统 暴发户 and syslog 或不 我知道 docker 容器是用于运行单个进程而不是完整的操作系统 但我的用例是在各种 Linux 发行版上测试守护进程
  • 为什么 sys.exit() 会导致回溯?

    根据如何在不回溯的情况下退出Python https stackoverflow com q 1187970 3357935 呼叫sys exit 在 Python 脚本中应该静默退出而不进行回溯 import sys sys exit 0
  • 停止执行另一代码的代码

    我有一个R进行一些数据分析并返回的代码TRUE FALSE 有时 输入数据太大 代码就继续运行 我想要一个脚本来监视我的数据分析代码 如果它没有返回任何内容 比如说600 seconds 然后它会停止正在运行的代码并执行其他操作 就会像按S
  • 什么会导致 Java 在 System.exit() 之后继续运行?

    我有一个 Java 程序 正在通过以下方式启动ProcessBuilder来自另一个 Java 程序 System exit 0 是从子程序调用的 但对于我们的一些用户 在 Windows 上 java exe与子进程关联的进程不会终止 子
  • 避免 ssh 会话超时

    我正在远程工作 服务器在 5 分钟不活动后会自动注销 以下是它执行此操作时通常提供的消息 Read from remote host XXXXXXX Operation timed out 我通常会打开多个会话 大约每隔 30 分钟使用一次
  • H2“runscript”命令将所有表名变成大写

    我有一个 sql 脚本 它只是模式定义 该脚本是 mysql 哑巴的修改版本 去掉 h2 不喜欢的坏字符 脚本运行并将架构插入到 h2 数据库中 但问题是所有数据库名称均为大写 xyz 转换为 XYZ 我需要它们保持小写 因为我的应用程序正
  • 退出和中止有什么区别?

    The abort http ruby doc org core 2 1 1 Kernel html method i abort文件说abort will 通过调用 Kernel exit false 立即有效地终止执行 立即 到底是什么
  • exit() 和 abort() 有什么区别?

    在C和C 中 有什么区别exit and abort 我试图在发生错误 不是例外 后结束我的程序 abort http en cppreference com w c program abort退出程序而不调用使用注册的函数atexit h
  • 以编程方式结束/退出粘合作业

    我正在使用 Glue 书签来处理数据 我的工作是每天安排的 但也可以 手动 启动 由于我使用书签 有时胶水作业可以在没有新数据要处理的情况下启动 然后读取的数据帧为空 在这种情况下 我想好好地结束我的工作 因为它没有什么关系 我试过 if
  • 调用退出后应用程序未退出

    我有一个小问题 我似乎无法弄清楚 我正在将 DataGridView 它的内容 保存到 xls 文件中 我这样做没有任何问题 除了在我的任务管理器中它仍然显示它正在运行 我已致电 xlApp Application Quit 这被声明为 D
  • 如何在qt中创建正确的退出按钮

    我正在尝试创建一个退出按钮来正确关闭我在 QT 中制作的 GUI 我尝试通过以下方式执行此操作 include
  • 如何退出bash中的所有调用脚本?

    假设我有以下脚本 a sh echo in a if test 1 ne 2 then echo oops exit 1 fi b sh echo in b a sh echo in b 2 运行 b sh 时 如果 a sh 退出 我希望
  • Exit() 时是否调用基本对象析构函数?

    我意识到这个问题已经出现过几次 但我试图获得上述问题的明确答案 但我不断遇到相互矛盾的信息 我需要知道的是 当我使用 exit 时 基本类对象是否被破坏 我知道需要删除动态内存 但我的意思更像是 include

随机推荐

  • 在 Julia 中解压缩元组数组

    假设我有一个元组数组 arr 1 2 3 4 5 6 使用 python 我可以做zip arr 1 3 5 2 4 6 朱莉娅中与此等效的是什么 作为 splatting 的替代方案 因为这非常慢 您可以执行以下操作 unzip a ma
  • UILabel UILongPressGestureRecognizer 不起作用?

    我怎样才能得到UILongPressGestureRecognizer在 uilabel 当我实现以下代码时 它不会调用该函数 那么请告诉我我做错了什么 UILongPressGestureRecognizer longPress UILo
  • 在 Heroku 上托管的 Rails3 中强制使用“www”,无需 .htaccess

    我想知道是否有 Rack 替代方案来强制 URL 中包含 www 因为 Heroku 不使用 htaccess 文件 也许甚至是在路线中做到这一点的好方法 Thanks 在您的 ApplicationController 中 您可以简单地创
  • 错误:不支持的 PIVOT 列类型:文本

    我正在尝试执行 PIVOT 但出现错误 我正在尝试查看哪些患者接受了多次间隔治疗 该列是文本类型 我尝试在查询中将列类型转换为 VARCHAR MAX 但仍然收到错误 这是我的代码 SELECT patientname IntervalNa
  • 如何调整 Windows 窗体以适应任何屏幕分辨率?

    我知道这是重复的问题 但我检查了所有其他相关问题 他们的答案没有帮助 结果仍然与屏幕截图 2 中所示相同 我是 C Windows 窗体新手 如截图1所示 我有Form1有一些控件 每组控件都放在一个面板中 我在 PC1 中设计了应用程序
  • 验证假名输入

    我正在开发一个允许用户输入日语字符的应用程序 我试图想出一种方法来确定用户的输入是否是日语假名 平假名 片假名或汉字 应用程序中的某些字段不适合输入拉丁文文本 我需要一种方法将某些字段限制为仅限汉字或仅限片假名等 该项目使用UTF 8编码
  • QuickCheck是否可以生成任意函数

    我试图为身份编写一个 QuickCheck 测试 f y f y 我最初的计划是编写一个返回函数和整数的任意生成器 具有签名Gen Int gt Int Int 并在prop DollerDoesNothing使用 不使用测试该功能应用程序
  • C++中的类要具备什么条件才能成为容器?

    我是 C 编程新手 偶然发现了这个术语containers举例如下vector deque map etc 一个企业的最低要求应该是什么class应该满足被称为container in C 我将从 范围 这个概念开始 Range 只有两个方
  • 按一个字段聚合,选择另一个字段最大值的文档作为集合

    使用聚合框架 获取每个分组的字段最大值的文档的最佳方法是什么 因此使用下面的集合 我希望具有为每个具有最新日期的 group id 返回一个文档的功能 第二个清单显示了所需的结果 group id date 1 11 1 12 1 11 2
  • 网格布局:创建 CSS,以便元素在调整相邻元素大小时保持位置

    我想在网格布局中构建一个简单的图像库 并且我正在使用类似的东西悬停时缩放 http www javascript fx com navigation imagezoom general help help html缩放悬停图像 但我宁愿使用
  • 具有 JPA 持久性的 Spring 状态机 - 存储库使用

    我试图弄清楚如何轻松使用 Spring 状态机 包括使用 JPA 进行持久化 这是我正在处理的问题 不兼容的数据类型 工厂和持久性 在程序的某个时刻 我想使用连接到用户的状态机 有用于此目的的存储库 项目spring statemachin
  • 为 Windows Phone 7 创建自定义 InputScope

    在哪里可以找到创建自定义 InputScope 的教程 我想创建一个自定义键盘 在屏幕键盘上仅显示数字 1 9 无符号 您无法创建自定义输入范围 以下是支持的范围输入范围名称值枚举 http msdn microsoft com en us
  • 如何使用 Perl CGI 脚本提供图像?

    我的 Google fu 让我失望了 如何使用 Perl 提供已生成的图像 Example img src getimage pl getimage pl 里有什么 干得好 usr bin perl w my file inner nav
  • 在VS2015中构建项目:“csc.exe”退出,代码为-1073741571

    我使用的是Visual studio 2013 昨天 我安装了VS2015 企业更新3 我的解决方案的构建过程在 VS2015 中的一个项目中崩溃了 VS2017 RC 也会出现同样的异常 该解决方案在 VS2013 中成功构建 该解决方案
  • 为什么函数声明在不同浏览器中的处理方式不同?

    虽然我在谷歌中找不到对此的引用 但我熟悉这样一个事实 在 javascript 中 全局函数声明在执行任何代码之前都会被解释 换句话说 这工作得很好 f function f 但是 我注意到 chrome 和 firefox 对全局函数声明
  • Javascript:我应该隐藏我的实现吗?

    作为一名 C 程序员 我有一个习惯 将可以而且应该私有的东西设为私有 当 JS 类型向我公开其所有私有部分时 我总是有一种奇怪的感觉 而且这种感觉并没有被 唤起 假设我有一个类型draw方法 内部调用drawBackground and d
  • 活动组代码示例

    有人可以给我一些使用活动组的示例代码吗 我的应用程序中有一些按钮 我想将活动应用于这些按钮 目前我正在使用 setVisibility 但我被告知活动组将是更好的选择 这是另一个ActivityGroup 示例项目 http richipa
  • 修改 Twitter 帖子上可编辑 Div 的内容

    我正在编写一个 chrome 扩展 它可以帮助用户在 Twitter 上输入内容 当在 twitter 上写推文时 twitter 会打开一个可编辑的 div 容器 当用户输入内容时 twitter 大概正在使用某些网络框架 会生成子 di
  • 通过 r markdown 中的循环创建代码片段

    如同如何使用R中的knitr创建一个包含代码块和文本的循环 https stackoverflow com questions 36373630 how to create a loop that includes both a code
  • 内置和可加载模块的 __init 和 __exit 宏用法

    我正在阅读有关linux内核开发的内容 我刚刚读了一些我不明白的文字 以下段落讨论了模块的 init 和 exit 宏 这演示了内核 2 2 及更高版本的一个功能 注意变化 在 init 和 cleanup 函数的定义中 init 宏 导致