本文主要是介绍段页式存储管理方式详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
段页式存储管理方式详解
- 分段存储方式
- 引入目的:
- 基本原理
- 分段
- 段表
- 地址变换机构
- 信息保护
- 信息共享
- 分页与分段的主要区别:
- 段页式存储管理方式
- 引入原因:
- 基本原理
- 段表与页表
- 地址变换机构
分段存储方式
引入目的:
满足用户在编程和使用.上的习惯和需求
方便编程:为满足用户作业的逻辑关系,将数据和指令分段存储,其地址由段名和段内偏移量共同组成
信息共享
信息保护(以信息的逻辑单位为基础)
动态增长:保证使用过程中对内存的动态需求
动态链接:运行时动态加载需要的目标程序段
基本原理
分段
分段地址中的逻辑地址为:| 段号 | 段内地址 |
每个段都是从0开始编址,并采用一段连续的地址空间,段长由相应的逻辑信息组的长度决定(各段段长不同)。每个段即包含了一部分地址空间,又标识了段与段之间的逻辑关系。
段表
分段存储管理系统为每个段分配一个连续的分区,进程的各个段可离散地装入内存的不同位置,用一张段映射表(段表)记录每段在内存的起始地址(基址)和段的长度。在配置了段表后,执行中的进程可通过逻辑地址中的段号来查询段表,找到段的对应内存区。
段表表项的结构为:| 段长 | 基址 |
地址变换机构
段表寄存器:存放段表基址和段表长度TL
地址变换过程:
a、逻辑地址中的段号s与TL比较,若s>TL,越界
中断;反之,根据段表基址和段号所指示的段表
项找到所需段在内存中的基址b、逻辑地址中的段内偏移d和上一步找到的段长
SL相比较,若d>SL,越界中断;反之,将d与
段基址相加得到数据物理地址
例:eg:设某程序中有5个段,段号分别为0-4,段表如下,求:
界限 | 基址 | |
---|---|---|
0 | 1000 | 1400 |
1 | 400 | 6300 |
2 | 400 | 4300 |
3 | 1100 | 3200 |
4 | 1000 | 4700 |
1)段2字节53的物理地址?
2)段3字节852的物理地址?
3)段0字节1222的物理地址?
answer:
- 4300+53=4353
- 3200+852=4052
- 1222>1000,越界中断!
信息保护
分段有助于实现将段与对其对应的保护机制相关联。
现代OS中,指令不可自我修改,故指令段只能定义为只读或只执行,内存映射硬件会检查段表项中的保护位,以防止对内存的非法访问(对只读
段的写将代码段视为数据等)。
数据则放在特定数组中,当需要访问数据时会对数组下标进行检测,超界时会产生越界中断。
信息共享
在每个进程的段表中对多进程共享的可重入代码设置一个段表项,当需要使用这部分代码时,应保证在执行时不会修改它,每个进程的私有数据和局部变量必须使用独立的段保存且不提供共享。
可重入代码(纯代码) :允许多个进程同时访问的代码,且为保证每个进程所执行的代码完全相同,决不允许执行过程中修改代码。
分页系统信息共享:使用可重入代码时,各进程的部分逻辑页面将被映射到可重入代码使用的各帧中,但其私有数据和局部变量所使用的帧则各不相同,且所有这些页面和帧的对照关系需要存入页表(长度可能会极大)。
分段系统信息共享:使用可重入代码时,只需在段表中为其设置一个段表项,并将执行时用到的部分数据copy到局部数据区,用来支持对执行时不可避免的代码修改的支持即可。
分页与分段的主要区别:
➢段是信息的逻辑单位,它是根据用户的需要划分的,因此段对用户是可见的;页是信息的物理单位,是为了管理主存的方便而划分的,对用户是透明的。
➢页的大小固定不变,由系统决定。段的大小是不固定的,它由其完成的功能决定。
➢段式向用户提供的是二维地址空间,页式向用户提供的是一~维地址空间,其页号和页内偏移是机器硬件的功能。
➢由于段是信息的逻辑单位,因此便于存贮保护和信息的共享,页的保护和共享受到限制。
段页式存储管理方式
引入原因:
分页和分段管理方式各有其优缺点,分页系统能有效提高内存的利
用率,而分段则能更好地满足用户的需要,因此可以将两者结合成一种新
的存储管理方式系统称为“段页式系统”。
基本原理
结合分段和分贝思想,先将用户程序分成若干段并分别赋予段名,再将这些段分为若干页
地址结构:由段号、段内页号和页内地址三项共同构成地址
段号(S) | 段内页号(P) | 页内地址(W) |
---|
段表与页表
系统需要配置段表和页表。
地址变换机构
本系统中使用段表寄存器存放段表基址和段表长度TL
CPU提供的逻辑地址中的段号S首先和段表长度TL比较,若未越界则根据S和段表基址找到相应段表项中纪录的该段所在页表基址,接着使用段内页号P获得对应页面的页表项位置,从中找到帧号b,最后拼接上页内地址W得到
数据的物理地址。
该过程需要三次访问内存,为提高执行速度,可以增加一个快表,访问数据时利用段号和页号检索它,若可以命中,直接取出物理帧号;否则,进行上述三次内存访问过程获得数据。
例:设有一页式存储管理系统向用户提供的逻辑地址空间最大为16页,每页2048字节,内存共有8个物理帧,试问逻辑地址至少应为多少位?内存空间
有多大?
答:每页的2048字节需要11位二进制位标识页内位移部分地址;
逻辑空间最大为16页,页号地址需要4个二进制位,
故逻辑地址至少需要15位由于内存共有8个物理帧,
而在页式管理系统中的页面大小与帧等大,因此内存空间为16K
例:在一个采用段页式存储管理的系统中,页的大小为1KB。某个正在执行的作业情况如下:
(1)请给出将逻辑地址(2,3500)转换成物理地址的过程;
(2)计算出上述逻辑地址对应的物理地址的值。
( 1 )①逻辑地址中的段号 2 跟段表控制寄存器中的段表长 3 进行比较,由于 2<3 ,故段号没有越界;②根据段表控制寄存器中的段表起始地址加上段号 2 ,找到段表中对应于第 2 段的段表项,从而得到第 2 段的页表长度和页表起始地址;③根据段内偏移 3500 得到段内页号为 3 ,页内偏移为 428 ;④把段内页号 3 和段表项中的页表长度 5 进行比较,得知页号没越界;⑤页表起始地址加上页号得到对应的页表项,从而得到第 2 段的第 3 页的物理块号 30 ;⑥物理块号 30 和块内偏移 428 拼接成物理地址 31148 。
( 2 )逻辑地址 (2,3500) 对应的物理地址为十进制数 31148 ,十六进制 79AC 。
这篇关于段页式存储管理方式详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!