浅谈进程优先级(下)

发布时间:2024年01月08日

实时进程调度策略 ( SCHED_RR & SCHED_FIFO )

在优先级不同的时候,先执行优先级高的进程

当实时进程优先级相同时:

  • SCHED_RR 采用的策略是时间片轮转,默认的时间片是 100ms
  • SCHED_FIFO 采用的策略是先到先得,先占有处理器的进程会持续执行

深入实时进程优先级

对于实时进程而言,内核模式的优先级与用户模式的优先级并不同

  • 对于内核模式,优先级的值越小,优先级越高 (规范优先级)
  • 对于用户模式,优先级的值越大,优先级越高 (实时优先级)

换算关系:规范优先级 = MAX_RT_PRIO - 实时优先级 - 1

  • 其中:MAX_RT_PRIO 的值为 100
  • 换算后优先级范围:[0, 99]

实时进程调度接口

问题:

对于实时进程,设置 nice_value 会发生什么?

有趣的问题

ps -al 命令中的 PRI 指什么?

实时进程

PRI = 规范优先级 - 40 = 59 - rt_priority

普通进程

PRI =?规范优先级 - 40 + nice_value

思考

如何定制实时进程的执行时间?

实现思路

模拟操作系统内核调度器的实现

  • 指定目标进程
  • 执行目标进程
  • 时间片完成,剥夺执行权
  • 选择下一个进程执行

实验设计

将父进程设置为实时进程,且实时优先级为 99 (调度器)

创建子进程,默认为普通进程

定义每个子进程的执行时间片

父进程进入循环调度,根据时间片定义改变子进程的调度策略

核心思想:

  • 利用实时进程的最高优先级 "实现" 调度器
  • 利用 sleep() 函数可使调度器主动 "放弃" 执行权
  • 利用优先执行实时进程的调度策略 "指定" 目标进程

?核心代码实现

值得注意的地方

该方法是应用层模拟实现内核中的 "时间片轮询调度"

因此:

  • 目标进程仅是获得绝大多数的处理器时间
  • 目标进程所获得的时间片不精确于预定义时间
文章来源:https://blog.csdn.net/qq_52484093/article/details/135461447
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。