Linux操作系统,为什么需要内核空间和用户空间?( 二 )
其实就是通过一个特殊的指令让进程从用户态进入到内核态(到了内核空间) , 在内核空间中 , CPU 可以执行任何的指令 , 当然也包括从磁盘上读取数据 。 具体过程是先把数据读取到内核空间中 , 然后再把数据拷贝到用户空间并从内核态切换到用户态 。
此时应用程序已经从系统调用中返回并且拿到了想要的数据 , 可以开开心心的往下执行了 。 简单说就是应用程序把高科技的事情(从磁盘读取文件)外包给了系统内核 , 系统内核做这些事情既专业又高效 。
对于一个进程来讲 , 从用户空间进入内核空间并最终返回到用户空间 , 这个过程是十分复杂的 。 举个例子 , 比如我们经常接触的概念 "堆栈" , 其实进程在内核态和用户态各有一个堆栈 。
运行在用户空间时进程使用的是用户空间中的堆栈 , 而运行在内核空间时 , 进程使用的是内核空间中的堆栈 。 所以说 , Linux 中每个进程有两个栈 , 分别用于用户态和内核态 。
下图简明的描述了用户态与内核态之间的转换:
文章插图
既然用户态的进程必须切换成内核态才能使用系统的资源 , 那么我们接下来就看看进程一共有多少种方式可以从用户态进入到内核态 。
概括的说 , 有三种方式:系统调用、软中断和硬件中断 。 这三种方式每一种都涉及到大量的操作系统知识 , 所以这里不做展开 。
整体结构接下来我们从内核空间和用户空间的角度看一看整个 Linux 系统的结构 。 它大体可以分为三个部分 , 从下往上依次为:硬件 -> 内核空间 -> 用户空间 。 如下图所示(此图来自互联网):
文章插图
在硬件之上 , 内核空间中的代码控制了硬件资源的使用权 , 用户空间中的代码只有通过内核暴露的系统调用接口(System Call Interface)才能使用到系统中的硬件资源 。 其实 , 不光是 Linux , Windows 操作系统的设计也是大同小异 。
实际上我们可以将每个处理器在任何指定时间点上的活动概括为下列三者之一:
- 运行于用户空间 , 执行用户进程 。
- 运行于内核空间 , 处于进程上下文 , 代表某个特定的进程执行 。
- 运行于内核空间 , 处于中断上下文 , 与任何进程无关 , 处理某个特定的中断 。
说明:Linux 系统的中断服务程序不在进程的上下文中执行 , 它们在一个与所有进程都无关的、专门的中断上下文中执行 。
之所以存在一个专门的执行环境 , 就是为了保证中断服务程序能够在第一时间响应和处理中断请求 , 然后快速地退出 。
总结现代的操作系统大都通过内核空间和用户空间的设计来保护操作系统自身的安全性和稳定性 。 所以在我们阅读有关操作系统的资料时经常遇到内核空间、用户空间和内核态、用户态等概念 , 希望本文能够帮助您理解这些基本的概念 。
【Linux操作系统,为什么需要内核空间和用户空间?】参考:
1、
2、
- 都是为自己手机代言,为什么董明珠不行,雷军太行了?
- realme国潮锦鲤手机为什么叫V15?徐起解释命名规则
- 鸿蒙OS大一统需产业合力
- 为什么苹果用户哪怕买二手机,都不用安卓?三点原因太真实
- Linux Kernel 5.10.5发布:禁用FBCON加速滚动特性
- 比原子弹还稀有,全球就两国掌握,光刻机为什么如此难造?
- Linux 5.11开始围绕PCI Express 6.0进行早期准备
- Fedora正在寻求协助 希望加快Linux 5.10 LTS内核测试进度
- 为什么录视频不好看?vivo X60 Pro或许有答案
- Linux Mint 20.1 Ulyssa稳定版已确定延期至2021年初发布