如何看待Linux操作系统的用户空间和内核空间

简介:

作为中央核心处理单元的CPU,除了生产工艺的不断革新进步外,在处理数据和响应速度方面也需要有权衡。稍有微机原理基础的人都知道Intel X86体系的CPU提供了四种特权模式ring0~ring3,其中ring0特权最高,ring3的特权最低,之所以要做这样的区分一个主要目的是保护资源,通俗来讲要保护的资源无非就是“内存、I/O端口以及执行特殊机器指令的能力”。任何一个时刻,x86 CPU都是在一定的特权模式下运行。同样,对于ARM体系的CPU 一共有七种运行模式,分别是:用户模式(usr)、快速中断模式(fiq)、中断模式(irq)、管理模式(svc)、系统模式(sys)、数据访问终止模式(abt)和未定义指令终止模式(und)。除了用户模式外,其他6中工作模式都属于特权模式,而特权模式中除了系统模式外,其他5种模式又称为异常模式。

那么底层硬件CPU的这种特性,跟我们将要讨论的用户模式和内核模式又有什么关系呢?让我们正本溯源来端正一下对操作系统的认识。每位教操作系统课程的老师都会告诉大家:所谓的操作系统呢,就是对硬件资源进行统一管理的系统,并向用户提供业务接口的软件系统。通俗来讲,【操作系统就是要能管理你的CPU和内存,驱动你的硬盘,管理你的网卡和显示器,然后当你点击鼠标和敲击键盘时能做出正确的响应。】够通俗了吧。

那么问题就来了,以CPU为例,如果你是一个操作系统的设计者,你会如何处理不同CPU体系架构的差异性(如Intel、ARM,抑或AMD、MIPS等)?当然这个问题不是一般人能hold得了的,CU论坛里开发都江堰操作系统那位大牛前辈确实值得让吾辈佩服和敬仰。继续我们的话题,也就是说不同的操作系统在处理CPU体系架构的差异化方面是不相同的,有些操作系统,就提供了用户模式和内核模式这种机制 (例如linux),而有些操作系统呢,又没有用户态和内核态之分(例如vxWorks)。后者不在我们的讨论范围,感兴趣的童鞋可以自己去google一下。

以Linux系统和Intel x86的CPU为例,Linux使用了ring0模式来运行内核态的代码,ring3来运行用户态的代码,ring1和ring2没有使用。32为操作系统可寻址范围是0~4GB,为此Linux系统将其分为了用户空间和内核空间两部分:

其中用户空间占低位的3GB空间,范围从虚拟地址的0x00000000到0xBFFFFFFFF,内核空间占用了高位的1GB空间,虚拟地址范围从0xC0000000到0xFFFFFFFF。

内核空间里存放的是整个内核代码和所有内核模块,以及内核所维护的数据。当用户运行一个程序时,该程序所创建的进程一开始是运行在用户空间的,当它要执行网络发送数据等动作时,必须通过调用write、send等系统函数来完成,这些系统调用会去调用内核中的代码来完成用户的请求操作,这时CPU必须从ring3切换到ring0,然后进入内核地址空间去执行这些代码完成操作,完成后又切换回ring3,回到用户态。

所以,我们可以看到,提供了用户模式和内核模式的操作系统,用户态的程序就不能随意操作内核地址空间里的数据,具有一定的安全保护作用;于此同时,在实时性方面稍微有所牺牲。也要就是说,只要内核代码没有问题,用户空间程序的错误和BUG一般来说不会导致系统崩溃,提高了系统的健壮性。

这么看来,内核确实比较“拽”,而Linux也提供了一些用户空间和内核空间通讯的机制,使我们可以开发出更高效的程序。但一定要记住,内核中一点小小的错误都是会导致整个系统崩溃,所以开发内核程序时一定要非常小心谨慎。





本文作者:佚名
来源:51CTO
目录
相关文章
|
8天前
|
Linux C语言
Linux内核队列queue.h
Linux内核队列queue.h
|
9天前
|
安全 Linux 虚拟化
网络名称空间在Linux虚拟化技术中的位置
网络名称空间(Network Namespaces)是Linux内核特性之一,提供了隔离网络环境的能力,使得每个网络名称空间都拥有独立的网络设备、IP地址、路由表、端口号范围以及iptables规则等。这一特性在Linux虚拟化技术中占据了核心位置🌟,它不仅为构建轻量级虚拟化解决方案(如容器📦)提供了基础支持,也在传统的虚拟机技术中发挥作用,实现资源隔离和网络虚拟化。
网络名称空间在Linux虚拟化技术中的位置
|
9天前
|
网络协议 安全 Linux
Linux网络名称空间之独立网络资源管理
Linux网络名称空间是一种强大的虚拟化技术🛠️,它允许用户创建隔离的网络环境🌐,每个环境拥有独立的网络资源和配置。这项技术对于云计算☁️、容器化应用📦和网络安全🔒等领域至关重要。本文将详细介绍在Linux网络名称空间中可以拥有的独立网络资源,并指出应用开发人员在使用时应注意的重点。
|
9天前
|
安全 网络协议 Linux
Linux网络名称空间概述
Linux网络名称空间是操作系统级别的一种虚拟化技术🔄,它允许创建隔离的网络环境🌐,使得每个环境拥有自己独立的网络资源,如IP地址📍、路由表🗺️、防火墙规则🔥等。这种技术是Linux内核功能的一部分,为不同的用户空间进程提供了一种创建和使用独立网络协议栈的方式。本文旨在全方面、多维度解释Linux网络名称空间的概念、必要性和作用。
Linux网络名称空间概述
|
9天前
|
监控 Unix Linux
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
26 0
|
10天前
|
Linux 编译器 开发者
Linux设备树解析:桥接硬件与操作系统的关键架构
在探索Linux的庞大和复杂世界时🌌,我们经常会遇到许多关键概念和工具🛠️,它们使得Linux成为了一个强大和灵活的操作系统💪。其中,"设备树"(Device Tree)是一个不可或缺的部分🌲,尤其是在嵌入式系统🖥️和多平台硬件支持方面🔌。让我们深入了解Linux设备树是什么,它的起源,以及为什么Linux需要它🌳。
Linux设备树解析:桥接硬件与操作系统的关键架构
|
24天前
|
消息中间件 存储 算法
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
68 0
|
26天前
|
Linux 数据安全/隐私保护 虚拟化
Linux技术基础(1)——操作系统的安装
本文是龙蜥操作系统(Anolis OS) 8.4 的安装指南,用户可以从[龙蜥社区下载页面](https://openanolis.cn/download)获取ISO镜像。安装方法包括物理机的光驱和USB闪存方式,以及虚拟机中的VMware Workstation Pro设置。安装过程涉及选择语言、配置安装目标、选择软件集合和内核,设置Root密码及创建新用户。安装完成后,可通过文本模式或图形化界面验证系统版本,如Anolis OS 8.4,标志着安装成功。
|
27天前
|
Shell Linux C语言
【Shell 命令集合 系统设置 】⭐Linux 卸载已加载的内核模块rmmod命令 使用指南
【Shell 命令集合 系统设置 】⭐Linux 卸载已加载的内核模块rmmod命令 使用指南
29 1
|
9天前
|
Linux
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
19 0