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

操作系统--用户态和内核态

--为什么操作系统要引入用户态和内核态这个概念?

用户态(User Mode)和内核态(Kernel Mode)是操作系统为保护系统资源和硬件安全而设计的两种运行模式。区分这两种模式的主要目的是限制用户程序对敏感系统资源的直接访问,确保系统稳定性(说人话就是 两种运行模式下操作系统分配的权限和掌握资源不同 依据不同使用场景选择特定运行模式给与相应权限资源 )

--内核态(核心态)

内核态是 CPU 的高权限运行模式,操作系统的内核程序(如进程管理、内存管理、设备驱动、中断处理等核心功能)在此模式下运行。

核心特点:
  1. 权限无限制
    可以直接访问计算机的所有硬件资源(如 CPU、内存、硬盘、网卡等),执行所有 CPU 指令(包括特权指令,如修改内存地址空间、关闭中断、操作 I/O 设备等)。

  2. 直接操作内核数据
    可以访问操作系统内核的所有数据结构和内存区域(如进程控制块 PCB、页表、内核栈等)。

  3. 负责核心功能
    操作系统的核心任务(如进程调度、内存分配、文件系统管理、处理硬件中断等)必须在 kernel 态完成,因为这些任务需要最高权限。

--用户态

用户态是 CPU 的低权限运行模式,应用程序(如浏览器、文档编辑器、游戏等)在此模式下运行。

核心特点:
  1. 权限受限
    不能直接访问硬件资源,也不能执行特权指令。例如,应用程序不能直接读写硬盘,必须通过操作系统内核提供的接口(系统调用)间接完成。

  2. 只能访问用户空间
    应用程序只能访问自己的内存空间(用户空间),无法直接访问内核的内存空间(内核空间),避免了应用程序误操作或恶意破坏内核数据。

  3. 依赖系统调用与内核交互
    当应用程序需要执行高权限操作(如读写文件、网络通信)时,必须通过 “系统调用” 切换到内核态,由内核完成操作后再返回用户态。

--内核态与用户态转换

应用程序运行在用户态期间,可能需要执行高权限操作(例如读写文件、网络通信等),此时就需要切换到内核态然后执行完高阶权限操作后再次回到用户态:

        1.用户态 → 内核态

  • 触发方式:系统调用(如read()write())、硬件中断(如键盘按键、网络数据包到达)、异常(如内存访问越界、除零错误)。
  • 切换过程:CPU 保存当前用户态的执行上下文(如寄存器数据、程序计数器),加载内核态的上下文,进入内核程序执行。

        2.内核态 → 用户态

  • 当内核完成请求(如系统调用执行完毕)或处理完中断 / 异常后,会恢复用户态的上下文,CPU 切换回用户态,继续执行应用程序。

这样切换有什么好处?或者说内核态用户态有什么好处?

安全性上

隔离了应用程序和系统内核,防止程序篡改内核数据

整体运行上(包括操作系统和应用程序)

应用程序和内核的隔离,使得一个应用程序崩溃后,不会影响操作系统,使得操作系统可以干预崩溃和保证整体的正常运行

http://www.lryc.cn/news/586882.html

相关文章:

  • MongoDB对接SpringBoot【大数据存储】
  • ref 和 reactive
  • https交互原理
  • [Subtitle Edit] 字幕格式处理 | .Net依赖管理(NuGet)
  • Python----OpenCV(图像分割——彩色图像分割,GrabCut算法分割图像)
  • LeetCode--44.通配符匹配
  • Mybatis 两级缓存可能导致的问题
  • Java4种设计模式详解(单例模式、工厂模式、适配器模式、代理模式)
  • 笔记/sklearn中的数据划分方法
  • 赛力斯6月新能源汽车销量46086辆,同比增长4.44%
  • JavaScript加强篇——第九章 正则表达式高级应用(终)
  • Linux编程:6、进程通信-信号量与共享内存
  • OpenLayers 入门指南【二】:坐标系与投影转换
  • linux进程信号II
  • Node.js特训专栏-实战进阶:16. RBAC权限模型设计
  • 基于YOLOv7的改进模型:集成Swin Transformer和ASFF模块
  • 26-计组-数据通路
  • 【软件开发】使用 Spring WebFlux 进行请求校验
  • iOS ish app 打印时间
  • HJ8 合并表记录 10:35
  • Vue中的render()函数
  • 【LeetCode数据结构】单链表的应用——反转链表问题、链表的中间节点问题详解
  • 为什么要有延时回调?
  • 【实证分析】上市公司绿色战略数据集(2000-2023年)
  • 如何设计一个合理的 Java Spring Boot 项目结构
  • C++ 强制类型转换
  • 【读书笔记】《C++ Software Design》第六章深入剖析 Adapter、Observer 和 CRTP 模式
  • 开机自动启动同花顺,并设置进程优先级为高
  • Linux驱动开发1:设备驱动模块加载与卸载
  • 【Linux学习笔记】认识信号和信号的产生