第四章、存储器管理
2015-08-10 10:27
176 查看
第四章、存储器管理
物理地址和逻辑地址物理地址:存储单元的编号,可以直接寻址。
逻辑地址:程序中的地址,是可以改变的,不可直接寻址。
重定位:将逻辑地址空间的逻辑地址变换成内存空间的物理地址的过程。
静态重定位和动态重定位
静态重定位:当用于程序被装入内存时,一次性地实现逻辑地址到物理地址的转换,以后不再转换(一般在装入内存时由软件完成),直到该程序完成退出内存为止。
动态重定位:当用户程序被装入内存时,并不将其逻辑地址转换,而是保留原来的逻辑地址。等程序真正要执行时才将其逻辑地址通过动态计算转换成物理地址。
连续分配存储管理方式
单一连续分配
分配原理:采用这种存储管理方式时,系统会将整个用户区看成是一个分区,分配给一个用户使用,并且整个用户区只能容纳一个程序或者作业。
缺点:内存利用率低
这是最简单的一种内存分配方式,只能用于单用户单任务的操作系统。
固定分区分配
分配原理:内存的用户区被划分为若干个固定大小的区域,在每个分区中只装入一个作业,这样,内存中就可以存放多个用户作业,因而也就允许有多道作业在系统中运行。
划分方法
分区大小相等
*分区大小不等
内存分配:系统按照分区大小顺序建立一张分区使用表,表中记录每个分区的起始地址、大小和状态。并且每个分区的信息占用一条记录。
缺点:容易产生内部碎片
动态分区分配
分配原理:系统根据作业的实际需要,动态地为作业分配内存空间。
分区分配的数据结构
空闲分区表
空闲分区链
特点:分区大小不固定 ;分配比较复杂,需要设置空闲分区表或者空闲分区链;可根据作业大小分配;
缺点:容易产生外部碎片。
动态可重定位分区分配
内存分配流程
从上往下左边第三个是m.size>u.size?
从上往下左边第四个是m.size-u.size<=size?
其中的表指的是空闲分区表,它只记录没有使用的内存空间
其中的m.size:空闲分区表每个空闲分区的大小
u.size:用户程序请求的分区大小
size:系统允许的最小分区容量下限
基于顺序搜索的动态分区分配算法
概念:依次搜索空闲分区链上的空闲分区,去寻找一个其大小能满足要求的分区。
算法有
首次适应算法(first fit,FF)
循环首次适应算法(next fit ,NF)
最佳适应算法(best fit BF)
最坏适应算法(worst fit,WF)
首次适应算法
空闲分区表以地址递增的顺序连接。
优点:有利于存放大型作业
缺点:
低地址的分区被不断划分,使内存中产生一些非常小的难以利用的内存空间。
每次分配都要从分区链的链头开始查起,增加了系统开销。
循环首次适应算法
概念:给作业分配内存时,可以接着上次给用户程序分配空闲分区的下一个空闲分区开始查找合适的空闲分区。需要设置起始查找指针:指示下次起始查询的空闲分区。
优点:内存分配更为均匀,降低查找分区开销
缺点:缺乏大的内存分区,一旦有较大用户程序,要求运行无法实现。
最佳适应算法
概念:按容量由小到大顺序形成一个空闲分区链。
优点:若分配成功,则分配的分区总是最适合作业要求的。
缺点:每次分配所剩余的空间总是最小的,导致内存中留下许多难以利用的小内存空间。
最坏适应算法
概念:内存由大到小排序,每次分配都分配最大的给用户程序
优点:使剩下的空间不至于太小,产生碎片几率小
缺点:是内存因缺乏大的空闲分区而无法存放大型作业。
对换(Swapping)
概念:将内存中暂时不能运行的基础南横或者暂时不用的程序和数据换出到外存上,以腾出足够的内存空间,再将已具备条件的进程或进程所需要的程序和数据换入内存。
对换类型:整体对换和页面(分段)对换。
具有对换功能的OS中,磁盘空间分为文件区和对换区。
对换空间管理目标:提高进程换入换出的速度,提高文件存储空间的利用率。
分页存储管理
概念:将用户程序的地址空间分为若干个固定区域,称为页或页面。
例子
分段存储管理方式
概念:把信息按照程序的内容或函数关系分成段,每段都有自己的名字,那么就可以根据名字来进行访问相应的程序和数据段。
分页和分段的区别
相同点:都是离散分配方式,都要通过地址映射实现地址变换
不同点:
页是信息的物理单位,段是信息的逻辑单位
页大小固定,段长度不固定
分页作业是一维的,分段作业是二维的。
分段作业例子。
其他例子:
相关文章推荐
- iframe自适应高度处理方案
- Javascript模块化编程(三):require.js的用法
- CSS 父级方法清除浮动方法
- 打造安全的App!iOS安全系列之 HTTPS
- Android 中使用的数学运算
- lnmp环境安装(2)-nginx安装
- poj 2229 动态规划
- SDKD Summer Team Contest I
- Android Handler 异步消息处理机制的妙用 创建强大的图片加载类
- Matlab中数组元素引用
- 栈的数组实现
- 单项链表的逆置
- TCP/IP网络编程 学习笔记_8 --优雅地断开套接字连接
- TCP/IP网络编程 学习笔记_8 --优雅地断开套接字连接
- [ios] UI TableView
- 【Axure原型图】——动态面板
- hdu3037 Saving Beans (lucas定理+组合数公式)
- Android studio 安装中遇到一些问题的解决办法,分享一下
- good article
- 漫谈程序员(一)程序员未来发展三大方向