文章目录

  • 用户态与内核态
    • 用户态与内核态的概念
      • 用户态
      • 内核态
      • 为什么要区分内核态和用户态
    • 用户态与内核态的区别
    • 用户态切换到内核态的方式
    • 用户态与内核态空间分配

用户态与内核态

用户态与内核态的概念

用户态

用户态:也叫用户空间,是用户进程/线程所在的区域。主要用于执行用户程序。

用户态就是提供应用程序运行的空间,为了使应用程序访问到内核管理的资源例如CPU,内存,I/O。内核必须提供一组通用的访问接口,这些接口就叫系统调用。

系统调用是操作系统的最小功能单位。根据不同的应用场景,不同的Linux发行版本提供的系统调用数量也不尽相同,大致在240-350之间。这些系统调用组成了用户态跟内核态交互的基本接口

内核态

内核态:也叫内核空间,是内核进程/线程所在的区域。主要负责运行系统、硬件交互。

内核态其实从本质上说就是内核,它是一种特殊的软件程序,控制计算机的硬件资源,例如协调,CPU资源,分配内存资源,并且提供稳定的环境供应用程序运行

为什么要区分内核态和用户态

实现保护机制。防止用户进程误操作或者是恶意破坏系统。

内核态类似于C++的私有成员,只能在类内访问,用户态类似于公有成员,可以随意访问

所以说操作系统在执行用户程序时,主要工作在用户态,只有在其执行没有权限完成的任务时才会切换到内核态。

用户态与内核态的区别

内核态:运行的代码不受任何限制,CPU可以执行任何指令。

用户态:运行的代码需要受到CPU的很多检查,不能直接访问内核数据和程序,也就是说不可以像内核态线程一样访问任何有效地址。

用户态切换到内核态的方式

1、系统调用(主动)

由于用户态无法完成某些任务,用户态会请求切换到内核态,内核态通过为用户专门开放的中断完成切换。

系统调用本身就是中断,但是是软件中断,跟硬中断不同

2、异常(被动)

在执行用户程序时出现某些不可知的异常,会从用户程序切换到内核中处理该异常的程序,也就是切换到了内核态。例如:缺页异常。

3、外围设备中断(被动)

外围设备发出中断信号,当中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进程处理,如果中断之前CPU执行的是用户态程序,就相当于从用户态向内核态的切换。

用户态与内核态空间分配

对 32 位操作系统而言,它的寻址空间(虚拟地址空间,或叫线性地址空间)为 4G(2的32次方)。也就是说一个进程的最大地址空间为 4G。操作系统的核心是内核(kernel),它独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证内核的安全,现在的操作系统一般都强制用户进程不能直接操作内核。具体的实现方式基本都是由操作系统将虚拟地址空间划分为两部分,一部分为内核空间,另一部分为用户空间。针对 Linux 操作系统而言,最高的 1G 字节点(从虚拟地址 0xC0000000 到 0xFFFFFFFF)由内核使用,称为内核空间。而较低的 3G 字节点(从虚拟地址 0x00000000 到 0xBFFFFFFF)由各个进程使用,称为用户空间。

对上面这段内容我们可以这样理解:

每个进程的 4G 地址空间中,最高 1G 都是一样的,即内核空间。只有剩余的 3G 才归进程自己使用。换句话说就是, 最高 1G 的内核空间是被所有进程共享的!

现代的操作系统大都通过内核空间和用户空间的设计来保护操作系统自身的安全性和稳定性

所以说啊,这篇里的概念原理其实都是一种思想,每个操作系统都不一样,一般就是拿Linux说。

操作系统:用户态与内核态相关推荐

  1. 操作系统(概述、组成)、用户态、内核态

    1. 概述 1.1 基本特征 1.1.1 并发 并发是指宏观上在一段时间内能同时运行多个程序,而并行则指同一时刻能运行多个指令. 并行需要硬件支持,如多流水线或者多处理器. 操作系统通过引入进程和线程 ...

  2. Java程序员需要掌握的计算机底层知识(二):操作系统、内核、用户态与内核态、系统调用的执行过程

    操作系统 启动过程 通电 -> bios uefi 工作 -> 自检 -> 到硬盘固定位置加载bootloader -> 读取可配置信息 -> CMOS CMOS 用来存 ...

  3. 操作系统 | 用户态和内核态的切换(中断、系统调用与过程(库函数)调用)

    文章目录 中断 过程调用 系统调用 过程调用和系统调用的区别 中断 用户态.内核态之间的切换是怎么实现的? 用户态→内核态 是通过中断实现的.并且 中断是唯一途径 . 核心态→用户态 的切换是通过执行 ...

  4. 操作系统基础知识用户态和内核态的区别

    这节课给你带来了一道非常经典的面试题目:用户态线程和内核态线程有什么区别? 这是一个组合型的问题,由很多小问题组装而成,比如: 用户态和内核态是什么? 用户级线程和内核级线程是一个怎样的对应关系? 内 ...

  5. 操作系统中用户态和内核态(系统态)是什么?用户态如何变成内核态?

    用户态:当进程在执行用户自己的代码时,则称其处于用户态,这时cpu 访问资源有限,运行在用户态下的程序不能直接访问操作系统内核数据结构和程序. 内核态:当一个任务(进程)执行系统调用而陷入内核代码中执 ...

  6. 「操作系统」什么是用户态和内核态?为什么要区分

    「操作系统」什么是用户态和内核态?为什么要区分 参考&鸣谢 从根上理解用户态与内核态 程序员阿星 并发编程(二十六)内核态和用户态 Lovely小猫 操作系统之内核态与用户态 fimm 文章目 ...

  7. 操作系统~用户态进入内核态的方式(中断、异常、系统调用)

    中断与异常 中断的概念和作用 当中断发生时,CPU立即进入核心态 当中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理 对于不同的中断信号,会进行不同的处理 发生了中断,就意味着需要操 ...

  8. 操作系统用户态和内核态之间的切换过程

    操作系统用户态和内核态之间的切换过程 1. 用户态和内核态的概念区别 究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重 ...

  9. 操作系统用户态和内核态

    用户态和内核态 一. 用户态和内核态的概念? 二.为什么需要用户态和内核态? 三.用户态与内核态的切换? 四.用户态和内核态的详细介绍? 一. 用户态和内核态的概念? 内核态: CPU可以访问内存所有 ...

最新文章

  1. go 定义一个结构体并赋初始值_Go中必须谈论的四个迷点
  2. [GWCTF 2019]babyvm
  3. 基础练习 十进制转十六进制 C语言
  4. layui 子页面写弹出框覆盖父页面,以及给弹框中的表单赋值
  5. STM8学习笔记---定时器 TIM4功能实现
  6. AcWing 5. 多重背包问题 II(二进制优化)
  7. bilibili开源弹幕库UML类图
  8. 诺瓦-测试-面经(一面+二面)
  9. 电子书城系统设计与实现
  10. mit计算机33门课程_550多门免费在线编程和计算机科学课程,您可以在本年十月开始...
  11. fpga/嵌入式硬件初级工程师必备链接(不定时更新)
  12. 如何又快又好地写出优质PPT
  13. 论文推荐-计算机视觉
  14. 2017全国大学生电子设计竞赛个人总结--B题滚球控制系统
  15. python 正则表达式-匹配规则
  16. 数据库建表时, 没有成功创建表 No migrations to apply报错原因和解决方法
  17. Dayjs 时间比较
  18. ReactNative 滑动字母选择城市 以及搜索功能
  19. 大学站注入点(安全狗)
  20. MySQL一篇就够(详细)

热门文章

  1. 配置海康威视网络摄像头动态库方法
  2. 数学建模-层次分析模型
  3. 历时一个月!50+Vue经典面试题详解,值得收藏!
  4. EasyUI布局实战
  5. 这款上线6年火爆应用即将消失
  6. IDEA使用Tomcat出现`requested without authorization, you can copy URL and open it in browser to trust it
  7. 从cocos看国内自研的游戏引擎(转自腾讯新闻)
  8. 利用计算机控制,如何使用计算机控制遥控车
  9. 蓝牙设备的连接与配对
  10. Kubernetes中部署MySQL高可用集群