(笔记)Linux内核学习(六)之并发和同步概念

一 临界区和竞争条件

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

竞争条件:多个执行线程处于同一个临界区中。

    

  处于竞争条件:造成访问的数据或者资源不一致状态:

对资源i的访问:ProcessA和B访问后得到正确的结果应该是9:

进程是并发执行,有可能得到的结果是:8

    

防止这种情况的发生:保证对资源的访问原子操作。

二 加锁

锁:采用原子操作实现,原子操作不存在竞争。

    

造成并发原因:

  l  中断:随时可以打断当前执行的进程代码;

  l  软中断和tasklet:任何时刻能唤醒调度软中断和tasklet,打断当前正在执行的代码;

  l  内核抢占:当前任务被抢占;

  l  进程睡眠:唤醒调度程序,执行新的进程;

  l  多处理器:同时执行代码。

  针对资源并发竞争条件的存在,需要对资源进行保护,保证资源的访问操作是原子的。

需要弄清楚哪些数据需要被保护,要试图弄清楚资源会不会被并发的访问操作。

三 死锁

多个执行线程互相等待被对方占用的资源,但永远不会释放各自拥有的资源,导致众线程永远无法得到执行。

    

出现死锁是件很危险的事情,预防死锁:

  l  加锁顺序保持一致;

  l  防止发生饥饿措施;

  l  不要重复请求同一个锁;

  l  复杂加锁方案造成死锁概率较大——设计锁力求简单;

四 锁的粒度

加锁粒度:描述加锁保护的数据规模;

过粗的锁:保护大块数据,如子系统所有数据结构;

精细的锁:保护小块数据,一个大数据结构中的一个元素;

在粗糙与精细之间需要平衡:精细的锁复杂开销大,良好扩展性:从单核到多核,为提高性能,锁得机制变得更细。

  保护数据不被并发的访问,加锁你的代码。恰当的加锁:满足不死锁、可扩展、清晰简洁。

时间: 2024-10-19 02:47:38

(笔记)Linux内核学习(六)之并发和同步概念的相关文章

(笔记)Linux内核学习(九)之内核内存管理方式

一 页 内核把物理页作为内存管理的基本单位:内存管理单元(MMU)把虚拟地址转换为物理 地址,通常以页为单位进行处理.MMU以页大小为单位来管理系统中的也表. 32位系统:页大小4KB 64位系统:页大小8KB 内核用相应的数据结构表示系统中的每个物理页: <linux/mm_types.h> struct page {} 内核通过这样的数据结构管理系统中所有的页,因此内核判断一个页是否空闲,谁有拥有这个页 ,拥有者可能是:用户空间进程.动态分配的内核数据.静态内核代码.页高速缓存-- 系统中

(笔记)Linux内核学习(八)之定时器和时间管理

一 内核中的时间观念 内核在硬件的帮助下计算和管理时间.硬件为内核提供一个系统定时器用以计算流逝的时间.系 统定时器以某种频率自行触发,产生时钟中断,进入内核时钟中断处理程序中进行处理. 墙上时间和系统运行时间根据时钟间隔来计算. 利用时间中断周期执行的工作: 更新系统运行时间: 更新实际时间: 在smp系统上,均衡调度程序中各处理器上运行队列: 检查当前进程是否用尽了时间片,重新进行调度: 运行超时的动态定时器: 更新资源消耗和处理器时间的统计值: 二 节拍率 系统定时器的频率:通过静态预处理

(笔记)Linux内核学习(三)之进程调度

进程调度: 在可运行态进程之间分配有限处理器时间资源的内核子系统. 一 调度策略 1 进程类型 I/O消耗型进程:大部分时间用来提交I/O请求或是等待I/O请求,经常处于可运行状态,但运行时间短,等待请求过程时处于阻塞状态.如交互式程序. 处理器消耗型进程:时间大都用在执行代码上,除非被抢占否则一直不停的运行. 综合型:既是I/O消耗型又是处理器消耗型. 调度策略要在:进程响应迅速(响应时间短)和最大系统利用率(高吞吐量)之间寻找平衡. 2 调度概念 优先级:基于进程价值和对处理器时间需求进行进

(笔记)Linux内核学习(十)之虚拟文件系统概念

虚拟文件系统 虚拟文件系统:内核子系统VFS,VFS是内核中文件系统的抽象层,为用户空间提供文件系统相关接口: 通过虚拟文件系统,程序可以利用标准Linux文件系统调用在不同的文件系统中进行交互和操作. VFS作为抽象层: 文件系统被安装在一个特定的安装点上,该安装点在全局层次结构中被称作命名空间, 所有的已安装文件系统都作为根文件系统树的枝叶出现在系统中. 文件系统主要的对象: 超级块对象:代表一个已安装文件系统:struct super_block {} 索引节点对象:代表一个文件:stru

(笔记)Linux内核学习(十一)之I/O层和I/O调度机制

一 块I/O基本概念 字符设备:按照字符流的方式被有序访问的设备.如串口.键盘等. 块设备:系统中不能随机(不需要按顺序)访问固定大小的数据片(chunk 块)的设备. 如:硬盘.软盘.CD-ROM驱动器.闪存等.都是通过以安装文件系统的方式使用. 块设备的组成: 扇区:是块设备中最小的可寻址单元(常见大小512字节):是块设备的基本寻址和操作单元. 块:是文件系统最小逻辑可寻址单元,文件系统的抽象,只能通过块访问文件系统.通常包含多个扇区. 当一个块被调入内存时(读入后或等待写出时),它要存储

(笔记)Linux内核学习(七)之内核同步机制和实现方式

一 原子操作 指令以原子的方式执行--执行过程不被打断. 1 原子整数操作 原子操作函数接收的操作数类型--atomic_t //定义 atomic_t v;//初始化 atomic_t u = ATOMIC_INIT(0); //操作 atomic_set(&v,4); // v = 4 atomic_add(2,&v); // v = v + 2 = 6 atomic_inc(&v); // v = v + 1 = 7 //实现原子操作函数实现 static inline vo

Linux内核学习-进程

先说几个术语: 一.Linux进程的五个段 下面我们来简单归纳一下进程对应的内存空间中所包含的5种不同的数据区都是干什么的.重点:代码段.数据段.堆栈段,这是一个概念堆.栈.全局区.常量区,这是另一个概念1)代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存中的镜像.代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作--它是不可写的.代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域.这部分

linux内核学习:中断中推后执行的部分

软中断-softirq 特点 相同和不同的软中断都可以在不同处理器上同时执行 一个软中断不会抢占另一个软中断 何时执行 从中断程序返回时 ksoftirqd线程中 显示调用 软中断最多有32个,一个32位的整型数据可以被用来标记刮起的软中断 使用策略 软中断应用于确实需要的场合,目前只有网络驱动和SCSI驱动中使用.另外,内核定时器和tasklet建立在软中断之上. 使用方法 注册软中断 void open_softirq(int nr, void (*action)(struct softir

Linux 内核学习的经典书籍及途径

from:http://www.zhihu.com/question/19606660 知乎 Linux 内核学习的经典书籍及途径?修改 修改 写补充说明 举报 添加评论 分享 • 邀请回答 按票数排序按时间排序 18 个回答 什么是答案总结? 答案总结 修改 赞同78 反对,不会显示你的姓名 时成,Emacser 收起 源潮.蒋凌.高益达 等人赞同 说说我们以前的培训经验.先看Unix内核相关的书籍,了解内核的经典实现方法,然后再结合源码去研究Linux内核.这样做的原因是避免从一开始就陷入细