kernel_task做什么?

我只想知道kernel_task负责什么。此外,对于它的可接受最大RAM和CPU使用情况是多少?


1最好在安全启动后测量您的RAM和CPU使用情况,以了解系统在空闲时的运行状况。 - bmike
2根据泰勒(Tyler)说,这是"微内核本身的表示"。如果你想要更具体的答案,他继续说道"似乎它是Mach之上用于Mac OS X的基本(虚拟/)内存管理器"。除非你与高级苹果工程师交谈,否则很难找到确定性的答案。公众只能拼凑出这个过程。来源:http://bleepsoft.com/tyler/index.php?itemid=43 - user10355
3个回答

内核任务是特殊的,因为它是一个基于Mach 3.0的整个操作系统/微内核。它抽象了大部分核心硬件、定时、消息传递和内存处理。
大多数人在活动监视器中会注意到,kernel_task会累积所有的CPU时间用于输入/输出(i/o)处理延迟和计算以及进程和线程的调度开销。同样地,它还会累积所有不在用户空间内的内存分配。对于2014年及更新的Mac电脑而言,此任务存在的目的是为了限制CPU的使用-当处理器温度过高时,kernel task会被指定为“无工作”,并显示高CPU忙碌状态,以使处理器处于空闲状态,以免过热损坏计算机。这在便携式产品上尤其明显,特别是没有风扇或散热器来冷却处理器的MacBook。Apple向潜在的内核程序员警告,在"为什么你应该远离内核编程"中禁用冷却将导致永久性不可修复的硬件损坏。
总结一下,内核编程是一项巨大的责任。您必须非常小心,确保您的代码不会导致系统崩溃,不会为未经授权的用户提供访问他人文件或内存的权限,不会引入远程或本地的根漏洞,并且不会导致意外数据丢失或损坏。
如果您在重新启动后观察它,您会发现它从最小的RAM和CPU需求开始,只有当其他程序运行并需要系统服务时才会增长。
为了减少其体积,关闭不需要的端口(如WiFi、蓝牙等)以及空闲/未使用的程序。如果情况没有好转,考虑重新启动以确保没有任务被卡住或泄露内存。如果您有正在进行实际工作的程序,它们将导致内核使用内存和处理器时间-只需在启动这些程序时观察哪些其他程序导致此行为即可。这很少是内核的问题-即使是性能不佳的程序-也可以通过注销并重新登录来解决。内核任务会进行良好的清理,并且通常会注意只使用工作负载所需的资源。

谢谢!你会说700-750 MB的内存对它来说是可以接受的吗?我有很多空闲内存,但我想知道是否还有其他需要做的事情。 - Tuesday
不一定。在我的主要MacBook Pro上,当我运行很多复杂的程序时,它有时会膨胀到2GB。即使如此,我通常每个月只需要重新启动一次左右。(2.66 Core 2 Duo / 8 GB RAM) - bmike

Mac OS X Internals: A Systems Approach - Amit Singh - Google Books:

内核使用任务和线程抽象将其功能分为各种执行流。内核使用一个任务——内核任务——具有执行内核操作的多个线程,如调度、线程回收、调用管理、分页和Unix异常处理等。因此,xnu是一个包含不同组件(如Mach、BSD和I/O Kit)的单内核,在同一地址空间内作为一组线程运行。

http://lists.apple.com/archives/darwin-kernel/2010/Sep/msg00014.html:

核心任务并不是一个真正的任务。它代表着操作系统的核心——内核。它所做的大部分工作都是在应用程序的直接请求下完成的。每当您分配一个大块内存、打开或关闭文件、读取或写入文件、从网络中获取数据、创建新的进程或线程等,您的应用程序就会执行一个系统调用。这些调用会导致内核为您的应用程序执行工作。其中很多工作都计入了内核任务,但实际上是由您的应用程序间接完成的。

一个可能导致内核超负荷工作的实际原因是您的系统内存不足,且正在进行交换操作。在“活动监视器”的“内存”选项卡下,检查内存压力图表是否显示为黄色或红色。
在这种情况下,您可以按照内存使用量对进程进行排序,并终止一些消耗大量内存的进程,以减轻压力(例如终止某些Google Chrome助手进程)。