操作系统原理学习笔记(二十三)-分段存储管理方式

操作系统原理学习笔记目录

后续的内容会停一阵了,要考试了。
操作系统,全是大题,开卷考,笑。

分段存储管理方式的引入

  • 方便编程
    • 将作业按逻辑分为若干段,每段从0开始编址。
    • 逻辑地址由段名和段内偏移量(段内地址)决定。
  • 信息共享
    • 分页方式的页只是存放信息的物理块,没有完整逻辑意义。
    • 段可以是信息的逻辑单位,因此在调用一个共享信息时,只需要调用一段,而不需要调用多页。
  • 信息保护
    • 与信息共享一样,可以对一段逻辑完整的信息进行权限管理。
  • 动态增长
    • 分段存储管理方式能较好解决这一问题。
  • 动态链接
    • 将一段逻辑完整的信息作为链接的基本单位。

分段系统的基本原理

  • 分段
    • 将作业的地址空间划分成若干段,每段定义一组逻辑信息。
      • 如主程序段MAIN,子程序段X,数据段D,栈段S等。
    • 段号可作为段名,每段从0开始编址,使用一段连续的地址空间。
    • 若分段地址中,段号16位,段内地址16位,则一个作业最长有64K个段,每段最长64KB。
    • 许多编译程序支持分段方式,并自动地根据源程序产生若干段。
  • 段表
    • 进程中每个段离散装入内存中不同分区中。
    • 为每个进程建立一张段映射表,简称“段表”。
    • 每个段在段表中占一个表项,记录段在内存中的起始地址(基址)和段的长度。
    • 段表可以存放在一组寄存器中,但更经常放在内存中。
    • 段表实现了逻辑段到物理内存区的映射。
  • 地址变换机构
    • 为实现逻辑地址到物理地址的变换功能,OS设置一个段表寄存器,用于存放段表始址和段表长度TL。
      1. 变换时,先将段号S与段表长度TL比较,若S>TL,段号太大,越界,产生越界中断信号。
      2. 若未越界,根据始址与段号计算该段在段表项的位置,并读出该段在内存中的起始地址。
      3. 再检查段内地址d是否超过该段段长SL,若超过,越界,产生越界中断信号。
      4. 若未越界,将基址d与段内地址相加,得到内存物理地址。
    • 与分页系统类似,访问一个数据要访问两次内存,因此也增设一个联想存储器。
      • 段比页大,因此段表项的数目比页表少,所需存储器也更小,效率提升约10%~15%。
  • 分页和分段的主要区别
    • 页是信息的物理单位,段是信息的逻辑单位。
      • 采用分页存储管理方式仅是为了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。
      1. 首先比较段号S与段长TL,若S>TL,则越界,产生越界中断信号。
      2. 若未越界,则根据段表始址与段号求出该段在段表中位置,取出页表地址。
      3. 并利用段内页号P来获得对应页的页表项位置,从中读出该页所在物理块号b。
      4. 由物理块号b与页内地址构成物理地址。
    • 段页式系统为了获得一次数据,需要访问三次内存。
      • 第一次访问内存中段表,取出页表地址。
      • 第二次访问内存中页表,取出物理块号。
      • 第三次根据页表地址与物理块号组成的物理地址,从内存中取数据。
    • 为了提高执行速度,因此也需增设高速缓冲寄存器。

You may also like...

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注