Neo's Blog

不抽象就无法深入思考
不还原就看不到本来面目!

0%

操作系统中碰到的数据结构汇总

hash

hlist_head hlist_node 散列表拉链

根据PID定位task:PID哈希表

双向链表

list_head 双向链表

提高调度程序运行速度:建立多个可运行程序链表

等待队列(双向链表):用自旋锁加保护的等待队列头、等待队列链表的元素

等待队列中睡眠进程的唤醒:互斥进程,非互斥进程

链表维护节点;节点包括管理区【硬件限制,ZONE_DMA, ZONE_NORMAL, ZONE_HIGHMEM】+ page数组

动态定时器的链表组(将同一时间段内即将到时的定时器归入一组)

bitmap

pid分配管理:bitmap pidmap_array

inode、磁盘文件数据块

并发与同步

每CPU变量

不需要同步的内核数组,为每个cpu分配数组一元素

自旋锁
RCU机制

RCU(读取-拷贝-更新):只保护被动态分配并通过指针引用的数据结构

何时释放旧副本? CPU经过静止状态后,定期检测!!

原子变量

其他

thread 与 thread_info 紧密挨着;根据esp 屏蔽 低13位 可以最快的获取thread_info;
同时进程描述符指针在thread_info中的偏移为0!

也就是将: OS将task_struct指针存放到了栈上(可以通过esp做简单的AND操作即可)

jiffies:子系统启动的节拍总数

你的支持是我坚持的最大动力!