用户空间和内核空间

在平时看资料时,时不时出现用户空间(user space)和内核空间(kernel space)。那到底什么是用户空间,什么是内核空间呢?在这里说说我自己的理解。

操作系统中直接与硬件打交道的被称之为内核,内核控制这所有的硬件,如果普通程序需要操作硬件(例如写IO到硬盘),是不可以直接与硬件交互的,必需通过调用内核暴露的接口,来达到相应的目的,调用内核的接口这个过程被称为系统调用(system call)。用户空间指的是在内核之外运行的代码,而内核空间是内核运行的地方。
user space and kernel space
例如下面的的代码中就涉及了用户空间和内核空间的转换:

str = "my string" // 用户空间
x = x + 2
file.write(str) // 切换到内核空间
y = x + 4 // 切换回用户空间

为什么要区分内核空间以及用户空间?

因为用户进程无法直接调用系统资源,只能通过操作系统来访问。

内核态和用户态(kernel mode和user mode),在内核态可以访问系统资源,比如:

  1. 处理器cpu:cpu控制着一个程序的执行。

  2. 输入输出IO:linux有句话叫“一切都是流”,也就是所有输入输出设备的数据,包括硬盘,内存,终端都可以像流一样操作。

  3. 进程管理:类似对进程的创建,休眠,唤醒,释放之类的调度。比如linux下的fork和windows下的CreateProcess()函数。

  4. 内存:包括内存的申请,释放等管理操作。

  5. 设备:这个就是常常说的外设了,比如鼠标,键盘。

  6. 计时器:计算机能计时是因为晶体振荡器产生的电磁脉冲。那么所有的定时任务都是以它为基础的。

  7. 进程间通信IPC:进程之间是不能够互相访问内存的,所以进程与进程之间的交互需要通信,而通信也是一种资源。

  8. 网络通信:网络通信可以看做是进程见通信的特殊形式。

而上面所说的这些系统资源,在用户进程中是无法被直接访问的,只能通过操作系统来访问,所以也把操作系统提供的这些功能成为:“系统调用”。

那为什么要分为两个空间呢?主要为了安全的缘故,防止资源的独占滥用或可以破坏操作系统等。例如某些进程霸占的资源不释放,就影响到了其他进程的运行。

参考资料:
User space vs kernel space

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值