用户态与内核态之间切换详解

article/2025/11/10 17:36:51

用户空间和内核空间

用户程序有用户态内核态两种状态。用户态就是执行在用户空间中,不能直接执行系统调用。必须先切换到内核态,也就是系统调用的相关数据信息必须存储在内核空间中,然后执行系统调用。

操作硬盘等资源属于敏感操作,为了内核安全,用户线程不能直接调用。而是采用了操作系统内核提供了系统调用接口,用户线程通过系统调用来实现文件读写。所以直接与硬盘打交道的是操作系统内核。

操作系统将线程分为了内核态和用户态,当用户线程调用了系统调用的时候,需要将线程从用户态切换到内核态。

无论是操作系统内核程序还是用户程序在运行的时候都需要申请内存来保存运行状态,调用方法信息、程序代码、数据等信息。

操作系统将内存分为内核空间用户空间

内核空间中主要负责 操作系统内核线程以及用户程序系统调用

用户空间主要负责用户程序的非系统调用

内核空间用户空间拥有更高的操作级别,只有在内核空间中才可以调用操作硬件等核心资源。

操作系统将内存按1:3的比例分为了内核空间和用户空间,用户态的运行栈信息保存在用户空间中,内核态的运行栈信息保存在内核空间中。运行栈中保存了当前线程的运行信息,比如执行到了哪些方法,局部变量等。

当发生用户态和内核态之间的切换的时候,运行栈的信息发生了变化,对应的CPU中的寄存器信息也要发生变换。但是用户线程完成系统调用的时候,还是要切换回用户态,继续执行代码的。所以要将发生系统调用之前的用户栈的信息保存起来,也就是将寄存器中的数据保存到线程所属的某块内存区域。这就涉及到了数据的拷贝,同时用户态切换到内核态还需要安全验证等操作。所以用户态和内核态之间的切换是十分耗费资源的。

用户态切换到内核态

在这里插入图片描述

CPU中有一个标志字段,标志着线程的运行状态。用户态和内核态对应着不同的值,用户态为3,内核态为0.

每个线程都对应着一个用户栈和内核栈,分别用来执行用户方法和内核方法。
用户方法就是普通的操作。
内核方法就是访问磁盘、内存分配、网卡、声卡等敏感操作。

当用户尝试调用内核方法的时候,就会发生用户态切换到内核态的转变。

切换流程:
1、每个线程都对应这一个TCB,TCB中有一个TSS字段,存储着线程对应的内核栈的地址,也就是内核栈的栈顶指针。

在这里插入图片描述

2、因为从用户态切换到内核态时,首先用户态可以直接读写寄存器,用户态操作CPU,将寄存器的状态保存到对应的内存中,然后调用对应的系统函数,传入对应的用户栈的PC地址和寄存器信息,方便后续内核方法调用完毕后,恢复用户方法执行的现场。

3、将CPU的字段改为内核态,将内核段对应的代码地址写入到PC寄存器中,然后开始执行内核方法,相应的方法栈帧时保存在内核栈中。

4、当内核方法执行完毕后,会将CPU的字段改为用户态,然后利用之前写入的信息来恢复用户栈的执行。

从上述流程可以看出用户态切换到内核态的时候,会牵扯到用户态现场信息的保存以及恢复,还要进行一系列的安全检查,比较耗费资源。


http://chatgpt.dhexx.cn/article/XTdswcH1.shtml

相关文章

用户态和内核态 中断处理机制

操作系统 一、操作系统基础知识 1.1 用户态和内核态 1.1.1 定义:什么是用户态和内核态? Kernel 运行在超级权限模式(Supervisor Mode)下,所以拥有很高的权限。按照权限管理的原则,多数应用程序应该运行…

用户态和内核态:用户态线程和内核态线程有什么区别?

转载 文章来源于 拉钩教育 重学操作系统 林䭽 用户态和内核态:用户态线程和内核态线程有什么区别? 什么是用户态和内核态 Kernel 运行在超级权限模式(Supervisor Mode)下,所以拥有很高的权限。按照权限管理的原则&a…

什么是用户态和内核态

什么是用户态和内核态 从图上我们可以看出来通过系统调用将Linux整个体系分为用户态和内核态(或者说内核空间和用户空间)。 那内核态到底是什么呢?其实从本质上说就是我们所说的内核,它是一种特殊的软件程序,特殊在哪儿…

用户态和内核态之间的切换

用户态和内核态之间的切换 切换方式 从用户态到内核态切换可以通过三种方式,或者说会导致从用户态切换到内核态的操作: 系统调用,这个上面已经讲解过了,在我公众号之前的文章也有讲解过。其实系统调用本身就是中断,…

OS用户态和内核态

1、linux进程有4GB地址空间,如图所示: 3G-4G大部分是共享的,是内核态的地址空间。这里存放整个内核的代码和所有的内核模块以及内核所维护的数据。 2、特权级的概念: 对于任何操作系统来说,创建一个进程是核心功能。…

用户态和内核态区别

操作系统用户态和内核态之间的切换过程 1. 用户态和内核态的概念区别 究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能…

操作系统用户态和内核态之间的切换过程

操作系统用户态和内核态之间的切换过程 1. 用户态和内核态的概念区别 究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能和…

用户态和内核态的内存管理

内核态:cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序。 用户态:只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥…

CPU的用户态和内核态

内核从本质上看是一种软件——控制计算机的硬件资源 用户态和内核态也可以说是对应系统执行权限的一个分级 个人理解慎浅,多是参考别人的文章,日后工作之于在研究 文章目录 指令集一、用户态二、内核态三、用户态和内核态切换状态四、态切换的消耗4.1、上…

用户态和内核态切换

1. 切换方式 从用户态到内核态切换可以通过三种方式,或者说会导致从用户态切换到内核态的操作: 系统调用,这个上面已经讲解过了,在我公众号之前的文章也有讲解过。其实系统调用本身就是中断,但是软件中断&#xff0c…

计算机内核态和用户态,用户态和内核态的区别是什么

用户态和内核态的区别是,内核态运行操作系统程序,操作硬件,用户态运行用户程序;当程序运行在3级特权级上时,可以称之为运行在用户态,当程序运行在0级特权级上时,称之为运行在内核态。 本文操作环…

从根上理解用户态与内核态

欢迎来到操作系统系列,采用图解 大白话的形式来讲解,让小白也能看懂,帮助大家快速科普入门。 本篇文章开始探秘用户态与内核态,虽然一般面试不会问这个,但搞清楚这块,对我们理解整个计算机系统是及其有意…

详解内核态与用户态

介绍下内核态与用户态 内核态和用户态是操作系统中的两种不同的运行状态,它们的区别如下: 权限不同:内核态是操作系统拥有最高权限的运行状态,可以访问系统的所有资源,而用户态只能访问受限的资源。 系统调用&#x…

用户态和内核态的简单理解

文章目录 linux基础系统调用和库函数的区别为什么要区分用户态和内核态?用户态和内核态的切换耗费时间的原因哪些情况会出出现用户态和内核态的切换用户态切换到内核态的三种方式 linux基础 linux的kernel内核外是系统调用,系统调用外是shell、库函数&a…

度量学习和pytorch-metric-learning的使用

度量学习是学习一种特征空间的映射,把特征映射到具有度量属性的空间中,所谓度量属性是指在某种度量距离(可以是欧氏距离、余弦相似性等)下类内距离更小,类间距离更大。有了这种属性之后,就可以仅根据特征间…

深度度量学习 (metric learning deep metric learning )度量函数总结

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/qq_16234613/article/details/81210320 曼哈顿距离(CityBlockSimilarity) 同欧式距离相似&#x…

Multi-Scale Metric Learning for Few-Shot Learning(用于小样本学习的多尺度度量学习)

Abstract 本文提出了一种新的小样本学习方法,名字叫多尺度度量学习(multi-scale metric learning, MSML),能提取多尺度特征,学习样本间的多尺度关系,进行少镜头学习分类。提出了一种基于特征金字塔结构的多尺度特征嵌入方法&…

Metric Learning——度量学习

2018年04月10日 15:30:29 敲代码的quant 阅读数:1567 标签: 度量学习metric learning机器学习聚类 更多 个人分类: 机器学习 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/FrankieHel…

百面深度学习:基于度量学习的元学习模型

文章目录 Q1 元学习中非参数方法相比于参数方法的优点?Q2 如何用度量学习和注意力机制来改造基于最邻近的元学习方法? 更多基础知识可以查看前文内容 《百面深度学习》之元学习 基于度量学习(Metric Learning)的元学习方法&#…

行人重识别-度量学习

行人重识别-度量学习 前言 和前面介绍到的表征学习一样,度量学习也是基于全局特征学习的一种方法,且被广泛用于图像检索领域。不同于表征学习通过分类或者验证的方式,度量学习目的在于通过网络学习两张图片的相似度。在行人重识别问题上&am…