摘要: 本文主要对内存管理基础知识及分段与分页介绍。
关键字:Armv8、体系结构、ARM架构、内存管理、分段、分页
1. 内存管理基础
最早的程序是放在卡纸上的,计算机每读取一张卡片就运行一条指令,这种从外部存储介质上直接运行指令的效率很低。后来出现了内存存储器,也就是说程序要运行,首先要加载,然后执行,这就是是所谓的“存储程序”。
单道编程的内存管理,整个系统只有一个用户进程和一个操作系统。用户程序独占整个用户空间,实现简单,无外部碎片,存储器利用率极低。
多道编程的内存管理,系统可以同时运行多个进程。内存管理出现了固定分区和动态分区两种技术。
固定分区是在系统编译阶段,内存被划分成许多静态分区,进程可以装入大于或等于自身大小的分区。
动态分区是在一整块内存中划出一块内存共操作系统本身使用,剩下的内存在进程装入时,根据进程的大小动态的建立分区,并使分区的大小正合适进程的需要。动态分区没有内部碎片,但是有外部碎片。
内部碎片,分配给某进程的内存区域中,如果有部分没有用上。
外部碎片,指内存中某些空闲分区由于太小而难以利用。
内存管理的功能:
内存控群的分配与回收,地址转换(逻辑地址转换成物理地址),内存空间扩充(利用虚拟存储或交换覆盖技术),内存保护(避免相互干扰和破坏)。
进程如何使用内存?进程大概在3个地方需要用到内存。
进程本身。比如,代码段及数据段用来存储程序本身需要的数据。
栈空间。程序运行时用来保存函数调用关系、局部变量、函数参数以及函数返回值等内容。
堆空间。程序运行时需要动态分配程序需要使用的内存,比如存储程序需要使用的数据存储空间。
2. 分段与分页机制
基于进程地址空间这个概念,人们最早想到的一种机制叫分段机制,其基本思想是把程序所需的内存空间的虚拟地址映射到某个物理地址空间。
分段机制可以解决地址空间保护问题。分段机制对虚拟内存到物理内存映射以进程为单位。当物理内存不足时,换出到磁盘的依然是整个进程,因此会有大量的磁盘访问,进而影响系统性能。
分页机制是让程序中一部分不使用的内存可以存放到交换磁盘中,而程序正在使用的内存继续保留在物理内存中。
分页机制系统中,处理器直接寻址虚拟地址,这个地址不会直接发给内存控制器,而是先发给内存管理单元(Memory Management Unit,MMU)。MMU负责虚拟地址到物理地址的转换和翻译工作。
一级页表,虚拟地址VA[31:0]分为两部分,VA[31:12]共20位,用于查询页表项;VA[11:0]共12位,是页面偏移量。
处理器采用一级页表,虚拟地址空间的位宽32位,寻址范围0-4GB,物理地址空间也是32位,因此最多支持4GB物理内存。如果每个页表项占用4个字节,需要220×4B=4MB空间。
二级页表中,VA[31:20]被用作一级页表项索引,共有12位,最多可以索引4096个页表项;VA[19:12]被用作二级页表项索引,共有8位,最多可以索引265个页表项。
当一级页表项中如果为null,表示对应的1024个虚拟页没有使用,所以就不需要二级页表了,节省了空间。当然,如果虚拟地址页完全映射的话,二级页表的占用=一级页表项(1024 * 4B) + 二级页表项(1024 *1024* 4B) = 4M + 4K,比一级映射多了4K,不过这种情况基本上没有可能,因为进程的地址空间很少有完全映射的情况。正是因为省却了大量未映射的页表项使得页表的空间大幅减少。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
关于JNH官网电子
JNH官网电子技术有限公司(英文名称:Emdoor Electronics Technology Co.,Ltd)是国内资深的研发工具软件提供商,公司成立于 2002 年,面向中国广大的制造业客户提供研发、设计、管理过程中使用的各种软件开发工具,致力于帮助客户提高研发管理效率、缩短产品设计周期,提升产品可靠性。
20 年来,先后与 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立战略合作伙伴关系,并作为他们在中国区的主要分销合作伙伴服务了数千家中国本土客户,为客户提供从芯片级开发工具、EDA 设计工具、软件编译以及测试工具、结构设计工具、仿真工具、电气设计工具、以及嵌入式 GUI 工具等等。JNH官网电子凭借多年的经验积累,真正的帮助客户实现了让研发更简单、更可靠、更高效的目标。
欢迎关注“JNH官网电子”公众号
了解更多研发工具软件知识