bit-map算法在linux内核中的应用

在内核中使用bit-map算法,并不是用来处理大数据,其中的一种应用就是任务优先调度,将任务的优先级用bit位来表示,假如设置优先级位32个(0-31),

则内核会从最高优先级0开始执行任务(TASK),当优先级为0的所有任务执行完后再执行优先级1的,以此依次执行下去(还可在优先级的基础上加入时间片)。

对于每个任务优先级,可以使用链表将该优先级的所有任务(TASK)都放在链表指针上,执行时从链表头开始读取每一个任务(TASK)进行执行。

下面是代码实现:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>

#define SZLONG_SIZE 5
#define SZLONG_MASK 31UL
#define __BIT_SET_N(n) (0x1<<(n&SZLONG_MASK))

void set_bit(void *base, unsigned long nr)
{
        unsigned long *m;
        unsigned long mask;

        m = (unsigned long *)base + (nr >> SZLONG_SIZE);
        mask = __BIT_SET_N(nr);
        *m = *m |mask;
}

void clear_bit(void *base, unsigned long nr)
{
        unsigned long *m;
        unsigned long mask;
        m = (unsigned long *)base + (nr >> SZLONG_SIZE);
        mask = __BIT_SET_N(nr);
        mask = ~mask;
        *m = *m&mask;
}

int main()
{
        unsigned long value = 0;

        set_bit(&value, 0);
        set_bit(&value, 30);
        printf("0x%08x\n", value);
        clear_bit(&value, 0);
        clear_bit(&value, 30);
        printf("0x%08x\n", value);
        return 0;
}

下面是执行结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值