5,内核同步

  • 内核抢占 
    1. 无论在抢占还是非抢占内核中,运行在内核态的进程都可以自动放弃CPU.称为计划性进程切换.但是,抢占式内核在相应引起进程切换的异步事件的方式上有差异,称为强制性进程切换.

    2. 抢占式内核的特点:
      一个在内核态运行的进程,可能在执行内核函数期间被另一个进程取代.可抢占式的目的是减少用户态进程的分派延迟(即从进程变为可执行状态到它实际开始运行之间的间隔).但是它会引起不容忽视的开销.

    3. 只有当内核正在执行异常处理程序,且内核抢占没有被显示禁止时,才可能抢占内核.同时本地CPU必须打开本地中断.

    4. 需要同步的情况:
      当计算的结果依赖于两个或以上的交叉内核控制路径的嵌套方式时,可能出现竞争条件.临界区是一段代码,在其他的内核控制路径能够进入临界区前,进入临界区的内核控制路径必须全部执行完这段代码.
      必须确保在任意时刻只有一个内核控制路径处于临界区.

    5. 不需要同步的:1)中断处理程序和tasklet不必编写成可重入函数; 2)仅被软中断和tasklet访问的每CPU变量不需要同步;
      3)仅被一种tasklet访问的数据结构不需要同步.

  • 每CPU变量:最好的同步技术是吧设计不需要同步的内核放在首位.因为显式的同步原语都有性能开销. 吧内核变量声明为每CPU 变量. 
    1. 仅当确定在系统的CPU上的数据在逻辑上是独立的时候才使用.

    2. 主要是数据结构的数组,每个CPU对应数组的一个元素.在主存中被排列以使每个数据结构存放在Cache的不同行.所以,并发访问不会引起Cache行的切用和失效

    3. 对来自不同CPU的并发访问提供保护,但是对来自异步函数的访问不提供保护.

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

  • 原子操作: 
    1. 若干汇编指令具有"读-修改-写"类型.即访问存储器单元两次,一次读,一次写.

    2. 确保这样的操作在芯片级是原子的.任何这样的操作都必须以单个指令执行.

  • 优化和内存屏障 
    1. 使用优化的编译器时,指令不会严格按照他们在源代码中出现的顺序执行.此外,CPU通常并行地执行若干条指令,且可能重新安排内存访问.

    2. 但是在处理同步时,必须避免指令重新排序.所以,所有的同步原语起优化和内存屏障的作用.

    3. 优化屏障:保证编译程序不会混淆放在原语操作之前和之后的汇编指令.但并不保证不使当前CPU把汇编指令混在一起执行.

    4. 内存屏障:在原语执行之前,原语之前的操作已经完成,类似于防火墙.

  • 自旋锁 
    1. 加锁技术:当内核控制路径必须访问共享数据结构或进入临界区时,就需要为自己获取一把"锁".

    2. 自旋锁用在多CPU下.如果锁开着,就获取锁并继续自己的执行.相反,当锁由运行在另一CPU上的内核控制"锁着"时,就在周围"旋转"反复执行一条紧凑的循环指令(忙等).直到锁被释放.

    3. 在自旋锁忙等时,内核抢占还是有效的.等待自旋锁释放的进程有可能被更高优先级的进程替代.

  • 读写自旋锁 
    1. 为了增加内核的并发能力.在没有写的情况下,允许并发的读操作.

5,内核同步

时间: 2024-11-02 01:26:58

5,内核同步的相关文章

【读书笔记】《Linux内核设计与实现》内核同步介绍&内核同步方法

简要做个笔记,以备忘. 需同步的原因是,我们并发访问了共享资源.我们将访问或操作共享资源的代码段称"临界区",如果两个执行线程处于同一临界区中同时执行,称"竞争条件".这里术语执行线程指任何正在执行的代码实例,如一个在内核执行的进程.一个中断处理程序或一个内核线程. 举个简单例子,i++操作.该操作可以转换为下面的机器指令序列: 1.得到当前变量i的值,并保存到一个寄存器. 2.将寄存器的值加1. 3.将i的新值写回到内存中. 当两个线程同时进入这个临界区,若i初值

[内核同步]浅析Linux内核同步机制

转自:http://blog.csdn.net/fzubbsc/article/details/37736683?utm_source=tuicool&utm_medium=referral 很早之前就接触过同步这个概念了,但是一直都很模糊,没有深入地学习了解过,近期有时间了,就花时间研习了一下<linux内核标准教程>和<深入linux设备驱动程序内核机制>这两本书的相关章节.趁刚看完,就把相关的内容总结一下.为了弄清楚什么事同步机制,必须要弄明白以下三个问题: 什么是互

Linux内核同步机制

http://blog.csdn.net/bullbat/article/details/7376424 Linux内核同步控制方法有很多,信号量.锁.原子量.RCU等等,不同的实现方法应用于不同的环境来提高操作系统效率.首先,看看我们最熟悉的两种机制——信号量.锁. 一.信号量 首先还是看看内核中是怎么实现的,内核中用struct semaphore数据结构表示信号量(<linux/semphone.h>中): [cpp] view plaincopyprint? struct semaph

Linux内核同步机制之(二):Per-CPU变量

转自:http://www.wowotech.net/linux_kenrel/per-cpu.html 一.源由:为何引入Per-CPU变量? 1.lock bus带来的性能问题 在ARM平台上,ARMv6之前,SWP和SWPB指令被用来支持对shared memory的访问: SWP <Rt>, <Rt2>, [<Rn>] Rn中保存了SWP指令要操作的内存地址,通过该指令可以将Rn指定的内存数据加载到Rt寄存器,同时将Rt2寄存器中的数值保存到Rn指定的内存中去.

3. 文件系统——创建、删除分区和内核同步分区信息

一.创建分区 如果使用fdisk命令来创建.删除.修改分区,可以直接使用fdisk [DEVICE]来操作,如: # fdisk /dev/sda 但需要注意的是,用命令来操作硬件,很容易造成数据丢失,故务必谨慎使用. fdisk命令是个交互命令,使用fdisk [DEVICE] 时,系统会提示各种可以使用的选项: [[email protected] ~]# fdisk /dev/sda # 不要加上 -l选项 --------------运行结果----------------- WARNI

Linux 内核同步机制

    本文将就自己对内核同步机制的一些简要理解,做出一份自己的总结文档.     Linux内部,为了提供对共享资源的互斥访问,提供了一系列的方法,下面简要的一一介绍. Technorati 标签: 互斥 Linux 中断屏蔽 使用方法: local_irq_disable() //屏蔽中断 critical section //临界区 local_irq_enable() //开中断 .csharpcode, .csharpcode pre { font-size: small; color

Linux内核设计与实现——内核同步

内核同步 同步介绍 同步的概念 临界区:也称为临界段,就是訪问和操作共享数据的代码段. 竞争条件: 2个或2个以上线程在临界区里同一时候运行的时候,就构成了竞争条件. 所谓同步.事实上防止在临界区中形成竞争条件. 假设临界区里是原子操作(即整个操作完毕前不会被打断),那么自然就不会出竞争条件.但在实际应用中.临界区中的代码往往不会那么简单,所以为了保持同步,引入了锁机制.但又会产生一些关于锁的问题. 死锁产生的条件:要有一个或多个运行线程和一个或多个资源,每一个线程都在等待当中的一个资源.但全部

Linux内核同步机制--转发自蜗窝科技

Linux内核同步机制之(一):原子操作 http://www.wowotech.net/linux_kenrel/atomic.html 一.源由 我们的程序逻辑经常遇到这样的操作序列: 1.读一个位于memory中的变量的值到寄存器中 2.修改该变量的值(也就是修改寄存器中的值) 3.将寄存器中的数值写回memory中的变量值 如果这个操作序列是串行化的操作(在一个thread中串行执行),那么一切OK,然而,世界总是不能如你所愿.在多CPU体系结构中,运行在两个CPU上的两个内核控制路径同

十天学Linux内核之第六天---调度和内核同步

原文:十天学Linux内核之第六天---调度和内核同步 心情大好,昨晚我们实验室老大和我们聊了好久,作为已经在实验室待了快两年的大三工科男来说,老师让我们不要成为那种技术狗,代码工,说多了都是泪啊,,不过我们的激情依旧不变,老师帮我们组好了队伍,着手参加明年的全国大赛,说起来我们学校历史上也就又一次拿国一的,去了一次人民大会堂领奖,可以说老大是对我们寄予厚望,以后我会专攻仪器仪表类的题目,激情不灭,梦想不息,不过最近一段时间还是会继续更新Linux内核,总之,继续加油~ Linux2.6版本中的

浅析Linux内核同步机制

很早之前就接触过同步这个概念了,但是一直都很模糊,没有深入地学习了解过,近期有时间了,就花时间研习了一下<linux内核标准教程>和<深入linux设备驱动程序内核机制>这两本书的相关章节.趁刚看完,就把相关的内容总结一下.为了弄清楚什么事同步机制,必须要弄明白以下三个问题: 什么是互斥与同步? 为什么需要同步机制? Linux内核提供哪些方法用于实现互斥与同步的机制? 1.什么是互斥与同步?(通俗理解) 互斥与同步机制是计算机系统中,用于控制进程对某些特定资源的访问的机制. 同步