也许,我们还记得各大Linux发型版提供的debuginfo安装包,比如fedora:http://fedoraproject.org/wiki/Packaging:Debuginfo,这种将可执行程序与调试符号分离的方案好处多多。一方面,缩减了可执行程序的文件大小,在一定程度上提高了程序的执行性能,另一方面,对应的调试符号文件也方便了一些不时之需。本文就来看一下与此相关的两个问题。
一,如何给应用程序创建对应的调试符号文件?
这很简单,看个演示实例。有代码如下:
#... [阅读更多]
全文来自Intel开发者手册:Intel? 64 and IA-32 Architectures Software Developer’s Manual Volume 3B System Programming... [阅读更多]
在Linux系统里,假设有两处代码(比如不同线程的两个函数F1和F2)都要获取两个锁(分别为L1和L2),如果F1持有L1后再去获取L2,而此时恰好由F2持有L2且它也正在尝试获取L1,那么此时就是处于死锁的状态,这是一个最简单的死锁例子,也即所谓的AB-BA死锁。
死锁导致的最终结果无需多说,关于如何避免死锁在教科书上也有提到(参考1),最简单直观的做法就是按顺序上锁,以破坏死锁的环形等待条件。但对于拥有成千上万个锁的整个系统来说,完全定义它们之间的顺序是非常困难的,所以一种更可行的办法就是尽量提前发现这其中潜在的死锁风险,而不是等到最后真正出现死锁时给用户带来切实的困惑。
已有很多工具用于发现可能的死锁风险,而本文介绍的调试/检测模块lockdep,即是属于这一类工具的一种。调试模块lockdep从2006年(https://lwn.net/Articles/185666/)引入内核,经过实践验证,其对提前发现死锁起到了巨大的效果(http://lwn.net/Articles/321670/)。
官方文档(完全参考2)有介绍调试模块lockdep的设计原理,这里按照我自己的理解描述一下。
一,lockdep操作的基本单元并非单个的锁实例,而是锁类(lock-class)。比如,struct... [阅读更多]
全文来自Intel手册:MultiProcessor Specification(http://download.intel.com/design/pentium/datashts/24201606.pdf)
Version 1.4
May ... [阅读更多]
全文来自Intel手册(见参考1):Intel? 82093AA I/O Advanced Programmable Interrupt Controller (I/O APIC)... [阅读更多]
我是在处理一个网卡中断分发问题时看的这些内容,因为是外部中断到处理器的分发问题,因此我关注的重点是I/O... [阅读更多]