内核基本的同步机制:

抢占内核的主要特点:一个在内核态运行的进程,可能在执行内核函数期间被另外一个进程取代。

内核抢占:Linux 2.6允许用户在编译内核的时候配置十分启用

进程临界区:每个进程中访问临界资源(一次仅允许一个进程使用的共享资源)的那段代码称为临界区。

优化屏障:保证编译程序不会混淆放在原语操作之前的汇编指令和放在原语之后的汇编指令。

内存屏障:确保原语之后的操作开始执行之前,原语之前的操作已经完成。

自旋锁:在多处理器环境中工作的一种特殊的锁。如果内核控制路径发现锁由运行在另一个CPU上的内核控制路径锁着,就在周围‘旋转’,反复执行,直到锁呗释放。因为内核资源很多只锁1毫秒的时间片段,所以不会浪费太多时间。

顺序锁:自旋锁的读写具有相同的优先级。顺序锁中,写被赋予了更高的优先级。即使正在读对时候,也允许写;好处是写者不用等待读者,缺点时读者反复读取多次数据,对比相同,才能确认有效。

信号量:1、内核信号量,由内核控制路径使用;2、System V IPC 信号量,由用户态进程使用。

内核信号量:和自旋锁类似,内核信号量保护大资源内核控制路径不能访问,并且相应的进程被挂起。另外,1、只有可睡眠待函数才能获取内核信号量;2、中断处理程序和可延迟函数都不能使用内核信号量。

系统的高并发度取决于:
1、同时运行的I/O设备数
2、进行有效工作多CPU数 大内核锁:

深入理解Linux内核-内核同步的更多相关文章

  1. 24小时学通Linux内核--内核探索工具类

    寒假闲下来了,可以尽情的做自己喜欢的事情,专心待在实验室里燥起来了,因为大二的时候接触过Linux,只是关于内核方面确实是不好懂,所以十天的时间里还是希望能够补充一下Linux内核相关知识,接下来继续 ...

  2. 读书笔记之Linux系统编程与深入理解Linux内核

    前言 本人再看深入理解Linux内核的时候发现比较难懂,看了Linux系统编程一说后,觉得Linux系统编程还是简单易懂些,并且两本书都是讲Linux比较底层的东西,只不过侧重点不同,本文就以Linu ...

  3. 《深入理解Linux内核》 读书笔记

    深入理解Linux内核 读书笔记 一.概论 操作系统基本概念 多用户系统 允许多个用户登录系统,不同用户之间的有私有的空间 用户和组 每个用于属于一个组,组的权限和其他人的权限,和拥有者的权限不一样. ...

  4. 深入理解linux网络技术内幕读书笔记(三)--用户空间与内核的接口

    Table of Contents 1 概论 1.1 procfs (/proc 文件系统) 1.1.1 编程接口 1.2 sysctl (/proc/sys目录) 1.2.1 编程接口 1.3 sy ...

  5. 深入理解Linux内核 学习笔记(1)

    1.用户和用户组 每个用户是一个或多个用户组的一名成员,组由唯一的用户组标识符(user group ID)标识.每个文件的相关权限也恰好与一个组相对应. root为超级用户, 2.模块 为了达到微内 ...

  6. 【读书笔记::深入理解linux内核】内存寻址【转】

    转自:http://www.cnblogs.com/likeyiyy/p/3837272.html 我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0 ...

  7. 【读书笔记::深入理解linux内核】内存寻址

    我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0xC0000000:这是内核地址空间的地址转换关系. 这句话瞬间让我惊呆了,根据我的CPU的知识,开 ...

  8. 理解 Linux backlog/somaxconn 内核参数

    https://jaminzhang.github.io/linux/understand-Linux-backlog-and-somaxconn-kernel-arguments/ 各参数的含义:h ...

  9. 深入linux kernel内核配置选项

    ============================================================================== 深入linux kernel内核配置选项 ...

  10. Linux进程/内核模型

    内核必须实现一组服务和相应的接口,应用程序则可以使用这些接口,而不是直接与硬件打交道. Linux内核主要由以下5个子系统组成:进程调度.内存管理.虚拟文件系统.进程间通信以及设备驱动. 在这个组成中 ...

随机推荐

  1. 1388:Lake Counting

    题目链接: NOI题库http://noi.openjudge.cn/ch0205/1388/ POJ 2386 http://poj.org/problem?id=2386 总时间限制: 1000m ...

  2. Quartz.NET开源作业调度框架系列(四):Plugin Job-转

    如果在Quartz.NET作业运行时我们想动态修改Job和Trigger的绑定关系,同时修改一些参数那么该怎么办呢?Quartz.NET提供了插件技术,可以通过在XML文件中对Job和Trigger的 ...

  3. weblogic启动报错|unable to create new native threadjava

    问题描述: <-- 上午10时20分01秒 CST> <Critical> <WebLogicServer> <BEA-> <Server sub ...

  4. flex水平垂直居中

    <div class="parent"> <div class="children">我是通过flex的水平垂直居中噢!</div ...

  5. 使用httpClient调用接口获取响应数据

    转自:https://blog.csdn.net/shuaishuaidewo/article/details/81136088 import lombok.extern.slf4j.Slf4j; i ...

  6. keras中的模型保存和加载

    tensorflow中的模型常常是protobuf格式,这种格式既可以是二进制也可以是文本.keras模型保存和加载与tensorflow不同,keras中的模型保存和加载往往是保存成hdf5格式. ...

  7. 理解sklearn.feature.text中的CountVectorizer和TfidfVectorizer

    """ 理解sklearn中的CountVectorizer和TfidfVectorizer """ from collections im ...

  8. 【RS】BPR:Bayesian Personalized Ranking from Implicit Feedback - BPR:利用隐反馈的贝叶斯个性化排序

    [论文标题]BPR:Bayesian Personalized Ranking from Implicit Feedback (2012,Published by ACM Press) [论文作者]S ...

  9. vim 可视化模式(visual模式)

    转文章 为了便于选取文本,VIM 引入了可视(Visual)模式. 要选取一段文本,首先将光标移到段首,在普通模式下按 v 进入可视模式,然后把光标移到段末. 需要注意,光标所在字符是包含在选区中的 ...

  10. ruby的json请求

    require 'net/http'require 'uri'require 'json' customers = [{    "id" => 1123,    " ...