分段与分页存储

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38216239/article/details/79972698

来自网络的一个比喻

你去听课,带了一个纸质笔记本做笔记。笔记本有100张纸,课程有语文、数学、英语三门,对于这个笔记本的使用,为了便于以后复习方便,你可以有两种选择。

第一种是,你从本子的第一张纸开始用,并且事先在本子上做划分:第2张到第30张纸记语文笔记,第31到60张纸记数学笔记,第61到100张纸记英语笔记,最后在第一张纸做个列表,记录着三门笔记各自的范围。这就是分段管理,第一张纸叫段表。

第二种是,你从第二张纸开始做笔记,各种课的笔记是连在一起的:第2张纸是数学,第3张是语文,第4张英语……最后呢,你在第一张纸做了一个目录,记录着语文笔记在第3、7、14、15张纸……,数学笔记在第2、6、8、9、11……,英语笔记在第4、5、12……。这就是分页管理,第一张纸叫页表。你要复习哪一门课,就到页表里查寻相关的纸的编号,然后翻到那一页去复习。

分段与分页一些比较

1.基本思想
用户程序的地址空间被划分成若干固定大小的区域,称为“页”,相应地,内存空间分成若干个物理块,页和块的大小相等。可将用户程序的任一页放在内存的任一块中,实现了离散分配。页是信息的物理单位

将用户程序地址空间分成若干个大小不等的段,每段可以定义一组相对完整的逻辑信息。存储分配时,以段为单位,段与段在内存中可以不相邻接,也实现了离散分配。段是信息的逻辑单位

2.设计目的
分页、分段都是可以使程序的地址空间超过存储器的物理空间。
分页主要是为了解决内存碎片问题,采用固定大小的页面,是系统管理的需要。
分段是为了使程序和数据划分为逻辑上独立的地址空间而设计的,这样做有利于管理变长数据结构、过程的链接、过程与数据的共享、设置特定保护类型等,是出于用户需求的设计。

3.地址转换
分页的作业地址空间是一维的,转换是通过MMU实现页号到块号的转换或通过硬件“快表”TLB实现快速转换(详细过程见另外blog)。

分段的作业地址空间是二维的,由段号和段内地址映射到物理地址,具体转换过程:

  • (1). 程序执行时,从PCB中取出段表始址和段表长度,装入段表寄存器。
  • (2). 由分段地址变换机构将逻辑地址自动分成段号和段内地址。
  • (3). 将段号与段表长度进行比较,若段号大于或等于段表长度,则表示本次访问的地址已超越进程的地址空间,产生越界中断。
  • (4). 将段表始址与段号和段表项长度的乘积相加,便得到该段表项在段表中的位置。
  • (5). 取出段描述子得到该段的起始物理地址。
  • (6). 检查段内位移量是否超出该段的段长,若超过,产生越界中断。
  • (7). 对该段的存取控制进行检查。
  • (8). 将该段基址和段内地址相加,得到实际的物理地址。

(另)段页式存储
分页系统能有效地提高内存的利用率,而分段系统能反映程序的逻辑结构,便于段的共享与保护,将分页与分段两种存储方式结合起来,就形成了段页式存储管理方式。

在段页式存储管理系统中,作业的地址空间首先被分成若干个逻辑分段,每段都有自己的段号,然后再将每段分成若干个大小相等的页。对于主存空间也分成大小相等的页,主存的分配以页为单位。

段页式系统中,作业的地址结构:段号、段内地址,其中段内地址又分为:页号和页内偏移量。

程序员按照分段系统的地址结构将地址分为段号与段内位移量,地址变换机构将段内位移量分解为页号和页内位移量。

为实现段页式存储管理,系统应为每个进程设置一个段表,包括每段的段号,该段的页表始址和页表长度。每个段有自己的页表,记录段中的每一页的页号和存放在主存中的物理块号。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页