摘要:
链表使用基础:链表是linux内核中最简单,最普遍的数据结构。刚开始接触内核的人可能会对linux的链表操作有点不习惯。因为内核链表与大家平时用的链表不同,它不是把数据结构放到链表里面,而是把链表节点放到数据结构里面。linux内核的链表代码在中声明。链表代码在头文件中声明,其数据结构很简单:struct list_head{ struct list_head *next; struct list_head *prev;}next指针指向下一个链表节点,prev指向前一个。从这里可以看出,list链表是双向链表。但链表存储的具体内容是什么呢?其关键就在于理解list_head结构是... 阅读全文
摘要:
一、内核同步基础概念共享数据:能够被多个代码段访问的数据,一般指全局变量和静态变量临界区:访问和操作共享数据的代码段竞争条件:如果两个执行线程可能处于同一个临界区中同时执行,就被称为竞争条件发生了同步:避免并发和防止竞争条件成为同步内核中可能造成并发执行的原因:中断 —— 中断几乎可以在任何时刻异步发生,也就可能随时打断当前正在执行的代码。内核抢占 —— 因为内核具有抢占性,所以内核中的任务可能会被另一任务抢占。对称多处理 (SMP)—— 两个或多个处理器可以同时执行代码。软中断和tasklet —— 内核能在任何时刻唤醒或调度软中断和tasklet,打断当前正在执行的代码。睡眠及与用户空间的 阅读全文