前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用户态、内核态

用户态、内核态

作者头像
收心
发布2022-11-14 16:42:34
7710
发布2022-11-14 16:42:34
举报
文章被收录于专栏:Java实战博客Java实战博客

随着学习的不断深入,用户态、内核态知识的缺失,也就暴露出来。不过好在,知道反省自己。于是今天将操作系统用户态、内核台研究透!

我们线程是程序运行的最小单位。我们Java进程使用线程操作的时候,本质还是底层原生操作系统级别的线程操作。比如Java调用阻塞、唤醒一个线程的时候,我们就需要在用户态、内核态之间切换线程的状态。

用户态、内核台都是CPU的状态,且有自己的专用内存空间

CPU从用户态切换内核态需要传递许多变量、参数给到内核。内核态会存储用户态的信息,当内核态在切换用户态的时候,才能使得用户态正常工作。

为什么区分用户态、内核态

操作系统需要限制不同程序之间的内存的访问能力,防止他们从别的程序获取内存数据。比如QQ使用了系统变量A,微信也用了这个变量,微信修改了A的值为B,QQ使用的时候,就会出现问题了。CPU就划分出两个权限等级:用户态、内核态

用户态

访问内存受限。不允许访问外置设备,无占用CPU的能力,也就是说用户态的线程会被别的程序占用。

内核态

访问内存所有数据。包括外置设备(硬盘、声卡、网卡),具备占用CPU的能力,也就是说能将自己从一个程序切换到另一个程序。

用户态、内核态的切换

我们的用户程序都是运行在用户态的。有些时候我们可能需要访问外置设备的内存数据,我们就需要从用户态切换到内核态了。

注意,既然用户态受限,我干脆直接使用内核态不就完了么?事实是,用户应用程序的内核态只能由用户态切换过来。

如何让触发用户态到内核态的切换?

1、系统调用

应用程序主动切换,比如:我们调用write文件,我们程序就会从用户态,切换到内核态对外置设备进行操作。

2、异常

我们代码出现了异常,就会触发内核的异常处理的相关程序

3、外围设备的中断(操作完毕)

我们都知道切换内核态的是为了访问外置设备,如果外置设备访问完毕,会向CPU发送中断信号。CPU识别后,就会从用户态切换到内核态去处理外置设备中断。

特殊说明: 以上文章,均是我实际操作,写出来的笔记资料,不会盗用别人文章!烦请各位,请勿直接盗用!转载记得标注来源!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 用户态、内核台都是CPU的状态,且有自己的专用内存空间
  • 为什么区分用户态、内核态
  • 用户态
  • 内核态
  • 用户态、内核态的切换
  • 如何让触发用户态到内核态的切换?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档