linux内核中的同步机制有哪些

linux内核中的同步机制有:1、原子操作;2、信号量(semaphore);3、读写信号量(rw_semaphore);4、自旋锁(spinlock);5、单核cpu等。原子操作绝不会在执行完毕前被任何其他任务或事件打断,这里的原子实际是使用了物理学里的物质微粒的概念。

linux内核中的同步机制有哪些-Worktile社区

1、原子操作

什么是原子操作,就是不可再分,该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位,因此这里的原子实际是使用了物理学里的物质微粒的概念。

原子操作需要硬件的支持,因此是架构相关的,其API和原子类型的定义都定义在内核源码树的include/asm/atomic.h文件中,它们都使用汇编语言实现,因为C语言并不能实现这样的操作。原子操作主要用于实现资源计数,很多引用计数(refcnt)就是通过原子操作实现的。

2、信号量(semaphore)

Linux内核的信号量在概念和原理上与用户态的System V的IPC机制信号量是一样的,但是它绝不可能在内核之外使用,因此它与System V的IPC机制信号量毫不相干。

信号量在创建时需要设置一个初始值,表示同时可以有几个任务可以访问该信号量保护的共享资源,初始值为1就变成互斥锁(Mutex),即同时只能有一个任务可以访问信号量保护的共享资源。一个任务要想访问共享资源,首先必须得到信号量,获取信号量的操作将把信号量的值减1,若当前信号量的值为负数,表明无法获得信号量,该任务必须挂起在该信号量的等待队列等待该信号量可用;若当前信号量的值为非负数,表示可以获得信号量,因而可以立刻访问被该信号量保护的共享资源。当任务访问完被信号量保护的共享资源后,必须释放信号量,释放信号量通过把信号量的值加1实现,如果信号量的值为非正数,表明有任务等待当前信号量,因此它也唤醒所有等待该信号量的任务。

3、读写信号量(rw_semaphore)

读写信号量对访问者进行了细分,或者为读者,或者为写者,读者在保持读写信号量期间只能对该读写信号量保护的共享资源进行读访问,如果一个任务除了需要读,可能还需要写,那么它必须被归类为写者,它在对共享资源访问之前必须先获得写者身份,写者在发现自己不需要写访问的情况下可以降级为读者。

读写信号量有两种实现,一种是通用的,不依赖于硬件架构,因此,增加新的架构不需要重新实现它,但缺点是性能低,获得和释放读写信号量的开销大;另一种是架构相关的,因此性能高,获取和释放读写信号量的开销小,但增加新的架构需要重新实现。在内核配置时,可以通过选项去控制使用哪一种实现。

4、自旋锁(spinlock)

自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,”自旋”一词就是因此而得名。由于自旋锁使用者一般保持锁时间非常短,因此选择自旋而不是睡眠是非常必要的,自旋锁的效率远高于互斥锁。

信号量和读写信号量适合于保持时间较长的情况,它们会导致调用者睡眠,因此只能在进程上下文使用(_trylock的变种能够在中断上下文使用),而自旋锁适合于保持时间非常短的情况,它可以在任何上下文使用。如果被保护的共享资源只在进程上下文访问,使用信号量保护该共享资源非常合适,如果对共享资源的访问时间非常短,自旋锁也可以。但是如果被保护的共享资源需要在中断上下文访问(包括底半部即中断处理句柄和顶半部即软中断),就必须使用自旋锁。

5、单核cpu

如果spin_lock不处于中断上下文,则spin_lock锁定的代码只会在内核发生抢占2的时候才会丢失CPU拥有权。所以,对于单核来说,需要在spin_lock获得锁的时候禁止抢占,释放锁的时候开放抢占。因此这不是真正意义上的锁。

6、大内核锁(BKL–Big Kernel Lock)

大内核锁本质上也是自旋锁,但是它又不同于自旋锁,自旋锁是不可以递归获得锁的,因为那样会导致死锁。但大内核锁可以递归获得锁。大内核锁用于保护整个内核,而自旋锁用于保护非常特定的某一共享资源。进程保持大内核锁时可以发生调度,具体实现是:在执行schedule时,schedule将检查进程是否拥有大内核锁,如果有,它将被释放,以致于其它的进程能够获得该锁,而当轮到该进程运行时,再让它重新获得大内核锁。注意在保持自旋锁期间是不允许发生调度的。

7、读写锁(rwlock)

读写锁实际是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。这种锁相对于自旋锁而言,能提高并发性,因为在多处理器系统中,它允许同时有多个读者来访问共享资源,最大可能的读者数为实际的逻辑CPU数。写者是排他性的,一个读写锁同时只能有一个写者或多个读者(与CPU数相关),但不能同时既有读者又有写者。

延伸阅读:

什么是Linux内核

Linux是一种开源电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。

Linux较早是由芬兰 Linus Torvalds为尝试在英特尔x86架构上提供自由的类Unix操作系统而开发的。该计划开始于1991年,在计划的早期有一些 Minix 黑客提供了协助,而如今全球无数程序员正在为该计划无偿提供帮助。

操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有软件来操作和控制它,自身是不能工作的。完成这个控制工作的软件就称为操作系统,在Linux的术语中被称为“内核”,也可以称为“核心”。Linux内核的主要模块(或组件)分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。

Linux内核的发展过程中,我们还不得不提一下各种Linux发行版的作用,因为正是它们推动了Linux的应用,从而也让更多的人开始关注Linux。一些组织或厂家,将Linux系统的内核与外围实用程序(Utilities)软件和文档包装起来,并提供一些系统安装界面和系统配置、设定与管理工具,就构成了一种发行版本(distribution),Linux的发行版本其实就是Linux核心再加上外围的实用程序组成的一个大软件包而已。

文章标题:linux内核中的同步机制有哪些,发布者:小编,转载请注明出处:https://worktile.com/kb/p/35618

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编小编认证作者
上一篇 2023年1月15日 下午9:23
下一篇 2023年1月15日 下午9:25

相关推荐

  • 办公oa市场

    办公OA市场呈现以下特点:1、市场需求日益增长;2、云服务和移动办公驱动市场;3、竞争日趋激烈;4、定制化和一体化趋势明显。 其中,市场需求的增长受到全球化和信息化的共同推动。企业寻求提高工作效率,降低运营成本,同时要应对日益复杂的商业环境和不断变化的市场需求。因此,寻求高效、灵活的办公自动化解决方…

    2024年1月11日
    21800
  • 如何管理施工项目团队合作

    如何管理施工项目团队合作主要包括以下几个方面:确保频繁沟通、分配明确的职责与任务、建立团队合作文化、使用项目管理工具、进行风险管理、提供培训与发展机会,以及认可与激励。 这些要素共同作用,保证施工项目能顺利进行,同时促进团队成员之间的高效合作。特别是确保频繁沟通不仅可以保证项目信息的透明和更新,还能…

    2024年4月10日
    5300
  • 如何做项目的质量管理员

    质量管理员在项目中的角色至关重要,他们的职责在于确保项目符合既定的质量标准和要求。在执行这一角色时,有几个关键步骤:建立质量管理计划、组织质量保证活动、进行质量控制、设立有效的沟通渠道、持续监督与改进流程、以及教育和训练团队有关质量管理的知识和技能。为了详细描述其中一点,以质量控制为例,这涉及到监督…

    2024年4月11日
    9800
  • 在选择ERP系统时,开源与专有软件哪个更优

    在选择ERP系统时,企业应依据自身的特定需求和条件来确定是选择开源还是专有软件。开源和专有ERP系统各有优势和局限。开源ERP系统的主要优势在于成本效益、灵活性、自由的定制和强大的社区支持。专有ERP则在易用性、专业支持服务、安全性和合规性方面表现更佳。企业选择时需综合考虑这些因素:1、成本和预算、…

    2023年11月27日
    35100
  • 智慧oa系统

    智慧OA系统为现代公共与企业管理提供了效率、协同、自动化管理的解决方案。1、智慧OA系统的设计理念以提高工作效率、优化流程管理、增强数据安全为主要目标;2、通过集成信息技术,实现资源共享和业务协同;3、采用模块化设计,满足不同组织机构的个性化需求;4、在确保数据安全的前提下,支持移动办公,适应当代快…

    2024年1月12日
    22400
  • SaaSERP和传统ERP的区别在哪里

    SaaSERP和传统ERP的区别有:1、开发周期、开发费用、实施维护难易程度;2、收费方式;3、灵活性、可扩展性;4、数据处理存储方式。传统ERP开发周期长,开发费用高,实施和维护难度大。 一、开发周期、开发费用、实施维护难易程度 传统ERP开发周期长,开发费用高,实施和维护难度大。而SaaS ER…

    2023年4月29日
    32200
  • linux删除文件夹命令

    linux删除文件夹的命令有:1、rm命令;2、rmdir命令。rm命令可以用于删除文件夹,但是,使用 rm 命令删除文件夹的时候,一定要加上 -r 或 -R 选项,否则会报错。rmdir命令是英文单词 remove directory 的缩写,主要作用是删除文件夹。 一、删除文件夹命令 1、rm命…

    2023年3月17日
    3.2K00
  • 如何在甘特图中整合质量管理流程

    甘特图在整合质量管理流程中提供了一个视觉框架,借助于此能够监控项目进度、识别关键质量控制节点、追踪问题解决步骤。拓展质量管理规划是甘特图整合中的关键步骤,这涉及到确立质量目标、定义关键性能指标(KPIs)、明确质量审查和评估节点。 一、甘特图与质量管理流程的融合 甘特图融合质量管理流程涉及到多种实践…

    2023年12月21日
    23600
  • 产品管理和产品营销之间的联系是什么

    产品管理与产品营销之间的紧密连接体现于几个关键领域:产品战略的构建、市场需求的洞察、用户体验的塑造、促销策略的执行。其中,尤以产品战略的构建为核心,因产品的方针与路线决定营销手段的有效性与针对性。这一环节要求对顾客需求有深刻的理解,并能够预见或影响市场潮流,在竞争中保持领先。 在产品战略的擘画中,管…

    2024年1月19日
    19000
  • 为什么vscode不能删除

    VSCode可能无法删除文件、文件夹或代码行的原因包括权限不足、插件冲突、软件错误、系统保护文件或已打开的文件等。在更详细的描述中,权限问题是较常见的原因,因为操作系统可能对某些文件设置了特定的权限,禁止被修改或删除。当用户尝试在没有相应权限的情况下删除时,VSCode将无法执行该操作。对此,用户需…

    2024年4月3日
    9600

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部