摘要:
中断处理程序的局限:1、中断处理程序以异步的方式执行,并且它有可能会打断其他重要代码的执行。2、如果当前有一个中断处理程序正在执行,最好的情况是,与该中断同级的其他中断会被屏蔽,最坏情况下,当前处理器上所有其他中断都会被屏蔽。3、中断处理程序往往需要对硬件进行操作,所以他们不能阻塞。这限制了他们所作的事情。8.1 下半部下半部的任务就是执行与中断处理密切相关但中断处理程序本身不执行的工作。中断处理程序注定要完成一部分工作:几乎都需要通过操作硬件对中断的到达进行确认,有时他还会从硬件拷贝数据。8.1.2 下半部的环境3、软中断和tasklet软中断是一组静态定义的下半部接口,有32个,可以在所有 阅读全文
摘要:
7.1 中断中断使得硬件得以发出通知给处理器。中断本质上是一种特殊的电信号,由硬件设备发向处理器。处理器接收到中断后,会马上向操作系统反应此信号的到来,然后就由操作系统负责处理这些新到来的数据。硬件设备生成中断的时候并不考虑与处理器时间的同步——中断可以随时产生。因此内核随时可能因为新到来的中断而被打断。异常:与中断不同,它在产生时必须考虑处理器同步。异常也常常成为同步中断。在处理器执行到由于编程失误而导致的错误指令或执行期间出现特殊情况(如缺页),必须靠内核来处理的时候,处理器就会产生一个异常。在x86体系结构上如何通过软中断实现系统调用,那就是陷入内核,然后引起一种特殊的异常——系统调用处 阅读全文
摘要:
6.1 链表链表和静态数组的不同之处在于,他所包含的元素都是动态创建并插入链表的,在编译时不必知道具体需要创建多少个元素。链表中每个元素的创建时间各不相同,所以他们在内存中无须占用连续内存区。因为元素不连续存放,所以各个元素需要通过某种方式被连接在一起。6.1.1 单向链表和双向链表6.1.2 环形链表6.1.3 沿链表移动沿链表移动只能是线性移动。如果需要随机访问数据,一般不使用链表。使用链表存放数据的理想情况是:需要遍历所有数据或需要动态添加或删除数据。6.1.4 链表在linux中的实现linux内核中的链表不是将数据结构塞入链表,而是将链表节点塞入数据结构。使用宏container_o 阅读全文