内核态(Kernel Mode)与用户态(User Mode)
内核态: CPU可以访问内存所有数据, 包括外围设备, 例如硬盘, 网卡. CPU也可以将自己从一个程序切换到另一个程序
用户态: 只能受限的访问内存, 且不允许访问外围设备. 占用CPU的能力被剥夺, CPU资源可以被其他程序获取
为什么要有用户态和内核态
由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等级 -- 用户态 和 内核态
用户态与内核态的切换
所有用户程序都是运行在用户态的, 但是有时候程序确实需要做一些内核态的事情, 例如从硬盘读取数据, 或者从键盘获取输入等. 而唯一可以做这些事情的就是操作系统, 所以此时程序就需要先操作系统请求以程序的名义来执行这些操作.
这时需要一个这样的机制: 用户态程序切换到内核态, 但是不能控制在内核态中执行的指令
这种机制叫系统调用, 在CPU中的实现称之为陷阱指令(Trap Instruction)
他们的工作流程如下:
- 用户态程序将一些数据值放在寄存器中, 或者使用参数创建一个堆栈(stack frame), 以此表明需要操作系统提供的服务.
- 用户态程序执行陷阱指令
- CPU切换到内核态, 并跳到位于内存指定位置的指令, 这些指令是操作系统的一部分, 他们具有内存保护, 不可被用户态程序访问
- 这些指令称之为陷阱(trap)或者系统调用处理器(system call handler). 他们会读取程序放入内存的数据参数, 并执行程序请求的服务
- 系统调用完成后, 操作系统会重置CPU为用户态并返回系统调用的结果
转载于:https://www.cnblogs.com/zemliu/p/3695503.html
内核态(Kernel Mode)与用户态(User Mode)相关推荐
- java运行在用户态_理解Linux用户态和内核态
Linux整体架构图 我们先来看一张Linux整体架构图. 系统调用 系统调用时操作系统的最小功能单位.根据不同的应用场景,不同的Linux发行版本提供的系统调用数量也不尽相同,大致在240-35 ...
- TCP/IP协议栈到底是内核态的好还是用户态的好?
"TCP/IP协议栈到底是内核态的好还是用户态的好?"这根本就是一个错误的问题,问题的根源在于,干嘛非要这么刻意地去区分什么内核态和用户态. 引子 为了不让本文成为干巴巴的说教,在 ...
- Linux内核笔记--内存管理之用户态进程内存分配
内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...
- Linux用户态协议栈好处,关于用户态协议栈的思考
一直以来我一直以为操作系统内核是高大上的东西,但是实际上用户态的应用才是! 上周的一次技术交流中,一家网络加速卡厂商声称他们的协议栈是用户态的协议栈,用来提高性能,我对其产品直接就泄了气,然而会后,我 ...
- Linux 操作系统原理 — 内核态与用户态
目录 文章目录 目录 Linux 的内核态与用户态 系统调用(System Call) Shell 用户态和内核态的切换 进程的用户空间和内核空间的内存布局 内核空间 用户空间 Linux 的内核态与 ...
- 内核态与用户态的区别
原文链接:https://www.cnblogs.com/gizing/p/10925286.html 1.操作系统需要两种CPU状态 内核态(Kernel Mode):运行操作系统程序,操作硬件 用 ...
- Linux内核态之间进程通信,内核态和用户态通信(二)--实现
本文主要使用netlink套接字实现中断环境与用户态进程通信. 系统环境:基于linux 2.6.32.27 和 linux 3.16.36 Linux内核态和用户态进程通信方法的提出和实现 用户上下 ...
- Linux用户态与内核态通信的几种方式(待完善)
文章目录 1. 内核启动参数 2.模块参数与sysfs 3.sysctl 4.系统调用 5.netlink 6. procfs(/proc) 7.seq_file 8.debugfs 9.relayf ...
- 一文弄懂printf函数从用户态到内核态的执行流程
目录 1.简介 2.示例代码 3.程序执行初探 4.用户态处理流程 5.内核态处理流程 5.1. 软中断处理 5.2 系统调用返回 5.3 系统调用处理 5.4 stdout重定向到console 5 ...
最新文章
- 微信小程序界面跳转方法
- bzoj2458: [BeiJing2011]最小三角形
- 期末微积分考试试题求解 :利用python求解
- Dubbo入门(2) - 简单实践
- python计算生态的命名_Python计算生态之random库
- mysql的隔离级别_MySQL的四种事务隔离级别
- 【采用】【风险管理】金融业务风控相关框架(宝藏)
- OpenCV检测计算并匹配BRISK和AORB KAZE描述的实例(附完整代码)
- jsonp跨域读取cookie
- Visual studio 2005 恢復默認設置的方法
- Intel 64/x86_64/IA-32/x86处理器 - 通用指令(1) - 数据传输指令
- jQuery最核心的基础设施之一——数据缓存模块进化史
- pycharm 如何设置方法调用字体颜色
- 手机伪原创视频处理工具 视频md5修改器ios
- 使用FFmpeg进行摄像头视频采集
- UE4 Spline
- macbook黑屏_Mac Book电脑黑屏开不了机三种解决方法
- 计算机组装配置(Win10蓝屏错误代码大全详解)
- 烏托邦:起源魔法圖案攻略
- 计算机组成原理——系统总线的特性及其应用
热门文章
- linux webshell 页面管理,instantbox:30s内快速搭建可通过webshell管理的Linux系统
- php链接mysql编码错误_php 操作 mysql 数据库 编码 错误
- mysql hammerdb,[料理佳餚] 用 HammerDB 來執行資料庫 TPC-C 效能量測
- echart 高度 不用 不撑满_注意厨房台面高度及细节 装出省心舒服 装出事半功倍...
- linux用户开放crontab权限,linux – / etc / crontab权限
- 有ul没有字html,HTML ul 标签
- java 二叉树迭代器_C,为二叉树实现自定义迭代器(长)
- matlab melbankm,Matlab v_melbankm函数参数详解(英文附例)
- jboss mysql驱动目录_找不到mysql.jdbc.Driver – MySQL,JBoss
- 西昌学院计算机,西昌学院