sched
sched 提供进程调度策略与优先级查询、CPU (Central Processing Unit) 亲和性设置与获取以及主动让出处理器的功能。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| sched_get_priority_max | 获取指定调度策略支持的最大优先级值 |
| sched_get_priority_min | 获取指定调度策略支持的最小优先级值 |
| sched_yield | 使当前线程主动放弃 CPU 占用 |
| sched_getaffinity | 获取进程/线程的 CPU 亲和性掩码 |
| sched_setaffinity | 设置进程/线程的 CPU 亲和性掩码 |
Functions
sched_get_priority_max
头文件清单
功能说明
- 获取指定调度策略支持的最大优先级值
- 当前仅支持 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
头文件清单
功能说明
- 获取指定调度策略支持的最小优先级值
- 当前仅支持 SCHED_RR 调度策略,policy 入参必须传入 SCHED_RR
- 返回值为当前系统 SCHED_RR 策略下的最低优先级数值
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| policy | int | 调度策略 | SCHED_RR(2) |
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非负整数 | 当前调度策略支持的最小优先级值 | policy 为 SCHED_RR |
| -1 | 参数无效 | policy 不为 SCHED_RR,errno 设置为 EINVAL |
sched_yield
头文件清单
功能说明
- 使当前线程主动放弃 CPU 占用,让出处理器给其他线程执行
- 调用后当前线程将被移入就绪队列等待重新调度
- 适用于协作式多任务场景,主动让出 CPU 资源
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 执行成功 | 成功让出 CPU |
| -1 | 执行失败 | 让出 CPU 失败 |
sched_getaffinity
头文件清单
功能说明
- 获取指定进程/线程的 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
头文件清单
功能说明
- 设置指定进程/线程的 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
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| __bits | unsigned long[] | CPU 亲和性位图数组,每一位对应一个 CPU 核,值为 1 表示允许在该核上运行 |