存储器的层次:

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

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

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

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

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

此处针对的是在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),则先进行合并处理:

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

OS存储器管理(一)的更多相关文章

  1. OS存储器管理(三) 虚拟存储器

    基本概念与实现 1)局部性原理 在一段时间内,运行的作业程序仅访问(涉及到)一部分作业代码,即不会涉及整个地址空间.即在一段时间间隔内,仅装入一部分代码,作业照样能正常运行 2)虚拟存储器的引入 作业 ...

  2. OS存储器管理(二)

    离散分配 分页(Paging),分段,段页式 一.分页   一个进程的物理地址可以是非连续的:   将物理内存分成固定大小的块,称为块(frame): 将逻辑内存分为同样大小的块,称为页(page): ...

  3. MMU——存储器管理单元

    更多文档参见:http://pan.baidu.com/s/1qW0hjwo MMU,全称Memory Manage Unit, 中文名——存储器管理单元. 许多年以前,当人们还在使用DOS或是更古老 ...

  4. Intel 80386 微处理器的存储器管理

    一.存储器的管理       存储器的管理是一种硬件机制,微处理器在总线地址上对物理存储器进行寻址.但是,为了给程序提供比物理存储器容量更大的空间,就引入了虚拟存储器的概念,它在外存(比如磁盘)的支持 ...

  5. 从内存管理原理,窥探OS内存管理机制

    摘要:本文将从最简单的内存管理原理说起,带大家一起窥探OS的内存管理机制,由此熟悉底层的内存管理机制,写出高效的应用程序. 本文分享自华为云社区<探索OS的内存管理原理>,作者:元闰子 . ...

  6. Mac OS 下包管理器 homebrew的安装

    homebrew :熟悉mac os的小伙伴们一定都知道这个包管理工具,它非常方便且好用,安装它只需要打开终端并将以下代码粘贴到终端中运行即可: /usr/bin/ruby -e "$(cu ...

  7. 8、Cocos2dx 3.0三,找一个小游戏开发3.0存储器管理的版本号

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27693365 复杂的内存管理 移动设备上的硬件资源十 ...

  8. ARM“庖丁解牛”之存储器管理单元MMU

    转:http://blog.sina.com.cn/s/blog_a07635070101bcbt.html 最近笔者详细地学习了由杜春雷老师编写的<ARM体系结构与编程>.对ARM存储管 ...

  9. MMU内存管理单元相关知识点总结

    1.MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器.物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件 ...

随机推荐

  1. 编写一个Java应用程序,该应用程序包括2个类:Print类和主类E。Print 类里有一个方法output()功能是输出100 ~ 999之间的所有水仙花数(各位数字的 立方和等于这个三位数本身,如: 371 = 33 + 73 + 13。)在主类E的main方法中来 测试类Print

    package zuoye; public class print { void output() { System.out.println("100-999之间的水仙花数是:") ...

  2. C#读取XML文件

    --硬盘Xml文件存储路径:d:\xmlFile\Testxml.xml xml文件内容: <Root> <Tab> <ID>245575913</ID> ...

  3. MSSQL OPTION语句详解

    一些联合表查询语句,这些表里都建立有索引.在没有加 option ( force order ) 前,整个查询费时40多秒,但 单独表 查询基本不到1秒.查看查询计划后发现查询过程是从table n开 ...

  4. 多CPU下基于e1000e驱动的数据包以及网卡中断流程分析.doc

    http://wenku.baidu.com/link?url=mMKDH_fKmUXN7L6rANIFHjoHdKCYBLlDrqoYB1daDTEkNFk9Bt9xlJtS_4BKBj6w22WD ...

  5. Error while performing database login with the sqljdbc driver:Unable to create connection. Check your URL.

    从微软官网下载jdbc驱动包sqljdbc4,运行sqljdbc_4.0.2206.100_chs.exe,将驱动包解压到了Microsoft JDBC Driver 4.0 for SQL Serv ...

  6. centos yum源配置

    5步搞定yum源配置 作者小波/QQ463431476欢迎转载! 第一步: 卸载原来的yum [root@localhost home]#rpm -qa|grep yum|xargs rpm -e - ...

  7. 二:shell之bash变量

    1.变量的分类: 用户自定义变量:   变量自定义 默认存储是字符串环境变量:              这种变量中主要保存的是和系统操作环境相关的数据.变量可以自定义,但是对系统生效的环境变量名和变 ...

  8. Fitbit Flex 智能手环佩戴心得 主要说说过敏

    参杂一篇杂文. 也是因为体重飙升,所以去年下半年的时候入手了一个Fitbit flex. 当时相比Jawbone up,nfc和ble的特性,以及防水性还是更吸引我一点.所以就入手了. 佩带了如此长的 ...

  9. 【转】ACM搜索算法总结 --By GreenHand

    搜索是ACM竞赛中的常见算法,本文的主要内容就是分析它的 特点,以及在实际问题中如何合理的选择搜索方法,提高效率.文章的第一部分首先分析了各种基本的搜索及其各自的特点.第二部分在基本搜索方法的基础上提 ...

  10. POJ2488A Knight's Journey[DFS]

    A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 41936   Accepted: 14 ...