页式存储管理

操作系统原理:页式存储管理

内存分区存储管理的一个特点是连续性,每个程序都分有一片连续的内存区域。这种连续性导致碎片问题,包括

固定分区中的内碎片和可变分区中的外碎片。为了解决这些问题,人们又提出了“页式存储管理方案”。它的基本出发点

是打破存储分配的连续性,使一个程序的逻辑地址空间可以分布在若干个离散的内存块上,从而达到充分利用内存,提高

内存利用率的作用。

页式存储管理的基本思路是:一方面,把物理内存划分为许多个固定大小的内存块,称为物理页面,或页框;另一方面,把逻辑

地址空间也划成大小相同的块,称为逻辑页面,页面的大小要求是2^n.一般在512个字节到8KB之间。当一个用户程序被装入内存时,不是以

整个程序为单位,把它放在一整块连续的区域,而是以页面为单位来进行分配的。对于一个大小为N个页面的程序,需要有N个空闲的物理页面

把它装进去,当然,这些物理页面不一定是连续的。

在实现页式存储管理的时候需要解决以下几个问题:

1、数据结构:用于存储管理的数据结构师什么?

2、内存的分配和回收:当一个任务到来时,如何给他分配内存空间?当一个任务运行结束后,如何来回收它所占用的内存空间?

3、地址映射:当一个任务呗加载到内存后,它被打散地存储在若干个不连续的物理页面当中。在这种情况下,如何把程序中使用的逻辑地址

转换为内存访问时的物理地址,以确保它能正确的运行?

(1)数据结构。

在页式存储管理中,最主要的数据结构有两个。

1、页表(page table):页表给出了任务的逻辑页面号与内存中的物理页面号之间的对应关系。

2、物理页面表:用来描述内存空间中,各个物理页面的使用分配状况。在具体实现上,可以采用位示图或空闲页面链表等方法。

(2)地址映射

地址映射的基本思路如下:

1、逻辑地址分析:对于给定的一个逻辑地址,找到它所在的逻辑页面,以及它在页面内的偏移地址。

2、页表查找:根据逻辑页面号,从页表中找到它所对应的物理页面号。

3:、物理地址合成:根据物理页面号及页内偏移地址,确定最终的物理地址。

a、逻辑地址分析:

逻辑页面号=逻辑地址/页面大小

页内偏移量=逻辑地址%页面大小

b、页表查找

对于给定的一个逻辑地址,如果我们已经知道了它的逻辑页面号,就可以去查找页表,从中找到相应的物理页面号。

在具体实现上,页表通常保存在内核的地址空间中,因为它是操作系统的一个数据结构。另外,为了能够访问页表的内容,在硬件上要增加一对寄存器:

一个是页表基地址寄存器,用来指向页表的起始地址;另一个是页表长度寄存器,用来指示页表的大小,即对于当前任务,它总共包含有多少个页面。操作

系统在进行任务切换的时候,会去更新这两个寄存器当中的内容。

C、物理地址的合成。

假设在程序的运行过程中,需要去访问某个内存单元,所以就给出了这个内存单元的逻辑地址。然后得出逻辑页面号和页内偏移地址。也页表基地址寄存器当中,

存放的是当前任务的页表首地址。这个地址加上逻辑页面号就找到了响应的页表项,里面存放的是这个逻辑页面对应的物理页面号。这个页面号与页内偏移地址进行组合,

从而得到最终的物理地址,然后用这个物理地址去访问。

有一个很大的问题:当程序在运行时,如果需要访问某个内存单元,如去读写内存当中的一个数据,或是去内存取一条指令,在此情况下,需要访问两次内存:访问页表和真正访问数据或指令。这使得访问效率只有50%。

为了解决这个问题,人们引入了“快表”的概念。人们在MMU中增加一个特殊的快速查找硬件---TLB(Translation Lookaside Buffer),或者叫关联存储器,用来存放那些最常去的页表项。可以把逻辑页面号直接映射为相应的物理页面号,这样就不用访问内存了。

4、优缺点:

优点:1、没有外碎片。程序不必连续存放。便于管理。

缺点:程序必须全部装入内存,才可以运行。操作系统必须为每一个任务都维护一张页表,开销比较大,简单的页表结构已经

不能满足要求,必须设计出更复杂的结构。如多级页表结构、哈希页表结构、反置页表。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值