虚拟管理,分页分段,端页

连续分配管理:为用户分配一个连续的内存空间

  • 块式管理

    • 将内存分成几个固定大小的块,每个块只包含一个进程。如果程序需要的内存较少,那么分配的这块内存很大一部分几乎被浪费了。在块中没有被使用到的空间即为碎片

    离散分配管理:允许一个程序使用的内存分布在离散或者不相邻的内存中

  • 页式管理

    • 将内存分为大小相等且固定的一页一页的形式,页较小,相比于块式管理划分得更细,提高内存利用率,减少碎片。页式管理通过页表对应逻辑地址和物理地址

    • 逻辑地址划分为固定大小的页,同样,物理地址划分为同样大小的页框,页与页框之间通过页表对应起来

    • 没有外碎片(页的大小是固定的),但是会产生内碎片(一个页可能会填不满)

  • 段式管理

    • 将程序的地址空间划分为若干段,如代码段、数据段、堆栈段等

    • 每一段具有实际意义

    • 段式管理通过段表对应逻辑地址和物理地址

    • 没有内碎片,但是会存在外碎片

  • 段页式管理

    • 先将主存分成若干段,每个段又分成若干页,段页式管理中段与段之间以及段的内部都是离散的。

    • 集合了段式管理和页式管理的优点,提高内存的利用效率

1、分页
  • 把内存空间划分为大小相等且固定的块,作为主存的基本单位。因为程序数据存储在不同的页面中,而页面又离散的分布在内存中,因此需要一个页表来记录映射关系,以实现从页号到物理块号的映射。

  • 访问分页系统中内存数据需要两次的内存访问 (一次是从内存中访问页表,从中找到指定的物理块号,加上页内偏移得到实际物理地址;第二次就是根据第一次得到的物理地址访问内存取出数据)。

img

2、分段

分页是为了提高内存利用率,而分段是为了满足程序员在编写代码的时候的一些逻辑需求(比如数据共享,数据保护,动态链接等)。

分段内存管理当中,地址是二维的,一维是段号,二维是段内地址;其中每个段的长度是不一样的,而且每个段内部都是从0开始编址的。由于分段管理中,每个段内部是连续内存分配,但是段和段之间是离散分配的,因此也存在一个逻辑地址到物理地址的映射关系,相应的就是段表机制。

img

由于分段管理中,每个段内部是连续内存分配,但是段和段之间是离散分配的,因此也存在一个逻辑地址到物理地址的映射关系,相应的就是段表机制。段表中的每一个表项记录了该段在内存中的起始地址和该段的长度。段表可以放在内存中也可以放在寄存器中。

访问内存的时候根据段号和段表项的长度计算当前访问段在段表中的位置,然后访问段表,得到该段的物理地址,根据该物理地址以及段内偏移量就可以得到需要访问的内存。

3、段页

页式存储管理能有效地提高内存利用率,而分段存储管理能反映程序的逻辑结构并有利于段的共享

段页式管理就是将程序分为多个逻辑段,在每个段里面又进行分页,即将分段和分页组合起来使用。

为了实现地址变换,系统为每个进程建立一张段表,而每个分段有一张页表(在一个进程中,段表只有一个,而页表可能有多个)

在进行地址变换时,首先通过段表查到页表起始地址,然后通过页表找到页帧号,最后形成物理地址。如图所示,进行一次访问实际需要至少三次访问主存,这里同样可以使用快表以加快查找速度,其关键字由段号、页号组成,值是对应的页帧号和保护码。

三次内存访问:

  1. 访问内存中的段表查到页表的起始地址

  2. 访问内存中的页表找到页帧号,形成物理地址

  3. 得到物理地址后,再一次访问内存,存取指令或者数据

4、分页机制和分段机制的共同点和区别

共同点:

  • 都是为了提高内存利用率,减少内存碎片

  • 两者都是离散内存分配。但是每个页和每个段内部是连续的

    不同点:

  • 页的大小是固定的,由操作系统决定;段的大小不固定,取决于当前运行的程序

  • 分页是为了满足操作系统内存管理的需要,没有具体的含义,而段是逻辑信息单位,在程序中体现为代码段,数据段,能够更好地满足用户的需求

5、分页系统

分页是将磁盘或者硬盘分为大小固定的块,称为页

将内存分为同样大小的块,称为页框

  • 程序执行的时候,将磁盘的页装入页框中

    页和页框由两部分组成,分别是页号和偏移量

    通过操作系统维护的页表来维护页框和页之间的关系

  • 页表中,页号为索引,页框号为表的内容

6、分页和分段

分页对程序员是透明的,但是分段需要程序员显式划分每个段。

分页的地址空间是一维地址空间,分段是二维的

  • 分页的地址结构是:页号+位移量

    • 页号定位页项,得到对应块号,块是事先划分好的,操作系统可以根据地址结构直接访问到,因此地址空间是一维的

  • 分段的地址结构:段号+位移量

    • 根据段号在段表中找到对应的段项

    • 段项包含了基址,是程序员设定的,操作系统并不知道

    • 因此操作系统要结合地址结构和基址才能访问具体的内存

    页的大小不可变,段的大小可以动态改变

    ==分页主要用于实现虚拟内存,从而获得更大的地址空间;分段主要是为了使程序和数据可以被划分为逻辑上独立的地址空间并且有助于共享和保护==

    信息共享:段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享受到限制;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值