DJ4-4 基本分页存储管理方式

news2024/11/20 4:14:31

目录

离散分配的基本概念

4.4.1  分页存储管理基本思想

1、分页存储管理的基本方法

2、页面与物理块

3、实现分页存储管理的数据结构

4、实现分页存储管理的地址结构

5、分页存储管理的逻辑地址表示

4.4.2  地址变换机构

1、基本的地址变换机构

2、具有快表的地址变换机构

4.4.3  访问内存的有效时间 EAT


离散分配方式的引入

连续分配方式会产生内零头和外零头,为解决零头问题又要进行紧凑等高开销活动。

离散分配是指程序在内存中不一定连续存放。

根据离散时的基本单位不同,可分为三种:

  1. 分页存储管理
  2. 分段存储管理
  3. 段页式存储管理

离散分配的基本概念

1、离散的基础

  • 分页(Pages):将程序地址空间分页。
  • 分块(Frames):将内存空间分块。

2、离散分配的体现

程序的一页装入到内存的一块,但连续的多个页不一定装入到连续的多个块中。

注:系统中分页和分块的大小是不变的。

3、离散分配的优点

  • 没有外零头
  • 不受连续空间限制,每块都能分配出去
  • 仅有小于一个页面的内零头

因为程序大小一般不是分页大小的整数倍,所以最后一个分页里会有内零头,但对于一个程序来说,也只会有这一个内零头,而且显然该内零头大小 < 分页大小。这种由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称之为 “页内碎片” 或称为 “内零头”。

4.4.1  分页存储管理基本思想

1、分页存储管理的基本方法

解决两个基本问题:

  • 如何建立程序空间与主存空间的映射
  • 如何进行地址变换:从程序逻辑地址到内存物理地址

2、页面与物理块

① 页面或页(Page):把每个进程的逻辑地址空间分成一些大小相等的片。

② 页框或物理块(Page Frame):把内存空间分成与页面相同大小的若干存储块。

在为进程分配存储空间时,总是以页框为单位。页面大小由机器的地址结构决定。某一机器只能采用一种大小的页面。页面的大小通常在 1KB~8KB 之间。

例如:一个作业的地址空间有 4 页。那么,只要分配给它 4 个页框,每一页分别装入一个页框内即可,并不要求这些页框是连续的。

说明:在程序空间中从 0 开始编制页号,页内地址也是相对于 0 进行编址的。

在进程调度时,必须把它的所有页一次性装入到主存的页框内;如果当前页框数不足,则该进程必须等待,系统再调度另外的进程 -- 纯分页方式。

3、实现分页存储管理的数据结构

① 页表:每个进程对应 1 个页表,描述该进程的各页面在内存中对应的物理块号。包括页面号、物理块号和存取控制字段,从而对存储块中的内容进行保护。

注意:全部页表集中存放在主存的系统专用区中,只有系统有权访问页表,保证安全。

② 作业表:整个系统 1 张,记录作业的页表情况,包含进程号、页表长度、页表始址等信息。

③ 空闲块表:整个系统 1 张,记录主存当前的空闲块。

4、实现分页存储管理的地址结构

地址空间为程序限定的空间,物理空间为内存限定空间。在分页存储管理系统中,将地址空间分成大小相同页面,将内存空间分成与页面相同大小的物理块。

在分页存储管理方式中,任何一个逻辑地址都可转变为:页号 + 页内位移量。

页号和页内位移量的划分是由系统自动完成的,对用户是透明的。

如:有一个 32 位的逻辑地址,可转化为如下方式:

5、分页存储管理的逻辑地址表示

对于其它进制,可以先将逻辑地址转换为二进制,再通过位数(地址结构)来看页号和页内偏移量。

在逻辑地址转换为物理地址时,页号会被页表指定的块号所取代,但是页内偏移量在转换过程中是保持不变的。

 

4.4.2  地址变换机构

地址变换机构的功能:将用户的逻辑地址转变为内存中的物理地址。

  • 逻辑地址由页号和页内位移量组成
  • 程序空间页面的大小和内存物理块的大小相同
  • 因此页内位移量等于物理块块内位移量

因此地址变换的关键仅在于:页号到物理块号的转换,这个转换由页表完成。

1、基本的地址变换机构

核心:使用寄存器存放页表。

① 最初的想法

一个页表项使用一个寄存器。

  • 优点:寄存器访问速度快,有利于提高地址变换的速度
  • 缺点:寄存器成本高;页表很长,页表项很多,不可能都用寄存器实现

② 实际的做法

  • 将页表存储在内存中
  • 设置一个页表寄存器 PTR

PTR 用于存放 当前运行的进程的页表 在内存中的始址和页表的长度。当进程未被执行时,页表的始址和页表的长度存放在该进程的 PCB 中;当进程被执行时,才将这个两个数据装入到 PTR 中。

分页系统中的地址变换过程

逻辑地址 => 物理地址

  1. 根据逻辑地址,计算出页号和页内偏移量;
  2. 从 PTR 中得到页表首址,然后检索页表,查找指定页面对应的页框号;
  3. 用页框号乘以块大小获得其对应的起始地址,将其送入物理地址的高端;
  4. 将页内偏移量送入物理地址低端,形成完整的物理地址。

对于二进制,分别送入高端和低端才行得通;对于其它进制,直接把起始地址和页内偏移量加在一起就好啦。


作业的大小是被程序空间(逻辑地址)限制的,而不是被内存空间(物理地址)限制的!

 

也可以直接把十六进制转成十进制来做,我这个写的兜兜转转的。

地址结构长度和作业地址空间大小似乎都是冗余的信息(?)

我们还要画出地址变换图。

2、具有快表的地址变换机构

采用基本的地址变换机构至少需要访问两次内存:由于页表存放在内存中,因此第一次是去访问内存中的页表,第二次才是根据得到的物理地址去访问内存中的数据。存取速度几乎降低了一倍,代价太高。

为了提高地址变换的速度,为进程页表设置一个专用的高速缓冲存储器,称为 快表 TLB 或联想存储器。快表的工作原理类似于系统中的数据高速缓存(Cache),其中专门保存当前进程最近访问过的一组页表项。

根据程序的局部性,进程最近访问过的页面在不久的将来还可能被访问。

地址变换过程

根据逻辑地址中的页号,查找快表中是否存在对应的页表项。

① 若快表中存在该页表项,则称之为命中(hit),从快表中取出相应的页框号,再加上页内偏移量,计算出物理地址。

② 若快表中不存在该页表项,则称之为命中失败。需要再查找页表,从页表中取出相应的页框号,再加上页内偏移量,计算出物理地址。同时更新快表,将该页表项插入快表中。

我们企图利用快表少访问一次内存,但如果命中失败的话,还是会访问内存中的页表的。

之前的越界中断好像也得这样画,但是我懒得改了。

4.4.3  访问内存的有效时间 EAT

定义:从进程发出指定逻辑地址的访问请求开始,经过地址变换,再到内存中找到对应的物理单元并取出数据,所花费的总时间。

假设检索快表的时间为 20ns,访问内存的时间为 100ns 。

  • 若能在快表中检索到 CPU 给出的页号,则 CPU 存取一个数据仅需要 120ns 。
  • 否则,CPU 存取一个数据需要 20+100+100=220ns 的时间。

选用 8~12 个页表项组成的联想存储器,并采用适当的替换策略,则其命中率可达 80%~90% 。可见,增设联想存储器使得访问内存的有效时间减少。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/502195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Alibaba技术官熬夜肝出的,Kafka “限量笔记” 牛掰 ~

前言 分布式&#xff0c;是程序员必备技能之一&#xff0c;在面试过程中属于必备类的&#xff0c;在工作中更是会经常用到。而Kafka是一个分布式的基于发布订阅的消息队列&#xff0c;目前它的魅力是无穷的&#xff0c;对于Kafka的奥秘&#xff0c;还需要我们细细去探寻。 要…

GUN C编译器拓展语法学习笔记(三)内联函数、内建函数与可变参数宏

内联函数、内建函数与可变参数宏 一、内联函数1.1 属性声明&#xff1a;noinline1.2 内联函数与宏1.3 编译器对内联函数的处理1.4 内联函数为什么定义在头文件中 二、内建函数2.1 内建函数定义2.2 常用的内建函数2.3 C标准库的内建函数2.4 内建函数&#xff1a;__builtin_const…

WPF异常处理详解

总目录 文章目录 总目录一、WPF异常1 未捕获异常2 模拟未捕获异常场景 二、处理未捕获异常1 DispatcherUnhandledException 异常捕获2 UnhandledException异常捕获3 UnobservedTaskException异常捕获4 异常捕获的综合使用 结语 一、WPF异常 1 未捕获异常 正常情况下&#xff…

《走进对象村5》面向对象的第二大特性——继承

文章目录 &#x1f680;文章导读1.1 为什么需要继承1.2 继承的概念**关于继承有如下三点请记住&#xff1a;**1.4 父类成员访问1.4.1 子类中访问父类成员变量1.4.2 super 关键字1.4.3 子类中访问父类成员方法 1.5 子类构造方法1.6 面试题this 和 super 的区别(重点)1.7 再谈代码…

深度解读绩效管理PDCA循环(含操作指南、案例应用)

绩效管理的PDCA循环是一个重要的管理工具&#xff0c;它由四个步骤组成&#xff1a;绩效计划&#xff08;Plan&#xff09;、绩效执行&#xff08;Do&#xff09;、绩效评估&#xff08;Check&#xff09;和结果应用&#xff08;Action&#xff09;。这个循环可以帮助组织不断地…

【红黑树】到底是什么,它有哪些基本操作,它的用处是什么,代码如何实现

红黑树是一种自平衡二叉查找树&#xff0c;具有良好的时间复杂度和空间复杂度&#xff0c;被广泛应用于计算机科学领域中&#xff0c;如操作系统、编译器、数据库等。在实际应用中&#xff0c;红黑树主要用于实现高效的查找和排序&#xff0c;如 Linux 内核中的进程调度和空闲内…

VRIK+Unity XR Interaction Toolkit 配置 VR 全身模型(下):实现腿部行走动画

在上一篇教程&#xff1a;VRIKUnity XR Interaction Toolkit 配置 VR 全身模型&#xff08;上&#xff09;&#xff1a;实现上半身的追踪&#xff08;附带VRM模型导入Unity方法和手腕扭曲的解决方法&#xff09;当中&#xff0c;我们通过配置VRIK Unity XR Interaction Toolki…

WiFi(Wireless Fidelity)基础(一)

目录 一、基本介绍&#xff08;Introduction&#xff09; 二、进化发展&#xff08;Evolution&#xff09; 三、PHY帧&#xff08;&#xff08;PHY Frame &#xff09; 四、MAC帧&#xff08;MAC Frame &#xff09; 五、协议&#xff08;Protocol&#xff09; 六、安全&#x…

小松鼠踩一踩游戏

文章目录 一、 介绍和知识点九、UnityFacade 门面设计模式二、 声音全局管理器测试音频代码UI全局管理器父类抽象类 BaseManager子类 UIManager 四、 UI按钮的引用父类 BasePanel子类主面板 MainPanel子类 游戏中 GamePanel子类 游戏结果 ResultPanel 角色动画器、控制角色移动…

性能测试如何做?一套完整的性能测试流程,“我“拒绝背锅...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、测试准备工作 …

中兴B860AV2.1-T(M)-高安版-当贝纯净桌面线刷固件包

中兴B860AV2.1-T(M)-高安版-当贝纯净桌面线刷固件包-内有教程及短接点 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff1b; 4、大量精简内置的没用的软件…

有序序列中插入一个整数

思路&#xff1a; 将输入的要插入的数m依次和数组中的元素进行比较。 思&#xff1a; 在排好序的数组中&#xff0c;从右往左比较还是从左往右比较&#xff1f; 其实都可以&#xff0c;但是我觉得从右边&#xff08;也就是最大的数&#xff09;依次开始比较&#xff0c;程序比较…

纯前端JS实现文件上传解析渲染页面

AI真的能代替前端吗&#xff1f; 回答&#xff1a;不会完全代替 能用吗&#xff1f;复制到项目中只会报错 爆红 ……他完全不能理解你需要什么JavaScript&#xff08;简称JS&#xff09;是一种轻量级的脚本语言&#xff0c;主要用于在Web页面上添加交互行为。它由三个不同的…

5月跳槽有风险,不跳也有?

今天讲讲跳槽。 说实话跳槽是为了寻求更好的发展&#xff0c;但在跳槽前我们也不能确定下家就是更好的归宿&#xff0c;这就更加需要我们审慎地去对待&#xff0c;不能盲目跳槽。 其次&#xff0c;我们离职和跳槽&#xff0c;其中的原因很大一部分是目前薪资不符合预期。 那…

基于python+opencv的人脸识别打卡(手把手教你)

基于pythonopencv的人脸识别打卡 1 创建环境2 准备工作2.1新建members.csv文件2.2新建face文件夹2.3注意事项 3 源码4 操作步骤 1 创建环境 conda create -n face python3.7 conda activate face pip install opencv-python pip install pillow pip install opencv-contrib-py…

基于Redis中zset实现延时任务

目录 概要 一、实现原理 适用场景 二、准备工作 三、代码实现 四、zset的优缺点 优点 缺点 概要 本文章主要记录的是使用Redis中的zset实现延时任务&#xff0c;在工作中&#xff0c;像这样的的延时任务是不可避免的&#xff0c;举个栗子&#xff1a;买一张火车票&#…

企业如何利用网络趋势做好线上营销?

随着互联网的不断发展&#xff0c;线上营销越来越成为企业营销的重要组成部分。如何利用网络趋势做好线上营销&#xff0c;已经成为各大企业关注的焦点。本文将为大家介绍如何利用网络趋势做好线上营销的方法和技巧。 一、了解网络趋势 了解网络趋势是做好线上营销的关键。网络…

uboot移植Linux-SD驱动代码解析

一、uboot与linux驱动 1.1、uboot本身是裸机程序 (1)狭义的驱动概念是指&#xff1a;操作系统中用来具体操控硬件的代码叫驱动 广义的驱动概念是指&#xff1a;凡是操控硬件的代码都叫驱动 (2)裸机程序中是直接使用寄存器的物理地址来操控硬件的&#xff0c;操作系统中必须通…

最新版千帆直播网站系统PHP完整版源码(PC+WAP在线观看视频)附安装教程

最新版千帆直播网站PHP完整版源码&#xff0c;PCWAP在线观看视频直播系统 安装方法&#xff1a; 1、导入数据库文件 zhibo.sql 2、修改数据库配置文件 有多处包含UC配置; 根目录&#xff1a;config.inc.php – config.php 其他路径&#xff1a; Conf/config.php Admin/C…

JVM(三):JVM命令与参数

JVM命令与参数 文章目录 JVM命令与参数JVM参数标准参数-X 参数-XX参数其他参数说明常用参数的意义 常用命令jpsjinfojstatjstackjmap 常用工具jconsolejvisualvm内存分析工具 MATGC日志分析工具内存分析工具 MATGC日志分析工具 经过前面的各种分析学习&#xff0c;我们知道了关…