热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

linux内核同步的介绍

现在来谈谈linux内核同步的一些概念性的理解:临界区和竞争条件:所谓临界区是指访问和操作共享数据的代码段。多个执行线程并发的访问同一个资源通常是不

现在来谈谈linux内核同步的一些概念性的理解:

临界区和竞争条件:

所谓临界区是指访问和操作共享数据的代码段。多个执行线程并发的访问同一个资源通常是不安全的,为了避免在临界区中发生并发的访问,必须保证这些源码是原子的进行。

避免并发和防止竞争的条件被称为同步

内核中有一半照成并发执行的原因有:

中断--- ------------------------------中断几乎可以在任何时刻异步发生,也就是可能随时打断当前正在执行的代码。

软中断和tasklet-------------------内核能在任何时刻调度软中断和tasklet,打断当前正在执行的代码。

内核抢占----------------------------因为内核具有抢占性,所以内核中的任务可能会被另一个任务抢占。

睡眠及与用户的空间的同步----在内核执行的进程可能会睡眠,这就会唤醒调度程序,导致调度一个新的用户进程执行。

记住:要给数据而不是代码枷锁。

一般需要保护的情况如下:

在我们的代码里面,要为大多数糟糕的情况提供适当的保护,例如具有内核抢占的SMP,并且要考虑到所有新的情况。

在编写内核代码时,需要问问自己一下的这些问题,决定是否加保护的条件。

1:这个数据是不是全局?除了当前的线程外,其他的线程能不能访问它?

2:这个数据会不会在进程上下文和中断的上下文中共享?

3:进程在访问数据是可不可能被抢占?被调用的新的进程会不会调用同一个数据?

4:当前的进程会不会睡眠(阻塞)在某些资源上,如果是,他会让共享数据处于何种状态?

5:怎样防止数据失控?

6:如果这个函数又在另一个处理器上被调用将会发生什么呐?

7:你要对这些代码做什么?

简而言之,几乎访问所用的内核的全局变量和共享数据都需要以同步的方法。

下一篇将会介绍怎样处理是同步的方法,同时同步的方法有哪一些,之间有什么样的区别?


推荐阅读
  • 本文详细介绍如何在Linux系统中配置SSH密钥对,以实现从一台主机到另一台主机的无密码登录。内容涵盖密钥对生成、公钥分发及权限设置等关键步骤。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • Linux系统中Java程序Too Many Open Files问题的深入解析与解决方案
    本文详细分析了在Linux环境下运行的Java应用程序中可能出现的“Too many open files”异常现象,探讨其成因及解决方法。该问题通常出现在高并发文件访问或大量网络连接场景下,对系统性能和稳定性有较大影响。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • Linux环境下进程间通信:深入解析信号机制
    本文详细探讨了Linux系统中信号的生命周期,从信号生成到处理函数执行完毕的全过程,并介绍了信号编程中的注意事项和常见应用实例。通过分析信号在进程中的注册、注销及处理过程,帮助读者理解如何高效利用信号进行进程间通信。 ... [详细]
  • 深入理解Java多线程并发处理:基础与实践
    本文探讨了Java中的多线程并发处理机制,从基本概念到实际应用,帮助读者全面理解并掌握多线程编程技巧。通过实例解析和理论阐述,确保初学者也能轻松入门。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • 本文详细阐述了云主机流量的概念,探讨其对网站性能和安全的关键影响,并提供了优化配置的实用建议。 ... [详细]
  • 为何我选择了华为云GaussDB数据库
    本文分享了作者选择华为云GaussDB数据库的理由,详细介绍了GaussDB(for MySQL)的技术特性和优势,以及它在金融和互联网行业的应用场景。 ... [详细]
  • 本文详细探讨了Java中Volatile关键字的工作原理、优化技巧及其在实际开发中的应用场景,特别是在提高多线程环境下数据可见性和减少锁竞争方面的优势。 ... [详细]
  • Go语言以其简洁的语法和强大的并发处理能力而闻名,特别是在云计算和分布式计算领域有着广泛的应用。本文将深入探讨Go语言中的Channel机制,包括其不同类型及其在实际编程中的应用。 ... [详细]
author-avatar
云下拾雨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有