[置顶] Linux内核工程导论——数据结构:其他

KFIFO

        缓冲区在文件系统中经常用到,通过缓冲区缓解cpu读写内存和读写磁盘的速度。例如一个进程A产生数据发给另外一个进程B,进程B需要对进程A传的数据进行处理并写入文件,如果B没有处理完,则A要延迟发送。为了保证进程A减少等待时间,可以在A和B之间采用一个缓冲区,A每次将数据存放在缓冲区中,B每次冲缓冲区中取。这是典型的生产者和消费者模型,缓冲区中数据满足FIFO特性,因此可以采用队列进行实现。Linux内核的kfifo正好是一个环形队列,可以用来当作环形缓冲区。生产者与消费者使用缓冲区如下图所示:


优先级堆

位数组bitmap

    位数组叫做bitmap,是以位为单位存储值的方式。很多情况下,一些值只有两个取值,而这些值又很多,就可以用位数组,也可以看成是bool类型的数组,但是提供了更多的相关操作。

    位数组可以用来执行排序算法,利用的就是数组中的索引值,对某个索引值进行设置1,就表示记录,然后顺序输出索引值就是排序后的结果。更多的,位数组用在文件系统中充当位图。几乎大部分的文件系统都有位图的概念,例如ext2中就有inode位图和数据块位图,用来表示对应序号的inode或者数据块有没有被使用。还有在raid系统中,例如raid1的数据一致性保障,由于系统有两份拷贝,不一致的情况就有可能发生,当保证一致时就会设置对应的位图位。如此后续的更新都是增量的,只需要查看位图就知道哪些是未能保证一致的数据。

   


llist


你可能感兴趣的:(数据结构,linux,linux,kernel,内核)