Linux内核
tiany524
狗一样的学习,绅士一样的玩!
展开
-
container_of 理解
问题:如何通过结构中的某个变量获取结构本身的指针???关于container_of见kernel.h中:/*** container_of - cast a member of a structure out to the containing structure* @ptr: the pointer to the member.* @type: the type of th转载 2009-11-23 11:27:00 · 753 阅读 · 0 评论 -
Linux内核同步3-RCU
1 RCU原理RCU(Read-Copy Update),顾名思义就是读-拷贝修改,它是基于其原理命名的。对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调(callback)机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据。这个时机就是所有引用该数据的CPU都退出对共享数据的操作。因此RCU实际上是一种改进的rwlock,读者几乎没有什么同步开销,它不需要锁,不使用原子指令,而且在除alpha的所有架构上也不原创 2010-09-16 20:49:00 · 1757 阅读 · 0 评论 -
Linux内核同步2
<br />五、读写自旋锁<br />如果临界区保护的数据是可读可写的,那么只要没有写操作,对于读是可以支持并发操作的。对于这种只要求写操作是互斥的需求,如果还是使用自旋锁显然是无法满足这个要求(对于读操作实在是太浪费了)。为此内核提供了另一种锁-读写自旋锁,读自旋锁也叫共享自旋锁,写自旋锁也叫排他自旋锁。<br />读写自旋锁是一种比自旋锁粒度更小的锁机制,它保留了“自旋”的概念,但是在写操作方面,只能最多有一个写进程,在读操作方面,同时可以有多个读执行单元,当然,读和写也不能同时进行。<br />转载 2010-09-16 20:42:00 · 509 阅读 · 0 评论 -
Linux内核同步1
<br />一、并发与竞态:<br />定义:<br />并发(concurrency)指的是多个执行单元同时、并行被执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问则很容易导致竞态(race conditions)。<br />在linux中,主要的竞态发生在如下几种情况:<br />1、对称多处理器(SMP)多个CPU<br />特点是多个CPU使用共同的系统总线,因此可访问共同的外设和存储器。<br />2、单CPU内进程与抢占它的进程<br />3、中断(硬中断、软中转载 2010-09-16 20:40:00 · 639 阅读 · 0 评论 -
Linux内核wait_queue深入分析
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/thewayma/archive/2008/11/30/3414273.aspx 前几天在看驱动的时候碰到了等待队列,上网去搜了一下,再结合代码看了一下,深有体会.在 kernel 里,wait_queue 的应用很广,举凡 device driver,semaphore 等方面都会使用到 wait_queue 来 implement。所以,它算是 kernel 里蛮 基本的一个数据结构。 首先,我们得明白,linux中转载 2010-09-16 15:33:00 · 1480 阅读 · 1 评论 -
udev实现原理
udev实现原理 转载时请注明出处和作者联系方式:http://blog.csdn.net/absurd作者联系方式:李先静更新时间:2007-4-29 相对于linux来说,udev还是一个新事物。然而,尽管它03年才出现,尽管它很低调(J),但它无疑已经成为linux下不可或缺的组件了。udev是什么?它是如何实现的?最近研究Linux设备管理时,花了一些时间去研究udev的实现。 udev是什么?u 是指user转载 2010-09-13 21:31:00 · 534 阅读 · 0 评论 -
miscdev类驱动
<br />http://blog.chinaunix.net/u3/94039/showart_2195757.html<br /> <br />如果要详细的分驱动的类型,分为miscdev、character、block、net。什么是miscdev类驱动?答:miscdev类驱动又叫混杂驱动驱动 ,是一个比较原始的东西,在1998年就已经提出来了,在2.0以上的kernel都有支持。可以认为小驱动程序,主要用于简单的硬件驱动或者简单的测试。 为什么在miscdev类驱动中没有看见主设备号之类的东西?答转载 2010-09-10 09:48:00 · 1282 阅读 · 0 评论 -
Linux内核学习笔记之进程管理1
· 1.基本概念o 在支持线程的计算机系统里面,进程作为资源分配的基本单位而存在,线程作为调度的基本单位而存在。 线程仅拥有必不可少的一些资源,如:一组寄存器、堆栈信息等等和其他线程共享同一个进程的所有资源。o 所以,在同一个进程的线程切换时不需要大量的保存和恢复工作,同时由于共享同一个存储空间,不需要更新快表TL原创 2010-04-05 18:54:00 · 1045 阅读 · 0 评论 -
Linux内核学习笔记之进程管理2—进程的组织形式
Linux内核学习笔记之进程管理2—进程的组织形式1. 进程标识符构成的哈希表内核使用一个进程描述符来表示一个进程,因此通过进程描述符的地址来访问一个进程是最方便的. 这里主要是用哈希表来完成进程号到进程描述符地址之间的映射.内核中设置了PIDTYPE_MAX个不同的哈希表(4个),这四个哈希表保存在数组pid_hash中,static struct hlist_hea原创 2010-04-05 20:22:00 · 1620 阅读 · 0 评论 -
hlist浅析
hlist浅析 hlist哈希链表是内核中常用的一个数据结构,由于它不同于普通的链表,所以这里对hlist哈希链表进行一下浅析,很多也是参考的网友和书上的资料希望对大家有所帮助。在include/Linux/list.h中有list链表与hlist哈希链表结构的定义,下面都列出它们的定义,可以对比一下:struct list_head {struct list_head *next原创 2010-03-30 10:46:00 · 2422 阅读 · 0 评论 -
宏定义中使用do{}while(0)的好处
#define MACRO_NAME(para) do{macro content}while(0)的格式,总结了以下几个原因:1,空的宏定义避免warning:#define foo() do{}while(0)2,存在一个独立的block,可以用来进行变量定义,进行比较复杂的实现。3,如果出现在判断语句过后的宏,这样可以保证作为一个整体来是实现:#define foo(x) /ac转载 2010-03-25 22:49:00 · 513 阅读 · 0 评论 -
fd_set 用法
fd_set是文件句柄的集合。 FD_ZERO 清空这个集合; FD_SET 往这个集合里面加入一个文件句柄; FD_ISSET 查看某一个文件句柄是否被设置了; select()函数主要是建立在fd_set类型的基础上的。fd_set(它比较重要所以先介绍一下)是一组文件描述字(fd)的集合,它用一位来表示一个fd(下面会仔细介转载 2009-12-17 15:08:00 · 1228 阅读 · 0 评论 -
select函数
select函数使我们在SVR4和4.3+BSD之下可以执行I/O多路转接,传向select的参数告诉内核:(1) 我们所关心的描述符。(2) 对于每个描述符我们所关心的条件(是否读一个给定的描述符?是否想写一个给定的描述符?是否关心一个描述符的异常条件?)。(3) 希望等待多长时间(可以永远等待,等待一个固定量时间,或完全不等待)。 对select指定读、写和异常条件描述符原创 2009-12-17 15:50:00 · 2038 阅读 · 0 评论 -
linux内核(2.6)中的双循环链表浅析
Linux 2.6内核链表数据结构的实现 在计算机科学中,链表是非常通用的数据结构,贯穿于整个linux的内核。在linux内核中,链表通常以双循环链表的方式出现。所有链表的代码在include/linux/list.h文件中。定义如下:struct list_head { struct list_head *next, *prev;}; 这里的list_he原创 2009-11-23 22:05:00 · 581 阅读 · 0 评论 -
hello module编译过程
开发环境:FC9 内核为2.6.27.25-78.2.56.fc9.i686 ,GCC为:4.3.0 在编译之前首先在FC9中安装内核和内核头文件通过yum可以轻松的搞定yum install -y kernel-headers kernel-devel这里将写一个基础的“hello world”字符设备驱动,代码如下://-------------------------原创 2009-11-25 16:25:00 · 929 阅读 · 0 评论 -
GCC内联汇编
gcc内联汇编在gcc编译器中允许出现内联汇编代码。运用一种特定的形式告诉编译器这段代码不需要编译。内联汇编的格式如下:-----------------------------------------------------------------------1 asm (assembler instruction(s)2 : output operands (opti翻译 2009-11-24 23:59:00 · 1172 阅读 · 0 评论 -
Linux NAND FLASH驱动程序分析(mini2440)
Linux NAND FLASH驱动程序分析(mini2440) 一、Linux-MTD Subsystem介绍 FLASH在嵌入式系统中是必不可少的,它是bootloader、linux内核和文件系统的最佳载体。在Linux内核中引入了MTD子系统为NORFLASH和NAND FLASH设备提供统一的接口,从而使得FLASH驱动的设计大为简化。原创 2011-06-18 10:34:00 · 4847 阅读 · 0 评论