Linux进程调度与切换

目录

前言

Linux 2.6内核O(1)调度器

调度过程

调度算法

Linux 进程切换


前言

        在Linux 2.6版本的内核中,进程调度器引入了O(1)调度器,这个调度器通过优先级队列、活跃队列和过期队列的机制来管理进程调度,虽然在现在已被更好的CFS调度器取代,但对于我们学习Linux也有很大的帮助,进程切换则是实现多任务操作系统的核心目标

Linux 2.6内核O(1)调度器

        进程调度是操作系统管理和优化系统资源的重要方式之一,实现让进程公平调度享受系统资源,实现多任务并发,避免进程饥饿等问题,同时能够优化系统资源

调度过程

        Linux 2.6内核使用O(1)调度器,这是使用优先级队列来进行进程调度,进程有140个优先级,每个优先级都有相对于的队列,调度进程时先调度优先级高的进程,为了尽量避免进程饥饿问题,设有时间片轮转机制以及活跃队列和过期队列,当前正在调度的队列为活跃队列,活跃队列不允许进程加入,活跃队列正在被调度时,新的进程会被加入过期队列,被调度的进程时间片到后也会被加入过期队列,当活跃队列为空,就会将活跃队列和过期队列交换,此过程一直循环

调度顺序:基于优先级调度。

时间片轮转机制:时间片轮转机制用于确保每个进程能在其时间片内获得CPU时间,时间片的长度根据进程的优先级决定。

活跃队列和过期队列:

  • 活跃队列(Active Queue):当前正在调度的队列。
  • 过期队列(Expired Queue):包含用完时间片的进程和新加入的进程。
  • 活跃队列中的进程用完时间片后被移到过期队列,新到达的进程也会被直接放入过期队列

队列交换:当活跃队列为空时,活跃队列和过期队列会交换角色,这样过期队列变成新的活跃队列,原活跃队列变成新的过期队列。

实时优先级和普通优先级:Linux支持实时优先级[0,99],这些进程一般优先调度,且不会受到时间片轮转机制的影响,除非被显式中断,普通优先级[100,140]

调度算法

queue* active,*expired :  

        第一个指向活跃队列,第二个指向过期队列,当cpu在调度活跃队列时,新增的进程会加入过期队列,等活跃队列调度完成,就会swap(active,expired) 过期队列变成活跃队列,原被调度完的活跃队列变成过期队列(解决进程饥饿问题)

int nr_active :  当前队列进程个数

int bitmap[5] :  这个位图表示各个优先级的队列有没有进程(提高效率)

task_struc* queue[140] :  第100~139下标的位置表示40个优先级队列,进程根据优先级加入不同的优先级队列

Linux 进程切换

        进程切换是操作系统多任务管理的核心功能,通过保存当前进程的状态并恢复新进程的状态,操作系统实现了进程的公平和高效调度

硬件上下文 :  在cpu有一组寄存器,在进程运行时,保存程序计数器、堆栈指针以及其他硬件状态,确保进程能够正确恢复执行,比如程序计数器 ( PC指针 )  :  存储当前正在执行的指令的地址。在进程切换时,保存当前进程的程序计数器值,以便在恢复时继续执行

        在进程进行切换时,进程的硬件上下文数据会被存储到进程的PCB中,  在下次调度时,从PCB中将这些数据拷贝到CPU寄存器中,  硬件上下文切换是实现进程调度的关键机制。通过优化上下文切换过程和利用硬件支持,操作系统可以提高系统性能和响应性

  • 21
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值