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

时间:2017-01-21 20:01:15

标签: c macos posix darwin

在Linux上,sched.h包含

的定义

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

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

OS X上有替代方案吗?

1 个答案:

答案 0 :(得分:0)

与这些东西相关的API非常拜占庭并且记录不清,但这是我发现的。

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

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

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

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

所以,倒退。我认为(但根本没有尝试过)你可以

  1. 使用struct thread_policy_t *例程将有关线程调度状态的信息返回到thread_policy_get()
  2. 该结构似乎有一个thread_policy_t子子结构
  3. 该子结构应该有一个policy_rr_info_t字段。
  4. 该字段出现是时间片,但我不知道这些单位。
  5. 此部分API没有手册页,但this Apple Developer页面至少解释了如何使用此API。

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