一、分段和分页的优缺点
1.分页
优点:内存空间利用率高,不会产生外部碎片,只会有少量的页内碎片
缺点:不方使按照逻辑模块实现信息的共享和保护
2.分段
优点:很方便按照逻辑模块实现信息的共享和保护
缺点:如果段长过大,为其分配很大的连续空间会很不方便。另外,段式管理会产生外部碎片
产生的外部碎片可以通过“紧凑”技术来解决,不过需要较大的时间代价
二、段页式管理
1.概念
分段+分页=段页式管理
将进程按逻辑模块分段,再将各段分页(如每个页面4KB)
再将内存空间分为大小相同的内存块/页框/页帧/物理块
进程将各页面分别装入各内存块中
2.逻辑地址结构
段页式系统的逻辑地址结构由段号、页号、页内地址(页内偏移量)组成。
32位的计算机:
0~11(12位):表示页内偏移量
12~15(4位):表示页号
16~31(16位):表示段号
段号的位数决定了每个进程最多可以分几个段
页号位数决定了每个段最大有多少页
页内偏移量决定了页面大小、内存块大小是多少
在上述例子中,若系统是按字节寻址的,则 段号占16位,因此在该系统中,每个进程最多有2^16= 64 K个段
页号占4位,因此每个段最多有2^4= 16页
页内偏移量占12位,因此每个页面\每个内存块大小为:2^12= 4096 = 4KB
“分段”对用户是可见的,程序员编程时需要显式地给出段号、段内地址。而将各段“分页”对用户是不可见的。系统会根据段内地址自动划分页号和页内偏移量。
因此段页式管理的地址结构是二维的。
3.逻辑地址——》物理地址
每个段对应一个段表项,每个段表项由段号、页表长度、页表存放块号(页表起始地址)组成。每个段表项长度相等,段号是隐含的。
每个页面对应一个页表项,每个页表项由页号、页面存放的内存块号组成。每个页表项长度相等,页号是隐含的。
硬件设施:段表寄存器——段表始址F ,段表长度 M
1.根据逻辑地址A得到段号S、页号P、页内偏移量W
2.判断段号是否越界。若S≥M,则产生越界中断,否则继续执行
3.查询段表找到对应的段表项,段表项的存放地址为:F+S*段表项长度
4.检查页号是否越界,若页号≥页表长度,则发生越界中断,否则继续执行
5.根据页表存放块号、页号查询页表,找到对应页表项
6.根据内存块号、页内偏移量得到最终的物理地址
7.访问目标内存单元
需要三次访问内存:
第一次:查询段表
第二次:查询页表
第三次:访问内存地址单元
也可引入快表机构,用段号和页号作为查询快表的关键字。若快表命中则仅需一次访存
三、总结