并发访问:多个内核路径同时访问和操作数据,就有可能发生相互覆盖共享数据的情况,造成被访问数据的不一致。

临界区:访问和操作共享数据的代码段。

并发源:访问临界区的执行线程或代码路径。

在内核中产生并发访问的主要有如下4种:

  • 中断和异常:中断发生后,中断处理程序和被中断的进程之间有可能产生并发访问。中断<==>被中断的线程
  • 软中断和tasklet:软中断或者tasklet随时可能会被调度执行,从而打断当前正在执行的进程上下文。软中断<==>进程上下文
  • 内核抢占:调度器支持可抢占特性,会导致进程和进程之间的并发访问。进程<==>进程
  • 多处理器并发执行:多处理器上可以同时运行多个进程。A处理器进程<==>B处理器进程

对于单处理器系统,主要有一下并发源:(硬中断 > 软中断和tasklet > 进程上下文)

  • 中断处理程序可以打断软中断、tasklet和进程上下文。
  • 软中断和tasklet之间不会并发,但是可以打断进程上下文的执行。
  • 在支持抢占的内核中,进程上下文之间会并发。
  • 在不支持抢占的内核中,进程上下文之间不会产生并发。

对于SMP系统,有如下并发情况:

  • 同一类型的中断处理程序不会并发,但是不同类型的中断有可能送达到不同的CPU上,因此不同类型的中断处理程序可能会存在并发执行。
  • 同一类型的软中断会在不同的CPU上并发执行。
  • 同一类型的tasklet是串行执行的,不会在多个CPU上并发。
  • 不同CPU上的进程上下文会并发。

并发保护的是资源或者数据,而不是保护代码;包括静态局部变量、全局变量、共享的数据结构、缓存、链表、红黑树等各种形式的资源数据。

下面是本专题展开的章节:

Linux并发与同步专题 (1)原子操作和内存屏障

Linux并发与同步专题 (2)spinlock

Linux并发与同步专题 (3) 信号量

Linux并发与同步专题 (4) Mutex互斥量

Linux并发与同步专题 (5) 读写锁

Linux并发与同步专题 (6) RCU

Linux并发与同步专题 (7) 内存管理中的锁

Linux并发与同步专题 (8) 最新更新与展望

 

Linux并发与同步专题的更多相关文章

  1. Linux并发与同步专题 (4) Mutex互斥量

    关键词:mutex.MCS.OSQ. <Linux并发与同步专题 (1)原子操作和内存屏障> <Linux并发与同步专题 (2)spinlock> <Linux并发与同步 ...

  2. Linux并发与同步专题 (3) 信号量

    关键词:Semaphore.down()/up(). <Linux并发与同步专题 (1)原子操作和内存屏障> <Linux并发与同步专题 (2)spinlock> <Li ...

  3. Linux并发与同步专题 (2)spinlock

    关键词:wfe.FIFO ticket-based.spin_lock/spin_trylock/spin_unlock.spin_lock_irq/spin_lock_bh/spin_lock_ir ...

  4. Linux并发与同步专题 (1)原子操作和内存屏障

    关键词:. <Linux并发与同步专题 (1)原子操作和内存屏障> <Linux并发与同步专题 (2)spinlock> <Linux并发与同步专题 (3) 信号量> ...

  5. Linux海量数据高并发实时同步架构方案杂谈

    不论是Redhat还是CentOS系统,除去从CDN缓存或者数据库优化.动静分离等方面来说,在架构层面上,实 现海量数据高并发实时同步访问概括起来大概可以从以下几个方面去入手,当然NFS的存储也可以是 ...

  6. linux和windows同步数据 cwrsync client to rsync server

    linux和windows同步数据,rsync server  cwrsync client linux server一般系统都自带rsync,如果没有就挂载系统盘自己安装一下,安装挺简单的不用我再多 ...

  7. 漫画|Linux 并发、竞态、互斥锁、自旋锁、信号量都是什么鬼?(转)

    知乎链接:https://zhuanlan.zhihu.com/p/57354304 1. 锁的由来? 学习linux的时候,肯定会遇到各种和锁相关的知识,有时候自己学好了一点,感觉半桶水的自己已经可 ...

  8. linux下的同步与互斥

    linux下的同步与互斥 谈到linux的并发,必然涉及到线程之间的同步和互斥,linux主要为我们提供了几种实现线程间同步互斥的 机制,本文主要介绍互斥锁,条件变量和信号量.互斥锁和条件变量包含在p ...

  9. 【Linux】多线程同步的四种方式

    背景问题:在特定的应用场景下,多线程不进行同步会造成什么问题? 通过多线程模拟多窗口售票为例: #include <iostream> #include<pthread.h> ...

随机推荐

  1. [ORACLE]ORA-28002 The password will expire within 7 days.将不能登录系统

    错误“ORA-28002 The password will expire within 7 days.  Cannot logon to the database“当在进程调度器上运行AE程序可能遇 ...

  2. 在viewPager中双指缩放图片,双击缩放图片,单指拖拽图片

    我们就把这个问题叫做图片查看器吧,它的主要功能有: (项目地址:https://github.com/TZHANHONG/ImageViewer/releases/tag/1.0,里面的MyImage ...

  3. Python高级特性:列表生成式

    列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 最常见的例子: 生成list [, , , , , , , , , ]可以用li ...

  4. Android为TV端助力 自定义view中findViewById为空的解决办法

    网上说的都是在super(context, attrs);构造函数这里少加了一个字段, 其实根本不只这一个原因,属于view生命周期的应该知道,如果你在 自定义view的构造函数里面调用findVie ...

  5. 章节三、5-Getters-Setters和this关键字part01

    我们新建第一个Car类: package introduction; public class Car { //颜色 private String color; //生成商 private Strin ...

  6. 2016-04-25-信息系统实践手记6-JS调用Flex的性能问题一例

    layout: post title: 2016-04-25-信息系统实践手记6-JS调用Flex的性能问题一例 key: 20160425 tags: GIS JS FLEX 技术选型 性能 API ...

  7. 【转】JSF中的三大核心组件 UI标签的详细介绍和使用举例

    JSF提供了大量的UI标签来简化创建视图.这些UI标签类似于ASP.NET中的服务器组件.使用这些标签,可以通过其value,binding,action,actionListener等属性直接绑定到 ...

  8. C#-继承(十一)

    继承概念 承用于创建可重用.扩展和修改在其他类中定义的行为的新类 创建一个类的时候,不是要写全新的数据成员和成员函数,可以指定新的类继承一个已经存在的类的成员.已有的类称为基类,新的类称为派生类 派生 ...

  9. MSSQL sql server order by 1,2 的具体含义

    转自:http://www.maomao365.com/?p=5416 摘要: order by 1,2 的含义是对表的第一列  按照从小到大的顺序进行排列 然后再对第二列按照从小到大的顺序进行排列 ...

  10. 前后端分离djangorestframework——序列化与反序列化数据

    我们写好后端的代码,要把数据交给前端的展示的,这个数据以什么类型给前端呢?学到这里,我们已经知道这个数据最好是json字符串才行,因为网络间的传输,只认字符串或者二进制,字符串就是我们的数据,二进制就 ...