摘要:
前几天在看驱动的时候碰到了等待队列,上网去搜了一下,再结合代码看了一下,深有体会.在 kernel 里,wait_queue 的应用很广,举凡 device driver,semaphore 等方面都会使用到 wait_queue 来 implement。所以,它算是 kernel 里蛮 基本的一个数据结构。 首先,我们得明白,linux中的所有的进程都由task_struct这个结构管理。在生... 阅读全文
摘要:
相信很多写程序的人都写过 socket 的程序。当我们 open 一个 socket 之后,接着去读取这个 socket,如果此时没有任何资料可供读取,那 read 就会 block 住。(这是没有加上 O_NONBLOCK 的情形),直到有资料可读取才会传回来。在 Linux kernel 里有一个数据结构可以帮助我们做到这样的功能。这个数据结构就是这里要跟各位介绍的 wait queue。在 ... 阅读全文
摘要:
今天在看流量控制的代码时,特别留意了一下list_head的结构,发现它只有指针域,没有数据域,觉得有点困惑,一般的链表节点都包括两部分:数据域和指针域。linux里为何能这么用呢?股沟一下,原来是这么回事。在Linux内核链表中,不是在链表结构中包含数据,而是在数据结构中包含链表节点。 深入分析 Linux 内核链表 本文详细分析了 2.6.x 内核中链表结构的实现,并通过实... 阅读全文
摘要:
最近因为工作关系,看了一些数学书。我以TAMU的两位教授所著的一本小书为例发表一些浅见。该书名为A First Course in Wavelets with Fourier Analysis(国内有电子工业出版社的影印版本)。 一、背景 傅立叶分析是所有理工科学生都多少知道一点的,傅立叶分析的主要内容有傅立叶级数、傅立叶变换等。傅立叶级数是所有学过工科高等数学课程的学生都知道的。而作为电子工... 阅读全文
摘要:
《Linux内核设计与实现》 简称LKD,从入门开始,介绍了诸如进程管理、系统调用、中断和中断处理程序、内核同步、时间管理、内存管理、地址空间、调试技术等方面,内容比较浅显易懂,个人认为是内核新人首先必读的书籍。新人得有此书,足矣! 《深入理解Linux内核》 简称ULK,相比于LKD的内容不够深入、覆盖面不广,ULK要深入全面得多。 前面这两本,一本提纲挈领,一本全面深入... 阅读全文
摘要:
Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态。 在下文将对进程的 R、S、D、T、Z、X 六种状态做个说明。 PROCESS STATE CODES Here are the different values that the s, stat and state output specifiers (header "S... 阅读全文
摘要:
1、/linux-2.6.30.4/arch/arm/include/asm/ 1.1、<asm/io.h>--->对应__raw__write()和__raw__read()等的使用 1.2、<asm/uaccess.h> ----> /* copy_to_user, copy_from_user */ 1.3、<asm/system.h>:系统头文件,定义了设置或修改描述符/中断门等的嵌... 阅读全文
摘要:
一个进程在其生存期内,可处于一组不同的状态下,称为进程状态,如图5-21所示。进程状态保存在进程任务结构的state字段中。当进程正在等待 系统中的资源而处于等待状态时,则称其处于睡眠等待状态。在Linux系统中,睡眠等待状态分为可中断的和不可中断的等待状态。 (点击查看大图)图5-21 进程状态及转换关系 (1)运行状态(TASK_RUNNING)。当进程正在被CPU执行,或... 阅读全文
摘要:
内核地址空间分布 直接映射区:线性空间中从3G开始最大896M的区间,为直接内存映射区,该区域的线性地址和物理地址存在线性转换关系:线性地址=3G+物理地址。 动态内存映射区:该区域由内核函数vmalloc来分配,特点是:线性空间连续,但是对应的物理空间不一定连续。vmalloc分配的线性地址所对应的物理页可能处于低端内存,也可能处于高端内存。 永久内存映射区:该区域可访问高端内存。访... 阅读全文
摘要:
1、实物图 2、CPU接线图 3、实际硬件接图 阅读全文