当前位置: 首页 > article >正文

linux的大内核锁与顺序锁

大内核锁

Linux大内核锁(Big Kernel Lock,BKL)是Linux内核中的一种锁机制,用于保护内核资源,以下是关于它的详细介绍:

概念与作用

大内核锁是一种全局的互斥锁,在同一时刻只允许一个进程访问内核的临界区。它的主要作用是确保内核数据结构在多进程或多线程访问时的一致性和完整性,防止并发访问导致的数据混乱或错误。

工作原理

当一个进程想要访问受大内核锁保护的内核资源时,它必须先获取大内核锁。如果锁已经被其他进程持有,那么当前进程就会被阻塞,直到锁被释放。只有获取了锁的进程才能执行临界区的代码,完成对内核资源的访问,访问结束后释放锁,以便其他进程可以获取锁并访问相应资源。

历史与发展

早期的Linux内核中,大内核锁是一种主要的同步机制,广泛用于保护各种内核数据结构和临界区。但随着内核的发展和多核处理器的普及,大内核锁的粒度较粗,会导致严重的性能瓶颈,因为它会限制多个处理器同时访问内核资源。后来Linux内核引入了更细粒度的锁机制,如自旋锁、互斥锁等,以提高内核的并发性能。

使用场景与限制

在一些特定的情况下,如内核初始化阶段,或者对一些全局的、不适合使用更细粒度锁的资源进行访问时,仍然会使用大内核锁。但由于其对并发性能的影响,在现代内核开发中,应尽量避免过度使用大内核锁。

顺序锁

顺序锁(Seqlock)是Linux内核中的一种同步机制,用于保护共享资源,以下是详细介绍:

基本概念

顺序锁结合了读写锁和计数器的特点,允许多个读者同时访问共享资源,但只允许一个写者进行写操作。它通过一个顺序计数器来协调读写操作的顺序。

工作原理

顺序锁包含一个顺序计数器和一个锁。写操作时,写者先获取锁,然后递增顺序计数器,接着进行写操作,完成后再次递增计数器并释放锁。读操作时,读者先读取顺序计数器的值,然后进行读操作,最后再次读取计数器的值。如果两次读取的计数器值相同且为偶数,说明读操作期间没有写操作发生,读取的数据有效;如果两次值不同或为奇数,说明有写操作发生,读操作需要重新进行。

特点

  • 读写并发:允许读写操作并发执行,提高了系统的并发性能。
  • 无饥饿:写者不会被读者饿死,因为写者获取锁后会独占资源进行写操作。
  • 开销较小:相比一些复杂的锁机制,顺序锁的实现相对简单,开销较小。

使用场景

适合于写操作相对较少、读操作频繁的场景,如内核中的一些数据结构,像网络设备的统计信息等,频繁被读取但偶尔才会被更新。


http://www.kler.cn/a/502994.html

相关文章:

  • TaskBuilder前端页面CSS样式规则设置
  • python学opencv|读取图像(二十九)使用cv2.getRotationMatrix2D()函数旋转缩放图像
  • paddle——站在巨人肩膀上及背刺二三事
  • 如何用 SSH 访问 QNX 虚拟机
  • 如何用bigemap pro裁剪矢量数据?
  • 【MySQL】基础架构分析
  • 模板方法模式详解
  • Java 泛型的用法
  • 【STM32-学习笔记-6-】DMA
  • ASP.NET Core - 日志记录系统(二)
  • 零基础 监控数据可视化 Spring Boot 2.x(Actuator + Prometheus + Grafana手把手) (上)
  • Spring Boot 应用开发入门
  • 【fly-iot飞凡物联】(19):开源飞凡物联项目重启,使用go重写后端代码,感兴趣的小伙伴可以一起参加,使用apache协议开源,招募感兴趣的小伙伴!!
  • 虚拟拨号技术(GOIP|VOIP)【基于IP的语音传输转换给不法分子的境外来电披上一层外衣】: Voice over Internet Protocol
  • git——merge和rebase
  • 探索网络安全:浅析文件上传漏洞
  • Mysql--运维篇--备份和恢复(逻辑备份,mysqldump,物理备份,热备份,温备份,冷备份,二进制文件备份和恢复等)
  • python+pymysql
  • HarmonyOS:@LocalBuilder装饰器: 维持组件父子关系
  • Android Dex VMP 动态加载加密指令流