进程的管理和调度

本文介绍了Linux系统中进程管理的细节,包括进程控制块PCB、进程的分类及其优先级,以及内核如何确保实时进程优先级高于普通进程。讨论了完全公平调度类CFS的实现原理,涉及调度器、调度类以及调度实体的数据结构和函数。同时,文章还涵盖了进程的生命周期、状态转换以及进程复制中的写时复制技术。
摘要由CSDN通过智能技术生成

linux进程管理和调度

进程的管理结构也叫做PCB(进程控制块),是一个task_struct类型的结构体,里面保存了关于该进程的所有信息,系统中每个进程的pcb都由一个链表连接起来
    1、进程的状态和执行信息,进程ID号,优先级,程序执行有关的时间信息等
    2、已分配的虚拟内存的信息
    3、进程所属用户ID,组ID,进程的权限

进程的分类
    1、软实时进程:需要快速的到结果,但可稍微晚一些,对时间的限制不像硬实时进程那样严格,优先级最高的进程
    2、交互式进程:需要快速响应用户的输入。优先级低于软实时进程
    3、空闲进程:  只有当cpu上没有其他正在运行的进程时才会运行的进程,优先级最低
   

linux内核是如何确定实时进程的优先级总是高于普通进程的?
普通进程的优先级可以用nice命令来设置,其范围是[-20, +19],这是在用户态的数值,当该数值被映射到内核中去修改进程优先级时,它被映射到的范围是[100,139], 而实时进程的优先级范围是[0,99],数值越小优先级越高,这样普通进程的优先级总是低于实时进程。
    
进程的调度由linux内核的一个子系统调度器来实现,调度器使用了一系列的数据结构来排序和管理系统中的进程。
通用调度器(核心调度器):本质上是一个分配器,与其他两个组件进行交互
调度类:用于判断接下来运行哪个进程,内核支持不同的调度策略(完全公平调度,实时调度等),调度类使得能够以模块化的方                 法实现这些策略。
在调度器被调用后,它会去查询调度类,得知接下来运行哪个进程,选中要运行的进程后,进行底层任务的切换。每个进程都属于某一调度类,各个调度类负责管理所属的进程,而通用调度器完全不涉及进程管理,其工作都委托给调度器类。
    
CFS完全公平调度类的实现原理
在调度实体sched_entity结构体中有一个load成员和一个vruntime成员,前者表示一个进程的权重,值越大表示该进程越重要,后者表示一个进程在运行时所消耗的虚拟时钟的时间。虚拟时钟的速度和物理时钟不同,它取决于一个调度实体中load的值,成反比,也就是说load越大虚拟时钟速度越慢,因此当一个load大的进程在cpu上运行时,它所使用的虚拟时钟值vruntime增长就越慢。而就绪队列中有一个min_vruntime成员,表示该就绪队列中最小的虚拟运行时间,在红黑树上排序的时候按照vruntime-min_vruntime的值来存放&

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值