专栏首页一滴水的眼泪分页存储管理的基本原理

分页存储管理的基本原理

逻辑地址和物理地址

  • 逻辑地址。用户源程序经编译、链接后得到可装入程序。由于无法预先知道程序装入内存的具体位置,因此不可能在程序中直接使用内存地址,只能暂定程序的起始地址为 0。这样,程序中指令和数据的地址都是相对 0 这个起始地址进行计算的,按照这种方法确定的地址称为逻辑地址或相对地址。一般情况下,目标模块(程序)和装入模块(程序)中的地址都是逻辑地址。
  • 逻辑地址空间。一个目标模块(程序)或装入模块(程序)的所有逻辑地址的集合,称为逻辑地址空间或相对地址空间。
  • 物理地址。内存中实际存储单元的地址称为物理地址,物理地址也称为绝对地址或内存地址。为了使程序装入内存后能够正常运行,就必须将程序代码中的逻辑地址转换为物理地址,这个转换操作称为地址转换。
  • 物理地址空间。内存中全部存储单元的物理地址集合称为物理地址空间、绝对地址空间或内存地址空间。由于每个内存单元都有唯一的内存地址编号,因此物理地址空间是一个一维的线性空间。要使装入内存的程序后能够正常运行、互不干扰,就必须将不同程序装入到内存空间的不同区域。
  • 虚拟地址空间。CPU 支持的地址范围一般远大于机器实际内存的大小,对于多出来的那部分地址(没有对应的实际内存)程序仍然可能使用,我们将程序能够使用的整个地址范围称为虚拟地址空间。如 Windows XP 采用 32 位地址结构,每个用户进程的虚拟地址空间为 4GB(232),但可能实际内存只有 2GB。虚拟地址空间中的某个地址称为虚拟地址,而用户进程的虚拟地址就是前面所说的逻辑地址。

分页存储管理的基本原理

1.实现原理

在分页存储管理中,一个程序的逻辑地址空间被划分成若干个大小相等的区域,每个区域称为页或页面,并且程序地址空间中所有的页从 0 开始顺序编号。相应地,内存物理地址空间也按同样方式划分成与页大小相同的区域,每个区域称为物理块或页框,与页一样内存空间中的所有物理块也从 0 开始顺序编号。在为程序分配内存时,允许以页为单位将程序的各个页,分别装入内存中相邻或不相邻的物理块中。由于程序的最后一页往往不能装满分配给它的物理块,于是会有一定程度的内存空间浪费,这部分被浪费的内存空间称为页内碎片。

分页系统中页的选择对系统性能有重要影响。若页划分得过小,虽然可以有效减少页内碎片,并提高内存利用率,但会导致每个进程需要更多的页,这样会使分页系统中用于页管理的页表增大,而占用更多的内存空间。若页划分得过大,虽然可以减少页表大小,并提高页的置换速度,但会导致页内碎片增大,而且当一个页大到能装下一个程序时就退化为分区存储管理了。因此页的大小应适中,分页系统中页的大小取决于机器的地址结构,一般设置为 2 的整数幂,通常为 512B~8KB。

2.逻辑地址结构

在分页存储管理中,程序中的逻辑地址被转换为页号和页内地址。这个转换工作在程序执行时由系统硬件自动完成,整个过程对用户透明。因此用户编程时不需要知道逻辑地址与页号和页内地址的对应关系,只需要使用一维的逻辑地址。

程序的一维逻辑地址空间经过系统硬件自动分页后,形成「页号 + 页内地址」的地址结构。在图 所示的地址结构中,逻辑地址通过页号和页内地址来共同表示。其中,0~11 位是页内地址,即每个页的大小是 4KB;12~31 位是页号,即地址空间最多允许有 1M 个页。一维逻辑地址与页号和页内地址的关系是(注:页长即一页的大小)

一维逻辑地址 = 页号 × 页长 + 页内地址

3.数据结构

为了实现分页存储管理,系统主要设置了以下两种表格。

  • (1)页表

在分页系统中,允许程序所有的页以离散方式分别存储在内存不同的物理块里,为了使程序能够正确运行,必须在内存空间中找到存放每个页的物理块。因此操作系统为每个程序(进程)建立了一张页映射表,简称页表(Page Table),用来存储页号及其映射(装入)的内存物理块号。最简单的页表由页号及其映射的物理块号组成。由于页表的长度由程序所拥有页的个数决定,故每个程序的页表长度通常不同。

  • (2)内存分配表

为了正确地将一个页装入到内存的某一物理块中,就必须知道内存中所有物理块的使用情况,因此系统建立一张内存分配表来记录内存中物理块的分配情况。由于每个物理块的大小相同且不会改变大小,因此最简单的办法是用一张位示图(Bitmap)来构成内存分配表。位示图是指在内存中开辟若干个字,它的每一位与内存中的一个物理块相对应。每一位的值可以是 0 或 1,当取值为 0 时,表示对应的物理块空闲;当取值为 1 时,表示对应的物理块已分配。此外,在位示图中增加一个字节,来记录内存当前空闲物理块的总数。

4. 地址保护

  1. 基本地址转换

在分页存储管理中,系统为每个程序建立了一张页表并存放于内存中 当程序被装入内存但尚未运行时,页表始址(页表在内存中的起始地址)和页表长度(程序逻辑地址空间从页号 0 开始划分出的最大页号)等信息被保存到为该程序(进程)创建的 PCB 中,或保存到请求表中 一旦进程调度程序调度该进程运行时,其 PCB 中保存的页表始址和页表长度信息(或请求表中这两个的信息)便被装入到页表控制寄存器中,基本地址转换过程如图 所示

从基本地址转换过程可知 物理地址 = 物理块号 页长 + 页内地址,由于页表驻留在内存,因此当 CPU 依据指令中的逻辑地址进行操作时,至少要两次访问内存

为了提高地址转换的速度,一种行之有效的方法是在地址转换机构中,增加一个具备并行查找能力的高速缓冲寄存器,又称联想存储器(Associative Memory)来构成一张快表,快表中保存着当前运行进程最常用的页号及其映射的物理块号

  1. 具有快表的地址转换

在快表中查找和在内存中查找是同时进行的,只不过在内存页表中查找的速度要慢一些,当快表中找到含有该页号的页表项时,则终止内存页表的查找。

由于成本的关系,快表不可能做得很大,通常只存放 32~1024 个页表项 据统计,从快表中能找到所需页表项的概率可达 90% 以上。

  1. 页的保护 页的保护分为两个方面:一是在逻辑地址转换成物理地址时的保护,通过页号与页表长度的比较防止地址越界;二是在实现信息共享时,对共享信息的保护 通常是在页表中增加一些标志位来设置存取控制字段,一般设置只读 读写 读和执行等权限 如果某进程试图去执行一个只允许读的内存物理块,系统就会发出访问性中断。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 操做系统-进程同步与存储管理

    并发执行的程序在运行的时候共享系统的资源,一个进程会受到其他进行的制约,为了协调,达到资源共享,就需要实现进程的互斥和同步。

    一滴水的眼泪
  • 杀死进程

    按大写O再按k再敲回车,然后使用R就可以以cpu占用量进行查看了!下面贴出top的技巧命令:

    一滴水的眼泪
  • 浏览器

    从输入一个地址开始,它可以是这样的 www.baidu.com, 也可以是这样的 https://admin:admin@www.gschaos.club:8...

    一滴水的眼泪
  • [操作系统]内存非连续分配方式

    1)把内存分为一个个小分区,再按照分区大小把进程拆分成一个个的小部分,比如每个分区4kb,每个分区就是一个页框/页帧/页存块/物理块,页框号从0开始

    陶士涵
  • 操作系统之存储管理一、基本概念:地址重定位二、地址重定位三、物理内存管理四、连续内存管理方案五、离散内存管理方案(重点)六、交换技术七、虚拟存储技术八、页表及页表项的设计三、虚拟页式存储中软件相关策略

    JavaEdge
  • 漫谈虚拟内存

    如上图,程序1、程序2、程序3装入到内存,而程序2运行完成被换出,内存空闲出20k,然后进来程序4,大小为25K,此时,只有两处空闲块,10K和20K,没有一处...

    木可大大
  • 「Shell」实现对指定时间内文件的批量操作

    看起来像一堆乱码的文件其实是非常重要的数据文件,我把它下载到该目录下后发现它应该属于某个特定的子目录,现在这样看起来太乱了。那么就得想办法把这些文件区分出来,然...

    王诗翔呀
  • 普通码农入门机器学习,必须掌握这些数据技能

    王瀚宸 编译自 InfoWorld 作者 Ted Dunning MapR首席应用架构师 量子位 出品 | 公众号 QbitAI ? 其实,机器学习一直在解决着...

    量子位
  • PHP+MYSQL获取数据5

    用户7873631
  • 文本情感分析综述

    前言:本综述是语义分析团队分享的材料,现在将PPT呈现给大家。在文本情感分析这样一个宏观命题下,本文内容在细分领域上有所侧重,以梗概为主,所以可能无法做到对每一...

    腾讯知文实验室

扫码关注云+社区

领取腾讯云代金券