我们生活在人间,但《西游记》里提到,在天上还有一个仙界。

人间不知道仙界的存在;而仙界知道人间的存在,神仙也可以从仙界下凡到人间,但是被严格管控的。

软件设计的灵感其实都来自于生活:用户空间就等同于我们理解的人间;而内核空间就等同于所谓的仙界。

人间在地上,仙界在天上,地理上是隔离的。

linux内核里的用户空间和内核空间也是一样。


以32位linux系统为例:

32位linux系统的地址空间分布

用户空间地址范围:0x00000000~0xBFFFFFFF,大小3G

内核空间地址范围:0xC0000000~0xFFFFFFFF,大小1G

有小伙伴问了,你这个地址是啥地址啊,是逻辑地址、虚拟地址、线性地址、还是物理地址咩?

当然是虚拟地址了。

  • 在intel x86下,逻辑地址,是由一个段标识符加上一个指定段内的相对地址的偏移量(offset)组成,表示为 [段标识符:段内偏移量],例如:[cs:eip]
  • 虚拟地址其实就是上述组成逻辑地址的段内偏移offset
  • 而线性地址,则是由逻辑地址经过一系列转换得到的,具体来讲就是: 线性地址=段描述符所在段的基地址+offset
  • 而物理地址,则是真正的物理内存的地址。

那么问题来了,linux内核为什么要特意划分内核空间和用户空间呢?有以下几方面的原因:

1.安全考量

整个系统中有各种资源,比如计算资源、内存资源和外设资源。而linux是多用户、多进程系统。所以,这些资源必须在受限的、被管理的状态下使用,要不然就陷入了混乱。官方介绍空间隔离可以保证即便是单个应用程序出现错误也不会影响到操作系统的稳定性。

2.处理器模式不同,权限不同

前面说到内核空间代码要管理各种底层的资源,而用户空间代码更多是实现业务逻辑的。所以内核空间和用户空间代码运行时的处理器模式是不同的。

对于x86体系的cpu, 用户空间代码运行在Ring3模式(用户模式),内核空间代码运行Ring 0模式(特权模式);

对于arm体系的cpu,用户空间代码运行在usr模式(用户模式),内核空间代码运行在svc模式(特权模式);

用户模式只能正常执行程序,而特权模式才能访问外设、处理中断等。

3.核心代码和业务代码的解耦

我们在设计应用系统的时候会考虑耦合性,内核集中了这么多人的智慧,难道它们不会考虑到这一点吗?

内核代码偏重于系统和资源管理;而用户空间代码(也即应用程序)偏重于业务逻辑代码的实现。

两者分工不同,隔离也是解耦。


现在的linux系统基本都是64位的。所以,我们再稍微介绍下64位系统的内核空间和用户空间的地址分布:

摘自:《linux高性能服务器编程》

64位系统的地址线有64位,但是在具体实现上,并没有使用这么多,一般来说,48位的地址线就够了。所以在这样的系统中,比如armv8-A,高64TB是内核空间,低64TB是用户空间,发现规律了没有?内核空间的的高16位都是1,用户空间的低16位都是0,这样可以方便的对用户空间和内核空间进行有效性检测,防止越界。


总结一下下:

32位linux系统的整个虚拟地址空间最大为4G,这4G的虚拟地址空间,高1G(也就是0xC0000000~0xFFFFFFFF)属于内核空间;低3G(也就是0x00000000~0xBFFFFFFF)属于用户空间,linux系统中的所有进程共用这3G的虚拟地址空间。

你说了什么?

共用?如何共用?

所有的进程共用这3G的虚拟地址空间该如何理解呢?

预知后事如何,请看下回分解。

人间还是仙界?聊一聊linux系统的用户空间和内核空间相关推荐

  1. linux 权限 x 表示,在Linux系统中,用户对目录拥有“x”权限,表示可以执行下列哪种操作?...

    在Linux系统中,用户对目录拥有"x"权限,表示可以执行下列哪种操作? 更多相关问题 通过花的中心只能作1个对称面称辐射对称花. 王叔和归纳了脉象( )种,规范了脉象名称. 车轮 ...

  2. linux系统中用户切换

    1. Linux系统中用户切换的命令为su,语法为: su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 参 ...

  3. Unix toolbox注解2之Linux系统状态用户和限制

    Unix toolbox注解1之Linux系统硬件信息 Unix toolbox注解2之Linux系统状态用户和限制 本系列文章为笔者对Unix toolbox的一些个人注解,加入个人的一些元素,删减 ...

  4. 管理Linux 系统的用户与用户组

    任务五 管理Linux系统的用户与用户组 [任务说明] Linux操作系统是多用户多任务操作系统. 用户可分为普通用户和超级用户,除了用户以外还有用户组.所谓用户组就是用户的集合,CentOS组中有两 ...

  5. 【Linux系统】第9节 linux系统中用户分类以及用户与组属性的修改示例

    目录 1 用户的分类 2 用户与组的相关设置文件 2.1 passwd文件 2.2 shadow文件 2.3 group文件 3 CentOS系统中用户与组的创建及属性的修改示例 3.1 相关命令 3 ...

  6. 详解Linux系统的用户管理——添加用户、删除用户、查询用户信息、切换用户、用户组

    Linux系统的用户管理 用户管理的规则 添加用户 基本语法 实际案例 细节说明 给用户指定或者修改密码 基本语法 应用案例 删除用户 基本语法 应用案例 删除用户注意事项 查询用户信息 基本语法 应 ...

  7. linux 物理内存用完了_Linux用户空间与内核空间(理解高端内存)

    Linux内核地址映射模型 x86 CPU采用了段页式地址映射模型.进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存. 段页式机制如下图. Linux内核地址空间划分 通常32位L ...

  8. Linux Malloc分析-从用户空间到内核空间

    Linux Malloc分析-从用户空间到内核空间 本文介绍malloc的实现及其malloc在进行堆扩展操作,并分析了虚拟地址到物理地址是如何实现映射关系. ordeder原创,原文链接: http ...

  9. Linux 用户空间和内核空间

    最近在微信群里看到有人提这个问题,然后查了下资料,觉得这篇文章是写得最能让人看懂的,分享给大家. 欢迎大家评论说出自己的见解,让更多的人更容易理解这部分知识. 之前的相关文章 Linux内存,先看这篇 ...

最新文章

  1. opensuse安装nginx
  2. CTFshow 命令执行 web61
  3. numpy——mgrid
  4. Django开发中问题和报错集合
  5. 耗时n年,38页《数据仓库知识体系.pdf》(数据岗位必备)
  6. vue 前端商城框架_前端工程师要掌握几个Vue框架
  7. linux 文件怎么不让删,请问如何设置权限,可以禁止用户删除文件
  8. 一些服务器客户端的c例子
  9. 麦克纳姆轮全向移动机器人运动模型及应用分析
  10. 如何编写 maptalks plugin
  11. 【微软2014实习生及秋令营技术类职位在线測试】题目1 : String reorder
  12. ASP.NET的路由系统
  13. OpenAI怎么写作「谷歌小发猫写作」
  14. ClientToScreen ()与 ScreenToClient()
  15. 【H3C设备组网配置】第一版
  16. 喜马拉雅随车听开通啦
  17. Latex书籍模板分享
  18. matlab语音合成技术,matlab语音合成详细版
  19. 我的身体为什以会这样?如何诊治?
  20. 【机器学习】吴恩达机器学习个人笔记

热门文章

  1. 【积水成渊-逐步定制自己的Emacs神器】5:回到最初,重新开始
  2. 救救我吧,今年27岁,想转行学大数据开发
  3. 计算机运行游戏卡顿,Win7电脑玩游戏出现卡顿如何解决?
  4. Creo 5.0软件安装教程|兼容WIN10
  5. (uniapp-快速入门)运行到小程序模拟器微信开发工具
  6. Latex算法命令\REQUIRE和\ENSURE显示为Input:和Output:
  7. win10与virtualBox共享文件夹
  8. 苹果如何做ASO优化?优化的主要思路有哪些?
  9. 如何解除病毒对各种杀毒软件的劫持
  10. 关于angular模态框遇到的坑 Error: [$injector:unpr] Unknown provider