共计 1747 个字符,预计需要花费 5 分钟才能阅读完成。
自动写代码机器人,免费开通
这篇文章主要为大家展示了“怎么看待 Linux 操作系统的用户空间和内核空间”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让丸趣 TV 小编带领大家一起研究并学习一下“怎么看待 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 也提供了一些用户空间和内核空间通讯的机制,使我们可以开发出更高效的程序。但一定要记住,内核中一点小小的错误都是会导致整个系统崩溃,所以开发内核程序时一定要非常小心谨慎。
以上是“怎么看待 Linux 操作系统的用户空间和内核空间”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!
向 AI 问一下细节
丸趣 TV 网 – 提供最优质的资源集合!