分页与分段的区别
1.页是信息的物理单位,是系统管理的需要而不是用户的需要;而段是信息的逻辑单位,分段是为了更好地满足用户的需要
2.页的大小固定且由系统决定,一个系统只能有一种大小的页面;而段的长度不固定,由用户所编写的程序决定。
3.分页式作业的地址空间是一维的,页间的逻辑地址是连续的;而分段式作业的地址空间则是二维的,段间的逻辑地址是不连续的。
段式存储管理
段:用户编制的程序可以由一个主程序、若干个子程序、符号表、栈以及数据等若干段组成,每一段都有独立、完整的逻辑意义,每一个段的长度可以不同
段式存储管理:以段为单位进行存储空间的管理。段内地址是连续的,段与段之间的地址是不连续的(占据内存的连续区域)
段式存储空间的分配
1.段表:系统为每个进程创建一张段映射表,每个段在表中有一个表项记录该段在内存中的起始地址(基址)和长度(段长)。
功能:实现了逻辑段到内存空间之间的映射
2.分配:以段为单位进行主存分配,每段在主存中占有一个连续空间;如果在装入某段信息时找不到满足该段地址空间大小的空闲区则采用移动技术合并分散的空闲区,有利于大作业的装入
3.去配:
检查是否存在和与回收区相邻的空闲区,有则合并。
4改进(页式的快表类似):
段表存在主存中,访问数据或指令至少需要访问两次,为了提高对段表的存取速度,增设了一个相联寄存器(CPU内部),利用高速缓冲寄存器保存最近常用的段表项。
段式存储空间的地址转换与存储保护
动态重定位装入作业
地址转换依据:段表的表目(起到了基址寄存器和限长寄存器的作用)
开始
→
→
段表送入段表控制寄存器中
→
→
执行指令:找到相应段表
→
→
判断:段号>段表长度?
→
→
大于则地址越界,小于等于
→
→
由逻辑地址中的段号得到段表中的基址(起始地址)
→
→
判断:逻辑地址中段内地址>段表中段长
→
→
大于则地址越界,反之,起始地址加段内地址访问主存
段的共享
实现方法:各个进程对共享段使用相同的段名,在各自段表中填入共享段的基址,并给与读写控制权
注意
共享程序段的指令和数据在执行过程中不能被修改
正在被某进程使用或即将被使用的共享段不可以置换出内存(设置共享位可以判别该段是否被某个进程调用)
段页式存储管理
兼顾了段式在逻辑上的清晰和页式在管理上方便的特点
基本思想
段页式存储管理为每一个装入内存的作业建立一张段表,对每一段建立一张页表;
段表的长度由作业分段的个数决定,段表中的每一个表目指出本段页表的始址和长度;
页表的长度则由对应段所划分的页面数所决定,页表中的每一个表目指出本段的逻辑页号与内存物理块号之间的对应关系。
段页式存储空间的地址转换与保护(越界中断)
地址转换过程中需要三次访问内存
第一次:访问段表,获得页表始址
第二次:访问页表,获取块号,获得指令或数据的物理地址
第三次:按物理地址存取信息