java用户态和内核态
发布日期:2021-07-20 20:53:43 浏览次数:16 分类:技术文章

本文共 758 字,大约阅读时间需要 2 分钟。

在<深入理解java虚拟机>这本书上多次看到用户态和内核态两个名词, 虽然大概能明白意思. 但对于两者具体的定义和区别还是比较, 特此查阅之后记录.

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

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

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

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

用户态与内核态的切换

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

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

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

他们的工作流程如下:

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

转载地址:https://blog.csdn.net/liao0801_123/article/details/85888657 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:mysql for update 使用说明
下一篇:《深入理解Java虚拟机》--阅读笔记

发表评论

最新留言

表示我来过!
[***.240.166.169]2023年03月04日 22时37分44秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章

chrome网页自动化插件_Automation | 让网页在 Safari 和 Chrome 之间穿梭 2019-12-02 01:43:36
c++ string split_闲话Python之砍瓜切菜split() 2019-12-02 01:43:37
电脑同时安装python2和3_电脑上同时安装Python2和Python3 2019-12-02 01:43:37
python timedelta_Python使用笔记:时间的运算timedelta 2019-12-02 01:43:37
python对比php开发web_django学习系列——python和php对比 2019-12-02 01:43:37
idea启动日志在哪里_艹,我的日志被Intellij IDEA 控制台给“吃”了! 2019-12-02 01:43:37
python 中不属于数据挖掘分析模块的是()_大工19秋《数据挖掘》在线作业3(参考答案)... 2019-12-02 01:43:38
python sqlserver 数据操作_python上手--python操作数据库 2019-12-02 01:43:35
80端口攻击_使用 ZoomEye 寻找 APT 攻击的蛛丝马迹 2019-12-02 01:43:35
leetcode c程序总提示主函数_Python练手:一行Python解Leetcode习题 2019-12-02 01:43:35
python多线程实现同时下载_Python实现多线程下载 2019-12-02 01:43:36
linux sleeping进程多_你知道Linux进程的睡眠和唤醒操作? 2019-12-02 01:43:36
fastcopy会损坏硬盘_绚丽多彩 卓有不凡 三星移动固态硬盘T5金属红新品评测 2019-12-02 01:43:36
git 修改密码_在windows中利用gitblit搭建git服务端 2019-12-02 01:43:36
gitlens突然不显示了_监控画面突然没有了怎么办?监控画面不显示了? 2019-12-02 01:43:36
python threading join_浅谈Python中threading join和setDaemon用法及区别说明 2019-12-02 01:43:34
工业循环冷却水处理设计规范_循环冷却水系统及其水处理 2019-12-02 01:43:34
c++ 多线程 类成员函数_C++11多线程 2019-12-02 01:43:34
vb6 怎么把一个数组的 0 值 去掉_解决逆向查找问题?VLOOKUP、CHOOSE、IF,索引数组,轻松解决... 2019-12-02 01:43:34
sqlite3 加密版本 下载_制作Sqlcipher+SM4加密的framework包(OC) 2019-12-02 01:43:34