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

在这里插入图片描述

在这里插入图片描述

个人主页: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 总览

操作系统基础:内存管理概述【中】_第1张图片

️1.2 什么是分页存储

1.2.1 将物理空间分页

操作系统基础:内存管理概述【中】_第2张图片

1.2.2 将逻辑空间分页

image3
方便管理员进行管理

1.2.3 空间的分配

操作系统基础:内存管理概述【中】_第3张图片

1.2.4 区分概念

image5

️1.3 页表

1.3.1 概述

(1) 必要性
image6
(2) 示意图
操作系统基础:内存管理概述【中】_第4张图片
(3) 注意
操作系统基础:内存管理概述【中】_第5张图片

1.3.2 页表项的大小

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

1.3.3 如何实现地址的转换

(1)虽然进程的各个页面是离散存放的,但是页面内部是连续存放的
操作系统基础:内存管理概述【中】_第7张图片
(2)转换步骤:
操作系统基础:内存管理概述【中】_第8张图片

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

(1)例子:
image13
我们知道,对于一个进程来说,各页面是离散存放的,但是在逻辑上各页面是连续存放的。页面内部不管是物理上还是逻辑上都是连续存放的。如图:
操作系统基础:内存管理概述【中】_第9张图片
据此可以快速得到地址的转换逻辑:
操作系统基础:内存管理概述【中】_第10张图片

(2)拓展
操作系统基础:内存管理概述【中】_第11张图片
假设一个计算机是用32个二进制位表示逻辑地址,页面大小位4KB = 2^12B = 4096B
那么,进程数据的逻辑地址的后12位为页面偏移量,逻辑地址的前20位是页号,比如:
操作系统基础:内存管理概述【中】_第12张图片

(3)我们知道,n号内存块的起始地址 = n*内存块大小。以我们刚才的例子为例:
操作系统基础:内存管理概述【中】_第13张图片
则逻辑地址的后12位为业内偏移量,前20位为页号。由此我们可以得到结论:
操作系统基础:内存管理概述【中】_第14张图片

️1.4 总结

操作系统基础:内存管理概述【中】_第15张图片

️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)使用内存块号和页内偏移量计算得到物理地址(直接拼接),此时就可以访问内存单元了。
变换步骤如图:
操作系统基础:内存管理概述【中】_第16张图片

2.2.4 几个基本概念

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

️2.3 转换例题

操作系统基础:内存管理概述【中】_第17张图片

️2.4 注意

image5

️2.5 页表项大小

操作系统基础:内存管理概述【中】_第18张图片
所以,尽管3个字节已经可以表示所有的内存块,但是为了计算方便,经常会将页表项扩充为四个字节
image7

️2.6 总结

操作系统基础:内存管理概述【中】_第19张图片

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

️3.1 总览

操作系统基础:内存管理概述【中】_第20张图片

️3.2 什么是快表

image2

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

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

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

3. 示意图如下所示:
操作系统基础:内存管理概述【中】_第22张图片

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

操作系统基础:内存管理概述【中】_第23张图片

️3.5 局部性原理

我们以下面这段代码为例:
操作系统基础:内存管理概述【中】_第24张图片

3.5.1 时间局部性

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

3.5.2 空间局部性

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

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

️3.6 知识总结

操作系统基础:内存管理概述【中】_第25张图片

4 总结

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

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

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

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

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

在这里插入图片描述

在这里插入图片描述

你可能感兴趣的:(系统架构)