【操作系统】04.内存管理基础、覆盖与交换

【嵌入式八股】一、语言篇https://www.nowcoder.com/creation/manager/columnDetail/mwQPeM

【嵌入式八股】二、计算机基础篇(本专栏)https://www.nowcoder.com/creation/manager/columnDetail/Mg5Lym

【嵌入式八股】三、硬件篇https://www.nowcoder.com/creation/manager/columnDetail/MRVDlM

【嵌入式八股】四、嵌入式Linux篇https://www.nowcoder.com/creation/manager/columnDetail/MQ2bb0

三、内存管理

要结合【C/C++部分内存管理】以及【Linux内核驱动中内存资源管控】一起看

基础

46.操作系统在对内存进行管理的时候需要做些什么?
  1. 内存分配:操作系统需要根据应用程序的内存需求分配相应的内存空间,通常有两种分配方式,一种是连续内存分配,另一种是非连续内存分配。连续内存分配是指在内存中找到一块连续的未被占用的内存区域分配给应用程序,非连续内存分配则是通过页式或段式管理等技术将内存分为多个非连续的区域进行分配。
  2. 内存保护:操作系统需要保护系统核心代码和数据不被非法访问或修改,通常通过虚拟内存机制和访问权限控制来实现。虚拟内存机制是将内存分为一些大小相等的虚拟页面,每个页面与一个物理页面相对应,通过地址映射实现内存的保护和管理。访问权限控制则是通过权限位控制来限制不同进程或线程对内存的访问权限。
  3. 内存回收:当应用程序不再使用某个内存空间时,操作系统需要及时回收这些空间,以便其他应用程序可以使用。通常有两种内存回收方式,一种是显式回收,即应用程序主动释放已分配的内存空间;另一种是隐式回收,即操作系统在进程结束或者发生崩溃时回收相应的内存空间。
  4. 内存管理策略:操作系统需要根据系统实际情况制定相应的内存管理策略,以优化内存使用效率。例如,在连续内存分配中,可以采用首次适应、最佳适应、最坏适应等算法来选择空闲内存块;在非连续内存分配中,可以采用页式、段式或页段式管理等方式来管理内存。
47.解释下虚拟地址、逻辑地址、线性地址、物理地址、总线地址?

alt

一个由程序员给出的逻辑地址,要先经过分段机制的转化变成线性地址,再经过分页机制的转化变成物理地址

虚拟地址是指由程序产生的由段选择符和段内偏移地址组成的地址。这两部分组成的地址并没有直接访问物理内存,而是通过分段地址的变换处理后才会对应到相应的物理内存地址。 由MMU虚拟出来的地址。

逻辑地址指由程序产生的段内偏移地址。有时直接把逻辑地址当成虚拟地址,两者并没有明确的界限。

线性地址是指虚拟地址到物理地址变换之间的中间层,是处理器可寻址的内存空间(称为线性地址空间)中的地址。程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段基址就生成了一个线性地址,线性地址 = 逻辑地址 + 基地址。如果启用了分页机制,那么线性地址可以再经过变换产生物理地址。若没有采用分页机制,那么线性地址就是物理地址。

物理地址是指现在CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果。虚拟地址到物理地址的转化方法是与体系结构相关的,一般有分段与分页两种方式。以x86CPU为例,分段、分页都是支持的。内存管理单元负责从虚拟地址到物理地址的转化。逻辑地址是段标识+段内偏移量的形式,MMU通过査询段表,可以把逻辑地址转化为线性地址。

  • 如果CPU没有开启分页功能,那么线性地址就是物理地址;

  • 如果CPU开启了分页功能,MMU还需要查询页表来将线性地址转化为物理地址:

    逻辑地址(段表)→线性地址(页表)→物理地址。 映射是一种多对一的关系,即不同的逻辑地址可以映射到同一个线性地址上;不同的线性地址也可以映射到同一个物理地址上。而且,同一个线性地址在发生换页以后,也可能被重新装载到另外一个物理地址上,所以这种多对一的映射关系也会随时间发生变化。

总线地址是指在x86下的I/O地址,ARM下的物理地址。(在x86下,外设的I/O地址是独立的,即有专门的指令访问外设I/O,I/O地址就是“总线地址”,而RAM地址就是“物理地址”。在ARM下,I/O和RAM统一编址,但linux为了统一各个平台,仍然保留这个概念,总线地址其实就是物理地址。)

  • IO内存空间,统一编址,设备地址作为内存的扩展,一般嵌入式用这种
  • IO端口空间,独立编址,设备地址独立编制,一般用于x86,了解即可

逻辑地址:我们程序员写代码时给出的地址叫逻辑地址,其中包含段选择子和偏移地址两部分。

线性地址:通过分段机制,将逻辑地址转换后的地址,叫做线性地址。而这个线性地址是有个范围的,这个范围就叫做线性地址空间,32 位模式下,线性地址空间就是 4G。

物理地址:就是真正在内存中的地址,它也是有范围的,叫做物理地址空间。那这个范围的大小,就取决于你的内存有多大了。

虚拟地址:如果没有开启分页机制,那么线性地址就和物理地址是一一对应的,可以理解为相等。如果开启了分页机制,那么线性地址将被视为虚拟地址,这个虚拟地址将会通过分页机制的转换,最终转换成物理地址。

48.内存管理有哪几种方式?

常见的内存管理方

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

查阅整理上千份嵌入式面经,将相关资料汇集于此,主要包括: 0.简历面试 1.语言篇 2.计算机基础【本专栏】 3.硬件篇 4.嵌入式Linux (建议PC端查看)

全部评论
楼主厉害,看上去这些分享的内容都很深了
点赞 回复 分享
发布于 2023-04-05 09:36 辽宁
好多嵌入式不是都用的C?
点赞 回复 分享
发布于 2023-04-05 09:36 湖南

相关推荐

11-15 19:28
已编辑
蚌埠坦克学院 硬件开发
点赞 评论 收藏
分享
牛客162194370号:
点赞 评论 收藏
分享
评论
2
3
分享
牛客网
牛客企业服务