linux 内核空间

原创: http://www.imet.me/post/2018/09-19_linux_kernal_basic/

关于linux内核

  1. 用户态和内核态,有啥区别 ?
  2. 虚拟地址空间怎么划分的 ?

用户空间 vs 内核空间

用户空间和内核空间的划分:

下图展示了用户空间和内核空间的划分:

  • user space: 应用程序和C库运行在用户空间
  • kernal space: 而核心内核和设备驱动程序,以及硬件则常驻内核空间

linux_kernel_space

虚拟地址空间 vs 物理内存

用户空间和内核空间不是物理内存的空间划分,而是抽象的,依据 CPU 的字长来决定空间的大小的。

  • 32位CPU 寻址空间: 2的32次方 B = 4GiB
  • 64位CPU 寻址空间: 2的64次方 B (实际使用位数是42位或47位寻址空间)

现代的 CPU 基本上都是 64 位,所以最大寻址空间远超目前的物理内存 4GiB, 8GiB, 64GiB 等

linux_virtual_address_space

  1. 关于 TASK_SIZE: IA32 位架构, TASK_SIZE 为 3GiB, 所以内核空间为 1GiB
  2. 64位架构,实际上用不了这么多, 可能会造成一定的空洞,参考 arm 64 的架构

arm64_kernel_space

所以虚拟地址空间和物理内存空间是独立的

地址空间切换

应用程序要打印一段字符:

  1. 应用程序在用户空间调用 C 库的 print 函数
  2. C 库中 print 函数进行 write() 系统调用
  3. 然后 CPU 切换到内核空间执行系统 write() 调用
  4. 当 CPU 执行完系统调用后,又切换到用户空间

kernal_space_user_space_switch

参考

  1. 《深入Linux内核架构》
  2. 《Linux内核设计与实现》(原书第3版)
  3. 《深入理解计算机系统》
  4. [Linux 虚拟内存和物理内存的理解][3]
  5. ARM64 Linux 内核虚拟地址空间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值