操作系统内存管理(上)——内存管理基础

一、内存的基本知识

 1.什么是内存?有什么作用?

内存可存放数据。程序执行前先放到内存才能被CPU处理——缓和CPU和硬盘之间的速度矛盾。

给内存的存储单元编址。如果计算机按字节编址,则每个存储单元大小为1字节。即1B=8b(8个二进制位)

2.进程运行的基本原理

(1)指令的工作原理:操作码+若干参数

(2)程序经过编译、链接后生成的指令中指明的地址是逻辑地址(相对于进程起始地址而言的地址,因此又叫相对地址);

        链接完成后,生成装入模块,模块装入内存后的地址称作物理地址(又叫绝对地址)

(3)地址转换的实现:

装入有三种方式:

绝对装入:编译时就知道要装在内存的哪个地方,因此编译时就将逻辑地址写为物理地址

可重定位装入:在装入时,将所有的逻辑地址变为物理地址

动态重定位:执行时再把逻辑地址变为物理地址。(需要重定位寄存器)

(4)从写程序到程序运行的过程:

 二、内存管理的概念

 (2)内存空间的扩充:

覆盖和交换:覆盖是同一个进程,后来的段占用前面的段,交换是另外一个进程挤占另外一个进程

 (1)内存空间的分配与回收

-内部碎片:分配给进程的内存区域中,某些部分没有用上。

-外部碎片:内存中某些空闲分区由于太小而难以利用

1-----连续分配管理方式:

单一连续分配:同时只能有一个用户位于内存,且失去并发性会产生内部碎片(有的空间没有用上)。

固定分区分配:划分若干固定大小分区(大小可相等,可不相等),每个分区装入一道作业。

动态分区分配:不会预先划分内存,而是在进程装入内存时,根据进程大小动态建立分区。释放空间时,相邻的空闲分区要进行合并

 但动态分区分配也存在他的问题。

1.系统用什么样的数据结构记录内存的使用情况?

空闲分区表:分区大小、起始地址、状态

2.当很多空闲分区都能满足需求时,应该选择哪个分区?

分配算法:

1.首次适应算法:按地址的顺序依次查找,直到第一个合适的(不仅最简单,而且最好最快)

2.最佳适应算法:按容量递增形成链表,然后从小至大查找

3.最坏适应算法:按容量递减形成链表,然后从小至大查找

4.临近适应算法:

2-------!!!!!非连续分配管理

基本分页存储管理:

《1》什么是分页:将内存空间分为一个个大小相等的分区(称为页框或页帧),将进程的逻辑地址空间也分为与页框大小相等的部分(称为页或页面),页可以不连续的存放到页框当中。

《2》页表:注意欧,页号从0开始为了知道进程的每个页面在内存中存放的位置,操作系统要为每个进程建立一张页表。页表一般放在PCB中,记录了相应的映射关系。页表里的每一项都叫做页表项

     问题一:计算每个页表项应为多少字节。

 页表项的字节数,应保证整个内存块都能被记录在页表内。

依题,可以有2的20次方个页。因此页表项的数目应能大于2的20次方。所以页表项应为20b,至少为3B。

        问题二:如何实现地址转换

虽然各页面是离散存放的,但页面内部是连续的。逻辑地址对应物理地址=对应页面的起始地址+页内偏移量。

简而言之:类似IP分配,前多少位是页面号,后面为页内偏移量

《3》基本地址变换机构

页表寄存器(页表起始地址F+页表项数M)。

1.根据逻辑地址计算出页号、页表偏移量;

2.判断页号是否越界(若越界则产生越界中断);

3.查询页表,找到页号对应的页表项,再根据页表项找到相应的页面;

4.用页面起始地址和页内偏移量得到物理地址;

5.访问目标单元;

注意,给出内存大小后就默认给出了页号长度

页面大小为1K=2的十次方,页内偏移量占十位

 2500=2048+452,所以该地址对应的页号是2,查找页表,其对应的内存块是8,

所以物理地址是1024*8+452=8644。

《4》具有快表的地址变换(类似ARP协议中的地址对应)(快表位于高速缓存中)

快表中直接存储页号对应的物理地址,进程访问时先去块表查询,如查找到直接进行访问;如未查找到,去主存中查找慢表,并同时将查找记录写入快表。

《5》两级页表  

目的:便于索引

顶级页表最多一个页面

 

基本分段存储管理

分页管理是从计算机的角度考虑的,目的是提高内存的利用率,提升计算机的性能。分页通过硬件实现,对用户完全透明。分段管理则考虑了用户和程序员,以满足方便编程、信息保护和共享、动态增长和动态链接等要求

如一个程序由程序段、数据段、PCB组成,可将其分为三段,并分配逻辑地址(段内连续,段间不必连续)。

段页式存储管理

 

猜你喜欢

转载自blog.csdn.net/lyhizjj/article/details/130560824