第13章 实现复杂度O(1)的调度算法

本文介绍了如何在1KOS操作系统中实现类似于Linux 2.6内核的O(1)调度算法。该算法利用双向链表、优先级位图、优先级队列和两个运行队列来确保高效的任务调度,同时详细阐述了ffs函数的重要性及其C语言和汇编的实现方式。
摘要由CSDN通过智能技术生成
参考了linux 2.6内核的O(1)调度算法,在1KOS中实现了该调度算法。
实现该算法的主要是靠:
1、任务的双向链表(时间片轮转算法,而且双向链表适合增加删除,算法复杂度为O(1))
2、优先级位图(跟优先级队列配合,算法复杂度为O(1))
3、优先级队列(其实是数组,数组元素是任务链表头,用于优先级算法)
4、两个运行队列(active优先级队列和expired优先级队列)(在active队列上的某个任务时间片用完时,会重新分配时间片,然后插到expired队列上。当active队列上没有任务时,切换active和expired队列)
5、ffs函数


ffs函数
实现该算法必须实现ffs(unsigned long word)函数,这个函数的功能是find first set bit。从第0位到第31位为扫描bit,找到第一个bit为1的位号。
实现该函数有两种方法:
1、使用汇编指令
2、使用C语言

intel 汇编中
bsf oprd1, oprd2
从右向左(0~31位)扫描字或双字,把操作数oprd2中第一个bit为1的位号送到操作数oprd1上。可参考《IBM-PC汇编语言程序设计
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值