首页 > 系统相关 >linux 内核态和用户态

linux 内核态和用户态

时间:2022-09-02 00:02:49浏览次数:96  
标签:调用 用户 指令 内核 linux 权限 CPU

了解一下用户态和内核态的区别。

例如我们的应用程序需要从磁盘读取某个文件的数据,此时并不是直接从磁盘加载到应用内存中,而是:

  • 先将数据从「磁盘」复制到「内核 Buffer」
  • 再将数据从「内核 Buffer」复制到「用户 Buffer」

以上就是用户态内核态的概念。首先我们给他下个定义,这两个是操作系统的运行级别

然后我们知道,我们写的程序,最终运行的时候实际都会被编译、解释成一条一条的 CPU 指令被 CPU 执行。

用户态、内核态的指令都是 CPU 都在执行,所以我们可以换个说法,实际上这个态代表的是当前 CPU 的状态。那既然这些指令最终都由 CPU 执行,那对其区分的理由是什么呢?

那是因为,CPU 指令根据其重要的程度,也分为不同的权限。有一些指令执行失败了无关痛痒,而有一些指令失败了会导致整个操作系统崩溃,甚至需要重启系统。如果将这些指令随意开放给应用程序的话,整个系统崩溃的概率将会大大的增加。

再举个类似的例子。我们设计一个类,里面有几个很重要的变量,你大概率是不会把它们声明成 public 的吧?应该声明成 private,并开发几个专门修改他们的方法,对传入的值进行一系列的校验之后再去设置。

上面说到,CPU 指令是做了权限划分的, 例如 Intel X86 中将 CPU 指令权限划分为了 4 个等级:

它们之间的权限的高低程度可以通过这张图来识别:

上图中的 IA 指的是 Intel Architecture

所以可以看到,越靠近的核心的权限越高。换句话说,权限由高到低为:Ring0 > Ring1 > Ring2 > Ring3

在 Linux 系统中,由于只有 Ring0 和 Ring3 级别的指令,所以我们可以对用户态、内核态给一个更细节的区别描述:运行 Ring0 级别指令的叫内核态,运行 Ring3 级别指令的叫用户态

了解了指令集权限的概念,我们就可以再更正一下上面的描述:什么实际上代表的是当前 CPU 正在执行什么级别的指令

知道了用户态和内核态的区别、以及为什么要对其进行区别之后,我们就可以来看什么时候会从用户态切换到内核态了。

答案是发生系统调用的时候

那什么又是系统调用呢?看这张图

当用户态的程序需要向操作系统申请更高权限的服务时,就通过系统调用向内核发起请求。

内核自然也会提供很多的接口来供调用,例如申请动态内存空间。但是申请了内存是不是还得考虑释放内存?如果把这块内存管理交给应用程序的话,复杂的管理工作会给开发带来很多负担。

所以库函数就是用于屏蔽掉内部复杂的细节的,我们的应用程序可以通过库函数来调用内核的提供的接口,而库函数就会发起系统调用,发起了系统调用之后,用户态就会切换成内核态去执行对应的内核方法。 除了系统调用外,还有另外两种会导致态的切换: 发生异常、中断。

转载自用户态和内核态的区别是啥 - 知乎 (zhihu.com)

标签:调用,用户,指令,内核,linux,权限,CPU
From: https://www.cnblogs.com/zed99/p/16648275.html

相关文章

  • 【转载】linux之vmlinux、vmlinuz、System.map和/proc/kallsyms简介
    原文:linux之vmlinux、vmlinuz、System.map和/proc/kallsyms简介_小立爱学习的博客-CSDN博客_vmlinux文章目录前言一、vmlinux与vmlinuz1.1vmlinux1.2vmlinuz1.......
  • 新机器(禁止上网)安装vscode及公钥方式登陆linux
    1.1 新机器(禁止上网)安装vscode注意:以下三个程序版本必须一至。1) vscodeWin10安装程序2) win10插件(ssh客户端)3) linux里vscode-server-linux-x64.tar.gz(ssh服......
  • 内核Hash表
    一、Hash表简介1.哈希表(Hashtable)又叫散列表,是根据(Key,Value)键值对进行访问的数据结构。主要目的是提高查询效率,比如Hash表的order为5,也就是同时使用2^5个链表,理......
  • linux AWK
    $cat1.txt./smp_ao_stafpotl_info.log.2020-07-23-AM:2020-07-2309:36:22,655898582491[WebContainer:1]ERRORcom.group.bussvc.stafpotl.service.AppListTypeS......
  • Linux搭建禅道-操作手册
    1.首先进入禅道官网:https://www.zentao.net/,下载禅道的安装包。注意:查看Linux的版本,下载符合要求的版本的禅道安装包。  此时下载这个64位的,之前尝试使用32位的发......
  • Linux 系统运行级别
    centos6及之前的版本中,系统运行级别通过/etc/inittab文件来进行设置和控制。但在centos7中,查看这个文件内容会发现[root@test_vm~]#cat/etc/inittab#inittabisno......
  • linux shell中'',""和``的区别
    linuxshell中'',""和``的区别-XuFeng-博客园 https://www.cnblogs.com/Skyar/p/5914942.html今天学习一个bash脚本,看到有一条:bin=`dirname"$0"`(dirnamefilenam......
  • Linux下阿里云镜像仓库
    Linux下阿里云镜像仓库阿里云镜像加速器第一步:进入apache-maven-3.6.1/conf/目录cdapache-maven-3.6.1/conf/第二步:编辑settings.xml文件添加阿里云仓库镜像vimset......
  • Linux环境安装并配置Maven
    Linux环境安装并配置Maven1.进入Maven官网复制下载地址下载mavenmaven官网:http://maven.apache.org/英文状态下:在线下载maven:wgethttps://dlcdn.apache.org/......
  • Linux面试最高频的5个基本问题
    CPU利用率和CPU负载的区别是什么提到CPU利用率,就必须理解时间片。什么是CPU时间片?我们现在所使用的Windows、Linux、MacOS都是“多任务操作系统”,就是说他们可以“同时”......