在运行时修改自己的内核二进制文件有直接影响和潜在影响吗?

时间:2019-02-12 07:04:03

标签: macos kernel

我更多地是一名Web开发人员和数据库人员,但是与kernel_task和个人计算机上的温度相关的严重不便的性能问题使我有兴趣研究Mac OS的详细信息(我注意到尽管CPU温度持续低下并重新映像了机器,但某些进程仍将触发内核任务的持续峰值。

我是我自己的OSX计算机上的root用户。我可以阅读/System/Library/Kernels/kernel。我的理解是这是该机器的“ Mach / XNU”内核(尽管我对此并不了解,但很奇怪它只有13Mb)。

如果我修改或删除/System/Library/Kernels/kernel会怎样?

我想因为它是在运行时things might be okay until I try to reboot如果是这种情况,是否会仔细修改此文件来更改操作系统的行为,仅在重新启动后有效,前提是它不会引起内核崩溃? (内核崩溃只是Linux的东西吗?)

1 个答案:

答案 0 :(得分:2)

  

如果我修改或删除/System/Library/Kernels/kernel会怎样?

首先,您需要禁用SIP(系统完整性保护)才能修改或编辑此文件,因为出于安全原因,默认情况下,即使root用户也对其进行了保护。

如果删除它,则系统将不再引导。如果您将其替换为其他xnu内核,则理论上该内核将在下次启动,前提是它已与安装的设备驱动程序和其他kexts以及OS用户区充分匹配。

请注意,您无需删除/替换内核文件即可启动另一个文件,一次可以安装多个文件。有关详细信息,请参阅Apple内核调试套件(KDK)随附的文档,您可以从Apple Developer Downloads Area下载。

  

我想,既然是在运行时,在尝试重新启动之前一切都会好起来的。

是的,在引导过程中,内核会由引导加载程序尽早加载到内存中。除了在设备驱动程序更改时生成预链接的内核之外,文件都不会使用。

最后,我觉得我应该对您实际上试图诊断/修复的内容进行一些解释:

  

但是与个人计算机上的kernel_task和温度相关的严重不便的性能问题使我有兴趣研究Mac OS的详细信息

kernel_task运行的代码比kernel内核本身更多。具体来说,所有已加载的kext(请参阅kextstat命令)(以及现代macOS系统上的很多kext)都已加载到内核空间中,这意味着它们被计入kernel_task下。

长期运行的内核CPU使用率峰值似乎是由文件系统自我维护或卷加密/解密活动引起的。几乎可以肯定,它们不是xnu内核本身的基本编程错误。 (尽管我认为愚蠢的错误很容易犯。)

另一个可能的罪魁祸首是设备驱动程序。特别是GPU驱动程序是非常复杂的软件,即使您的系统似乎处于空闲状态,它们也很忙。

处理此问题的第一步(如果确实存在)将是找出内核在这些CPU周期中实际上在做什么。因此,您需要进行一些分析和/或跟踪。在运行中的内核上执行此操作很可能再次需要禁用SIP。 Xcode附带的Instruments.app能够分析过程;我不确定是否仍然可以使用它来对kernel_task进行配置,我认为至少在以前的版本中可以使用。另一个可能的选择是DTrace。 (有整本关于这个主题的书)