• 用户态与内核态


    操作系统中,"用户态"(User Mode)和"内核态"(Kernel Mode)是CPU执行程序时的两种不同权限级别,它们定义了程序运行时可以访问的资源和执行的指令范围。

    用户态(User Mode)

    • 用户态是程序正常运行的状态,大部分程序的大部分时间都运行在此模式下。
    • 在用户态下,程序可以访问自己的内存空间,执行非特权指令,但不能直接访问硬件或执行对系统有重大影响的操作,如修改系统时间、内存管理等。
    • 用户态的限制增加了系统的安全性,防止了一个程序的错误影响到整个系统。

    内核态(Kernel Mode)

    • 内核态是操作系统核心部分运行的状态,具有更高的权限。
    • 在内核态下,程序可以直接访问和操作所有硬件资源,执行特权指令,如加载和卸载驱动程序、分配系统内存、改变CPU状态等。
    • 从用户态切换到内核态通常是因为程序需要执行一些只能在内核态下完成的操作,如系统调用或处理中断。
    • 这种切换需要保存当前上下文(用户态的寄存器状态等),加载内核态的上下文,执行完毕后再恢复用户态的上下文,这个过程涉及到CPU状态的改变,相对耗时。

    关于synchronized锁提到的“牵扯到了用户态和内核态的切换,效率不高”,主要是因为在某些情况下(尤其是早期的Java版本或特定的使用场景中),synchronized可能导致线程在等待锁或者释放锁的时候发生用户态到内核态的切换。这种切换开销较大,因为它涉及到操作系统层面的处理,包括上下文保存与恢复,以及可能的线程调度。随着Java的发展,尤其是从Java 6引入了偏向锁、轻量级锁等优化后,synchronized的性能已经有了显著提升,能在很多情况下避免昂贵的内核态切换,从而提高并发性能。但即便如此,在高度竞争的锁场景下,性能损耗仍然是一个考量因素。

    简单来说,用户态和内核态是操作系统的两种运行模式。用户态下,程序权限有限,只能执行基本操作;内核态则拥有更高权限,能直接访问硬件资源。当使用synchronized锁时,可能涉及这两种模式之间的转换,这过程较为耗时,影响效率。

  • 相关阅读:
    eclipse中open Type 、 open type in Hierachy、open Resource的区别
    基于C#的壁纸管理器(插件版) - 开源研究系列文章 - 个人小作品
    BERT知识蒸馏Distilled BiLSTM
    介绍一款开源、高性价比的在线教育建站系统
    阿里云张新涛:支持沉浸式体验应用快速落地,阿里云云XR平台发布
    算法宝典——Java版本(持续更新)
    KVM虚拟机热扩容
    java:为什么要总是使用对象的notifyAll而不使用notify?
    21天学习挑战赛--第三天打卡(动态更换app图标)
    Java项目:57 ssm011线上旅行信息管理系统ssm+vue
  • 原文地址:https://blog.csdn.net/m0_56020664/article/details/139836943