什么是用户态和内核态的区别_内核态和用户态的概念

什么是用户态和内核态的区别_内核态和用户态的概念什么是用户态和内核态从图上我们可以看出来通过系统调用将Linux整个体系分为用户态和内核态(或者说内核空间和用户空间)。那内核态到底是什么呢?其实从本质上说就是我们所说的内核,它是一种特殊的软件程序,特殊在哪儿呢?控制计算机的硬件资源,例如协调CPU资源,分配内存资源,并且提供稳定的环境供应用程序运行。用户态就是提供应用程序运行的空间,为了使应用程序访问到内核管理的资源例如CPU,内存,I/O。内核必须提供一组通用的访问接口,这些接口就叫系统调用。为什么要区分内核态和用户态往往我们的系统的资源是

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

什么是用户态和内核态

在这里插入图片描述
从图上我们可以看出来通过系统调用将Linux整个体系分为用户态和内核态(或者说内核空间和用户空间)。
那内核态到底是什么呢?其实从本质上说就是我们所说的内核,它是一种特殊的软件程序,特殊在哪儿呢?控制计算机的硬件资源,例如协调CPU资源分配内存资源,并且提供稳定的环境供应用程序运行。

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

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

往往我们的系统的资源是固定的,例如内存2G,CPU固定,磁盘2TB,网络接口固定。所以就需要操作系统对资源进行有效的利用。假设某个应用程序过分的访问这些资源,就会导致整个系统的资源被占用,如果不对这种行为进行限制和区分,就会导致资源访问的冲突。所以,Linux的设计的初衷:给不同的操作给与不同的“权限”。Linux操作系统就将权限等级分为了2个等级,分别就是内核态和用户态。

各位有没有发现,前面讲了这么多内核态和用户态什么不同,其实用一句话就能概括:它们权限不同。用户态的进程能够访问的资源受到了极大的控制,而运行在内核态的进程可以“为所欲为”。一个进程可以运行在用户态也可以运行在内核态,那它们之间肯定存在用户态和内核态切换的过程。打一个比方:C库接口malloc申请动态内存,malloc的实现内部最终还是会调用brk()或者mmap()系统调用来分配内存。

如何从用户态进入内核态

  • 系统调用:这是用户态进程主动要求切换到内核态的一种方式。用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作。例如fork()就是执行了一个创建新进程的系统调用。系统调用的机制和新是使用了操作系统为用户特别开放的一个中断来实现,所以系统调用本身就是中断,但是软件中断,跟硬中断不同。
  • 异常:如果当前进程运行在用户态,如果这个时候发生了异常事件,就会触发切换。例如:缺页异常。
  • 外设中断:当外设完成用户的请求时,会向CPU发送中断信号。这时CPU会暂停执行下一条即将要执行的指令而转到与中断信号对应的处理程序去执行,如果前面执行的指令时用户态下的程序,那么转换的过程自然就会是 由用户态到内核态的切换。如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后边的操作等。

这三种方式是系统在运行时由用户态切换到内核态的最主要方式,其中系统调用可以认为是用户进程主动发起的,异常和外围设备中断则是被动的。从触发方式上看,切换方式都不一样,但从最终实际完成由用户态到内核态的切换操作来看,步骤有事一样的,都相当于执行了一个中断响应的过程。系统调用实际上最终是中断机制实现的,而异常和中断的处理机制基本一致。

转载自:https://zhuanlan.zhihu.com/p/69554144
https://blog.csdn.net/qq_39823627/article/details/78736650

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192939.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 授权使用微信登陆第三方_微信图标改成WeChat

    授权使用微信登陆第三方_微信图标改成WeChat第三方平台系列文章,今天终于又开始更新了,今天继续学习微信(wechat)授权第三方登录一、准备工作1、申请微信公众测试号由于我们是个人开发者,我们需要去注册申请一个微信公众平台的测试号https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login我们使用微信扫码登录后,我们可以拿到appID和appsecret2、关注公众测试号3、配置回调域名在“网页服务”中找到“网页账号”,修改“网页授权获取用户基本信息”接口的

    2025年8月19日
    4
  • 网站系统开发需要掌握的技术有哪些_网页开发需要学什么

    网站系统开发需要掌握的技术有哪些_网页开发需要学什么1、JDBC技术在JavaWeb应用开发中,数据库管理系统(RDBMS)的使用是不可缺少的。JDBC(JavaDatabaseConnectivity)是一种用于执行SQL语句的Ja

    2022年8月2日
    8
  • 执行python程序的两种方式

    执行python程序的两种方式执行python程序的两种方式交互式python是高级(解释型)语言,写一句执行一句。命令行式python和python解释器是一种东西,我们说的打开python就是打开python解释器。

    2022年7月5日
    23
  • django模型数据类型_多属性决策模型

    django模型数据类型_多属性决策模型模型中常用字段字段说明AutoField一般不需要使用这个类型,自增长类型,数据表的字段类型为整数,长度为11位BigAutoField自增长类型,数据表的字段类型为bigint,长度为2

    2022年7月29日
    9
  • 这些Java的“武功秘籍”不是用来收藏的![通俗易懂]

    点击上方☝,轻松关注!及时获取有趣有料的技术文章在金庸的武侠世界里,有太多的武功绝学和武林秘籍,很多江湖人士为了得到一本武功秘籍而争的你死我亡,可以想象武功秘籍是多么的重要,获得一本失传的武功,并加以修炼,或许就可以称霸江湖,号令中原。(图片来源网络,见水印)在Java编程的世界中,也同样有很多“武功秘籍”,这些武功秘籍散落在不同的地方,很多出自大神之手!…

    2022年2月28日
    37
  • roc曲线的意义_Pre / Rec / ROC / PR「建议收藏」

    roc曲线的意义_Pre / Rec / ROC / PR「建议收藏」Precision和Recall值是既矛盾又统一的两个指标,为了提高Precision值,分类器需要尽量在“更有把握”时(即,提高分类阈值!)才把样本预测为正样本,但此时往往会因为过于保守而漏掉很多“没有把握”的正样本,导致Recall值降低。ROC(ReceiverOperatorCharacteristic)曲线被广泛应用于二分类问题中来评估分类器的可信度,但是当处理一…

    2022年5月13日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号