内核态: CPU可以访问内存所有数据, 包括外围设备, 例如硬盘, 网卡. CPU也可以将自己从一个程序切换到另一个程序

用户态: 只能受限的访问内存, 且不允许访问外围设备. 占用CPU的能力被剥夺, CPU资源可以被其他程序获取

为什么要有用户态和内核态

由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等级 -- 用户态内核态

用户态与内核态的切换

所有用户程序都是运行在用户态的, 但是有时候程序确实需要做一些内核态的事情, 例如从硬盘读取数据, 或者从键盘获取输入等. 而唯一可以做这些事情的就是操作系统, 所以此时程序就需要先操作系统请求以程序的名义来执行这些操作.

这时需要一个这样的机制: 用户态程序切换到内核态, 但是不能控制在内核态中执行的指令

这种机制叫系统调用, 在CPU中的实现称之为陷阱指令(Trap Instruction)

他们的工作流程如下:

  1. 用户态程序将一些数据值放在寄存器中, 或者使用参数创建一个堆栈(stack frame), 以此表明需要操作系统提供的服务.
  2. 用户态程序执行陷阱指令
  3. CPU切换到内核态, 并跳到位于内存指定位置的指令, 这些指令是操作系统的一部分, 他们具有内存保护, 不可被用户态程序访问
  4. 这些指令称之为陷阱(trap)或者系统调用处理器(system call handler). 他们会读取程序放入内存的数据参数, 并执行程序请求的服务
  5. 系统调用完成后, 操作系统会重置CPU为用户态并返回系统调用的结果

转载于:https://www.cnblogs.com/zemliu/p/3695503.html

内核态(Kernel Mode)与用户态(User Mode)相关推荐

  1. java运行在用户态_理解Linux用户态和内核态

    Linux整体架构图 我们先来看一张Linux整体架构图. 系统调用 ​ 系统调用时操作系统的最小功能单位.根据不同的应用场景,不同的Linux发行版本提供的系统调用数量也不尽相同,大致在240-35 ...

  2. TCP/IP协议栈到底是内核态的好还是用户态的好?

    "TCP/IP协议栈到底是内核态的好还是用户态的好?"这根本就是一个错误的问题,问题的根源在于,干嘛非要这么刻意地去区分什么内核态和用户态. 引子 为了不让本文成为干巴巴的说教,在 ...

  3. Linux内核笔记--内存管理之用户态进程内存分配

    内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...

  4. Linux用户态协议栈好处,关于用户态协议栈的思考

    一直以来我一直以为操作系统内核是高大上的东西,但是实际上用户态的应用才是! 上周的一次技术交流中,一家网络加速卡厂商声称他们的协议栈是用户态的协议栈,用来提高性能,我对其产品直接就泄了气,然而会后,我 ...

  5. Linux 操作系统原理 — 内核态与用户态

    目录 文章目录 目录 Linux 的内核态与用户态 系统调用(System Call) Shell 用户态和内核态的切换 进程的用户空间和内核空间的内存布局 内核空间 用户空间 Linux 的内核态与 ...

  6. 内核态与用户态的区别

    原文链接:https://www.cnblogs.com/gizing/p/10925286.html 1.操作系统需要两种CPU状态 内核态(Kernel Mode):运行操作系统程序,操作硬件 用 ...

  7. Linux内核态之间进程通信,内核态和用户态通信(二)--实现

    本文主要使用netlink套接字实现中断环境与用户态进程通信. 系统环境:基于linux 2.6.32.27 和 linux 3.16.36 Linux内核态和用户态进程通信方法的提出和实现 用户上下 ...

  8. Linux用户态与内核态通信的几种方式(待完善)

    文章目录 1. 内核启动参数 2.模块参数与sysfs 3.sysctl 4.系统调用 5.netlink 6. procfs(/proc) 7.seq_file 8.debugfs 9.relayf ...

  9. 一文弄懂printf函数从用户态到内核态的执行流程

    目录 1.简介 2.示例代码 3.程序执行初探 4.用户态处理流程 5.内核态处理流程 5.1. 软中断处理 5.2 系统调用返回 5.3 系统调用处理 5.4 stdout重定向到console 5 ...

最新文章

  1. 微信小程序界面跳转方法
  2. bzoj2458: [BeiJing2011]最小三角形
  3. 期末微积分考试试题求解 :利用python求解
  4. Dubbo入门(2) - 简单实践
  5. python计算生态的命名_Python计算生态之random库
  6. mysql的隔离级别_MySQL的四种事务隔离级别
  7. 【采用】【风险管理】金融业务风控相关框架(宝藏)
  8. OpenCV检测计算并匹配BRISK和AORB KAZE描述的实例(附完整代码)
  9. jsonp跨域读取cookie
  10. Visual studio 2005 恢復默認設置的方法
  11. Intel 64/x86_64/IA-32/x86处理器 - 通用指令(1) - 数据传输指令
  12. jQuery最核心的基础设施之一——数据缓存模块进化史
  13. pycharm 如何设置方法调用字体颜色
  14. 手机伪原创视频处理工具 视频md5修改器ios
  15. 使用FFmpeg进行摄像头视频采集
  16. UE4 Spline
  17. macbook黑屏_Mac Book电脑黑屏开不了机三种解决方法
  18. 计算机组装配置(Win10蓝屏错误代码大全详解)
  19. 烏托邦:起源魔法圖案攻略
  20. 计算机组成原理——系统总线的特性及其应用

热门文章

  1. linux webshell 页面管理,instantbox:30s内快速搭建可通过webshell管理的Linux系统
  2. php链接mysql编码错误_php 操作 mysql 数据库 编码 错误
  3. mysql hammerdb,[料理佳餚] 用 HammerDB 來執行資料庫 TPC-C 效能量測
  4. echart 高度 不用 不撑满_注意厨房台面高度及细节 装出省心舒服 装出事半功倍...
  5. linux用户开放crontab权限,linux – / etc / crontab权限
  6. 有ul没有字html,HTML ul 标签
  7. java 二叉树迭代器_C,为二叉树实现自定义迭代器(长)
  8. matlab melbankm,Matlab v_melbankm函数参数详解(英文附例)
  9. jboss mysql驱动目录_找不到mysql.jdbc.Driver – MySQL,JBoss
  10. 西昌学院计算机,西昌学院