什么是用户态和内核态_进程的用户态和内核态

什么是用户态和内核态_进程的用户态和内核态要了解什么是用户态,什么是内核态,我们需要先了解什么是进程的用户空间和内核空间:Linux虚拟内存的大小为2^32(在32位的x86机器上),内核将这4G字节的空间分为两部分。最高的1G字节(从虚地址0xC0000000到0xFFFFFFFF)供内核使用,称为“内核空间”。而较低的3G字节(从虚地址0x00000000到0xBFFFFFFF),供各个进程使用,称为“用户空间”。也就是说,在这4G的…

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

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

要了解什么是用户态,什么是内核态,我们需要先了解什么是进程的用户空间和内核空间:

Linux虚拟内存的大小为2^32(在32位的x86机器上),内核将这4G字节的空间分为两部分。最高的1G字节(从虚地址0xC0000000到0xFFFFFFFF)供内核使用,称为“内核空间”。而较低的3G字节(从虚地址0x00000000到0xBFFFFFFF),供各个进程使用,称为“用户空间”。也就是说,在这4G的内存中,0-3G是给用户留下的用户空间,这段空间是各个进程独立,无法互相访问的,3-4G是进程的内核空间,每个进程可以通过系统调用进入内核,因此,Linux内核空间由系统内的所有进程共享。于是,从具体进程的角度来看,每个进程可以拥有4G字节的虚拟地址空间(也叫虚拟内存)。

为什么要叫他虚拟内存呢?这要对比物理地址来看,在这个虚拟内存中分配的地址并不是其真实的物理地址,一个可执行文件在被编译后,会被分配成很多页,在这个在文件执行的过程中,它往内存中装载的单位就是页。当一个文件被执行时,操作系统会先为该程序创建一个 4GB 的进程虚拟地址空间。前面介绍过,虚拟地址空间只是一个中间层而已,它的功能是利用一种映射机制将虚拟地址空间映射到物理地址空间,所以,创建4GB虚拟地址空间其实并不是要真的创建空间,只是要创建那种映射机制所需要的数据结构而已,这种数据结构就是页目和页表。

当创建完虚拟地址空间所需要的数据结构后,进程开始读取文件的第一页。在文件的第一页包含了文件头和段表等信息,进程根据文件头和段表等信息,将文件中所有的段一一映射到虚拟地址空间中相应的页 (文件中的段的长度都是页长的整数倍 ) 。这时文件的真正指令和数据还没有被装入内存中,操作系统只是根据文件的头部等信息建立了文件和进程虚拟地址空间中页的映射关系而已。当CPU 要访问程序中用到的某个虚拟地址时,当CPU发现该地址并没有相相关联的物理地址时,CPU认为该虚拟地址所在的页面是个空页面,CPU会认为这是个页错误 (Page Fault) ,CPU也就知道了操作系统还未给该页面分配内存,CPU会将控制权交还给操作系统。操作系统于是为该页面在物理空间中分配一个页面,然后再将这个物理页面与虚拟空间中的虚拟页面映射起来,然后将控制权再还给进程,进程从刚才发生页错误的位置重新开始执行。由于此时已为文件的那个页面分配了内存,所以就不会发生页错误了。随着程序的执行,页错误会不断地产生,操作系统也会为进程分配相应的物理页面来满足进程执行的需求。

由此,我们可以看到虚拟内存的好处:

首先,它避免了多个进程访问到同一用户地址空间,避免有些程序恶意修改其它程序。通过虚拟内存的管理也可以控制物理内存的访问权限。

然后,通过这种映射机制,给分配和释放内存带来了方便,通过页面调度避免了大量数据的装入装出,提高了内存效率。

现在我们就可以再来说下用户态和内核态的概念了,用户态和内核态粗略的说就是进程工作在内核空间下就叫用户态,进程工作在内核空间下就叫内核态。具体的说一下就是当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核状态。此时处理器处于特权级最高的(0级)内核代码。当进程处于内核态时,执行的内核代码会使用当前的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户态。即此时处理器在特权级最低的用户代码中运行。当正在执行用户程序而突然中断时,此时用户程序也可以象征性地处于进程的内核态。因为中断处理程序将使用当前进程的内核态。

然后我们细细的说一下用户态和内核态的区别和联系,说道这里,就不得不提一下CPU的三种运行级别了,工作在内核态下的进程拥有最高级别Ring0,工作在用户态下的进程拥有最低级别Ring3,在Ring3状态下是不能访问Ring0状态下的地址和数据的。也就是说,进程在用户态下是没法访问到内核空间中的数据的,那么我们就看出这样做的好处了,通过内核态和用户态就产生了一个保护机制,用户无法随意的进入所有进程共享的内核空间。

为了让用户安全的访问内核空间,操作系统提供了以下几种方式:

1.系统调用进入内核态:如调用write(),read(),send()等IO函数等操作,进程就会进入内核态使用内核代码去完成操作。

2.异常:当CPU在执行运行在用户态的程序时,发现了某些事件不可知的异常,这是会触发由当前运行进程切换到处理此异常的内核相关程序中,也就到了内核态,比如缺页异常。

3.外围设备的中断:当外围设备完成用户请求的操作之后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条将要执行的指令转而去执行中断信号的处理程序,如果先执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了有用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。

那么进程是如何完成用户态到内核态的切换的呢?具体的步骤大致如下:

(1)从当前进程的描述符中提取其内核栈的ss0及esp0信息。
(2)使用ss0和esp0指向的内核栈将当前进程的cs,eip,eflags,ss,esp信息保存起来,这个过程也完成了由用户栈找到内核栈的切换过程,同时保存了被暂停执行的程序的下一条指令。
(3)将先前由中断向量检索得到的中断处理程序的cs,eip信息装入相应的寄存器,开始执行中断处理程序,这时就转到了内核态的程序执行了。

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

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

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


相关推荐

  • 什么是出口IP?_出口IP和外网IP

    什么是出口IP?_出口IP和外网IP出口IP是指外网IP,比如用的不是外网IP(公网)那么发送的信息必i须被路由器进行网络地址转换,信息就会被外网识别。IP定址:IP规定网络上所有的设备都必须有一个独一无二的IP地址,就好比是邮件上都必须注明收件人地址,邮递员才能将邮件送到。每个IP信息包都必须包含有目的设备的IP地址,信息包才可以正确地送到目的地。同一设备不可以拥有多个IP地址,所有使用IP的网络设备至少有一个唯一的IP地址。换言之,可以分配多个IP地址给同一个网络设备,但是同一个IP地址却不能重复分配给两个或以上的网络设备。

    2025年6月21日
    4
  • python求逆矩阵的方法,Python 如何求矩阵的逆「建议收藏」

    python求逆矩阵的方法,Python 如何求矩阵的逆「建议收藏」我就废话不多说了,大家还是直接看代码吧~importnumpyasnpkernel=np.array([1,1,1,2]).reshape((2,2))print(kernel)print(np.linalg.inv(kernel))注意,Singularmatrix奇异矩阵不可求逆补充:python+numpy中矩阵的逆和伪逆的区别定义:对于矩阵A,如果存在一个矩阵B,使得A…

    2022年8月21日
    6
  • Ubuntu安装配置MySQL_nginx upstream

    Ubuntu安装配置MySQL_nginx upstream系Ubuntu安装配置nginx提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章Python机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系Ubuntu安装配置nginx前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。

    2026年1月20日
    3
  • 某操作系统采用页式虚拟存储管理_虚拟存储系统

    某操作系统采用页式虚拟存储管理_虚拟存储系统 一、请求分页式存储管理的基本思想请求分页式存储管理是基于分页式存储管理的一种虚拟存储器1.相同点a.把内存空间划分成尺寸相同、位置固定的块b.按照内存块大小,把作业的虚拟地址空间(相对地址空间)划分成页(划分过程对用户透明)c.虚拟地址空间中的一页可以装入到内存中的任何一块中2.不同点a.作业全部进入辅存,运转时,并不把整个作业程序一起都装入到内存,只…

    2022年9月25日
    4
  • Memcached与Memcache区别[通俗易懂]

    Memcached与Memcache区别

    2022年2月8日
    40
  • android中的加密算法,Android中加密算法[通俗易懂]

    android中的加密算法,Android中加密算法[通俗易懂]Android中的加密算法可以分为两类:对称加密和非对称加密对称加密(DES、3DES、AES)概念对称加密算法中,发送方将明文和加密密匙经过特殊加密算法处理后,使其形成变成复杂的密文后发送出去。接受方用同样的密匙、同样加密算法的逆算法对密文进行解密。传统的DES加密算法只有56位密匙,最新AES技术拥有128位密匙。大大提高了安全性。优点:算法公开、计算量小、加密速度快、加密效率高缺点:发送…

    2022年5月13日
    41

发表回复

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

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