专业术语

页框:内存中固定长度的块。

:外存中固定长度的块。

:外存中可变长度的块。

内存管理需求

重定位:程序从内存换出到外存后,再换回内存时,在内存空间中的位置和原先的位置有极大可能不相同。此时需要保证程序的执行和之前一样,不因所在位置的不同变化。

保护:每个进程应受保护,不被其他进程干扰。保护的实现是由处理器满足的,通过在指令访问内存时判断内存访问是否非法决定。如果由 OS 实现,则将耗费大量的处理器时间。

共享:多个进程可以访问同一个特定的内存区域。

逻辑组织:OS 能够有效处理组织成模块的用户程序和数据。

物理组织:两级存储器(内存和外存)之间的数据移动由 OS 负责。

内存分区

固定分区:将内存分为固定大小的块的方式。固定分区分为两种方式,一种是等大小的分区方式,每一块分区的大小是相等的;另一种是大小不相等的分区方式,每一块的分区的大小不等。

等大小的固定分区

难点:程序的大小可能较大不能全部放入一个分区,需要放入多个分区;内存的利用率低。

内部碎片(internal fragmentation):固定分区中放入的数据块的大小小于固定分区的大小,导致分区内部空间浪费的现象。

不等大小的固定分区

将进程分配到能容纳该进程的最小分区中,使得内部碎片最小。为了实现该功能,需要为每种大小的分区设置一个队列,这个队列存放和这个分区匹配的处于非运行态的进程。

另一种方案是对于所有的不等大小分区,设置一个队列,根据具体的进程根据其大小分配最接近其大小的能容纳它的分区。

固定分片区的缺点

1.分区的数量在系统初始阶段已确定。

2.所需空间小的进程不能有效利用分区空间。

动态分区:分区的大小和数量都是可变的。当进程需要内存空间时,给其分配一个大小与之所需大小相同的分区。

外部碎片(external fragmentation):所有分区外的内存空间变得碎片化,内存的利用率下降的现象。

压缩(compaction):OS 不时移动进程,使得进程占有的内存空间连续,空闲空间也连续。缺点是浪费处理器时间。

当空闲空间有多个位置可以满足需要内存空间的进程时,有三种分配方式:(前提是都分配大于等于进程需要的大小的分区)

1.最佳适配:选择和继承所需大小最接近的块。一般情况下,此方式性能最差,很快就会产生很多的小碎片。

2.首次适配:从内存空间起始位置扫描,直到找到一个可以容纳进程的块分配给进程。一般情况下,此方式最好和最快。

3.下次适配(next-fit):将进程上次分配的内存空间所在位置为起始点开始扫描,直到找到满足其所需大小的块分配给进程。一般情况下,此方式会使得内存空间尾部产生很多小碎片。

伙伴系统(buddy system):最开始,整个可分配的内存空间作为一个块,当一个进程需要大小为 \(s\) 的内存空间时,将整个内存空间等分为两块,若划分后的块大小小于 \(s\),则将整个内存空间分配给该进程;若划分后的块大小大于等于 \(s\),则再次等分该块,直到划分的块大小大于等于 \(s\) 且最接近 \(s\) 时将该块分配给该进程。当有两个大小相等的相邻空闲块时,将其合并为同一块。该方案克服了固定分区和动态分区的缺点。

逻辑地址:当前内存中访问数据的和物理地址无关的地址,访问真实内存前需要将其转换成物理地址。

相对地址:逻辑地址的特例,一般情况下指相对于进程起始点的地址。

物理地址(绝对地址):数据在内存中的真实地址。

逻辑地址到物理地址的转换需要基址寄存器和界限寄存器等寄存器。一般情况下,基址寄存器存放当前进程的起始地址,逻辑地址通过使用基址寄存器中的数据运算得出物理地址;界限寄存器存放该进程运行访问的最大地址,将上一步运算得出的物理地址与之相比较,如果超出该地址,则向 OS 发出中断信号;否则,访问该物理地址执行操作。

分页

分页技术将内存空间分为等大小的块,这个块称为页框(frame),和固定分区相比而言,页框的大小比分区的大小小很多,同时页框的大小为 \(2^k\)。同时,每个进程划分成多个和页框等大小的页(page)。当进程需要内存空间时,将进程的多个页放入多个页框中。此时仅有最后一个页框会产生内部碎片。

OS 为每个进程维护一个页表,每项给出该进程的每页对应的页框位置。逻辑地址到物理地址的转换为:

1.从逻辑地址的最左侧的 n 位提取页号。

2.以这个页号查找页表中对应的页框号 k。

3.页框的起始物理位置为 \(k \times 2^m\),从逻辑地址的最右侧 m 位提取偏移量加上该起始物理地址得到真正的物理地址。

分段

分段是将程序和相关数据划分成长度不等的多个段,放入内存空间。每个进程有一个段表,记录每个段在内存空间中的起始位置。逻辑地址到物理地址的转换通过段表得到起始物理位置和本身已有的偏移量实现。

OSIDP-内存管理-07的更多相关文章

  1. C++内存管理(转)http://www.cnblogs.com/qiubole/archive/2008/03/07/1094770.html

    [导语] 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不 ...

  2. iOS Block 内存管理的探讨

    在很多情况下Block是造成程序循环引用内存泄漏的元凶.下面我们就讲解一下block对内存管理的影响.在讲解之前.希望大家对block有一定的了解.如果大家还不是太清楚block的实现原理.希望大家可 ...

  3. iOS中引用计数内存管理机制分析

    在 iOS 中引用计数是内存的管理方式,虽然在 iOS5 版本中,已经支持了自动引用计数管理模式,但理解它的运行方式有助于我们了解程序的运行原理,有助于 debug 程序. 操作系统的内存管理分成堆和 ...

  4. SQL Server 2012 内存管理 (memory management) 改进

    SQL Server 2012 的内存管理和以前的版本相比,有以下的一些变化. 一.内存分配器的变化 SQL Server 2012以前的版本,比如SQL Server 2008 R2等, 有sing ...

  5. OC修饰词 - 内存管理

    <招聘一个靠谱的 iOS>—参考答案(上) 说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:<招聘一个靠谱的 iOS>,其中共55题,除第一题为纠错题外,其他54道均 ...

  6. C++内存管理(超长,例子很详细,排版很好)

    [导语] 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不 ...

  7. (转)从内存管 理、内存泄漏、内存回收探讨C++内存管理

    http://www.cr173.com/html/18898_all.html 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟 ...

  8. C++内存管理(超长)

    [导语] 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不 ...

  9. STL的内存管理

    SGI STL 的内存管理 http://www.cnblogs.com/sld666666/archive/2010/07/01/1769448.html 1. 好多废话 在分析完nginx的内存池 ...

  10. C++内存管理(转)

    C++内存管理 [导语] 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理 ...

随机推荐

  1. 记录一次vue的报错

    1.主要代码 <div class="hello-ezuikit-js" v-for="(item,index) in list"> <div ...

  2. 查看Windows操作系统编码方式

    chcp 编码表: 代码页 国家(地区)或语言 437 美国 708 阿拉伯文(ASMO 708)720 阿拉伯文(DOS)850 多语言(拉丁文 I) 852 中欧(DOS) - 斯拉夫语(拉丁文 ...

  3. Skywalking安装

    https://www.cnblogs.com/duanxz/p/15602842.html

  4. 看K线学炒股(0803)

    高位板块的高位个股要回避,即便走反抽行情也要慎重.像容捷股份. 同是房地产行业的荣盛发展和西藏城投,差别怎么这么大?荣盛发展市净率0.4,西藏城投是4.8,市盈率更是一个天上一个地下,但股价呢?所以股 ...

  5. Rest-Assured发送POST请求:创建Hello-imook

    package heyuan.RestAssuredDemo;import static org.junit.jupiter.api.Assertions.*;import org.junit.jup ...

  6. 简单记录五个Linux设置定时任务的步骤(自动化运维必备)

    这几天我们国庆节休息,但是作为运维工作的同学们是不是也不能闲着,担心工作中是不是有任务在执行中需要维护.于是,我们很多的运维工作都是用的自动化运维监控,如果有故障都会定时的处理和告警的.这个与我们的L ...

  7. react 基础知识

    基础知识 css-module react 将js转为vdom,react-dom将vdom转为dom // 外面一层是一个动态值,里面的表示的是对象 <img src={logo} style ...

  8. 在Vue中实现app拍照-选取本地图库-图片上传成功后预览

    基于Vue和uni-app实现手机app的功能实现和打包.拍照功能和选取本地图片使用的是HTML5的API 实现. 我为测试这个功能使用node写了个本地服务器,对于手机调试,可以通过连接同一个无线网 ...

  9. ASP脚本获取服务器全部参数列表说明

    以下是ASP获取服务器全部参数的列表说明,在做ASP网页时经常需要用到,特整理以供参考. 返回服务器地址<%=Request.ServerVariables("Url")%& ...

  10. vue - 解决页面跳转到外部链接后,ios回退到本页面,生命周期,路由导航守卫钩子都无法触发的问题

    虽然加班,最近心情还是可以的,没多少bug找上门. 乐级生悲,遇到了个奇葩的坑,花了点时间百度才解决...但我离不开的'板砖'是安卓的,对此坑是抗拒的,完全没问题... #此坑描述 ...订单详情某按 ...