LINUX中进程调度算法

1.调度类

LINUX中有四种调度类(优先级从高到低),这里我们只介绍我们最常用的,完全公平类。

名称优先级
停止类-
实时类0-99
完全公平类100-139
空闲类-

2.调度算法

2.1 task_struct* queue[140]

      首先我们来看task_struct* queue[140](task_struct 是Linux的pcb),这是一个容量为140,内容类型为 task_struct* 的指针数组,这个数组下标100-139是给完全公平类用的,正好对应Linux中进程的40个优先级(60-99),如果进程的优先级为60,那么我就把这个进程的pcb链入queue[100]中,同理进程优先级为80,就把pcb链入queue[120]中(如右图)。

 

2.2 int bit_map[5]

因为进程的优先级是不同的,queue队列中不一定每个优先级都会有进程,想要知道哪个优先级有进程必须遍历一遍queue,bit_map的出现很好的解决了这个问题,如果queue的某个优先级存在进程,就把该优先级所对应的bit_map的位变为1,这样就可以直接遍历bit_map,如果bit_map[0] = 0就说明0 - 31个优先级内没有进程。

3.3 *actvie和*expried

现有一个进程优先级为80的进程将要被执行,现在我不断插入进程优先级为60的进程,这个时候优先级低的进程就会一直等待,所以设计出了,活跃进程和过期进程,*active指向活跃进程,*expried指向过期进程,cpu在执行的过程中,只会找活跃进程,而我们插入新的进程,只会插入到过期队列,当活跃进程执行完,会将*active与*expried交换,过期进程变为活跃进程。

//过期进程
struct p{
int nr_active;//进程数
int bit_map[5];
task_struct * queue[140]; //过期队列
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值