如何知道Darwin内核调度程序时间片?

Mid*_*rse 7 c macos posix darwin

在Linux上,sched.h包含的定义

int sched_rr_get_interval(pid_t pid, struct timespec * tp);

获得流程的时间片.但是,OS X El Capitan附带的文件不符合该定义.

在OS X上有替代方案吗?

bna*_*ker 0

与这些东西相关的 API 相当复杂,而且文档很少,但这是我发现的。

首先,与 RR 调度相关的数据类型似乎位于/usr/include/mach/policy.h第 155 行左右。有这样的结构:

struct policy_rr_info {
    ...
    integer_t quantum;
    ....
};
Run Code Online (Sandbox Code Playgroud)

我认为,这quantum是时间片(不确定单位)。然后,在同一位置查找此或相关类型定义的相关类型,我找到了该文件,该文件表示该类型在第 203 行包含一个字段。/usr/include/mach/mach_types.defstruct thread_policy_tpolicy_rr_info_t

接下来,我在/usr/include/mach/thread_act.hpublic 函数中发现thread_policy_get,它可以将有关线程策略的信息检索到struct thread_policy_t *.

所以,向后工作。我认为(但根本没有尝试过)你可以

  1. 使用thread_policy_get()例程将有关线程调度状态的信息返回到thread_policy_t
  2. 该结构似乎有一个policy_rr_info_t子结构
  3. 该子结构应该有一个quantum字段。
  4. 该字段似乎是时间片,但我不知道单位。

这部分 API 没有手册页,但此 Apple 开发人员页面至少解释了一些有关如何使用此 API 的信息。

请注意,这都是通过 grep 各种内核标头收集到的,而且我绝对没有尝试在任何实际代码中使用任何这些 API。