转自:https://blog.csdn.net/qq_38499859/article/details/81054286
一.分段存储管理方式的引入
为什么引入分段存储管理方式,有两方面原因:
- 通常的程序都可以分为若干个段,每个段大多都是一个相对独立的逻辑单位。
- 实现和满足信息共享,信息保护,动态链接以及信息的动态增长等需求,也都是以段为基本单位的。
二.分段系统的基本原理
1.分段
在分段存储管理方式中,作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息。例如,有主程序段MAIN、子程序段X、数据段D及栈段S等,通常,用段号代替段名。每个段都从0开始编址,并采用一段连续的地址空间。
段的长度由相应的逻辑信息组的长度决定,因此每个短对长度并不相等。
分段地址中地址具有的结构:
2.段表
类似与分页系统,分段系统中段也是离散的分布在内存中,所以需也要为每个进程建立一个段映射表,简称段表。
每个段在表中占有一个表项,其中记录了该段在内存空间的起始地址(基址)和段的长度。如下图:
3.地址变化机构
为了实现进程从逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放段表始址和段表长度TL。
在进行地址变换时:
- 系统将逻辑地址中的段号与段表长度TL进行比较。若S>TL,表示段号太大,是访问越界,于是产生越界中断信号。
- 若未越界,则根据段表的始址和该段的段号,计算出该段对应段表项的位置,从中读出该段在内存的起始地址。
- 再检查段内地址d是否超过该段的段长SL。若超过,即d>SL,同样发出越界中断信号。
- 若未越界,则将该段的基址d与段内地址相加,即可得到要访问的内存物理地址。
4.分段和分页的主要区别
相似:
- 两者都采用了离散分配方式
- 都是通过地址映射机构来实现地址变化
区别:
- 页是信息的物理单位,分页仅仅是为了系统管理的需求,完全是系统的行为,对用户是不可见的。段是信息的逻辑单位,它通常是一组意义完整的信息,目的是更好的满足用户的需求。
- 页的大小固定且有系统决定,段的大小不定。
- 分页的用户程序地址空间是一维的。分段系统中,用户的地址空间是二维的。
两者的优缺点:
在段式存储管理中,将程序的地址空间划分为若干段(segment),如代码段,数据段,堆栈段;这样每个进程有一个二维地址空间,相互独立,互不干扰。段式管理的优点是:没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)
在页式存储管理中,将程序的逻辑地址划分为固定大小的页(page),而物理内存划分为同样大小的页框,程序加载时,可以将任意一页放入内存中任意一个页框,这些页框不必连续,从而实现了离散分离。页式存储管理的优点是:没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满)
两者的不同点:
(1) 分页仅仅是由于系统管理的需要而不是用户的需要。段则是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好地满足用户的需要。
(2) 页的大小固定且由系统决定,由系统把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而在系统中只能有一种大小的页面;而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时,根据信息的性质来划分。
(3) 分页的作业地址空间是一维的,即单一的线性地址空间,程序员只需利用一个记忆符,即可表示一个地址;而分段的作业地址空间则是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。
三.信息共享
分段系统的一个突出优点,是易于实现段的共享,即允许若干个进程共享一个或者多个分段。
1.分页系统中对程序和数据的共享
在分页系统中,虽然也能实现对程序和数据的共享,但远不如分段系统来得方便。例如多用户系统中,多个进程执行一个文本编译程序,该程序有160kb的代码和40kb的数据区。代码区可以共享。假设每个页面的大小为4kb,那么160kb的代码将占用40个页面,数据区占用10个页面。为了实现代码的共享,所以进程的40个代码页表项的物理块号是21#60#。进程10个数据页表项的物理块号分别是61#70#,71#~80#…如下图:
2.分段系统中对程序和数据的共享
在分段系统中,无论该段有多长,只需为该段设置一个段表项。这就使分段系统实现共享变得很容易,还是一上面的文本编辑器程序为例。下图就是分段程序共享文本编辑器的示意图:
四.段页式存储管理方式
分页系统以页面作为内存分配的基本单位,能够有效提高内存的利用率,而分段系统以段作为内存分配的基本单位,它能够更好的满足用户多方面的需求。而段页式系统这很好的集两者之长。
1.基本原理
段页式系统的基本原理是分段和分页原理的结合,即先将用户程序分为若干段,再把系统分为若干页,为每一个段分配一个段明。
段页地址结构包括三部分:段号,段内页号,页内地址
段表的内容和分段系统不同,它还包括页表大小和页内始址,下图就是利用段表进行从逻辑地址到物理地址的转变:
2.地址变化过程
在段页式系统中,为了便于实现地址变换,须配置一个段表寄存器,其中存放段表始址和段长TL。
进行地址变换时
- 利用段号S,将它与段长TL进行比较。
- 若S < TL,表示未越界,于是利用段表始址和段号来求出该段所对应的段表项在段表中的位置,从中得到该段的页表始址
- 利用逻辑地址中的段内页号P来获得对应页的页表项位置,从中读出该页所在的物理块号b,
- 再利用块号b和页内地址来构成物理地址。
在段页式系统中,为了获取一条指令,需进行三次内存访问,即访问段表,访问页表,访问物理块号。为了提高运行速度,在其中增加一个高速缓冲寄存器。每次访问地址时,现在高速缓存器中查找,如果有,可直接找到物理块。若未找到,在使用原来的三次访问,之后将该物理块存入高速缓存器中。
五.参考资料
《操作系统 第四版》