首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用户空间和内核空间

用户空间和内核空间

原创
作者头像
Eulogy
发布2025-08-13 00:09:16
发布2025-08-13 00:09:16
1140
举报
文章被收录于专栏:笔记本笔记本

用户空间和内核空间

服务器大多都采用Linux系统,所以主要研究Linux系统。

用户应用如果要使用硬件资源,必须要经过Linux内核,通过内核去与硬件交互。可以看为分为三层 用户层内核层硬件层 。内核是会去使用到CPU、内存等硬件资源的,如果我们对 用户应用 不加以任何的限制,让它也可以随意地去使用硬件资源的话,那么内核空间是感知不到用户空间用了哪些资源,不利于管理,很有可能出现死锁等问题。所以使用硬件资源我们统一放到内核空间来管理,用户空间如果要使用硬件资源也得通过内核来申请使用。所有硬件访问必须经过内核,内核统一分配和管理资源,用户程序只能通过系统调用接口来申请和使用硬件。不然的话,如果用户可以独立访问硬件资源,那么内核就不知道这些信息,不利于硬件资源分配的全局可见性。

所以 用户应用内核 要隔离开,避免硬件使用的冲突:

  • 进程的寻址空间会划分为两部分: 内核空间用户空间
  • 用户空间 只能执行受限的命令(Ring3),而且不能直接调用系统资源,必须通过内核提供的接口来访问。
  • 内核空间 可以执行特权命令(Ring0) ,调用一切系统资源。

Linux系统为了提高IO效率,会在用户空间和内核空间都加入缓冲区:

  • 写数据时,要把用户缓冲数据从 用户缓冲区 拷贝到 内核缓冲区 ,再写入设备。
  • 读数据时,要从设备读取数据到 内核缓冲区 ,然后拷贝到 用户缓冲区

举一个例子,用户空间想要读取另外一个服务通过网络传送过来的数据。用户空间缓冲区 会向 内核空间 发起读请求,内核空间会等待网卡的数据准备完成,完成后会把数据 拷贝内核缓冲区 ,然后会将数据从 内核缓冲区 拷贝到 用户缓冲区 。至此,读数据完成。比较耗时的操作就是等待网络IO,网卡数据准备完成和拷贝数据的操作。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 用户空间和内核空间
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档