随笔分类 -  linux内核源码学习

摘要:LInux内核提供了一组相当完备的同步方法.(一):原子操作原子操作是其他同步方法的基石.原子操作可以保证指令以原子的方式执行--执行过程不被打断.原子原本是指不可分割的微粒,所以,原子操作也就是不能够被分割的指令.两个原子操作绝对不可能并发的访问同一个变量.内核提供了两组原子操作接... 阅读全文
posted @ 2015-10-13 17:13 陈洪波 阅读(187) 评论(0) 推荐(0)
摘要:在之前的一篇博客中,着重讲解了在Linux内核中同步方法--对于整型的原子操作,除此之外,内核同步方法中还有对位的原子操作.下面我们来列举一下原子位操作的列表: 原子位操作 描述 void set_bit(int nr, volatile unsigned long *addr... 阅读全文
posted @ 2015-10-12 17:12 陈洪波 阅读(781) 评论(0) 推荐(0)
摘要:由于现在正在看Linux下的内核同步方法,其中第一个提到的就是原子变量,其中会有原子操作.其中原子变量被定义在linux/types.h头文件中,在这一篇博客中,主要学习原子操作,这些原子操作的函数被定义在asm/atomic.h文件中,其中包括,初始化,原子读,原子更改等操作,下面... 阅读全文
posted @ 2015-10-12 14:03 陈洪波 阅读(753) 评论(0) 推荐(0)
摘要:(一):临界区和竞争条件所谓临界区(也称为临界段)就是访问和操作共享数据的代码段.多个执行线程并发访问同一个资源通常是不安全的,为了避免在临界区中并发访问,编程者必须保证这些代码原子的执行--也就是说,操作在执行结束前不能被打断,就如同整个临界区是一个不可分割的指令一样.如果两个执行... 阅读全文
posted @ 2015-09-09 17:19 陈洪波 阅读(139) 评论(0) 推荐(0)
摘要:工作队列(work queue)是另外一种将工作推后执行的形式.他和其他形式都不相同.工作队列可以把工作推后,交由一个内核线程去执行,这个下半部分总是会在进程上下文中去执行.这样,通过工作队列执行的代码能占尽进程上下文的所有优势.最重要的是工作队列能允许重新调度甚至是休眠.通常,在工... 阅读全文
posted @ 2015-09-06 23:35 陈洪波 阅读(227) 评论(0) 推荐(0)
摘要:(一):tasklettasklet是利用软中断实现的一种下半部机制,他和进程没有任何关系,他在本质上和软中断是相似的,行为表现也很相近.但是他的接口很简单,锁保护也要求较低.1:tasklet的实现tasklet有两类软中断代表:HI_SOFTIRQ和TASKLET_SOFTIRQ... 阅读全文
posted @ 2015-09-02 10:42 陈洪波 阅读(269) 评论(0) 推荐(0)
摘要:(一):下半部下半部的任务就是执行与中断处理密切相关但中断处理程序本身不执行的工作.那么有一些提示可以借鉴哪些工作放在上半部中执行,哪些工作放在下半部执行.1:如果一个任务对时间非常敏感,将其放在中断处理程序中进行2:如果一个任务与硬件相关,将其放在中断处理程序中进行3:如果一个任务... 阅读全文
posted @ 2015-08-21 14:27 陈洪波 阅读(107) 评论(0) 推荐(0)
摘要:**书接上回**(六):中断上下文当执行一个中断处理程序的时候,内核处于中断上下文中.中断上下文由于没有后备进程,所以不可以睡眠,同时中断上下文具有严格的时间限制,因为他打断了其他代码.中断处理程序栈的设置是一个配置选项.原来的时候,中断处理程序共享所中断进程的内核栈,大小是两页的大... 阅读全文
posted @ 2015-07-13 09:22 陈洪波 阅读(312) 评论(0) 推荐(0)
摘要:(一):中断中断本质上是一种特殊的电信号,由硬件设备发向处理器。处理器在接收到中断后,会马上向操作系统反映此信号的到来,然后就u由操作系统来处理这些新到来的数据。不同的设备对应的中断不同,而每个中断都通过一个唯一的数字标志。这些中断值被称为中断请求线(IRQ)。中断是随时随地发生的,... 阅读全文
posted @ 2015-07-13 07:45 陈洪波 阅读(517) 评论(0) 推荐(0)
摘要:(五):系统调用的实现1:实现系统调用实现一个系统调用就是考虑他的用途,每一个系统调用都有一个确定的用途,在Linux中不提倡采用多用途的系统调用(一个系统调用通过传递不同的参数值来选择完成不同的工作)。2:参数验证系统调用必须仔细检查他们所有的参数是否合法有效。最重要的一项检查就是... 阅读全文
posted @ 2015-06-23 20:35 陈洪波 阅读(184) 评论(0) 推荐(0)
摘要:(一):与内核通信系统调用在用户空间和硬件设备之间添加了一个中间层。该层主要有三个作用:​1:他为用户空间提供了一种硬件的抽象接口​2:系统调用保证了系统的稳定和安全。​3:每个进程都运行在虚拟系统中,而在用户空间和系统的其余部分提供这样一层公共接口,也是出于这种考虑。在Linux中... 阅读全文
posted @ 2015-06-23 20:31 陈洪波 阅读(151) 评论(0) 推荐(0)
摘要:紧接上一篇!!(二)抢占和进程上下文上下文切换,就是从一个可执行进程切换到另一个可执行进程,由定义在kernel/sched.c中的context_switch()函数处理,该函数主要完成两项基本工作:​1:调用声明在asm/mmu_context.h中的switch_mm(),该函... 阅读全文
posted @ 2015-06-23 11:13 陈洪波 阅读(149) 评论(0) 推荐(0)
摘要:(一)睡眠和唤醒休眠(被阻塞)的进程处于一个特殊的不可执行状态。无论什么原因,导致进程进入休眠状态,内核的操作都是相同的:进程把自己标志成休眠状态,从可执行红黑树中移出,放入等待队列,然后调用schedule()选择和执行一个其他进程。唤醒的过程正好相反,进程把自己标志成可运行状态,... 阅读全文
posted @ 2015-06-23 11:08 陈洪波 阅读(171) 评论(0) 推荐(0)
摘要:紧接上一文!!!!​3:进程选择在CFS调度里面,当需要选择下一个进程的时候,将会选择最小的vruntime的进程。这个其实就是CFS调度的算法的核心。CFS使用红黑树来组织可运行进程队列,并利用其迅速找到最小的vruntime值的进程。在Linux中,红黑树是一个子平衡的二叉搜索树... 阅读全文
posted @ 2015-06-18 21:28 陈洪波 阅读(295) 评论(0) 推荐(0)
摘要:调度程序负责决定将哪个进程投入运行,何时运行,以及运行多长时间。进程调度程序可看作在可运行态进程之间分配有限的处理器时间资源的内核子系统。(一):多任务多任务操作系统就是能并发的交互执行多个进程的操作系统,多任务系统可以分为两类:非抢占式多任务和抢占式多任务。Linux提供了抢占式多... 阅读全文
posted @ 2015-06-18 21:24 陈洪波 阅读(199) 评论(0) 推荐(0)