Sha*_*ari 10 process-management linux-kernel
Linux内核将进程列表存储在循环双向链表中,称为任务列表.它背后的原因是什么?为什么使用循环双链表?使用这种数据结构有什么好处?创建者试图通过使用这种数据结构来实现什么?
小智 8
灵活性,所以如果你知道你正在寻找的东西可能在你身后,你可以使用list_for_each_entry_reverse宏而不是通常的前向宏.
"迭代整个列表时使用链表是很重要的,并且需要动态添加和删除元素......使用这种类型的链表提供了最大的灵活性"
并且没有重复的代码
"在过去,内核中有多个链表实现.需要一个强大的链表实现来删除重复的代码.在2.1内核开发系列中,引入了官方的内核链表实现."
资料来源:Robert Love."Linux内核开发"(第3版).p.87-94
具有某种形式的对象列表(例如进程)的原因是有时内核需要枚举所有这些对象,即依次遍历每个对象.这意味着必须有一种方法来查找此类型的所有对象.如果可以一次创建和删除一个对象,那么链表是最简单的解决方案.
列表需要双重链接才能支持删除对象.删除对象时,代码需要更新指向此对象的所有指针.因此,对象需要包含指向指向它的所有其他对象的指针(或者至少需要一个从对象本身开始的指针链).随着单链表,从A→B→C去除B,有没有办法来发现它的指针需要更新,短的经历中的所有对象,直到右边找到一个在A.随着双向链表,从A↔B↔C与C.去除B,你跟着从B到A的指针和改变A的指针到B点到C代替,同样
| 归档时间: |
|
| 查看次数: |
783 次 |
| 最近记录: |