内存为程序分配空间有四种分配方式:
- 连续分配方式
- 基本分页存储管理方式
- 基本分段存储管理方式
- 段页式存储管理方式
连续分配方式
连续分配方式实现起来比较方便,所需要的硬件支持比较少
连续分配方式可以细分为四种:单一连续分配、固定分区分配、动态分区分配和动态重定位分配
其中固定分区的分配方式,因为分区固定,所以缺乏灵活性,当程序太小时,会造成内存浪费;程序太大时,一个分区有放不下,导致程序无法运行。当控制多个相同对象的时候,由于其内存相等,所以可以采用动态分区的方式,而且最高效
为了解决固定分区的缺点(缺乏灵活性),出现了动态分配方式
动态分配方式采用一些寻表的方式,查找符合程序需要的空闲内存分区,但代价就是增加了系统允许的开销,内存空闲表本身也是一个文件,也占用一定的内存资源
可重定位分区分配通过对程序实现重定位,从而将内存块进行搬移,将小块拼接成大块,将小空闲拼凑成大空闲,可腾出更多的内容
基本分页存储管理方式
连续分配方式会产生许多碎片内存,虽然使用重定位,将碎片进行拼凑,但是很大的开销。所以使用“离散分配方式”的思路
如果离散分配的基本单位是页,则称为分页存储管理方式;如果单位是段则是分段存储管理方式
分页存储管理,是将一个进程的逻辑地址分成若干个大小相等的片,称为页;并将页进行编号;
同样,也把内存空间分为与页面大小相同的区域,称为物理块或者页框,同样进行编号;为进程分配内存的时候,以块为单位将进程的页分别存放到可以不相邻的物理块中
进程的最后一页经常装不满,所以会产生”页内碎片“
在分页系统中,允许将进程的各个页面离散的存储在内存中不同的物理块中,为了保证进程的正确运行,为了系统又为每个进程建立了一张页面映像表,称为页表
进程地址空间内的所有页,一次在页表中有一页表项,其记录了相应页在内存中对应的物理块号;进程执行时,通过查找页表,找到每页在物理内存的物理块号,页表的作用就是实现从页号到物理块号的地址映射
为了将用户地址空间中的逻辑地址,变换为内存空间中的物理地址,在系统中必须设置地址转换机制——借助页表
由于页表是存放在内存中的,这使得CPU在每存取一个数据时,都要两次访问内存。为了提高地址变换速度,在地址变化机构中增设了一个具有并行查询能力的高速缓冲寄存器,又称为“联想寄存器”(Associative Lookaside Buffer)
基本分段存储管理方式
分段存储管理方式的目的,主要是为了满足用户在编程和使用上多方面的需求,其中有些要求是其他存储管理方式难以满足的,所以这种方式是当今所有存储管理方式的基础
- 方便编程
- 信息共享:分页存储的页只是存放信息的逻辑地址,在段位是信息的逻辑单位
- 信息保护
- 动态增长
- 动态链接
分段管理方式和分页管理方式在实现思路上是很相似的,只不过他们的基本单位不同,分段式是段表,
也有地址转换机构,联想寄存器
分页分段的主要区别
- 二者相似之处:二者都是采用离散分配方式,且都要通过地址映射机构来实现地址变换
- 不同之处:
- 页是信息的物理地址,分页仅仅是由于系统管理的需要,而不是用户需要,主要是为了提高内存的利用率;段则是信息的逻辑单位,它含有一组其意义比较完整的信息。分段的目的是为了更好的满足用户的需求
- 页的大小是固定的,段的长度不固定
- 分页的作业地址空间是一堆的,线性地址空间;而分段的作业地址空间则是二维的
段页式存储管理方式
分页存储能够提高内存利用率;分段存储能够更好满足用户需求
段页式系统的基本原理,就是分段分页原理的结合,先将用户进程分成若干个段,再把若干个段分为若干个页,在段页式系统中,地址结构由段号、段内页号、页内地址三部分组成