浅析进程优先级(上)

发布时间:2024年01月08日

什么是进程优先级?

进程优先级:将处理器资源分配给进程的先后顺序

Linux 中每个进程都有相应的优先级 (优先级可能动态改变)

进程优先级决定进程 何时执行 和 获得处理器的时间

进程优先级通常表现为一个整数值 (数值大小决定优先级高低)

Linux 中的进程类型 (用户观点)

交互型进程

  • 表现:较多的人机交互,进程会不断进入阻塞状态,等待用户输入
  • 特点:用户输入后,必须被及时唤醒执行处理逻辑

批处理型进程

  • 表现:不需要人机交互,在后台执行
  • 特点:对时间不敏感,常用于数据处理

Linux 中的进程类型 (内核观点)

普通进程

  • 使用完全公平策略进行调度的进程 (SCHED_OTHER)
  • 不能保证时间要求严格或高优先级的进程优先执行

实时进程

  • 使用 SCHED_FIFO 和 SCHED_RR 进行调度的进程
  • 根据进程优先级进行实时调度,在一定程度上保证实时性

进程实时性与优先级

实时性

  • 硬实时:对响应时间要求非常严格,必须保证在一定时间内完成
  • 软实时:硬实时的弱化形式,可接受一定程序上小概率的超时响应

进程分类

  • 普通进程:优先级 [100, 139] => 默认 120,值越小优先级越高
  • 实时进程:优先级 [0, 99]? => sudo chrt -f 11 ./a.out 值越大优先级越高

细说进程优先级

注意:

  • 一般情况下动态优先级等于规范优先级
  • 不同之处在于,动态优先级可能暂时被提高
  • 对进程的处理都以静态优先级为准

top 命令中的 PR 指什么?

实时进程

  • PR = 规范优先级 - 100
  • PR = rt => rt_priority == 99

普通进程

  • PR = 规范优先级 - 100 + nice_value

再论完全公平策略 (Completely Fair Scheduler)

"完全公平" 并非意味着所有进程获得相等时间片

"完全公平" 指的是所有进程都能获得时间片 (时间片未必相等)

问题:完全公平策略中如何确定进程的执行时间片?

  • 引入权重 (weight),进程间按照权重比例分配时间片
  • weight = 1024 / (1.25 ^ nice_value)
  • nice_value => 取值范围 [-20, 19],默认值为 0,值越高权重越低

nice_value 对于普通的意义

假设 A 和 B 是处理相同计算任务的进程:

  • A 进程:nice == 0,则:weight == 1024
  • B 进程:nice == 5,则:weight == 335.5432
  • 所以:A 进程获取的处理器时间大致是 B 进程的 3 倍

实验设计

父进程创建子进程,并开始复杂计算

子进程设置?nice_value 为 5,并开始复杂计算

期望:父进程占用的处理器时间是子进程 3 倍左右

普通进程?nice_value 接口

#include <sys/time.h>

#include <sys/resource.h>

int getpriority(int which, int who);

int?setpriority(int which, int who, int prio);

文章来源:https://blog.csdn.net/qq_52484093/article/details/135455199
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。