1、内存管理主要做什么?

主要负责内存的分配和回收。

2、操作系统的内存管理机制是什么?

块式管理:将内存分为几个固定大小的块,每个块中只包含一个进程。如果程序运行需要内存的话,操作系统就分配给它一块,如果程序运行只需要很小的空间的话,分配的这块内存很大一部分几乎被浪费了。这些在每个块中未被利用的空间,我们称之为碎片。

页式管理:把主存分为大小相等且固定的一页一页的形式,页较小,相对相比于块式管理的划分力度更大,提高了内存利用率,减少了碎片。页式管理通过页表对应逻辑地址和物理地址。

段式管理  页式管理虽然提高了内存利用率,但是页式管理其中的页实际并无任何实际意义。 段式管理把主存分为一段段的,每一段的空间又要比一页的空间小很多 。但是,最重要的是段是有实际意义的,每个段定义了一组逻辑信息,例如,有主程序段 MAIN、子程序段 X、数据段 D 及栈段 S 等。 段式管理通过段表对应逻辑地址和物理地址。

段页式管理机制结合了段式管理和页式管理的优点。简单来说段页式管理机制就是把主存先分成若干段,每个段又分成若干页,也就是说 段页式管理机制 中段与段之间以及段的内部的都是离散的。


3、上面提到页式管理通过页表对应逻辑地址和物理地址,什么是页表?


页表是存放在内存中的一个数据结构,存放逻辑地址和物理地址的映射关系。每次地址翻译硬件(MMU)将一个虚拟地址转换成物理地址都会读取页表。



4、页表的机制有什么缺陷?


页表的机制有个问题就是:当虚拟地址空间很大,页面也会很大,会影响内存的性能。


为了避免把全部页表一直放在内存中占用太多空间,引入了多级页表

多级页表,提供了内存的空间性能。但是提高空间性能是以浪费时间性能为基础的,因此为了补充损失的时间性能,引入了快表(TLB)的机制。

5、什么是快表?

快表可以理解为一种特殊的高速缓冲存储器(Cache),其中的内容是页表的一部分或者全部内容。作为页表的 Cache

它的作用与页表相似,但是提高了访问速率。由于采用页表做地址转换,读写内存数据时 CPU 要访问两次主存。有了快表,有时只要访问一次高速缓冲存储器,一次主存,这样可加速cpu寻址和指令执行的速度。


6、什么是cpu寻址?

cpu寻址其实就是根据将虚拟地址转换成物理地址的过程。需要借助CPU中一个叫MMU(Memory Management Unit 内存管理单元)的硬件。


7、为什么需要虚拟地址(逻辑地址)?

没有虚拟地址空间的时候,程序都是直接访问和操作的都是物理内存 ,但是这样会带来一系列问题,比如可能对操作系统造成伤害以及给同时运行多个程序造成困难。

虚拟地址的优势:

通过虚拟地址访问内存有以下优势:

  • 程序可以使用一系列相邻的虚拟地址来访问物理内存中不相邻的大内存缓冲区。

  • 程序可以使用一系列虚拟地址来访问大于可用物理内存的内存缓冲区。

  • 不同进程使用的虚拟地址彼此隔离。一个进程中的代码无法更改正在由另一进程或操作系统使用的物理内存。


8、虚拟内存是什么?

现代操作系统提供了一种对主存的抽象概念,叫作虚拟内存。它为每个进程提供了一个非常大的、一致的、连续的和私有的地址空间。

 

9、虚拟内存的作用是什么?

可以让程序拥有超过系统物理内存大小的可用内存空间。

它让每个进程产生了一种自己在独享内存的错觉。这样会更加有效地管理内存并减少出错。

 

10、什么是局部性原理

局部性原理:是指我们的程序在执行的时候往往呈现局部性规律。也就是说在某个较短的时间段内,程序执行局限于某一个小部分,程序访问的存储空间也局限于某个区域。

局部性原理是虚拟内存技术的基础,正是因为程序运行具有局部性原理,才可以只装入部分程序到内存就开始运行。

局部性原理主要表现在时间局限性和空间局限性。虚拟内存技术实际上是建立了“内存——外存”的两级存储器的结构,利用局部性原理实现高速缓存。

 

11、虚拟内存是怎么实现的?

请求分页存储管理

请求分段存储管理

请求段页式存储管理

 

12、这些管理方式会有遇到哪些问题?

缺页中断:如果需要执行的指令或者访问的数据尚未在内存(称为缺页或缺段),由处理器通知操作系统将相应的页面或者段掉入到内存,然后继续执行程序。

cpu寻址:逻辑地址到物理地址的变换。

 

13、为什么会发生页面置换

当发生缺页中断时,如果当前内存中并没有空闲的页面,操作系统就必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。用来选择淘汰哪一页的规则叫做页面置换算法,我们可以把页面置换算法看成是淘汰页面的规则。

 

14、有哪些常用的页面置换算法

OPT 页面置换算法(最佳页面置换算法) :最佳(Optimal, OPT)置换算法所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。但由于人们目前无法预知进程在内存下的若千页面中哪个是未来最长时间内不再被访问的,因而该算法无法实现。一般作为衡量其他置换算法的方法。

FIFO(First In First Out) 页面置换算法(先进先出页面置换算法) : 总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面进行淘汰。

LRU (Least Currently Used)页面置换算法(最近最久未使用页面置换算法) :LRU算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 T,当须淘汰一个页面时,选择现有页面中其 T 值最大的,即最近最久未使用的页面予以淘汰。

LFU (Least Frequently Used)页面置换算法(最少使用页面置换算法) : 该置换算法选择在之前时期使用最少的页面作为淘汰页。https://mp.weixin.qq.com/s/uvBs5lQZwi6zHyWo7JBcrQ