OSIDP-内存管理-07
专业术语
页框:内存中固定长度的块。
页:外存中固定长度的块。
段:外存中可变长度的块。
内存管理需求
重定位:程序从内存换出到外存后,再换回内存时,在内存空间中的位置和原先的位置有极大可能不相同。此时需要保证程序的执行和之前一样,不因所在位置的不同变化。
保护:每个进程应受保护,不被其他进程干扰。保护的实现是由处理器满足的,通过在指令访问内存时判断内存访问是否非法决定。如果由 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的更多相关文章
- C++内存管理(转)http://www.cnblogs.com/qiubole/archive/2008/03/07/1094770.html
[导语] 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不 ...
- iOS Block 内存管理的探讨
在很多情况下Block是造成程序循环引用内存泄漏的元凶.下面我们就讲解一下block对内存管理的影响.在讲解之前.希望大家对block有一定的了解.如果大家还不是太清楚block的实现原理.希望大家可 ...
- iOS中引用计数内存管理机制分析
在 iOS 中引用计数是内存的管理方式,虽然在 iOS5 版本中,已经支持了自动引用计数管理模式,但理解它的运行方式有助于我们了解程序的运行原理,有助于 debug 程序. 操作系统的内存管理分成堆和 ...
- SQL Server 2012 内存管理 (memory management) 改进
SQL Server 2012 的内存管理和以前的版本相比,有以下的一些变化. 一.内存分配器的变化 SQL Server 2012以前的版本,比如SQL Server 2008 R2等, 有sing ...
- OC修饰词 - 内存管理
<招聘一个靠谱的 iOS>—参考答案(上) 说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:<招聘一个靠谱的 iOS>,其中共55题,除第一题为纠错题外,其他54道均 ...
- C++内存管理(超长,例子很详细,排版很好)
[导语] 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不 ...
- (转)从内存管 理、内存泄漏、内存回收探讨C++内存管理
http://www.cr173.com/html/18898_all.html 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟 ...
- C++内存管理(超长)
[导语] 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不 ...
- STL的内存管理
SGI STL 的内存管理 http://www.cnblogs.com/sld666666/archive/2010/07/01/1769448.html 1. 好多废话 在分析完nginx的内存池 ...
- C++内存管理(转)
C++内存管理 [导语] 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理 ...
随机推荐
- CAD怎么删除图块注释?删除CAD图块注释步骤
CAD设计过程中,有时候会在图纸中添加许多注释,如:文字注释,图块注释,标注样式注释等.当需要删除图纸中的CAD图块注释时,你知道该如何操作吗?本节课程小编就来给大家分享一下浩辰CAD软件中删除CAD ...
- 强烈推荐的elasticsearch集群连接工具: elasticvue
个人感觉非常棒的es-cluster连接工具, 检查状态什么的, 一目了然, 支持中文超方便, 比elasticSearchHead好用多了. 安装方法打开微软浏览器edge-商城搜索-Elastic ...
- VBoxNetAdpCtl: Error while adding new interface: failed to open /dev/vboxnetctl: No such file or directory.
macOS VirtualBox Bridged Adapter 不能用 I'm running macOS High Sierra 10.13.1 and VirtualBox 5.2.2. Thi ...
- linux系统安装谷歌浏览器设置开机自动启动并打开指定页面
要在Linux系统上安装Google Chrome浏览器,可以按照以下步骤: 下载Google Chrome浏览器的安装包,你可以从Google的官方网站或者第三方下载站点上获取. 解压缩安装包并 ...
- 离线谷歌地图API的开发笔记(二)
一.地图引擎介绍 离线地图引擎运行在WINDOWS平台上,底层由Visual c++语言开发,编译为OCX插件方式.占用文件少,便于二次开发的快速安装部署. 具有专业地图的基础操作功能:地图放大.缩小 ...
- typeScript中特殊类型定义
// Js八种内置类型, string, number, boolean, undefined, null, object, bigint symbol // ECMAScript内置对象 Array ...
- DIV CSS遮罩层(弹窗窗口)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- vscode个人常用插件
1.个人常用插件记录一下,2020年7月6日
- xshell he xftp下载网址
https://www.xshell.com/zh/free-for-home-school/
- 利用python中的win32com模块操作Word、Excel文件
word操作 doc文件转换为docx文件 安装win32com模块:pip3 install pypiwin32 import os from win32com.client import Disp ...