内核空间与用户空间

内核空间与用户空间

一个计算机通常有一定大小的内存空间,如使用的计算机是4GB 的地址空间,但是

程序并不能完全使用这些地址空间,因为这些地址空间被划分为内核空间和用户空间。程

序只能使用用户空间的内存,这里所说的使用是指程序能够申请的内存空间,并不是程序

真正访问的地址空间。

内核空间主要是指操作系统运行时所使用的用于程序调度、虚拟内存的使用或者连接

硬件资源等的程序逻辑。为何需要内存空间和用户空间的划分呢?很显然和前面所说的每

个进程都独立使用属于自己的内存一样,为了保证操作系统的稳定性,运行在操作系统中

的用户程序不能访问操作系统所使用的内存空间。这也是从安全性上考虑的,如访问硬件

资源只能由操作系统来发起,用户程序不允许直接访问硬件资源。如果用户程序需要访问

硬件资源,如网络连接等,可以调用操作系统提供的接口来实现,这个调用接口的过程也

就是系统调用。每一次系统调用都会存在两个内存空间的切换,通常的网络传输也是一次

系统调用,通过网络传输的数据先是从内核空间接收到远程主机的数据,然后再从内核空

间复制到用户空间,供用户程序使用。这种从内核空间到用户空间的数据复制很费时,虽

然保住了程序运行的安全性和稳定性,但是也牺牲了一部分效率。但是现在已经出现了很

多其他技术能够减少这种从内核空间到用户空间的数据复制的方式,如Linux 系统提供了

sendfile 文件传输方式。

内核空间和用户空间的大小如何分配也是一个问题,是更多地分配给用户空间供用户

程序使用,还是首先保住内核有足够的空间来运行,这要平衡一下。如果是一台登录服务

器,很显然,要分配更多的内核空间,因为每一个登录用户操作系统都会初始化一个用户

进程,这个进程大部分都在内核空间里运行。在当前的Windows 32 位操作系统中默认内

核空间和用户空间的比例是1:1(2GB 的内核空间,2GB 的用户空间),而在32 位Linux

系统中默认的比例是1:3(1GB 的内核空间,3GB 的用户空间)。

猜你喜欢

转载自aoyouzi.iteye.com/blog/2147871