linux内核机制有哪些

嵌入式操作系统

57人已加入

描述

  Linux内核主要由5个模块构成,分别是:进程调度模块、内存管理模块、虚拟文件系统模块、进程间通信模块。

  Linux经常使用散列表来实现高速缓存,高速缓存是需要快速访问的信息。

  Linux为什么需要同步机制?

  在操作系统引入了进程概念,进程成为调度实体后,系统就具备了并发执行多个进程的能力,但也导致了系统中各个进程之间的资源竞争和共享。另外,由于中断、异常机制的引入,以及内核态抢占都导致了这些内核执行路径(进程)以交错的方式运行。对于这些交错路径执行的内核路径,如不采取必要的同步措施,将会对一些关键数据结构进行交错访问和修改,从而导致这些数据结构状态的不一致,进而导致系统崩溃。因此,为了确保系统高效稳定有序地运行,linux必须要采用同步机制。

  Linux内核提供了哪些同步机制?

  在学习linux内核同步机制之前,先要了解以下预备知识:(临界资源与并发源)

  在linux系统中,我们把对共享的资源进行访问的代码片段称为临界区。把导致出现多个进程对同一共享资源进行访问的原因称为并发源。

  Linux系统下并发的主要来源有:

  中断处理:例如,当进程在访问某个临界资源的时候发生了中断,随后进入中断处理程序,如果在中断处理程序中,也访问了该临界资源。虽然不是严格意义上的并发,但是也会造成了对该资源的竞态。

  内核态抢占:例如,当进程在访问某个临界资源的时候发生内核态抢占,随后进入了高优先级的进程,如果该进程也访问了同一临界资源,那么就会造成进程与进程之间的并发。

  多处理器的并发:多处理器系统上的进程与进程之间是严格意义上的并发,每个处理器都可以独自调度运行一个进程,在同一时刻有多个进程在同时运行 。

  如前所述可知:采用同步机制的目的就是避免多个进程并发并发访问同一临界资源。

  Linux内核中9种同步机制

  1)每CPU变量

  主要形式是数据结构的数组,系统中的每个CPU对应数组的一个元素。

  使用情况:数据应在逻辑上是独立的

  使用原则:应在内核控制路径禁用抢占的情况下访问每CPU变量。

  2)原子操作

  原理:是借助于汇编语言指令中对“读--修改--写”具有原子性的汇编指令来实现。

  3)内存屏障

  原理:使用内存屏障原语确保在原语之后的操作开始之前,原语之前的操作已经完成。

  4)自旋锁

  主要用于多处理器环境中。

  原理:如果一个内核控制路径发现所请求的自旋锁已经由运行在另一个CPU上的内核控制

  路径“锁着”,就反复执行一条循环指令,直到锁被释放。

  说明:自旋锁一般用于保护禁止内核抢占的临界区。

  在单处理器上,自旋锁的作用仅是禁止或启用内核抢占功能。

  Linux

  5)顺序锁:

  顺序锁与自旋锁非常相似,仅有一点不同,即顺序锁中的写者比读者有较高的优先级,也就

  意味着即使读者正在读的时候也允许写者继续运行。

  6)RCU

  主要用于保护被多个CPU读的数据结构。

  允许多个读者和写者同时运行,且RCU是不用锁的。

  使用限制:

  1)RCU只保护被动态分配并通过指针引用的数据结构

  2)在被RCU保护的临界区中,任何内核控制路径都不能睡眠。

  原理:

  当写者要更新数据时,它通过引用指针来复制整个数据结构的副本,然后对这个副本进行

  修改。修改完毕后,写者改变指向原数据结构的指针,使它指向被修改后的副本,(指针

  的修改是原子的)。

  7)信号量:

  原理: 当内核控制路径试图获取内核信号量所保护的忙资源时,相应的进程被挂起;只有在

  资源被释放时,进程才再次变为可运行。

  使用限制:只有可以睡眠的函数才能获取内核信号量 ;

  中断处理程序和可延迟函数都不能使用内核信号量。

  Linux

  8)本地中断禁止

  原理:本地中断禁止可以保证即使硬件设备产生了一个IRQ信号时,内核控制路径也会继续运行,

  从而使中断处理例程访问的数据结构受到保护。

  不足:禁止本地中断并不能限制运行在另一个CPU上的中断处理程序对共享数据结构的并发访问,

  故在多处理器环境中,禁止本地中断需要与自旋锁一起使用。

  9)本地软中断的禁止

  方法1:

  由于软中断是在硬件中断处理程序结束时开始运行的,所以最简单的方式是禁止那个CPU上的中断。

  因为没有中断处理例程被激活,故软中断就没有机会运行。

  方法2:

  通过操纵当前thread_info描述符preempt_count字段中存放的软中断计数器,可以在本地CPU上激活

  或禁止软中断。因为内核有时只需要禁止软中断而不禁止中断。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分