用户模式和内核模式

用户模式和内核模式

首先我们要解释一个概念–进程(Process)。简单来说,一个可执行程序就是一个进程,前面我们使用C语言编译生成的程序,运行后就是一个进程。进程最显著的特点就是拥有独立的地址空间。

严格来说,程序是存储在磁盘上的一个文件,是指令和数据的集合,是一个静态的概念;进程是程序加载到内存运行后的一些活动,是一个动态的概念。

前面我们在说到地址空间时,一直说“程序的地址空间”,这其实是不严谨的,应该说“进程的地址空间”。一个进程对应一个地址空间,而一个程序可能会创建多个进程。

内核模式和用户模式

内核空间存放的是操作系统内核代码和数据,是被所有程序共享的,在程序中修改内核空间中的数据不仅会影响操作系统本身的稳定性,还会影响其他程序,这是非常危险的行为,所有操作系统禁止用户程序直接访问内核空间。

要想访问内核空间,必须借助操作系统提供的API函数,执行内核提供的代码,让内核自己来访问,这样才能保证内核空间的数据不会被随意修改,才能保证操作系统本身和其他程序的稳定性。

用户程序调用系统API函数称为系统调用(System Call);发生系统调用时会暂停用户程序,转而执行内核代码(内核也是程序),访问内核空间,这称为内核模式(Kernel Mode)

用户空间保存的是应用程序的代码和数据,是程序私有的,其他程序一般无法访问。当执行应用程序自己的代码时,称为用户模式(User Mode)

计算机会经常在内核模式和用户模式之间切换:

  • 当运行在用户模式的应用程序需要输入输出、申请内存等比较底层的操作时,就必须调用操作系统提供的API函数,从而进入内核模式
  • 操作完成后,继续执行应用程序的代码,就又回到了用户模式

总结:用户模式就是执行应用程序代码,访问用户空间;内核模式就是执行内核代码,访问内核空间(当然也有权限访问用户空间)。

为什么要区分两种模式

我们知道,内核最重要的任务是管理硬件,包括显示器、键盘、鼠标、内存、硬盘等,并且内核也提供了接口(也就是函数),供上层程序使用。当程序要进行输入输出、分配内存、相应鼠标等与硬件有关的操作时,必须要使用内核提供的接口。但是用户程序是非常不安全的,内核对用户程序也是充分不信任的,当程序调用接口时,内核要做各种校验,以防止出错。

从Intel 80386开始,出于安全性和稳定性的考虑,CPU可以运行在ring0~ring3四个不同的权限级别,也对数据提供相应的四个保护级别。不过Linux和Windows只利用了其中的两个运行级别:

  • 一个是内核模式,对应ring0级,操作系统的核心部分和设备驱动都运行在该模式下
  • 另一个是用户模式,对应ring3级,操作系统的用户接口部分(例如Windows API)以及所有的用户程序都运行在该级别。

为什么内核和用户程序要共用地址空间

既然内核也是一个应用程序,为何不让他拥有独立的4GB地址空间,而是要和用户程序共享、占用有限的内存呢?

让内核拥有完全独立的地址空间,就是让内核处于一个完全独立的进程中,这样每次进行系统调用都需要切换进程。切换进程的消耗是巨大的,不仅需要寄存器进栈出栈,还会使CPU中的数据缓存失效、MMU中的页表缓存失效,这将导致内存的访问在一段时间内相当低效。

而让内核和用户程序共享地址空间,发生系统调用时进行的是模式切换,模式切换仅仅需要寄存器进栈出栈,不会导致缓存失效;现代CPU也都提供了快速进出内核模式的指令,与进程切换比起来,效率大大提高了。

### 回答1: 在 Linux 中,进程在用户模式内核模式之间切换。用户模式是指进程在执行用户空间代码时所处的模式内核模式是指进程需要执行内核空间代码时所处的模式。 在用户模式下,进程可以执行其自身的代码,访问自己的内存空间以及执行一些系统调用。但是,如果进程需要执行一些需要访问系统资源(如硬件设备、文件系统等)的操作,则需要切换到内核模式。在内核模式下,进程可以访问所有的系统资源,执行所有的系统调用。 进程在用户模式内核模式之间切换的时间就是进程在执行系统调用时所花费的时间。当进程需要执行系统调用时,它会将系统调用的参数传递给内核,然后切换到内核模式执行系统调用。当系统调用完成后,进程再切换回用户模式,并将系统调用的返回值传递给应用程序。这个过程中,进程需要进行上下文切换以及内核态用户态之间的数据传输,所花费的时间往往比较长。 ### 回答2: 在Linux系统中,进程是程序执行的实体,可以执行指令、访问资源进行通信。进程的用户模式内核模式时间是指进程在用户空间内核空间所消耗的时间。 用户模式时间是指进程在用户空间执行代码所消耗的时间。在用户空间,进程可以直接访问用户级别的资源,如用户程序、用户用户堆栈。因此,当进程执行用户级别的指令时,其消耗的时间被称为用户模式时间。用户模式时间主要用于处理应用程序的运行,如计算、逻辑处理数据操作等。 内核模式时间是指进程在内核空间执行操作所消耗的时间。在内核空间,进程可以访问内核级别的资源服务,如系统调用、设备驱动程序内核数据结构等。当进程需要执行特权操作时,如IO操作、内存管理进程调度等,会切换到内核模式。在内核模式下执行的代码,消耗的时间被称为内核模式时间。内核模式时间主要用于处理系统级别的操作,如设备驱动、内存管理进程调度等。 进程的用户模式时间内核模式时间统计了进程在不同模式下所消耗的时间,并提供了对进程性能系统资源的评估。通过监控这两个时间可以了解进程的运行情况,优化程序性能,并对系统进行调优。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JayerZhou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值