如何知道达尔文内核调度程序时间片?
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 *
.
因此,向后工作。我认为(但完全没有尝试过)你可以
- 使用
thread_policy_get()
例程将有关线程调度状态的信息 return 转换为 thread_policy_t
- 那个结构似乎有一个
policy_rr_info_t
sub-substructure
- sub-structure 应该有一个
quantum
字段。
- 那个字段似乎是时间片,但我不知道单位。
API 的这一部分没有手册页,但是 this Apple Developer 页面至少解释了一点如何使用 API。
请注意,这都是通过 grep 各种内核头文件收集到的,我绝对没有尝试在任何实际代码中使用这些 APIs 中的任何一个。
在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 *
.
因此,向后工作。我认为(但完全没有尝试过)你可以
- 使用
thread_policy_get()
例程将有关线程调度状态的信息 return 转换为thread_policy_t
- 那个结构似乎有一个
policy_rr_info_t
sub-substructure - sub-structure 应该有一个
quantum
字段。 - 那个字段似乎是时间片,但我不知道单位。
API 的这一部分没有手册页,但是 this Apple Developer 页面至少解释了一点如何使用 API。
请注意,这都是通过 grep 各种内核头文件收集到的,我绝对没有尝试在任何实际代码中使用这些 APIs 中的任何一个。