用户态和内核态的简单理解「建议收藏」

用户态和内核态的简单理解「建议收藏」文章目录linux基础系统调用和库函数的区别什么是用户态和内核态用户态和内核态的相互转换linux基础linux的kernel内核外是系统调用,系统调用外是shell、库函数系统调用和库函数的区别内核:屏蔽了调用各硬件资源的细节系统调用:内核提供给用户调用的接口,但系统调用的可移植性差移植性差的原因:windows、linux内核的系统调用是不同的,比如:同一个功能提供给用户的函数名、参数都不相同,会出现从一个系统移植到另一个系统无法正常运行。库函数:为了解决系统调用移植新差的问题,同时封

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

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

linux基础

linux的kernel内核外是系统调用,系统调用外是shell、库函数,而应用程序则在最外层
在这里插入图片描述

系统调用和库函数的区别

  • 内核:屏蔽了调用各硬件资源的细节
  • 系统调用:内核提供给用户调用的接口,但系统调用的可移植性差
    移植性差的原因:windows、linux内核的系统调用是不同的,比如:同一个功能提供给用户的函数名、参数都不相同,会出现从一个系统移植到另一个系统无法正常运行。
  • 库函数:为了解决系统调用移植新差的问题,同时封装windows和linux系统调用,对用户提供一个的函数(接口)。
  • 系统调用在内核地址空间执行,而库函数是在用户地址空间调用。

在这里插入图片描述

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

在CPU指令中,有些指令是非常危险的,如果错用将导致系统崩溃,比如清内存、设置时钟等,所以CPU将指令分为特权指令和非特权指令。对于危险指令,只允许操作系统及其相关模块使用,普通应用程序只能使用不危险的指令。

  • Intel的CPU将特权等级分为4个级别:Ring0~Ring3,而Linux使用Ring3级别运行用户态,Ring0作为内核态。
  • 操作系统启动时对内存进行了划分,操作系统的数据都是存放于内核空间的,用户进程的数据是存放于用户空间的。处于用户态级别的程序只能访问用户空间,而处于内核态级别的程序可以访问用户空间和内核空间。
  • 当一个进程执行系统调用而陷入内核代码中执行时,我们就称进程处于内核态

用户态和内核态的切换耗费时间的原因

内核为上层应用使用CPU、存储、IO等硬件资源提供了接口,即系统调用,如果一个应用程序需要用到内核资源,就需执行系统调用的相关语句。
(1)当执行系统调用时,首先会保存现场,然后通过系统调用到内核态执行,最后内核态变为用户态执行用户程序时,需要恢复用户态的现场。
在进入内核的时候需要保存用户态的寄存器,在内核态返回用户态的时候会恢复这些寄存器的内容。

(2)每个线程都有两个栈:用户栈和内核栈,当执行系统调用时,线程就会由用户栈切换到内核栈,而内核代码对用户不信任,需要进行额外的检查。
Linux | 为什么用户态和内核态的切换耗费时间?

哪些情况会出出现用户态和内核态的切换

  • 线程间的切换(上下文):线程上下文切换时,前一个线程的线程线程(切换前最后时刻的数据和指令)会被保存到内核中,而切换回来时需要从内核空间中读取数据恢复现场。
  • Syncronized锁的获取和释放:使用内核中monitor对象

用户态切换到内核态的三种方式

  • 当程序在用户态需要申请外部资源(如声卡、网卡、U盘、磁盘)时,需要从用户态切换到内核态,主要有3种情况需要申请外部资源:
    (1)系统调用
    举例: 创建线程时,需要通过pthread函数库调用内核来创建
    (2)中断
    举例: 当外围设备完成用户请求的操作后,会想CPU发送中断信号。这时CPU会暂停执行下一条指令(用户态)转而执行与该中断信号对应的中断处理程序
    (3)异常:某些异常如缺页异常只能由内核进行处理
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • hadoop启动HDFS命令「建议收藏」

    hadoop启动HDFS命令「建议收藏」启动命令:/hadoop/sbin/start-dfs.sh停止命令:/hadoop/sbin/stop-dfs.sh

    2022年10月5日
    3
  • Android UI设计常用尺寸及基本知识

    Android UI设计常用尺寸及基本知识屏幕尺寸指实际的物理尺寸,为屏幕对角线的测量。为了简单起见,Android把实际屏幕尺寸分为四个广义的大小:小,正常,大,特大。像素(PX)代表屏幕上一个物理的像素点代表屏幕上一个物理的像素点。屏幕密度为解决Android设备碎片化,引入一个概念DP,也就是密度。指在一定尺寸的物理屏幕上显示像素的数量,通常指分辨率。为了简单起见,Android

    2022年6月15日
    37
  • 无锁编程CAS[通俗易懂]

    无锁编程CAS[通俗易懂]前言CAS(CompareAndSwap,比较并交换),要说CAS是无锁编程,多多少少有些“标题党”的感觉。因为CAS根据其设计思想,可以划分为乐观锁。不同于synchronized关键字,synchronized实现的是悲观锁。我第一次听说乐观锁和悲观锁的时候有点震惊:一把锁我还得知道它乐不乐观?乐不乐观?一把锁难道还有情绪?实际上乐观锁和悲观锁是基于线程并发竞争的角度来说的,悲观锁就是…

    2022年6月10日
    42
  • 一文读懂宏基因组分析套路

    一文读懂宏基因组分析套路很多亲人感觉宏基因组的分析结果内容种类太多,根本学不过来。其实本质上并不复杂,只分为两类:物种组成和功能组成两大类,这是核心结果;再加上开头系统描述和结尾的讨论比较。通常会出现固定套路的4部分结构。今天就从之前解决的1篇nature,2篇science,入手来总结宏基因组分析的基本思路。只有分析思路清楚,结果才更容易説清楚。文章思路和结果文章分析思路:整体概述——物种组成——功…

    2022年6月11日
    42
  • 学习笔记3–车载传感器之毫米波雷达和超声波雷达

    学习笔记3–车载传感器之毫米波雷达和超声波雷达毫米波雷达和超声波雷达。

    2025年10月26日
    4
  • OpenProcessToken这个函数用法[通俗易懂]

    OpenProcessToken这个函数用法[通俗易懂] GetCurrentProcessID得到当前进程的IDOpenProcessToken得到进程的令牌句柄LookupPrivilegeValue查询进程的权限AdjustTokenPrivileges调整令牌权限要对一个任意进程(包括系统安全进程和服务进程)进行指定了写相关的访问权的OpenProcess操作,只要当前进程具有SeDeDebug权限就可以了。要是一个用户是Admi

    2022年6月25日
    25

发表回复

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

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