如何知道达尔文内核调度程序时间片?

How to know Darwin kernel scheduler time slice?

在Linux上,sched.h包含

的定义

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

获取进程的时间片。但是 OS X El Capitan 附带的文件不符合该定义。

在 OS X 上有替代方案吗?

与这些内容相关的 API 非常复杂,而且记录不完整,但这是我找到的内容。

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

struct policy_rr_info {
    ...
    integer_t quantum;
    ....
};

quantum 是,我 认为 ,时间片(不确定单位。)然后在同一个地方定义这个或相关类型,我找到文件 /usr/include/mach/mach_types.def,它说类型 struct thread_policy_t 在第 203 行包含一个字段 policy_rr_info_t

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

因此,向后工作。我认为(但完全没有尝试过)你可以

  1. 使用 thread_policy_get() 例程将有关线程调度状态的信息 return 转换为 thread_policy_t
  2. 那个结构似乎有一个 policy_rr_info_t sub-substructure
  3. sub-structure 应该有一个 quantum 字段。
  4. 那个字段似乎是时间片,但我不知道单位。

API 的这一部分没有手册页,但是 this Apple Developer 页面至少解释了一点如何使用 API。

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