操作系统内存管理面试问题

内存管理是做什么的?

操作系统的内存管理主要是负责内存的分配、回收,另外对地址转换也就是将逻辑地址转化为物理地址等功能也是操作系统内存管理要负责的事情。

常见的内存管理机制有哪些?

氛围两个大类,一个是连续分配管理,一个是非连续分配管理。其中,连续分配管理就是给用户分配一个连续的存储空间,常见的如块式管理;非连续分配管理就是分配不连续的内存空间给用户,常见的有页式管理段式管理

  • 块式管理
    这是很老的内存管理方法。将内存分成一些固定大小的块,每个块中包含一个进程。进程要运行的时候,系统就把一个块分配给相应的进程。如果一个进程所需的内存量较小,一个块剩余的部分就被浪费了。未被利用的空间我们称之为碎片。

  • 页式管理
    把主存分为大小相同且固定的一页一页的形式,划分力度比块式管理大,这样可以提高内存利用率,减少碎片。页式管理通过页表对应逻辑地址和物理地址
    那么,页表是怎么转化地址的呢?页表中存放页号(逻辑地址)到块号(物理地址)的映射。逻辑地址:页号+页内地址;用页号在页表中查找块号,块号+页内地址组成物理地址。
    在这里插入图片描述

  • 段式管理
    页式管理虽然提高了内存的利用率,但是页式管理其中的页其实是无任何实际意义的。段式管理把主存分成一段段的,每段空间又要比一页空间要小很多。但是,最重要的是段是有实际意义的,每个段定义了一组逻辑信息。段式管理通过段表对应逻辑地址和物理地址。
    段的分割方式是按逻辑结构(函数)来进行划分的,段的大小不要求一致。好处就是:便于多道程序共享内存,各段程序修改互不影响。
    在这里插入图片描述

快表和多级页表

  • 快表就是用缓存的思想,有点像redis,使用块表的地址转化流程如下:
  1. 根据虚拟地址中的页号查找快表;
  2. 如果该页在快表中,直接从快表中读取相应的物理地址;
  3. 如果页表不在快表中,就访问内存中的页表,再从页表中得到物理地址,同时将页表中的该映射放到快表中去(局部性原理);
  4. 当快表填满后,要登记新页,可以用LRU算法淘汰快表中的一个页。
  • 多级页表

    目的是为了避免把全部页表一直放在内存中占用过多空间。这是一种时间换空间的典型场景。

分页机制和分段机制的异同点

  • 共同点
  1. 分页机制和分段机制都是为了提高内存利用率,减少内存碎片
  2. 都是非连续内存管理方式,但是每个段和页中的内存都是连续的
  • 不同点
  1. 页的大小是固定的,而段的大小不固定
  2. 分页仅满足操作系统的内存管理需求,而段是逻辑信息的单位。

为什么需要虚拟地址空间?

如果程序都直接访问和操作物理内存会存在着么两个问题:

  1. 用户程序任意访问内存,容易破坏操作系统,造成OS崩溃
  2. 运行多个程序,可能会访问同一个地址,导致程序崩溃

所以需要虚拟地址空间,有了虚拟地址空间我们可以做到:

  1. 使用相邻的虚拟地址访问不相邻的物理内存
  2. 可以使用虚拟地址来访问大于可用物理内存的内存缓冲区
  3. 不同进程使用的虚拟地址彼此隔离
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值