linux中断数据结构图,Linux 内核学习笔记(三)——数据结构与中断

本文详细介绍了Linux内核中常用的数据结构,包括链表、队列、映射和二叉树。链表以环形双链表为主,队列遵循先进先出原则,映射类似于关联数组,二叉树则涉及到了自我平衡的红黑树。此外,文章还探讨了中断处理机制,包括中断处理程序和中断服务例程,并强调了中断代码的简洁性和效率。算法复杂度分析中提到了时间复杂度和中断处理的优化策略。
摘要由CSDN通过智能技术生成

Kernel Data Structures

Kernel 提供了以下的数据结构,就不要造轮子了(don't reinvent the wheel.)。Linked lists、Queues、Maps、Binary trees

Linked lists

链式结构的数据是在不同的时期创建的,他们可能存放在并不连续的内存空间中,为此需要需要把他们linked together。有单链结构、双链结构。有环形链式结构(又可细分为环形单链、环形双链)。Linux最常使用的就是环形双链结构circular doubly linked list. (图6.4)

在Linked list中第一个元素经常被称为head,最后一个元素的指针执行NULL。

Linked list内核安置实现的方式如下:

struct list_head{

struct list_head *next

struct list_head *prev;

};

struct fox {

unsigned long tail_length;

unsigned long weight;

bool is_fantastic;

struct list_head list; /*list of all fox structures*/

};

接下来就是所谓的增删查对linked list操作。不过即使进行了前面的基本操作,还是不能获取这个linked list里面元素的具体数据是多少。Kernel利用C语言指针的功能,给出了相应的查看修改内部element的方法。

Queues

简单来说就是FIFO,如下图:

这个比较简单,就是比较enqueue和dequeue的大小,通知需要知道整个FIFO的长度(也就是所谓的深度Size of queue)。接下来也就是基本的增删改查,摧毁,新建的操作。

Maps

A map, also known as an associative array, is a collection of unique keys, where each key is

associated with a specific value.The relationship between a key and its value is called a

mapping.

简单来说就是一个映射,甚至和hash table有关系。这个概念比较难理解。简单解释如下:

var numbers = [1, 2, 3, 4];

var timesTwo = function(n) {

return n * 2;

}

numbers.map(timesTwo); // [2, 4, 6, 8]

. In the most general sense, "mapping" in programming means taking several things and then somehow associating each of them with another thing. 类似于一个对应 映射函数关系。

其中一个主要用途就是map 一个unique identification number(UID)、idr之类的。然后就是新一轮的增删改查。

Binary trees

A tree is a data structure that provides a hierarchical tree-like structure of data. Mathemati-

cally, it is an acyclic, connected, directed graph in which each vertex (called a node) has zero or more outgoing edges and zero or one incoming edges.

其中有BST树,这样的排序是搜索非常高效、方便。主要特征如下:

左边的nodes比树根的值小;

右边的nodes比树根的值大;

每一个子树根也满足1.2的规则。(如下图)

self-balance BST就是首先满足BST的规则,然后树叶的深度的最深差别不超过1。如下图:

Linux中的主要是满足semi-balanced BST red-black tree. rbtrees

用途:If you need to store a large amount of data and look it up efficiently, consider a red-

black tree. Red-black trees enable the searching in logarithmic time, while still providing

an efficient linear time in-order traversal.

Algorithmic Complexity

算法复杂度主要是研究随着输入的逐渐增大,程序的性能如何。 Big-O notation、Big-theta notation. 不要盲目地优化代码到实际并不需要的输入规模。也即是提前优化可能就做了无用功。

time Complexity

Interrupts and Interrupt Handlers

Interrupts enable hardware to signal to the processor.

中断都设定了相应的中断value :interrupt request(IRQ) lines.

中断响应后,开始执行中断程序,也即是:interrupt handler 又称为 interrupt service routine (ISR)。其中,这个ISR是写在中断驱动里面的(driver)。

中断可能随时来临,所以中断的ISR代码一定要尽可能的短(因为中断本身就是打扰了别的process ,甚至是打扰了另外一个不同line的中断),然而,中断来临总是有非常多的工作要做。为解决二者之间的矛盾,产生了两部分。top half: 就是产生回执,hardware和kernel之间进行实践紧迫的工作。bottom half:对于不是紧急的,放在这里面执行。

有的不同外部设备之间共享同一个interrupt line.这样就需要判断到底具体是哪一个设备进行了中断情况。其他的在同一个line上的设备就退出这个中断响应,不要动作。并且当这个line上的一个设备的中断动作时,整条line的中断都被block,这期间line的中断都不能再动作。这样极大地降低了写中断驱动代码的难度。其他的很多东西和单片机的程序类似。具体例子见下图:

另外,中断和同步有莫大关系。

现在的kernel版本不再使用全局中断开闭功能了。

参考文献:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值