跳转至

sched

sched 提供进程调度策略与优先级查询、CPU (Central Processing Unit) 亲和性设置与获取以及主动让出处理器的功能。

头文件清单

#include "open_source/musl/include/sched.h"

接口清单

接口名称 功能简述
sched_get_priority_max 获取指定调度策略支持的最大优先级值
sched_get_priority_min 获取指定调度策略支持的最小优先级值
sched_yield 使当前线程主动放弃 CPU 占用
sched_getaffinity 获取进程/线程的 CPU 亲和性掩码
sched_setaffinity 设置进程/线程的 CPU 亲和性掩码

Functions

sched_get_priority_max

int sched_get_priority_max(int)

头文件清单

#include "open_source/musl/include/sched.h"

功能说明

  • 获取指定调度策略支持的最大优先级值
  • 当前仅支持 SCHED_RR 调度策略,policy 入参必须传入 SCHED_RR
  • 返回值为当前系统 SCHED_RR 策略下的最高优先级数值

入参

名称 参数类型 详细说明 约束取值范围
policy int 调度策略 SCHED_RR(2)

返回值

  • 返回类型:int
返回值 文字含义 触发场景
非负整数 当前调度策略支持的最大优先级值 policy 为 SCHED_RR
-1 参数无效 policy 不为 SCHED_RR,errno 设置为 EINVAL

sched_get_priority_min

int sched_get_priority_min(int)

头文件清单

#include "open_source/musl/include/sched.h"

功能说明

  • 获取指定调度策略支持的最小优先级值
  • 当前仅支持 SCHED_RR 调度策略,policy 入参必须传入 SCHED_RR
  • 返回值为当前系统 SCHED_RR 策略下的最低优先级数值

入参

名称 参数类型 详细说明 约束取值范围
policy int 调度策略 SCHED_RR(2)

返回值

  • 返回类型:int
返回值 文字含义 触发场景
非负整数 当前调度策略支持的最小优先级值 policy 为 SCHED_RR
-1 参数无效 policy 不为 SCHED_RR,errno 设置为 EINVAL

sched_yield

int sched_yield(void)

头文件清单

#include "open_source/musl/include/sched.h"

功能说明

  • 使当前线程主动放弃 CPU 占用,让出处理器给其他线程执行
  • 调用后当前线程将被移入就绪队列等待重新调度
  • 适用于协作式多任务场景,主动让出 CPU 资源

返回值

  • 返回类型:int
返回值 文字含义 触发场景
0 执行成功 成功让出 CPU
-1 执行失败 让出 CPU 失败

sched_getaffinity

int sched_getaffinity(pid_t, size_t, cpu_set_t *)

头文件清单

#include "open_source/musl/include/sched.h"

功能说明

  • 获取指定进程/线程的 CPU 亲和性掩码,查询其允许运行的 CPU 核集合
  • 当 pid 为 0 时,获取当前线程的 CPU 亲和性
  • 该接口为 Linux 特定接口,不遵循 POSIX 标准,需启用 _GNU_SOURCE 宏方可使用

前置条件

  • 调用时序约束:当前接口需在系统任务调度器初始化完成后调用
  • 依赖关系:当前接口依赖 LOSCFG_KERNEL_SMP 配置开启以获取有效 CPU 亲和性信息

入参

名称 参数类型 详细说明 约束取值范围
pid pid_t 目标进程/线程 ID 0 表示当前线程;正整数表示指定线程 ID
set_size size_t cpu_set_t 结构体大小 sizeof(cpu_set_t)

出参

名称 数据类型 输出说明
set cpu_set_t * CPU 亲和性掩码,由调用方分配内存、函数填充

返回值

  • 返回类型:int
返回值 文字含义 触发场景
0 执行成功 成功获取 CPU 亲和性掩码
-1 参数无效 set 为 NULL 或 set_size 不等于 sizeof(cpu_set_t),errno 设置为 EINVAL
-1 获取失败 任务 ID 无效或 CPU 亲和性掩码为 0,errno 设置为 EINVAL

Kconfig配置

配置项 宏类型 说明 默认值
LOSCFG_KERNEL_SMP 特性宏 控制 CPU 亲和性获取逻辑是否执行 SMP 亲和性查询,未开启时函数直接返回 0 且不填充 set n

sched_setaffinity

int sched_setaffinity(pid_t, size_t, const cpu_set_t *)

头文件清单

#include "open_source/musl/include/sched.h"

功能说明

  • 设置指定进程/线程的 CPU 亲和性掩码,限制其只能在指定 CPU 核上运行
  • 当 pid 为 0 时,设置当前线程的 CPU 亲和性
  • 该接口为 Linux 特定接口,不遵循 POSIX 标准,需启用 _GNU_SOURCE 宏方可使用

前置条件

  • 调用时序约束:当前接口需在系统任务调度器初始化完成后调用
  • 依赖关系:当前接口依赖 LOSCFG_KERNEL_SMP 配置开启以执行 CPU 亲和性绑定

入参

名称 参数类型 详细说明 约束取值范围
pid pid_t 目标进程/线程 ID 0 表示当前线程;正整数表示指定线程 ID
set_size size_t cpu_set_t 结构体大小 sizeof(cpu_set_t)
set const cpu_set_t * CPU 亲和性掩码指针,指定允许运行的 CPU 核集合 不为 NULL

返回值

  • 返回类型:int
返回值 文字含义 触发场景
0 执行成功 成功设置 CPU 亲和性掩码
-1 参数无效 set 为 NULL、set_size 不等于 sizeof(cpu_set_t) 或亲和性掩码超出系统 CPU 数,errno 设置为 EINVAL
-1 设置失败 任务 ID 无效或资源不足,errno 设置为 EINVAL、ENOSPC 或 ENOMEM

Kconfig配置

配置项 宏类型 说明 默认值
LOSCFG_KERNEL_SMP 特性宏 控制 CPU 亲和性设置逻辑是否执行 SMP 亲和性绑定,未开启时函数直接返回 0 n

Structures

struct cpu_set_t

typedef struct cpu_set_t { unsigned long __bits[128/sizeof(long)]; } cpu_set_t;

成员说明

成员名称 数据类型 描述
__bits unsigned long[] CPU 亲和性位图数组,每一位对应一个 CPU 核,值为 1 表示允许在该核上运行

Macros

SCHED_RR

#define SCHED_RR 2