存储器的层次:

分为寄存器、主存(内存)和 辅存(外存)三个层次。

主存:高速缓冲存储器、主存储器、磁盘缓冲存储器,

主存又称为可执行存储器;

辅存:固定磁盘存储器、可移动的外部存储器;

其可长期保存数据,但不能被处理器直接访问。

此处针对的是在OS层面上对主存(内存)的管理。

内(主)存储器管理的主要功能:① 逻辑地址到物理地址的转换     ② 内存(主存)空间的分配与回收     ③ 内存信息(数据)的共享与保护     ④ 内存的逻辑扩充(虚拟存储器的实现)

一个用户程序在运行之前需要经历若干步骤,为了执行,程序应被调入内存并放在进程内:
在这些步骤中,地址可能有不同的表示形式:
符号(源程序中),可重定位的地址(目标模块),绝对地址(内存映像)
逻辑地址:目标代码的相对编址。由CPU生成,也称为虚拟地址
物理地址:内存存储单元的编址,内存单元的实际地址
逻辑地址空间:目标代码用逻辑地址编址对应的区域
内存存储空间:内存若干存储单元用物理地址编址对应的区域
重定位:逻辑地址转换为物理地址的操作(过程)
接下来,将指令与数据捆绑到内存地址,可以在以下步骤的任何一步中执行:
编译时:MS-DOS的COM格式程序
加载时:编译器生成可重定位代码
执行时:进程在执行时可以从一个内存段移到另一内存段,那么捆绑必须延迟到执行时才进行。
运行时从虚拟地址映射到物理地址的硬件设备称为内存管理单元(MMU)
用户进程所生成的地址在送交内存之前,都将加上重定位寄存器的值。
用户程序处理的是逻辑地址,它不会看到真实的物理地址。
原理图如下:
 
例如:
重定位的方式:
静态重定位:目标代码装入内存时,一次性进行逻辑地址到物理地址的地址转换。
动态重定位:目标代码装入内存时,先不进行地址转换(即原代码装入),在执行时,再实施地址转换。
内存分配的方式:连续分配和非连续分配
内存通常分为两个区域:
一个用于驻留操作系统,常与中断向量一起放在低内存
另一个用于用户进程,常放在高内存。
一、连续分配
四种方式:
①单一连续区分配

②固定分区分配

③可变(动态)分区分配

④可重定位分区分配

①单分区分配方法(Single-partition allocation)

重定位寄存器方案用来保护用户进程之间,用户进程与操作系统之间不会相互修改代码与数据

重定位寄存器包含了最小的物理地址;界限寄存器包含了逻辑地址的范围,每个逻辑地址必须小于界限寄存器

②固定分区分配
* 算法思想
内存可用区划分成若干个大小固定的存区,每个存区分别装入一道作业的代码(数据)。
* 算法实现
建立分区说明表,记录各分区大小、地址及分配情况
例如:

分区号

分区大小

起始地址

状态

1

12k

20k

已分配

2

32k

32k

已分配

3

64k

64k

已分配

4

128k

128k

空闲

5

     

分配:查分区说明表,找到一个足够大的空闲分区分配之;

回收:将回收分区对应的分区说明表状态改为“空闲”。

优点:内存可同时装入多道作业代码,算法实现简单;

缺点:存在浪费(分区一次性全部分配出去);会产生内部碎片。

③动态存储分配问题

算法思想:事先不划分分区,待作业需要分配内存时,再按需分配划分分区(分区的大小及个数不固定)。

数据结构:

空闲分区表或空闲分区链表  ---->   记录空闲分区的大小、地址等

空闲分区链表状况:

分配:查空闲分区链表,找到第一个足够大的分区,将其一分为二分配之;

分配策略(算法):首次适应算法,循环首次适应算法,最佳适应算法,最差适应算法

回收:先将回收分区与相邻空闲分区合并再修改空闲分区链表。

回收算法:前邻接合并,后邻接合并,前、后邻接合并,不邻接处理

* 优、缺点

按需分配,可解决浪费问题;
     分配算法复杂,会产生外部碎片;

邻接合并系统开销大。

* 碎片问题

碎片:可变分区分配过程中形成的若干个非常小的无法再利用的小分区,形成外部碎片

碎片分为外部碎片和内部碎片。

处理碎片的方法:

1.紧缩(compaction,拼接):用来降低外部碎片移动内存内容,以便所有空闲空间合并成一整块。

如果重定位是动态的,是在运行时进行的,那么就能采用紧缩

2.另一种可能解决外部碎片问题的方法是允许物理地址空间为非连续,这样只要有物理内存就可为进程分配:分页或分段

④可重定位分区分配

* 算法思想

在可变分区分配算法的基础上,采用动态重定位方式装入程序(数据)。当无足够大的分区供分配时,若总的空闲存储容量够用,则将各分区中的内容向内存一端移动(紧凑),使另一端形成一个大的空闲分区,然后再分配。

例:前例若要为作业10分配120k的存储空间,因无足够大分区(总空闲容量290k),则先进行合并处理:

内存的离散分配方式见下篇。

转载于:https://www.cnblogs.com/z941030/p/5154483.html

OS存储器管理(一)相关推荐

  1. 操作系统(4)存储器管理

    一.存储器的层次结构 对于通用计算机而言,存储层次至少应具有三级:最高层为 CPU 寄存器,中间为主存,最底层是辅存. 在较高档的计算机中,还可以根据具体的功能分工细划为寄存器.高速缓存.主存储器.磁 ...

  2. ======第四章存储器管理======

    目录 4.1 存储器的层次结构 4.1.1 多级存储器结构 4.1.2 主存储器与寄存器 4.1.3 高速缓存和磁盘缓存 4.2 程序的装入和链接 4.2.1 程序的装入 4.2.2 程序的链接 4. ...

  3. 计算机操作系统——(第四章) 存储器管理/内存管理

    目录 Previously on OS... 存储器的层次结构 操作系统的内存管理 程序运行的步骤 地址绑定 Previously on Experiment 内核的编译 gdb调试[1] Stopp ...

  4. 操作系统——存储器管理

    操作系统--存储器管理 程序的装入和链接 用户程序想要在系统中运行,必须先将他装入内存,然后再将其转变为一个可执行的程序,步骤: 编译-->链接-->装入 程序的装入: 绝对装入方式:(只 ...

  5. 【第五章 | 存储器管理】《操作系统 慕课版》课后答案 + 复习

    文章目录 [第五章]存储器管理 | 本章概念 1.存储器的层次结构 2.程序的装入和链接 3.对换 4.覆盖 5.连续分配存储管理方式相关概念 6.分页存储管理方式相关概念 7.分段存储管理方式相关概 ...

  6. 操作系统—存储器管理

    存储器管理 1 存储器的层次结构 ​ 计算机执行时,几乎每条指令都涉及对存储器的访问.因此要求对存储器的访问速度跟得上处理机的运行速度.考虑到价格和现实因素,如今的计算机大都采用了多层结构的存储器系统 ...

  7. 操作系统——存储器管理(连续分配存储管理方式)

    文章目录 一.单一连续分配 二.固定分区分配 1. 划分分区的方法 2. 内存分配 三.动态分区分配 1. 动态分区分配中的数据结构 2. 动态分区分配算法 3. 分区分配操作 四.基于顺序搜索的动态 ...

  8. 操作系统之存储器管理方式

    存储器管理 文章目录 存储器管理 存储器的层次结构 存储器设计为层次结构的原因 常见存储器层次划分 程序的装入和链接 程序的装入 绝对装入方式 可重定位装入方式(也称为静态重定位) 动态运行时装入 程 ...

  9. 操作系统12————存储器管理之对换

    操作系统12----存储器管理之对换 一.目录 文章目录 操作系统12----存储器管理之对换 一.目录 二.概述 三.多道程序环境下的对换技术 1.对换的引入 2.对换的类型 四.对换空间的管理 1 ...

最新文章

  1. 十六届智能车全向组硬件开源 | 上海海事大学全向行进组
  2. matlab未定义函数lp,matlab未定义函数或变量(附上源代码)
  3. nodemailer 附件_如何使用Nodemailer发送带有附件的电子邮件。 Node.js
  4. FragmentTabHost切换Fragment时保存状态,避免切换Fragment走onCreateView和onDestroyView方法;...
  5. 视频教程-excel VBA编程番外篇(字典+正则表达式+FSO)-Office/WPS
  6. 计算机的启动盘,做win7启动盘制作方法
  7. 大学数学新生入门学习数学方法导引 by Ph.D.王小龙
  8. linux跟单片机的区别,树莓派和单片机的区别
  9. Android 图片虚化
  10. 码栈开发手册(四)---编码方式开发(其他功能函数)
  11. 快速应对面试--分门别类--6.链表
  12. 深拷⻉浅拷⻉的区别?如何实现一个深拷贝?
  13. JDE910笔记2--OMW项目建立及简单使用[转]
  14. 2021年N1叉车司机免费试题及N1叉车司机考试总结
  15. DCC - Photoshop - Nvidia NormalMapFilter - 法线生成工具 - 顺便测试 Unity URP 12.1 中的 Decal System
  16. 动物识别Python
  17. 智能蜂箱管理系统——物联网工程专业软硬结合课设 计算机专业课程设计 大作业 项目(安卓,Springboot后端,网页数据展示前端,ESP8266传输数据,MQTT服务器)
  18. Java Agent入门教程
  19. 友盟+高吞吐、极速高并发智能推送服务,赋能值得买科技的精准化用户运营
  20. CISSP 第五章 物理和环境安全

热门文章

  1. RabbitMQ配置环境变量后启动不了的解决方法
  2. golang-flag的问题
  3. 阿里云配置负载均衡实例
  4. 前端学习笔记2017.6.21-引入JS文件的方法
  5. C语言编写Windows服务程序
  6. jQuery Validate验证方法及教程
  7. 终于买了个Dell d400二手笔记本
  8. PMCAFF微课堂「已结束」| 测试兄弟CEO揭秘如何提高创初团队的产品质量
  9. 产品必备:注册登录完整解决方案 | 含原型下载
  10. 来吧!我教你画真正的流程图