分段分页存储

2020/4/27 在家的网课,无聊,记录一下分页,分段,段页式存储笔记


昨天刚学了分页存储,听得我一脸懵逼,好在课下花了很长时间才弄懂。

1 分页存储管理

1.分页存储管理方式

分页存储管理是解决存储碎片的一种方法。
动态重定位是解决存储碎片问题的一种途径,但要移动大量信息从而浪费处理机时间,代价比较高,这是因为这种分配要求把作业必须安置在一连续存储区内的缘故,而分页存储管理正是要避开这种连续性要求。

2.页面

相对物理块来说,页是逻辑地址空间(虚拟内存空间)的划分,是逻辑地址空间顺序等分而成的一段逻辑空间,并依次连续编号。页的大小一般为 512B~8KB。

例如:一个 32 位的操作系统,页的大小设为

      2
     
     
      12
     
    
    
     =
    
    
     4
    
    
     k
    
    
     b
    
   
   
     2^{12}=4kb 
   
  
 </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.864108em; vertical-align: 0em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.864108em;"><span class="" style="top: -3.113em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span><span class="mord mtight">2</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.69444em; vertical-align: 0em;"></span><span class="mord">4</span><span class="mord mathdefault" style="margin-right: 0.03148em;">k</span><span class="mord mathdefault">b</span></span></span></span></span></span><br> ,那么就有页号从 0 编到<span class="katex--inline"><span class="katex"><span class="katex-mathml">

 
  
   
    
     2
    
    
     20
    
   
  
  
   2^{20}
  
 
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.814108em; vertical-align: 0em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.814108em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span><span class="mord mtight">0</span></span></span></span></span></span></span></span></span></span></span></span></span>的那么多页逻辑空间。</p> 

3.物理块

物理块则是相对于虚拟内存对物理内存按顺序等大小的划分。物理块的大小需要与页的大小一致。

例如:

     2
    
    
     31
    
   
  
  
   2^{31}
  
 
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.814108em; vertical-align: 0em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.814108em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span></span></span></span></span> =2Gb 的物理内存,按照 4Kb/页的大小划分,可以划分成物理块号从 0 到 <span class="katex--inline"><span class="katex"><span class="katex-mathml">

 
  
   
    
     2
    
    
     19
    
   
  
  
   2^{19}
  
 
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.814108em; vertical-align: 0em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.814108em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span><span class="mord mtight">9</span></span></span></span></span></span></span></span></span></span></span></span></span> 的那么多块的物理内存空间。</p> 

4.例题

答案:2 B34H 3F7B34H

首先将逻辑地址化为二进制:0010 1011 0011 0100

页面大小是4k,也就是要用

     2
    
    
     12
    
   
  
  
   2^{12}
  
 
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.814108em; vertical-align: 0em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.814108em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span></span>个位表示,后面12位表示页内地址,前面4位表示页号,0010也就是十进制2,1011 0011 0100化为十六进制就是B34H,物理地址=页面大小*物理块大小+页内地址。所以3F7H*4K+B34H,3F7H*4k也就是逻辑左移12位,后面加12个0,B34H二进制刚好是12位,直接加在后面,也就是3F7B34H。</p> 


这道题都是十进制,也要化为二进制。

首先将1A68化为二进制:0001 1010 0110 1000

页面大小是1k,也就是要用

     2
    
    
     10
    
   
  
  
   2^{10}
  
 
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.814108em; vertical-align: 0em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.814108em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span><span class="mord mtight">0</span></span></span></span></span></span></span></span></span></span></span></span></span>个位表示,后面12位表示页内地址,前面6位表示页号,000110也就是十进制6,,6号对应的物理块是31,31化为二进制011111,物理地址=页面大小*物理块大小+页内地址。011111逻辑左移10位,后面加10个0,再加上10 0110 1000十位,等于0111 1110 0110 1000,化为16进制7E68H。</p> 


总结:这类题都是逻辑地址化为二进制,看页面大小,确定前面多少位表示页号和后面多少位表示页内地址。然后物理地址等于物理块二进制*页面大小二进制,也就是物理块二进制逻辑左移几位,再加上内页地址的二进制,最后化为16进制。


再看一下这道题

2 分段管理

1 分段管理的引入
  • 方便编程:通常一个作业是由多个程序段和数据段组成的,一般情况下,用户希望按逻辑关系对作业分段,并能根据名字来访问程序段和数据段。

  • 信息共享:(1)共享是以信息的逻辑单位为基础的。页是存储信息的物理单位,段却是信息的逻辑单位。

    ​ (2)式管理中地址空间是一维的,主程序,子程序都顺序排列, 共享公用子程序比较困难,一个共享过程可能需要几十个页面。

  • 信息保护:(1)页式管理中,一个页面中可能装有 2 个不同的子程序段的指令代码,不能通过页面共享实现共享一个逻辑上完整的子程序或数据块。

    ​ (2)段式管理中,可以以信息的逻辑单位进行保护。

  • 动态增长:实际应用中,某些段(数据段)会不断增长,前面的存储管理方法均难以实现。

  • 动态链接:动态链接在程序运行时才把主程序和要用到的目标程序(程序段)链接起来。

    2 地址变换机构

越界:如果段号>段表长度TL,就是分段越界,如果段内地址>该段的段长SL,就是段内越界。


2 例题

解析:

碎片是指内存中无法利用的存储空间,碎片分为内部碎片和外部碎片,内部碎片是指分配给作业的存储空间中未被利用的部分,外部碎片是指系统中无法利用的小存储块。

在分页存储管理系统中,作业地址空间划分成若干大小相等的页,相应地将内存的存储空间分成与页大小相等的块,在为作业分配存储空间时,总是以块为单位来分配,可以将作业中的某一页放到内存的某一空闲块中。在分页存储管理中,要求将作业放在一片连续的存储区域中,因而会产生内存碎片问题。

在分段存储管理系统中,作业的地址空间划分为若干个逻辑分段,每个分段是一组逻辑意义相对完整的信息集合,每个分段都有自己的名字,每个分段都从0开始编址并采用一段连续的地址空间。内存分配以段为单位,每段分配一个连续的内存区,但各段之间不要求连续。分段的大小是由用户所决定的,用户根据需要而划分,需要多少就分配多少,所以不会产生碎片。

在段页式存储管理系统中,作业的地址空间首先被分成若干个逻辑分段,每段都有自己的段号,然后再将每段分成若干个大小固定的页,内存空间分成若干个和页面大小相同的物理块,对内存的分配以物理块为单位,这种存储方式会产生内存碎片问题。

固定分区存储管理方法是最早使用的一种可以运行多道程序的存储管理方法,它将内存空间划分为若干个固定大小的分区,每个分区中可以装入一道程序。分区的大小可以不等,但事先必须确定,在运行时不能改变。这种方法由于作业的大小并不一定与某个分区大小相等,存储空间会被浪费,内存不能得到充分利用。


分段


总结:分页和分段的区别:

a)页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;或者说,分页仅仅是由于系统管理的需要,而不是用户的需要(也是对用户透明的)。段是信息的逻辑单位,它含有一组其意义相对完整的信息(比如数据段、代码段和堆栈段等)。分段的目的是为了能更好的满足用户的需要(用户也是可以使用的)。

b)页的大小固定且由系统确定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而一个系统只能有一种大小的页面。段的长度却不固定,决定于用户所编写的程序,通常由编辑程序在对源程序进行编辑时,根据信息的性质来划分。

c)分页的作业地址空间是一维的,即单一的线性空间,程序员只须利用一个记忆符(线性地址的16进制表示),即可表示一地址。分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名(比如数据段、代码段和堆栈段等),又需给出段内地址。

d)页和段都有存储保护机制。但存取权限不同:段有读、写和执行三种权限;而页只有读和写两种权限。


3 段页式存储

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

段页式存储组织是分段式和分页式结合的存储组织方法,这样可充分利用分段管理和分页管理的优点。

(1) 用分段方法来分配和管理虚拟存储器。程序的地址空间按逻辑单位分成基本独立的段,而每一段有自己的段名,再把每段分成固定大小的若干页。

(2) 用分页方法来分配和管理实存。即把整个主存分成与上述页大小相等的存储块,可装入作业的任何一页。程序对内存的调入或调出是按页进行的。但它又可按段实现共享和保护。


注意:在段页式系统中,为了获得一条指令或数据,必须三次访问内存。第一次访问是访问内存中的段表,从中取得页表地址;第二次访问是访问内存中的页表,从中取出该页所在的物理快好,并将该块号与页内地址一起形成指令或数据的物理地址;第三次访问才是真正从第二次访问所得的地址中取出指令或数据。

2 例题

参考:https://blog.csdn.net/low5252/article/details/105691077

​ https://blog.csdn.net/qq_28602957/article/details/53637103

iv3l-1593530476055)]

参考:https://blog.csdn.net/low5252/article/details/105691077

​ https://blog.csdn.net/qq_28602957/article/details/53637103

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值