⭐❤️浅谈Linux用户空间与内核空间的理解❤️⭐

19 篇文章 1 订阅

为什么要分用户空间和内核空间

我的脑子里一直有这样一个问题,为什么要区分内核空间和用户空间呢,本质上不都是两套代码吗,还要搞得这么麻烦,还有最主要的一个问题问题,内核空间和用户空间的区分在哪里,于是我带着这个问题去了解了一下,顺便记录下来。

优点

  • 用户空间的崩溃不会造成内核空间的崩溃,每个进程之间都有自己特定的地址和数据空间,并且相互独立,提高系统运行的稳定性
  • 统一接口,让用户不需要关注底层如何实现,只需要调度响应的api就可以使用。

内核空间与用户空间的数据交互

现在CPU内部往往采用了不同的操作模式,不同的模式有不同的权限以及功能,高层的程序通常不能访问低级程序的功能,所以要切换到低级模式。
以ARM处理器为例子,ARM体系结构是一种基于模式的体系结构。在引入安全扩展之前,它具有7种处理器模式,有六个特权模式和一个非特权用户模式。特权是执行用户(非特权)模式无法完成的某些任务的能力。在用户模式下,对影响整个系统配置的操作存在一些限制,例如,MMU的配置和缓存操作。

  • 用户模式:大多是程序作用在用户模式,当处理器运行在用户模式下,许多资源是不能被访问的。
  • 快速中断模式(fiq):高速数据传输与通道处理
  • 外部中断模式(irq):用于通用的中断处理
  • 管理模式:操作系统使用的保护模式
  • 数据访问中止模式(abt):当数据或指令中止时进入该模式,用于虚拟存储以及数据保护
  • 系统模式(sys):运行具有特权的操作系统任务,
  • 未定义指令中止模式:如果出现了未定义的指令执行则进入该模式进行判断
    工作模式
    ① 板子上电时,CPU处于SVC模式,它用的是SVC模式下的寄存器
    ② 程序运行时发生了中断,CPU进入IRQ模式,它用的IRQ模式下的寄存器
    ③ CPU处理完中断,它切换回SVC模式,继续使用SVC模式下的寄存器
    ④ CPU发生某种异常时,比如读取内存出错,它会进入ABT模式,使用ABT模式下的寄存器来处理错误。
    在某种模式下,CPU执行时使用的是这种模式的资源,比如使用的是这组模式的寄存器。
    这样就可以免去保存上一个模式所使用的寄存器。

内核空间和用户空间是用来区分程序的两种不同状态,他们使用不同的地址空间。Linux只能通过系统调用和硬件中断完成从用户空间到内核空间的控制跳转

两种空间的内存分配

在32位系统下,每一个进程都会有4G的虚拟空间,其中,3G的用户空间,1G的内存空间
用户空间: 用户空间用来存放命令行参数,环境变量,栈区堆区,共享库,bss区(未初始化的全局数据),data区(初始化的全局数据),代码区还有4k没使用的空间。
内核空间: 一个PCB进程控制块,其实就是一个超大的结构体task_struct,里面有进程pid,进程状态,虚拟地址空间信息的等等。
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔动山霸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值