
linux内核
qk369369
搜索
展开
-
无符号数溢出与回绕的正确判断
在系统的计时计数过程中,大多采用无符号数来表示。一个无符号数总有一个最大表示范围,比如unsigned int 的最大表示数为2的32次方-1 4294967295,此时如果继续增加则回绕(wrap around)为0.此时就涉及到一个正确比较的问题,下面以linux中的节拍记录变量jiffies为例说明这个问题,jiffies记录开机以来发生的节拍数,每次时钟中断程序都会增加这个值(每秒增加的值原创 2013-03-04 14:45:34 · 6080 阅读 · 0 评论 -
进程上下文和中断上下文
整理自网上资料上下文的概念 上下文context:上下文简单说来就是一个环境,相对于进程而言,就是进程执行时的环境。具体来说就是各个变量和数据,包括所有的寄存器变量、进程打开的文件、内存信息等。 一个进程的上下文可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。 用户级上下文: 正文、数据、用户堆栈以及共享存储区;转载 2013-03-04 19:19:13 · 499 阅读 · 0 评论 -
linux seqlock & rcu 浅析
在linux内核中,有很多同步机制。比较经典的有spin_lock(忙等待的锁)、mutex(互斥锁)、semaphore(信号量)、等。并且它们几乎都有对应的rw_XXX(读写锁),以便在能够区分读与写的情况下,让读操作相互不互斥(读写、写写依然互斥)。而seqlock和rcu应该可以不算在经典之列,它们是两种比较有意思的同步机制。seqlock(顺序锁)用于能够区分读与写的转载 2013-03-06 15:49:23 · 579 阅读 · 0 评论 -
DMA与 kmallloc
DMA控制器是一个硬件设备,只能访问特殊的物理地址。在mips架构下,分配出的逻辑地址需要转换成其对应的物理地址,然后才能交给DMA控制器来使用。最近在GMAC DMA驱动层的实现中发现DMA的内存分配需要调用kmalloc函数而不是最常用的malloc函数来进行。在网上查到的资料如下:在设备驱动程序或者内核模块中动态开辟内存,不是用malloc,而是kmall原创 2013-03-19 09:48:49 · 1377 阅读 · 0 评论 -
块I/O调度程序
最近在看《linux内核设计与实现》这本书,写些东西记录一下学习过程。块设备最突出的特点是可以随机访问固定大小的数据片,这些固定大小的数据片称为块,块设备通过安装文件系统来访问。注意块设备都有自己的物理最小寻址单元(如扇区),但是在文件系统下,其有着最小逻辑可寻址单元——块,不要搞混淆了。与块设备相对的是字符设备,字符设备按字符流来有序访问,如串口和键盘。像硬盘这样块设备,其寻原创 2013-02-27 22:06:24 · 634 阅读 · 0 评论