《Linux操作系统原理分析之存储管理(3)》(16)
- 5 存储管理
- 5.6 分段存储管理
- (1) 地址结构
- (2) 段表
- (3) 地址变换机构
- (4) 存储共享
- (5) 分页和分段的主要区别
- 5.7 段页式存储管理
- 5.7.1 段页式存储管理原理
- 5.7.2 地址转换
5 存储管理
5.6 分段存储管理
1.基本思想
从固定分区到可变分区,进而又发展到分页系统的原因,主要都是为了提高内存利用率,然而,分段存储管理方式的引入,则主要是为了满足以下的一系列要求。
(1) 地址结构
分段系统,作业的地址空间(二维)由若干逻辑分段组成,每个段是一组逻辑意义完整的信息集合。每段都有自己的名字,且每段都是首地址为 0 的连续的一维地址空间。所以,整个作业空间是二维的,具有如下地址结构。 一个作业最多可以有 28个段,每段最长为 216
(2) 段表
分段式存储管理以段为单位进行内存分配,每段分配一个连续的内存区,各段之间的内存不一定连续,且各个内存区也不等长。内存的分配和释放随需要动态进行。在将一个进程的各个段离散地放入内存和不同的物理区中后,为能使程序正确运行,即能从物理内存中找出每个逻辑段对应的位置,需要在系统中为每个进程建立一张段映射表,简称“段表”(SMT: segment mapping table)。每个段在段表中占有一个表项,其中记录了该段在内存中的起始地址、段的长度。段表可实现从逻辑段到物理内存的映射。
SMT: [段号][装入标志位][段长][内存始址]
(3) 地址变换机构
为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放段表的始址和段表的长度。在进行地址变换时,系统将段号与段表长度进行比较,若段号太大表示访问越界,便产生越界中断信号;若未越界,则根据段表始址和该段的段号,计算出该段对应的段表项的位置,从而读出该段在内存中的起始地址,然后再检查段内地址是否超过该段的段长,若超过,同样发出越界中断信号;若未越界,则将该段内存起始地址与段内地址相加,得到要访问的内存物理地址。
与页式管理相同,段式管理时的地址变换过程必须经过二次以上的内存访问。即首先访问段表以计算得到访问指令或数据的物理地址,然后才是对物理地址进行取数据或数据操作。为了提高访问速度,也可引入快表。
(4) 存储共享
只需在每个进程的段表中,由相应表项来指向该共享段在内存中的物理区即可。如下图:
(5) 分页和分段的主要区别
分页 | 分段 |
---|---|
页是信息的物理单位,分页仅仅是由于系统管理的需要,而不是用户的需要 | 段是信息的逻辑单位,它含有一组具有相对完整意义的信息,是处于用户的需要。 |
页的大小固定且由系统确定,把逻辑地址分为页号和页内地址两部分功能,由机器硬件实现 | 段的长度却不固定,由用户在变成是确定,或由编译程序在对源程序进行编译时,根据信息的性质来划分。 |
分页的作业地址空间是一维的,即单一的线性地址空间 | 分段的作业地址空间则是二维的。 |
5.7 段页式存储管理
5.7.1 段页式存储管理原理
分页系统能有效地提高内存利用率,而分段系统则能很好地满足用户需要,如果对两种存储管理方式“各取所长”,可结合成一种新的存储管理方式,它具有分段系统的优点,又能象分页系统那样很好地解决“碎片”问题。这个系统别称为“段页式系统”。
1. 基本原理
段页式系统的基本原理是分段和分页原理的结合。先分段后分页,每段具有段名。例如:该作业由三段,页面大小为 4K
2.地址结构
段页式系统中,其地址结构由段名、段内页号和页内地址三部分组成。
3.为实现地址映射,必须配置段表和页表,段表的内容略有变化,它不是内存始址和段长,而是页表始地址和页表长度。
5.7.2 地址转换
在段页式系统中,需配置 1 段表寄存器, 其中存放段表始址和段表长度,进行地址变换时,首先利用段号 S,将之与段表长度进行比较,若未越界,便利用段表始址和段号求得该段表项的位置,并从中找到页表始址,并利用逻辑地址中的页号 P 获得对应页表项的位置,从而取出该页的物理块号 b,由块号b 和页内地址构成物理地址。
在段页式系统中,为了获得一条指令或数据,需要三次访问内存。第一次,时从内存中取得页表始址;第二次,从内存中取的物理块号形成物理地址;第三次才能取得所需的指令和数据。为了提高速度,必须引入超高速缓冲 Cache.