页式
设计思想:
- 将用户进程地址空间划分为大小相等的页、页面(一般为4K,也有4M的),并从0开始编号
- 将物理内存地址空间划分为大小相等的区域,称为页框,也从0开始编号,也叫做物理页面,页帧,内存块
- 以页为单位进行分配,按照进程所需要的页数来分配,进程地址空间上相邻的页,映射到物理内存上,页不一定相邻。
**逻辑地址:**页号(20,页面的编号) + 页内地址(也叫页内偏移,12位)
页表:记录了逻辑空间某页面对应在物理地址空间上是哪一页
页表项:页表的每一行称为页表项,记录逻辑页号和物理页号的对应关系
内存分配的过程:
地址转换过程:由硬件支持
当CPU获取到逻辑地址后,自动的将该逻辑地址分为两部分,分别是页号和页内地址(页内偏移),用页号根据页表查对应物理页面,然后与页内偏移地址拼接起来,就得到了物理地址,然后就可以对此地址进行读写操作。
缺点:
假设一个进程需要5页+1条指令的空间,那么该进程最少需要6页的内存,就产生了内碎片,碎片大小为一页的大小减去一条指令所占的大小。
段式
设计思想:
用户进程地址空间:根据程序自身的逻辑关系将程序划分成若干个程序段,每一个段都有一个段名
内存空间:也被动态划分为若干长度不同的区域,称为物理段,每个物理段由开始地址和长度确定。
内存分配规则:
以段为单位进行分配,每个段在内存中占据连续空间,但各个段之间可以不相邻。
段表:记录了程序各个段与物理内存上的段的映射关系
段表项:段表的一项称为段表项,记录程序某个段(段号)在物理内存上的段长度以及段的起始地址等信息。和页表项相似
每个进程的段表存放在内存中。
逻辑地址: 段号 + 段内地址
地址转换:依赖硬件
CPU取到逻辑地址,用段号查段表,得到该段在内存的起始地址,与段内偏移计算出物理地址。
段页式:
产生背景:
综合页式和段式方案的优点,克服二者的缺点
设计思想:
用户进程空间划分:
先按逻辑将进程空间划分成段,然后将这些段再按页去划分
逻辑地址:
原来的段内地址,此时是页号 + 页内地址
内存划分:同页式存储管理方案
内存分配:以页为单位进行分配
相关数据结构:
段表:记录了每一段的页表的起始地址以及页表的长度
页表:记录了逻辑页号与物理页号的对应关系
每一段都有一张页表,此时的一个进程有多个页表
空闲区管理:同页式管理
内存分配,回收:同页式管理
根据段号查段表,得到对应页表起始地址,再将段内地址划分为2部分,页号和页内地址
本文图片与思想来自网络公开课,有兴趣的读者可以查看一下:https://www.bilibili.com/video/BV1Gx411Q7ro?p=50&spm_id_from=pageDriver