- 前言
很长时间一直不清楚操作系统的用户态和内核态到底是什么?记得以前每次考这个知识点都是靠猜,直到看了《Unix环境高级编程》这本书,才有点感触。
- Unix体系架构
从上面这张图体系架构图,我们可以很清楚的将操作系统分为三部分:内核态
、用户态
和系统调用
。
内核态
(或内核空间):可以理解为存放内核的地方。内核从本质上看是一种软件——控制计算机的硬件资源(包括cpu资源、存储资源、I/O资源等),并提供上层应用程序运行的环境。用户态
(或用户空间):可以理解为存放应用程序、底层函数库、shell脚本的地方。这里要说明一点底层函数库
,他不是系统调用
,我们可以理解为他是对系统调用的一层封装,更好的方便程序猿来开发。系统调用
:那么用户态
和内核态
的数据是如何传递的呢?那就是通过系统调用。其实系统调用就是用户态
和内核态
定义好的接口
。就好比RPC框架中一个服务调用另一个服务,我们先要定义好两边接口才能调通。常见的系统调用,比如操作文件的read、write操作;操作进程的fork操作;分配内存的sbrk操作。
-总结
读到这,相信我们已了解操作系统的用户态与内核态。理解这几个名词,对以后Unix|Linux的学习还是很有帮助的。
-参考
[1] Unix环境高级编程
[2] Linux探秘之用户态与内核态 http://www.cnblogs.com/bakari/p/5520860.html