内存管理单元MMU

参考文献:

[1] 《嵌入式系统软件和操作系统》


本博客主要回答这几个问题:

1. 虚拟地址和物理地址有什么关系?

2. 如何通过设置MMU来控制虚拟地址到物理地址的转化

3. MMU的内存访问权限机制

4. TLB、Cache、Write buffer的原理,使用时的注意事项


MMU提供一种内存保护的硬件机制。内存保护用来防止地址越界和防止操作越权。采用内存保护机制的每个应用程序都有自己独立的地址空间,当一个应用程序要访问某个内存单元时,由硬件检查该地址是否在限定的地址空间内,如果不是就要进行地址越界处理。另外,还要防止对于允许多个应用程序共享的某块存储区域,每个应用程序都要有自己的访问权限,如果违反了权限规定,则要进行操作越权处理。


1、存储管理的实模式保护模式

1.1 实模式

对于实时系统来说,实模式方案简单,存储管理的开销确定,比较适合规模较小、简单和实时性要求较高的系统。其缺点是没有存储保护、安全性差,在应用程序中任意一个小错误或者蓄意攻击都有可能导致整个系统的崩溃。

1.2 保护模式

在保护模式存储管理方式中,微处理器必须具有MMU硬件并启动它。

  • 系统内核和用户程序有各自独立的地址空间,操作系统和MMU共同完成逻辑地址到物理地址的映射
  • 每个应用程序只能访问自己的地址空间,对于共享的内存区域,也必须按照规定的权限规则来访问,具有存储保护功能。

保护模式存储管理方式安全性和可靠性好,适用于规模较大、较复杂和实时性要求不高的系统

2、分区存储管理

分区存储管理把整个内存划分为系统区和用户区两大区域,然后再把用户区划分为若干分区,可以同时有多个任务在系统中运行,每个任务都有自己各自的地址空间。

2.1 固定分区存储管理

 

2.2 可变分区存储管理

 

 

3、地址映射

3.1 物理地址和逻辑地址

1. 物理地址

物理地址也叫内存地址、绝对地址或者实地址。将系统内存分割为很多个大小相等的存储单元,如字节或字,每个单元给它一个编号,这个编号就成为物理地址。操作时只有通过物理地址,才能对内存单元进行直接访问。物理地址的集合就称为物理地址空间,或者内存地址空间。物理地址是一个一维的线性空间例如,一个内存的大小为256MB,那么它的内存地址空间是从0x0到0x0FFFFFFF

计算方法:256MB = 2^8 * 2^20 (B) = 2^28 = 268435456 = 0x10000000;起始地址为0,则终止地址为0x10000000 - 1 = 0x0FFFFFFF。

2. 虚拟地址

虚地址也称为逻辑地址、相对地址。用户的程序通过汇编或编译后形成目标代码,而这些目标代码才用的就是相对地址的形式,起始地址为0,其余指令中的地址都是相对于这个首地址来编址的。显然,虚拟地址和物理地址是完全不同的,不能用虚拟地址来直接访问物理地址。

因此,为保证CPU在执行指令时可以正确的访问存储单元,系统在装入一个用户程序后,需要将用户程序中的逻辑地址转换为运行时及其直接寻址的物理地址,这个过程就称为地址映射。只有把程序中的虚拟地址映射为物理地址,程序才可以正常工作。

3.2 地址映射方式

地址映射是由MMU完成的。当一条指令在CPU中执行,并且需要访问内存时,CPU就发送一个虚拟地址给MMU,MMU负责把这个逻辑地址转换为相应的物理地址,并根据这个物理地址去访问内存。地址映射主要有静态地址映射和动态地址映射两种方式。

1. 静态地址映射

 

2. 动态地址映射

 

4、页式存储管理

与分区存储管理方式不同,页式管理方式打破了存储分配的连续性,一个程序的逻辑地址空间可以分布在若干个离散的内存块上,以达到充分利用内存,提高内存利用率的目的。

在页式存储管理中,一方面,把物理内存划分为许多大小固定的内存块,称为物理页面(physical page),或叶框(page frame);另一方面,把虚拟地址也划分为大小相同的快,称为页面(page)。页面的大小为2^{_{n}},一般在512字节~8KB之间

将一个用户程序装入内存时,不是以整个程序为单位把它存放在一整块连续地区域中,而是以页面为单位进行分配的。对于一个大小为N个页面的程序,需要有N个空闲的物理页面,这些页面可以使不连续的。

实现页式存储管理时,需要解决数据结构、内存分配与回收、地址映射等问题。

1. 数据结构

在页式存储管理中,主要的数据结构有页表(page table)和物理页面表两个。页表给出了任务的虚拟页面号与内存中的物理页面号之间的对应关系物理页面表用来描述内存空间当中各个物理页面的使用分配状况。物理页面表可以采用位视图或空闲页面链表等方法来实现。

2. 内存的分配与回收

当一个任务当来的时候,首先需要计算它所需的页面数N,查询是否还有N个空闲的物理页面;如果有足够的空闲物理页面,则需要申请一个页表,其长度为N,并把页表的起始地址填入到该任务的任务控制块TCB中;然后分配N个空闲的物理页面并编号,把它们的编号填入到也表中,建立逻辑页面与物理页面之间的对应关系,并对刚刚被占用的那些物理页面进行标记。

当一个任务运行结束释放了它所占用的内存之后,需要对这些物理页面进行回收。

3. 地址映射

在页式存储管理方式中,当一个任务被加载到内存后,连续的虚拟地址空间被划分为一个个虚拟页面这些虚拟页面被装入到不同的物理页面中。在这种情况下,为了保证程序能够正确运行,需要把程序中使用的虚拟地址转换为内存访问是的物理地址,完成地址映射。

地址映射是以页面为单位来进行处理的,在进行地址映射时,首先分析虚拟地址,对于给定一个虚拟地址,找到它所在的虚拟页面,以及它在页面内的偏移地址;然后进行页表查找,根据虚拟页面号,从业表中找到它所对应的物理页面号;最后进行物理地址合成,根据物理页面号及业内偏移地址,确定最终的物理地址。

由虚地址找到虚拟页面以及相应的地址偏移 --> 在页表(存储着虚拟地址到物理地址的映射关系)中找到对应的物理页面号 --> 合成物理地址

操作系统必须为每个任务都维护一张页表,开销比较大,当简单的也表结构不能满足应用要求时,必须设计出更为复杂的也表结构,如多级页表结构、哈希页表结构、反置页表等。

5、虚拟页式存储管理

在操作系统的支持下,MMU还可以提供虚拟存储功能,即使一个任务所需要的内存空间超过了系统所能提供的内存空间,也能够正常运行。

虚拟页式存储管理就是在页式存储管理的基础之上,增加了请求调页和页面置换的功能。在虚拟页式存储管理方式中,当一个用户程序需要调入内存区运行时,不是将这个程序的所有页面都装入内存,而是只装入部分页面,就可以启动这个程序去运行。

在运行过程中,如果发现要执行的指令或者要访问的数据不再内存当中,就向系统发出缺页中断请求,然后系统在处理这个中断请求时,就会将保护在外存中的相应页面调入内存,从而是该程序能够继续运行。

系统在处理缺页中断时,需要调入新的页面。如果此时内存已满,就要采用某种页面置换算法,从内存中选择一个页面,把它置换出去。常用的页面置换算法包括:最优页面置换算法(OPT),最近最久未使用算法(LRU)、最不常用算法(LFU)、先进先出算法(FIFO)和时钟页面置换算法(Clock)

采用虚拟页式存储管理方式,除了每个页表项来说,除了需要逻辑页面号和与之相对的物理页面号信息外,还需要增加包括驻留位、保护位、修改为和访问位等信息。


 

分页内存管理单元MMU)是一种负责处理中央处理器(CPU)的内存访问请求的计算机硬件。它的功能包括虚拟地址到物理地址的转换(即虚拟内存管理)、内存保护、中央处理器高速缓存的控制等。MMU使用虚拟地址中的重要位来索引转换表中的条目,并确定正在访问的内存块。通过MMU地址转换功能,系统能够运行多个任务,每个任务在自己的私有虚拟内存空间中运行,而不需要了解系统的物理内存映射或其他同时运行的程序。MMU还可以控制每个内存区域的内存访问权限、内存顺序和缓存策略。总之,分页内存管理单元是实现虚拟内存系统的关键硬件组件。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [内存管理单元——MMU](https://blog.csdn.net/weixin_43834468/article/details/130138697)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [操作系统 内存管理单元MMU TLB](https://blog.csdn.net/u014099894/article/details/127342188)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值