内核空间和用户空间

一、内核空间与用户空间

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

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

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

真正访问的地址空间。

 

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

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

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

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

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

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

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

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

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

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

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

sendfile 文件传输方式。

 

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

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

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

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

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

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

    2.自己的理解,众所周知,os也是一个程序,是程序一定要在内存中运行,会胡乱地在物理内存中分页运行吗?

不会的,为了保证操作系统能够安全、稳定地运行,内存空间会被分为用户空间和内核空间,内核空间即为os所运行的空间,

其中会运行与os有关的相关进程,如对某些硬件资源访问的进程,如某些调度程度等等。内核空间其实封存了高权限的进程,

这些进程用户进程不能访问到,唯一的办法是当用户进程需要执行内核空间的一些进程的时候,会进行用户态到内核态的转化,

其实就是一种进程调度,从当前用户态的进程转为内核空间中的某些进程执行。进程有独立性,一个进程使用一个地址空间,

这里的地址空间为虚拟内存空间,即用户为了编写程序方便所自己模拟的具有连续内存的空间。由于对所有的用户进程来说,

内核进程都是共享的,所以其实通俗理解为,整个内存有一块固定的内存空间,装在os进程,而剩下的空间则由用户编写的程序

占据。注意系统调用的概念,即用户进程对os进程的一个调用,进而获取某些硬件权限。

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值