3.【Linux】之地址空间

0x00.引言

c语言中常说的某变量的地址是真实的物理地址吗?

不是。准确来说是指进程地址空间,本文将围绕地址空间介绍虚拟地址空间,页表和mmu,以及进程地址空间与物理地址间的关系

0x01.进程地址空间

每一个进程在启动时操作系统都会给它创建一个地址空间,即进程地址空间,每一个进程由对应的pcb(task_struct)结构体维护,所谓的进程地址空间实际上是一个叫mm_struct的结构体。

0x02.虚拟地址空间

1.概念

虚拟地址空间是指操作系统为每个运行的进程提供的抽象地址空间。在这个虚拟地址空间中,程序认为自己独占了整个计算机内存,不受底层硬件的限制。程序使用虚拟地址进行内存访问,而这些虚拟地址最终会由内存管理单元(MMU)转换为物理地址,以实际在硬件上存取数据。

就是或操作系统给每个进程“画大饼”、

2.虚拟地址空间和进程地址空间的关系

这个困扰了我很久,求助了chatgpt得到的答案是:

简而言之就是每个进程有自己的进程地址空间,这些进程地址空间自认为自己独占整个虚拟地址空间,其实他们分布在虚拟地址空间的不同部位,共享虚拟地址空间。

3.为何要存在地址空间?

1.可以将内存管理模块和进程管理模块进行解耦

2.在分配物理内存时采用延迟分配的策略来提高效率。(内存的使用率高,在需要用的时候再分配物理内存)

0x0 3页表和mmu

1.概念

页表是一种数据结构,通常是有多个级别的表。用于存储虚拟地址空间和物理地址空间之间的映射关系。它记录了虚拟页面和对应的物理页面之间的映射关系。

mmu(memory management unit)内存管理单元是计算机体系结构中的一个硬件组件,负责实现虚拟地址到物理地址的转换。它是CPU和主存之间的桥梁,通过在运行时动态地将虚拟地址转换为物理地址,使得程序可以使用虚拟地址进行访问,而无需关心底层的物理地址。

地址转换过程: MMU的工作流程涉及到对页表的查询。当CPU发出一个虚拟地址请求时,MMU首先使用虚拟地址的高位(通常是页表索引)查询页表,找到相应的物理页框号,然后将虚拟地址的低位(通常是偏移量)添加到物理页框号的基地址上,得到最终的物理地址。

2.联系

  1. 共同工作: 页表和MMU共同协作以实现虚拟地址到物理地址的映射。页表提供虚拟地址和物理地址之间的映射关系,而MMU负责实际的地址转换。

  2. 地址映射: 页表中的项(表项)存储了虚拟页面和物理页面之间的映射关系。MMU根据这些映射关系执行地址转换,将程序使用的虚拟地址映射到实际的物理地址。

  3. 性能影响: 页表的设计和访问效率直接影响系统的性能。合理的页表设计可以提高内存管理的效率,而MMU的快速地址转换能力有助于加速内存访问过程。

  4. 硬件支持: MMU通常是硬件级别的支持,而页表的创建和维护是由操作系统负责的。操作系统需要与MMU紧密协作,确保页表的正确性和及时的更新。

0x04.总结

进程创建操作系统为该进程创建pcb(task_struct),并为其分配虚拟地址空间(包括用户空间和内核空间)和页表。然后加载程序的代码和数据到虚拟地址空间中并初始化栈(用于存放函数调用和局部变量),随后操作系统将页表中的条目填充建立映射关系,并为进程分配物理内存页框,将虚拟页映射到物理页上。当新进程被调度执行时,CPU通过MMU将进程的虚拟地址转换为实际的物理地址,进程开始执行。

以上就是全部内容,如果有帮助,请点赞支持

  • 60
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值