操作系统原理学习笔记(二十三)-分段存储管理方式
后续的内容会停一阵了,要考试了。
操作系统,全是大题,开卷考,笑。
分段存储管理方式的引入
- 方便编程
- 将作业按逻辑分为若干段,每段从0开始编址。
- 逻辑地址由段名和段内偏移量(段内地址)决定。
- 信息共享
- 分页方式的页只是存放信息的物理块,没有完整逻辑意义。
- 段可以是信息的逻辑单位,因此在调用一个共享信息时,只需要调用一段,而不需要调用多页。
- 信息保护
- 与信息共享一样,可以对一段逻辑完整的信息进行权限管理。
- 动态增长
- 分段存储管理方式能较好解决这一问题。
- 动态链接
- 将一段逻辑完整的信息作为链接的基本单位。
分段系统的基本原理
- 分段
- 将作业的地址空间划分成若干段,每段定义一组逻辑信息。
- 如主程序段MAIN,子程序段X,数据段D,栈段S等。
- 段号可作为段名,每段从0开始编址,使用一段连续的地址空间。
- 若分段地址中,段号16位,段内地址16位,则一个作业最长有64K个段,每段最长64KB。
- 许多编译程序支持分段方式,并自动地根据源程序产生若干段。
- 将作业的地址空间划分成若干段,每段定义一组逻辑信息。
- 段表
- 进程中每个段离散装入内存中不同分区中。
- 为每个进程建立一张段映射表,简称“段表”。
- 每个段在段表中占一个表项,记录段在内存中的起始地址(基址)和段的长度。
- 段表可以存放在一组寄存器中,但更经常放在内存中。
- 段表实现了逻辑段到物理内存区的映射。
- 地址变换机构
- 为实现逻辑地址到物理地址的变换功能,OS设置一个段表寄存器,用于存放段表始址和段表长度TL。
- 变换时,先将段号S与段表长度TL比较,若S>TL,段号太大,越界,产生越界中断信号。
- 若未越界,根据始址与段号计算该段在段表项的位置,并读出该段在内存中的起始地址。
- 再检查段内地址d是否超过该段段长SL,若超过,越界,产生越界中断信号。
- 若未越界,将基址d与段内地址相加,得到内存物理地址。
- 与分页系统类似,访问一个数据要访问两次内存,因此也增设一个联想存储器。
- 段比页大,因此段表项的数目比页表少,所需存储器也更小,效率提升约10%~15%。
- 为实现逻辑地址到物理地址的变换功能,OS设置一个段表寄存器,用于存放段表始址和段表长度TL。
- 分页和分段的主要区别
- 页是信息的物理单位,段是信息的逻辑单位。
- 采用分页存储管理方式仅是为了OS方便管理内存,对用户不可见。
- 分段的目的主要在于更好满足用户的需求。
- 页的大小固定且由系统决定。段的长度取决于用户编写的程序。
- 页由硬件直接实现,将逻辑地址分成页号和页内地址,每个系统只能有一种大小的页面。
- 段的大小由编译程序根据信息的性质决定。
- 页是信息的物理单位,段是信息的逻辑单位。
信息共享
- 在下面的例子中,都有一个文本编辑程序,有160KB的代码以及40KB数据。
- 假设160KB代码是可重入(Reentrant)的,那么无论在分页还是分段系统中都可被共享,仅需在内存中保留一段该程序的副本即可。
- 可重入代码(Reentrant Code)又称为纯代码(Pure Code),是一种允许多个进程同时访问的代码,运行时代码不会有任何改变。
- 大多代码在执行时均会改变,为了使它可重入,需要设立局部数据区,解决代码变更的问题。
- 分页系统中对程序和数据的共享
- 分页系统只需要为40KB的数据区分配独立空间。
- 即内存需求为160+40*40=1760KB。
- 若每个页面大小为4KB,则每个进程首先需要为160KB的数据建立页表项,需要40个,每个进程的这40个页表项内容一致。
- 而后,为40KB数据建立10个页表项,每个进程的这10个页表项均不同。
- 即,每个进程需要50个页表。
- 分段系统中对程序和数据的共享
- 每个进程共用160KB,设立一个段表项。
- 每个进程独立40KB,设立一个段表项。
- 即,每个进程需要2个段表。
段页式存储管理方式
- 优点
- 便于实现,分段可共享,易于保护,可动态链接等。
- 基本原理
- 先将用户程序分段,再对每段分页。
- 段页式系统中,地址结构由段号,段内页号,页内地址组成。
- 段页式系统需要同时配置段表和页表。
- 段表中内容与分段系统不同,变成了页表始址与页表长度(原来是内存始址和段长)。
- 地址变换过程
- 先设置一个段表寄存器,存放段表始址和段长TL。
- 首先比较段号S与段长TL,若S>TL,则越界,产生越界中断信号。
- 若未越界,则根据段表始址与段号求出该段在段表中位置,取出页表地址。
- 并利用段内页号P来获得对应页的页表项位置,从中读出该页所在物理块号b。
- 由物理块号b与页内地址构成物理地址。
- 段页式系统为了获得一次数据,需要访问三次内存。
- 第一次访问内存中段表,取出页表地址。
- 第二次访问内存中页表,取出物理块号。
- 第三次根据页表地址与物理块号组成的物理地址,从内存中取数据。
- 为了提高执行速度,因此也需增设高速缓冲寄存器。
- 先设置一个段表寄存器,存放段表始址和段长TL。
共有 0 条评论