操作系统基础:内存管理概述【中】

在这里插入图片描述

在这里插入图片描述

🌈个人主页:godspeed_lucip
🔥 系列专栏:OS从基础到进阶


  • 🏝️1 基本分页存储管理
    • 🏖️1.1 总览
    • 🏖️1.2 什么是分页存储
      • 🏰1.2.1 将物理空间分页
      • 🏰1.2.2 将逻辑空间分页
      • 🏰1.2.3 空间的分配
      • 🏰1.2.4 区分概念
    • 🏖️1.3 页表
      • 🏰1.3.1 概述
      • 🏰1.3.2 页表项的大小
      • 🏰1.3.3 如何实现地址的转换
      • 🏰1.3.4 如何确定一个逻辑地址对应的页号、页内偏移量
    • 🏖️1.4 总结
  • 🏝️2 基本地址变换机构
    • 🏔️2.1 概念
    • 🏔️2.2 变换步骤
      • 🗽2.2.1 页表寄存器(PTR)
      • 🗽2.2.2 变换步骤
      • 🗽2.2.3 获取物理地址
      • 🗽2.2.4 几个基本概念
    • 🏔️2.3 转换例题
    • 🏔️2.4 注意
    • 🏔️2.5 页表项大小
    • 🏔️2.6 总结
  • 🏝️3 具有快表的地址变换机构
    • 🏜️3.1 总览
    • 🏜️3.2 什么是快表
    • 🏜️3.3 引入快表后,地址的变换过程
    • 🏜️3.4 与快表命中率有关的题目
    • 🏜️3.5 局部性原理
      • 🗽3.5.1 时间局部性
      • 🗽3.5.2 空间局部性
    • 🏜️3.6 知识总结
  • 🕮 4 总结


🏝️1 基本分页存储管理

🏖️1.1 总览

image1

🏖️1.2 什么是分页存储

🏰1.2.1 将物理空间分页

image2

🏰1.2.2 将逻辑空间分页

image3
方便管理员进行管理

🏰1.2.3 空间的分配

image4

🏰1.2.4 区分概念

image5

🏖️1.3 页表

🏰1.3.1 概述

(1) 必要性
image6
(2) 示意图
image7
(3) 注意
image8

🏰1.3.2 页表项的大小

(1)块号的字节
假设:
image9
由于内存块的大小(物理)=页面大小(逻辑) = 4KB = 212B,则一个4GB的内存总共会被分为232/2^12 = 220块,则内存块号的范围应该是0-220-1,需要使用20个Bit存储,也就是至少需要3个字节(24B)进行存储。
(2)页号的字节
由于页表项是连续存储的,因此只要知道页号以及页表的起始地址就可以计算得到目的页号的块号,因此页表不需要存储页号,字节为0。
(3)综上,每一个页表项占3字节(在题中所给条件上)
(4)注意
image10
并不存储物理地址

🏰1.3.3 如何实现地址的转换

(1)虽然进程的各个页面是离散存放的,但是页面内部是连续存放的
image11
(2)转换步骤:
image12

🏰1.3.4 如何确定一个逻辑地址对应的页号、页内偏移量

(1)例子:
image13
我们知道,对于一个进程来说,各页面是离散存放的,但是在逻辑上各页面是连续存放的。页面内部不管是物理上还是逻辑上都是连续存放的。如图:
image14
据此可以快速得到地址的转换逻辑:
image15

(2)拓展
image16
假设一个计算机是用32个二进制位表示逻辑地址,页面大小位4KB = 2^12B = 4096B
那么,进程数据的逻辑地址的后12位为页面偏移量,逻辑地址的前20位是页号,比如:
image17

(3)我们知道,n号内存块的起始地址 = n*内存块大小。以我们刚才的例子为例:
image18
则逻辑地址的后12位为业内偏移量,前20位为页号。由此我们可以得到结论:
image19

🏖️1.4 总结

image20

🏝️2 基本地址变换机构

🏔️2.1 概念

基本地址变换机构是一组用于实现逻辑地址到物理地址转换的硬件机构

🏔️2.2 变换步骤

🗽2.2.1 页表寄存器(PTR)

image1

🗽2.2.2 变换步骤

假设页面的大小为2的整数次幂。当一个进程发生调度需要上处理机运行时,操作系统会将恢复进程的运行环境,将进程的PCB(存放页表的地址与页表的长度)放入页面寄存器中以方便操作系统进行管理,此外,程序计数器PC也会将进程下一条需要执行的指令的逻辑地址A放入,那么如何知道进程下一条指令的物理地址呢?

🗽2.2.3 获取物理地址

(1)转换机构根据逻辑地址计算出页号P、页内偏移量W。假如页面大小为2的整数次幂,那么这个过程是很方便的
(2)假如一个进程的页表长度为M,意味着这个进程有M个页面,假如P>M,那么说明出错,操作系统会发生越界终端(内中断)
(3)确定M合法后,操作系统查询页表并找到页号对应的页表项,确定页面存放的内存块号。
(4)使用内存块号和页内偏移量计算得到物理地址(直接拼接),此时就可以访问内存单元了。
变换步骤如图:
image2

🗽2.2.4 几个基本概念

页表项长度、页表长度、页面大小。
image3

🏔️2.3 转换例题

image4

🏔️2.4 注意

image5

🏔️2.5 页表项大小

image6
所以,尽管3个字节已经可以表示所有的内存块,但是为了计算方便,经常会将页表项扩充为四个字节
image7

🏔️2.6 总结

image8

🏝️3 具有快表的地址变换机构

🏜️3.1 总览

image1

🏜️3.2 什么是快表

image2

🏜️3.3 引入快表后,地址的变换过程

1. 快表是一种硬件设备,它的内容在每次进程切换之后都会删除,它的访问速度虽然很快,但是由于成本的限制,快表的存储空间不会很大。

2. 引入快表后,操作系统在得到逻辑地址后会分离得到页号,接着进入快表去寻找页号对应的内存块号,假如没找到就会进入慢表(也就是之前的页表)进行寻找,并将寻找结果复制一份存入快表有方便下次寻找。其他步骤与无快表的地址变换过程类似。
image3

3. 示意图如下所示:
image4

🏜️3.4 与快表命中率有关的题目

image5

🏜️3.5 局部性原理

我们以下面这段代码为例:
image6

🗽3.5.1 时间局部性

image7
对于while(i<100)这一条指令,程序在不久的将来是会频繁访问的,对于i这个变量,程序在不久的将来也是会频繁访问。这就是时间局部性。

🗽3.5.2 空间局部性

image8
对于a数组,它在内存中是连续存放的,假如此时系统访问了a[10],那么a[10]周围的数据就很有可能会被频繁访问。这是空间局部性。

3. 正是因为局部性原理,引入快表之后系统的速度就会快很多
image9

🏜️3.6 知识总结

image10

🕮 4 总结

操作系统,如默默守护的守夜者,无声地管理硬件与软件的交流,为计算机创造和谐秩序。

它是无形的引导者,让复杂的任务变得井然有序,为用户提供无忧体验。

操作系统的巧妙设计,让计算机变得更加智能高效,让人与科技之间的交流更加顺畅。

在每一次启动中,它如信任的伙伴,带领我们进入数字世界的奇妙旅程。

渴望挑战操作系统的学习路径和掌握进阶技术?不妨点击下方链接,一同探讨更多操作系统的奇迹吧。我们推出了引领趋势的💻OS专栏:《OS从基础到进阶》 ,旨在深度探索OS的实际应用和创新。🌐🔍

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android搭建python环境

通过wifi连接adb&#xff1a; 首先下载无线abd工具&#xff1a; https://www.downkuai.com/android/170494.html 运行效果图&#xff1a; 然后开启后根据自身ip即可连接&#xff1a; adb connect ip:5555 安装busybox: 首先执行如下命令查看手机架构&#xff1a; adb sh…

分布式ID介绍实现方案总结

分布式 ID 介绍 什么是 ID&#xff1f; 日常开发中&#xff0c;我们需要对系统中的各种数据使用 ID 唯一表示&#xff0c;比如用户 ID 对应且仅对应一个人&#xff0c;商品 ID 对应且仅对应一件商品&#xff0c;订单 ID 对应且仅对应一个订单。 我们现实生活中也有各种 ID&…

[C++]继承(续)

一、基类和派生类对象赋值转换 在public继承时&#xff0c;父类和子类是一个“is - a”的关系。 子类对象赋值给父类对象/父类指针/父类引用&#xff0c;我们认为是天然的&#xff0c;中间不产生临时对象&#xff0c;也叫作父子类赋值兼容规则&#xff08;切割/切片&#xff…

Spring-mybatis

怎样通过Spring整合Mybatis来实现业务 目录 1.导入依赖 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency>&l…

化工企业能源在线监测管理系统,能源管理新利器

化工企业在开展化工生产活动时&#xff0c;能源消耗量较大&#xff0c;其节能潜力空间也较大&#xff0c;因此必须控制能耗强度&#xff0c;促进能效水平的稳步提升。化工企业通过能源现状的分析&#xff0c;能够实现能源使用情况的实时反馈与监管&#xff0c;从而达到节能减排…

MobPush:Android SDK 集成指南

开发工具&#xff1a;Android Studio 集成方式&#xff1a;Gradle在线集成 安卓版本支持&#xff1a;minSdkVersion 19 集成前准备 注册账号 使用PushSDK之前&#xff0c;需要先在MobTech官网注册开发者账号&#xff0c;并获取MobTech提供的AppKey和AppSecret&#xff0c;…

搜狗开源框架Workflow网络模型分析

workflow是一个比较轻量化的后端服务框架&#xff0c;支持Linux/Mac/Windows主流平台&#xff0c;其网络模块是框架的核心。在workflow-windows分支上可以看到对windows的IOCP的封装&#xff0c;对于学习windows IOCP网络编程有很好的启发意义。因此&#xff0c;有必要对该网络…

第二十一回 阎婆大闹郓城县 朱仝义释宋公明-FreeBSD Linux 使用Rsync备份

阎婆状告宋江杀死她女儿阎婆惜&#xff0c;知县有意偏袒宋江&#xff0c;只是一味的拷打唐牛儿&#xff0c;但无奈张三张文远说刀子是宋江的&#xff0c;知县不得已差人拿宋江来审问。第一次没见到人&#xff0c;第二次派朱仝雷横两个人去。 朱仝到地窖里找到了躲藏的宋江&…

数字电源环路补偿(2)

上一篇数字电源环路补偿&#xff08;1&#xff09;-CSDN博客介绍了数字电源的环路设计的基本原理&#xff0c;并用了一个一型补偿器作为例子把LLC控得还行。 那么问题来了&#xff0c;一型补偿器好是好&#xff0c;它设计方便&#xff0c;结构简单&#xff0c;高效粗暴&#x…

2024美赛数学建模E题思路源码

赛题目的 可以将其拆解为以下主要问题&#xff0c;并为每个问题提出解决方案&#xff1a; 如何在极端天气事件越来越多的地区部署财产保险&#xff1f; 保险公司应在何时何地承保保单&#xff1f; 业主如何影响保险公司的承保决定&#xff1f; 如何建立能够评估未来房地产决…

基于Springboot的高校心理教育辅导设计与实现(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的高校心理教育辅导设计与实现(有报告)。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;…

C# 引用同一个dll不同版本的程序集

因为项目需要所以必须在项目中引用不同版本的同一程序集 我要引用的文件是newtonsoft.json.dll 两个版本为12.0.0.0 和4.0.0.0 1.如果已经先引入了newtonsoft.json 12.0.0.0版本的程序集&#xff0c;如果直接引入另一个版本的程序集的话会提示不成功&#xff0c;所以先将另一个…

PyTorch基础-Tensors属性、Tensor的运算

PyTorch的基本概念 Tensor的基本概念 张量高于标量、向量、矩阵 标量说零维的张量&#xff0c;向量是一维的张量&#xff0c;矩阵是二维的张量 Tensor与机器学习的关系 Tensor的创建 函数功能Tensor(*size)基础构造函数Tensor(data)类似np.arrayones(*size)全1Tensorzeros(…

VPP学习-startup.conf配置文件

背景 VPP&#xff08;Vector Packet Processing&#xff0c;矢量报文处理&#xff09;&#xff0c;作为一个开源的高性能数据包处理框架&#xff0c;旨在提供可扩展、灵活且高效的网络数据包处理能力&#xff1b;由于传统Linux 内核协议栈整体网络吞吐性能的局限性&#xff0c;…

【PTA浙大版《C语言程序设计(第4版)》编程题】练习7-4 找出不是两个数组共有的元素(附测试点)

目录 输入格式: 输出格式: 输入样例: 输出样例: 代码呈现 测试点 给定两个整型数组&#xff0c;本题要求找出不是两者共有的元素。 输入格式: 输入分别在两行中给出两个整型数组&#xff0c;每行先给出正整数N&#xff08;≤20&#xff09;&#xff0c;随后是N个整数&a…

SpringMVC请求和响应

文章目录 1、请求映射路径2、请求参数3、五种类型参数传递3.1、普通参数3.2、POJO类型参数3.3、嵌套POJO类型参数3.4、数组类型参数3.5、集合类型参数 4、json数据传递4.1、传递json对象4.2、传递json对象数组 5、日期类型参数传递6、响应6.1、响应页面6.2、文本数据6.3、json数…

Spring速成(三)

文章目录 Spring速成&#xff08;三&#xff09;1&#xff0c;AOP简介1.1 什么是AOP?1.2 AOP作用1.3 AOP核心概念 2&#xff0c;AOP入门案例2.1 需求分析2.2 思路分析2.3 环境准备2.4 AOP实现步骤步骤1:添加依赖步骤2:定义接口与实现类步骤3:定义通知类和通知步骤4:定义切入点…

刨析数据结构(二)

&#x1f308;个人主页&#xff1a;小田爱学编程 &#x1f525; 系列专栏&#xff1a;数据结构————"带你无脑刨析" &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于数据结构的优质内容&#xff01;&#x1f3c6;&#x1f3c6; &#x1f600;欢迎…

d3dcompiler_47.dll是什么文件,如何解决找不到d3dcompiler_47.dll文件

d3dcompiler_47.dll是一个属于微软DirectX组件的动态链接库文件&#xff0c;它是Direct3D编译器的一部分&#xff0c;主要用于在Windows操作系统中编译和运行Direct3D 11应用程序和游戏。当你在电脑上尝试打开某些依赖Direct3D图形技术的软件或游戏时&#xff0c;如果系统找不到…

Flume搭建

压缩包版本&#xff1a;apache-flume-1.9.0-bin.tar 百度盘链接&#xff1a;https://pan.baidu.com/s/1ZhSiePUye9ax7TW5XbfWdw 提取码&#xff1a;ieks 1.解压 tar -zxvf /opt/software/apache-flume-1.9.0-bin.tar.gz -C /opt/module/ 2. 修改文件名 [rootbigdata1 opt]…