内存管理之连续-非连续内存分配方式

进程分配内存空间让其正常支行的三种方式:

1)连续内存分配(为一个进程分配一片连续的内存空间)
2)非连续内存分配
3)虚拟内存管理

连续内存分配方案

进程独享用户空间内存区域,把所有的内存一次性分享给进程(程序)使用。这们系统只能执行单程,单用户的模式。

静态内存分配方案

连续静态方式内存分配图

动态内存分配方案

给配给一个进程的内存,且进程没有完全使用这片内存则会产生内部碎片。而由于内存空间太小导致无法正常分配给进程使用,内存剩余产生的叫外部碎片。不管内部或外部碎片都会产生内存的浪费。
动态固定内存分配方式

关于动态内存分配的管理算法这里不作记录。

固定内存分配方式明显缺点是会产生很多的内部内存碎片、外部内存碎片,不利于内存的使用。
在这里插入图片描述

非连续内存分配管理方式

页式存储管理-页表

可以将进程分散地装入到许多不相邻的内存分区中,则即可利用分散的存储区,又无须过行紧凑管理。可大大提高内存的使用率。
如下图一个进程需要的内存空间很大,在内存中已经没有连续的内存空间分配给该进程。只能分配的把进程装载到内存当中
在这里插入图片描述
在这里插入图片描述

把进程分散的装入到非连续的内存当中,需要复杂的内存管理技术。比如页式内存管理技术等各种内存管理方式。

在这里插入图片描述
逻辑相邻的进程地址空间被装载到不连续的物理内存地址上运行。由于逻辑相邻的进程被分配到不连续的物理内存当中,那么CPU在执行程序的时候就无法连续的执行下去,这时需要对不连续的内存进行管理,使用CPU能顺序的拿到需要执行的代码,为这些不连续的内存页建立表格,称为页表管理。这样知道了页号就可以找到对应的物理内存。如下图2
在这里插入图片描述
在这里插入图片描述

页表是进程的一部分,分配在内存当中,这样就需要把所有进程页表存储在一片连续的内存当中。那么就需要把这个内存的地址保存在一个地方,方案进程执行进快速的找到页表。
若进程正在执行,则页表起始地址被存放在页就寄存器当中。若进程没有执行,则页表地址保存在PCB(进程控制块)中。

逻辑地址查找页表找到对应的物理内存地址,具体查找步骤如下图。
在这里插入图片描述

段式存储管理-段表

段式存储管理是把进程的以功能不同,划分为不同的段。比如一个程序有代码段,数据段等。这些段加载到非连续的内存当中,同样需要对内存进行复杂的管理。这个就称为段式内存管理。
在这里插入图片描述
段表中段表项的表示
在这里插入图片描述
段式存储的逻辑地址到物理地址过程
在这里插入图片描述

段页式存储管理对比
在这里插入图片描述

段页式存储管理方式,系统中都是采用二者相结合的方式来管理进程内存空间。如果编译的代码有各程各样的段,但在系统过行内存初始化时又使用页表来管理。

段页式存储地址映射。
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zj646268653/article/details/111245091
今日推荐