1

我只对与 Mac OS X 相关的答案感兴趣,因为我认为答案会因操作系统而异。

例如,Apple 在本文档中提到了内核变量 avenrun 。我知道还有更多,我相信可以通过以下方式生成完整的列表:

nm -j /mach_kernel

但是,仅列出名称并不能告诉我有关变量结构或如何使用它们的任何信息。

我想知道的是如何去了解可用的内核变量、如何使用它们以及如何使用它们。

4

1 回答 1

1

最好的办法是查看内核源代码,该源代码可从 Apple 的下载页面获得。你可以在http://www.opensource.apple.com/source/xnu/

不幸的是,仅仅知道内核变量是什么并不能真正帮助你。这实际上取决于您要达到的目标。如果您这样做纯粹是为了了解内核,那么源代码是一个更好的学习场所。但是,变量的作用不如找出特定问题的解决方案重要,在这种情况下没有说明。

如果您运行“uname -a”,您将获得一个指向相关内核版本的链接:

$ uname -a
Darwin my.host.name 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun  7 16:32:41 PDT 2011; root:xnu-1504.15.3~1/RELEASE_X86_64 x86_64

所以这是基于 1504.15.3,它位于:http ://www.opensource.apple.com/source/xnu/xnu-1504.15.3/

大部分有用的信息都可以通过 'sysctl -a kern.' 访问,但这是在 bsd/kern/kern_sysctl 文件中实现的,该文件位于:

http://www.opensource.apple.com/source/xnu/xnu-1504.15.3/bsd/kern/kern_sysctl.c

不幸的是,这并没有具体告诉我们这个 avenrun 变量。但是,如果您查看 host.c:

http://www.opensource.apple.com/source/xnu/xnu-1504.15.3/osfmk/kern/host.c

它显示为一个变量,用于计算平均主机负载。因此,您可以使用它来确定系统在任何时候的负载。

但是,如果您的问题是“我如何找到系统的负载?” 然后我会运行'sysctl -a | grep load' 并得出 'vm.loadavg',然后在http://www.opensource.apple.com/source/xnu/xnu-1504.15.3/bsd/sys/sysctl.h的 sysctl 中查找看看如何阅读它。

于 2011-07-12T08:39:29.277 回答