挑战408——操作系统(20)——段式存储方式

页式存储方式,是以计算机的角度设计的,以便提高内存的利用率和计算机的性能,且分页机制是通过硬件实现的。对用户而言是完全透明的段式存储器的引入,主要是为了满足用户在编程和使用上的要求。具体来说:

  1. 方便编程。因为人们写的程序是分成了许多个段的,比如一个程序里面有很多和函数等等
  2. 段的共享。实现程序和数据的共享,都是以信息的逻辑单位为基础的。比如一些公共函数,一些全局变量等等。
  3. 动态链接。动态链接是程序在运行的过程中实现目标模块的链接,动态链接同样要求以段为存储管理的单位。(写过dll的同学应该深有体会,里面就是一些类库)
  4. 动态增长。程序运行过程中,往往有些段,特别是数据段,会不断的往上增长。而分页确实固定的。
  5. 段的保护
段式存储的基本原理

将进程对应的程序和数据段,按本身的特性,分成若干段,每段定义一组有意义的逻辑信息单位。每个段有自己的名字,并从0开始编址。在内存中,每个段占用一段连续分区
由于进程的地址空间被分成很多个段,因此,在标识某一个进程的时候,我们需要同时给出它的段名跟段内地址。所以段式存储的地址空间是二维的。假设有一个32位的逻辑地址字段如下:
在这里插入图片描述
类似于页式存储,操作系统同样为每个进程创建一张段表。并通过查找段表来找到相应的段号来实现逻辑地址到物理地址的映射。

段式存储的地址变换过程

同样,操作系统设置了段表寄存器用来存放段表的初始地址跟段表的长度。

  1. 若逻辑地址中,所给的段号 > 段表寄存器的长度。那么就产生越界中断。否则转2
  2. 由段表的初始地址,找到相应的段表的位置
  3. 检查逻辑地址中,段内位移是否超过该段的长度,如果是,那么发出越界中断。否则转4
  4. 将段的初始地址与段内位移相加,于是得到要访问的物理地址。

(同样,这个过程很重要,等到刷题篇的时候好好做)。

段页式存储管理

到了现在我们至少知道,页式存储系统能更有效的提高内存的利用率,而段数系统能更好的满足用户的需要,于是各取所长,便有了段页式存储管理。

段页式存储管理的基本思想

先分段再分页。先把进程分段,再将每个段分成若干页,(即在分段中分页)。对内存的管理仍然和分页存储管理一样,将其分成若干个和页面大小相同的存储块。(有没有觉得跟组成原理中,cache和主存之间的映射方式相同的感觉?)
进程的逻辑地址,由段号,段内页号,页内位移3部分组成。如下图所示:
在这里插入图片描述
同样的,操作系统要配置段表跟页表,要将一个段的若干页离散的存放,段的大小变化不是段长的变化,而是页表长度的变化。

段页式存储的地址变换过程

操作系统为该管理配置了段表寄存器,存放段表的初始地址以及段表的长度。进程中有一个段表,,其段表项包括下面几个字段:
在这里插入图片描述
变换过程如下:

  1. 对于给定的逻辑地址,将段号与段表寄存器中的段表程度进行比较,判断是否越界
  2. 通过段表寄存器中的段表初始地址,找到该段的段表,从而找到对应的段表项
  3. 查看该段的状态位,如果不在内存,则发生缺页中断。没有空间就进行置换
  4. 从该段的页表初始地址找到该段的页表
  5. 将段内页号与页表长度比较,看看是否越界
  6. 查看该页的状态位,若不在内存,则缺页中断,没有空间则进行置换
  7. 按页式存储的运算规则进行物理地址的计算。

总之,在寻找之前,务必判断是否越界,是否存在于内存等异常情况。
在段页式存储管理当中,为了取到一条指令或者数据,需要访问3次内存。在变换的过程中,显示通过段表找到页表的起始地址(1次),然后进行页式存储的访问(2次,前面说过)。但是这里注意了,一个进程中的段表只能有一个,但是页表可以有多个。(因为我们是把段的内部按页来分的)

分段与分页的区别
  1. 本质上的不同。页是信息的物理单位。段是信息的逻辑单位。
  2. 设计的出发点不同。分页是为了实现进程在内存中的有效离散存放,减少碎片。而分段是为了满足用户的编程需要。
  3. 实现的方式不同。分页是由机器硬件实现的,其大小是固定的。而段是由用户编写的程序决定的,其长度是可变的。
  4. 地址的格式不同。页的逻辑地址空间是一维的,因为其大小跟物理的存储块的大小是一样的,只用给出页号,页内偏移都是一样的。而段的空间是二维的,要同时给出段号跟段内地址。
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值