【操作系统】-- 基本分页存储管理(基本地址变换机构、具有快表的地址变换机构)
考虑支持多道程序的两种连续分配方式:
1、固定分区分配:缺乏灵活性,会产生大量的内部碎片,内存的利用率低。
2、动态分区分配:会产生很多外部碎片,虽然可以用“紧凑”处理,但是带价高。
如果允许将一个进程分散装入不相邻分区中,便可充分利用内存,而不需再“紧凑”,产生了非连续分配方式。
连续分配方式:为用户进程分配的必须是一个连续的内存空间。
非连续分配:为用户进程分配的可以是一些分散的内存空间。
非连续分配三种方式:基本分页存储管理、基本分段存储管理、段页式存储管理。
一、基本分页存储管理
1、概念
分页存储管理将内存空间的逻辑地址(相对地址)空间分成若干页,从0开始;
把内存的物理地址(绝对地址)空间分成与内存空间大小相同的若干块,为进程分配内存时,以块为单位。
进程的最后一页经常装不满一块,称为“页内碎片”。
2、如何实现地址的转换
①算出逻辑地址对应的页号(页号 = 逻辑地址/页面长度(取整数部分))
②知道该页号对应页面在内存中的起始地址
③算出逻辑地址在页面内的偏移量(页内偏移量 = 逻辑地址%页面长度(取余数部分))
④物理地址 = 页面始址 + 页内偏移量
如果每个页面大小为2^K B,用二进制数表示逻辑地址,则末尾K位即为页内偏移量,其余部分就是页号。
例:假设用32个二进制位表示逻辑地址,页面大小为2^12B = 4096B = 4KB,
逻辑地址2,用二进制表示应该是00000000000000000000000000000010
若0号页在内存中的起始地址为X,则逻辑地址2对应的物理地址应该是X+000000000010。
逻辑地址4097,用二进制表示应该是00000000000000000001000000000001
若1号页在内存中的起始地址为X,则逻辑地址4097对应的物理地址应该是X+000000000001。
(可以这样理解,一个页面大小为4097,逻辑地址正好为一个页面大小,所以也是下一个页面的开始,页面数为1偏移量为0)
3、逻辑地址结构
地址结构包含两个部分,前一部分为页号,后一部分为页内偏移量。
如果有K位表示页内偏移量,则说明该系统中一个页面的大小是2^K个内存单元。
如果有M位表示页号,则说明该系统中,一个进程最多允许有2^M个页面。
4、页表
为了能知道进程的每个页面在内存中存放的位置,操作系统要为每个进程建立一张页表。
①一个进程对应一张页表。
②进程的每一页对应一个页表项。
③每个页表项由页号和块号组成。
④页表记录进程页面和实际存放的内存块之间的对应关系。
⑤每个页表项的长度是相同的,页号是隐含的。
为什么页号是隐含的?
例:假设某系统物理内存大小为4GB,页面大小为4KB,则每个页表项至少应该为多少字节?
答:4GB = 2^32B,4KB = 2^12B
因此会被分为2^32/2^12 = 2^20个内存块,范围应该是0~(2^20)-1
因此至少要20个二进制位才能表示,因此至少需要3个字节才够。
(每个字节8个二进制位,3个字节共24个二进制位)
各页表项会按顺序连续地存放在内存中,
如果该页表在内存中存放的起始地址为X,则M号对应的页表项一定是存放在内存地址为X+3*M。
因此只需要知道页表存放的起始地址和页表项长度,即可找到各页号对应的页表项存放的位置。
本例中一个页表项站3B,如果有n个页面,则该进程的页表总共会占3*n个字节。
二、基本地址变换机构
步骤:
①根据逻辑地址计算出页号、页内偏移量。
②判断页号是否越界。
③查询页表,找到页号对应的页表项,确定页面存放的内存块号。
④用内存块号和页内偏移量得到物理地址。
⑤访问目标内存单元。
例题:
例:若页面大小L为1K字节,页号2对应的内存块号b = 8,将逻辑地址A=2500转换为物理地址E。
答:1KB = 2^10B,说明页内偏移量占10位。
页号2对应的内存号b=8。
第一步:计算页号、页内偏移量
页号P = A/L = 2500/1024 = 2
页内偏移量W = A%L = 2500%1024 = 452
第二步:求块号
页号为2,对应的内存块号为8。
第三步:求物理地址
E = b*L+W = 8*1024+452 = 8644
三、具有快表的地址变换机构
上面的地址变换机构中,每次要访问一个逻辑地址,都需要查询内存中的页表,可能连续很多次查到的都是同一个页表项,快表可减少访问页表的次数。
快表,又称联想寄存器(TLB),是一种访问速度比内存快很多的高速缓冲存储器,用来存放当前访问的若干页表项,以加速地址变换的过程。
快表存放在更高速的存储器中,页表存放在内存中。
最近使用过的页表项会放入快表。
步骤:
①CPU给出逻辑地址,由硬件算得页号、页内偏移量,将页号与快表中的所有页号比较。
②如果找到匹配的页号,说明要访问的页表项在快表中有副本,则直接从中取出对应的内存块号,再讲内存块号与页内偏移量拼接成物理地址,最后访问物理地址对应的内存单元,因此,若快表命中,则访问某个逻辑地址仅需一次访存即可。
③如果没有找到页号,则需要访问页表,找到对应页表项,得到页面存放的内存块号,再将内存块号与页内偏移量拼接成物理地址,最后,访问该物理地址对应的内存单元,因此,若快表未命中,则访问需要两次访存。
例题
例:某系统使用基本分页存储管理,并采用了具有快表的地址变换机构,访问一次快表耗时1us,访问一次内存耗时100us,若快表的命中率为90%,那么访问一个逻辑地址的平均耗时是多少?
答:(1+100)*0.9+(1+100+100)*.0.1 = 111us
如果是快表和页表同时查找,应该是(1+100)*0.9+(100+100)*0.1 = 110.9us
若不采用快表机制,则需要100+100 = 200us
四、两个地址变换机构对比
【操作系统】-- 基本分页存储管理(基本地址变换机构、具有快表的地址变换机构)相关推荐
- 具有快表的地址变换机构
具有快表的地址变换机构 具有快表的地址变换机构是基本嫡长子变换机构的改进版 由于局部性原理所以引入了快表. 局部性原理 **时间局部性原理:**如果执行了程序中的某条指令,那么不久之后这条指令很可能再 ...
- 操作系统基本分页存储管理方式
操作系统基本分页存储管理方式 连续分配内存方式会形成许多"碎片",通过紧凑的方式将碎片拼接成一块大的空间,但是拼接过程系统开销太大.如果允许将一个进程直接分散地装入到许多不相邻的分 ...
- 3.1.8 OS之快表的地址变换结构
文章目录 0.思维导图 1.局部性原理引入快表机制 2.快表(TLB) 一个例图了解基于快表的地址变换结构 3.基本地址变换与快表地址变换的比较 0.思维导图 上一篇文章学习了分页存储管理的基本地址变 ...
- 操作系统-内存管理(快表的地址变换机构,两级页表,虚拟内存的基本概念,基本页式管理下的页表和页面置换算法)
文章目录 1.快表地址变换机构 2. 两级页表 3. 虚拟内存的基本概念 基本分页存储管理 1.快表地址变换机构 快表,又称联想寄存器(TLB,translation lookaside buffer ...
- 八、操作系统——基本分页存储管理的基本概念(详解)
一.思考:连续分配方式的缺点? 考虑支持多道程序的两种连续分配方式: 固定分区分配:缺乏灵活性,会产生大量的内部碎片,内存的利用率很低. 动态分区分配:会产生很多外部碎片,虽然可以用"紧凑& ...
- 操作系统简单分页存储管理(含代码)
实验目的: 在分页存储管理方式中,如果不具备页面置换功能,则称为基本的分页存储管理方式,或称为纯分页存储管理方式,它不具备支持虚拟存储器的功能,显示一次性的特征.本实验通过程序模拟操作系统的基本分页存 ...
- 《操作系统》——分页存储管理方式逻辑地址到物理地址的转换
一.连续分配方式缺点 连续分配方式的主要缺点是会形成许多碎片,尽管我们可以通过紧凑的方法将碎片拼接成可用的大块空间,但这样须付出很大的代价. 二.离散分配方式 离散分配方式思想:将进程直接分散地装入到 ...
- (王道408考研操作系统)第三章内存管理-第一节6-3:非连续分配管理方式之基本分页存储管理之具有快表的地址变换机构
文章目录 一:程序访问的局部性原理 二:快表 三:对比 一:程序访问的局部性原理 如下有这样一段简单的C语言程序 int sumarrayrows(int a[M][N]) {int i,j,sum= ...
- 操作系统—基本分页存储管理的基本概念
建议将思维导图保存下来观看,或点击这里在线观看
- 三十一、具有快表的地址变换机构
一.知识总览 二.什么是快表 三.引入快表后,地址的变换过程 1.CPU给出逻辑地址,由某个硬件算得页号.页内偏移量,将页号与快表中所有页号进行比较. 2.如果找到匹配的页号,说明要访问的页表项在快表 ...
最新文章
- Ubuntu dns
- vb 变量赋值为当前选定单元格_VBA变量5年踩坑吐血精华总结
- laravel实现多数据源配置和读写分离
- python查询数据库,打印查询结果过程中出现'NoneType' object is unsubscriptable
- 修改linux文件权限命令:chmod
- Yuchuan_Linux_C编程之二 GCC编译
- Pixel 3a 开箱及 Google Fi 服务评测视频
- html怎么快捷复制粘贴,如何快速复制粘贴 最全复制粘贴攻略教程大全
- 数据结构:顺序表的基本操作
- 如何在电脑/手机上将HTML文件转换为PDF?
- java中除数时刻0的异常_java中除数为0时出现的异常情况
- mac node repl_如何使用Node.js REPL
- 诸葛——如何摆脱APP速死症?
- 3D-SLAM自搭平台 主动阿克曼 + RS16 + LPMS_IMU LEGO_LOAM 建图
- ns-3 教程 —— 概念概述(第一个 ns-3 程序)
- arduino使用晶联讯jlx12864
- c# 调用Google查询天气 手机所属地 农历转换公历
- Python安装distribute包
- 数组操作 push()
- 前端 - 前端三剑客绘制一幅《圣诞节快乐》交互祝福效果
热门文章
- HDU6357 Hills And Valleys
- 闹钟(Alarm Clock)
- Resend messages one by one
- 虚幻引擎4艺术大师 - 中文版免费分享
- 知码开门 装箱问题
- 蒸汽凝结水颜色发红十种常见除铁处理技术优劣对比
- 阿里云ECS云服务器--安装部署MySQL(图文)
- 联想计算机BIOS启动顺序boot,联想电脑BIOS启动项如何设置U盘启动_联想电脑BIOS启动项设置U盘启动教程介绍...
- IOS 编程初体验 第一篇:自学和培训的选择
- [思考进阶]02 如何进行认知升级?