[操作系统笔记]基本分页存储管理

news2024/11/18 18:23:21

内容系听课复习所做笔记,图例多来自课程截图

基本分页存储管理

在这里插入图片描述

两次访存,第一次查页表,第二次访问目标内存单元

将内存空间分为一个个大小相等的分区(比如每个分区4KB),每个分区就是一个“页框”(页框=页帧=内存块=物理块=物理页面)。每个页框有一个编号,即“页框号”(页框号=页帧号=内存块号=物理块号=物理页号),页框号从0开始。

将进程的逻辑地址空间也分为与页框大小相等的一个个部分,每个部分称为一个“页”或“页面”。每个页面也有一个编号,即“页号”,页号也是从0开始。

划重点,页面(是进程的概念,存在于逻辑地址空间)和页框(是物理空间)大小相等

因为大小相等才能一一对应过去。另一方面还要使用页表来记述进程的每个页面在内存中存放的位置,操作系统要为每个进程建立一张页表,页表通常在PCB中

  1. 一个进程对应一张页表
  2. 进程的每个页面对应一个页表项
  3. 每个页表项由“页号”和“块号”组成
  4. 页表记录进程页面和实际存放的内存块之间的映射关系

页表项所占字节数

页表举例:

页表块号
03
16
24
n8

假设某系统物理内存大小为4GB,页面大小为4KB,则每个页表项至少应该为多少字节?

  • 内存块大小=页面大小=4KB= 2 12 2^{12} 212 B
  • 4GB的内存总共会被分为 2 32 / 2 12 = 2 20 2^{32} /2^{12}=2^{20} 232/212=220个内存块
  • 内存块号的范围应该是 0 ∼ 2 20 − 1 0 \sim 2^{20}-1 02201
  • 内存块号至少要用 20 bit来表示,但是计算机分配储存空间是按字节而非比特
  • 至少要用3B来表示块号(3*8=24bit)

但是在存储时,由于连续存放的性质,假设页表中的各页表项从内存地址为X的地方开始连续存放,每个页表项占3B且连续存放(只存储块号)则i号页表项的存放地址=X+3*i

页表中的也页号是隐藏的,不占用存储空间(类比数组下标)

页表记录的是块号,块号并非内存地址,J号内存块的起始地址=J*内存块大小

(块号是下图红色的二进制部分,而块内偏移则是黑色的)

地址的转换

虽然进程的各个页面是离散存放的,但是页面内部是连续存放的

如果要访问逻辑地址A,则需
①确定逻辑地址A对应的“页号”P
②找到P号页面在内存中的起始地址(需要查页表)
③确定逻辑地址A的“页内偏移量”W

逻辑地址A对应的物理地址=P号页面在内存中的起始地址+页内偏移量W

页号=逻辑地址/页面长度(取整数)
页内偏移量=逻辑地址%页面长度(取余数)

在计算机内部,地址是用二进制表示的如果页面大小刚好是2的整数幂,则计算机硬件可以很快速的把逻辑地址拆分成(页号,页内偏移量)

在这里插入图片描述
如果有K位表示“页内偏移量”,则说明该系统中一个页面的大小是 2 K 2^K 2K个内存单元
如果有M位表示“页号”,则说明在该系统中,一个进程最多允许有 2 M 2^M 2M个页面

显然页内偏移量位数可以和页面大小互推

基本地址变换机构

基本地址变换机构可以借助进程的页表将逻辑地址转换为物理地址。通常会在系统中设置一个页表寄存器(PTR, Page Table Register),存放页表在内存中的起始地址F页表长度M。进程未执行时,页表的始址和页表长度放在进程控制块(PCB)中,当进程被调度时,操作系统内核会把它们放到页表寄存器中。

页表长度M指的是对应进程的页表内有M个页表项

在这里插入图片描述

设页面大小为L,逻辑地址A到物理地址E的变换过程如下:

  1. 计算页号P和页内偏移量W(如果用十进制数手算,则P=A/L,W=A%L)
  2. 比较页号P和页表长度M,若P≥M,则产生越界中断,否则继续执行。(注意:页号是从0开始的,而页表长度至少是1,因此P=M时也会越界)
  3. 页表中页号P对应的页表项地址=页表起始地址F+页号P*页表项长度,取出该页表项内容b,即为内存块号。
  4. 计算E=b*L+W,用得到的物理地址E去访存(如果内存块号、页面偏移量是用二进制表示的,那么把二者拼接起来就是最终的物理地址了)
页表长度页表项长度页面大小
含义页表中共有几个页表项(有几页)每个页表占多大的存储空间一个页面占多大的存储空间

页面大小 2 n 2^n 2n位,对应页内偏移量 n n n

做题时不要忽略检查越界

页表的一些补充

假设某系统物理内存大小为4GB,页面大小为4KB,内存总共会被分为 2 32 / 2 12 = 2 20 2^{32}/ 2^{12}=2^{20} 232/212=220个内存块,因此内存块号的范围应该是 0 ∼ 2 20 − 1 0\sim 2^{20}-1 02201

因此至少要20个二进制位才能表示这么多的内存块号,由于空间是按字节分配的(不可能分配半个字节)因此至少要3个字节才够(每个字节8个二进制位,3个字节共24个二进制位)

各页表项会按顺序连续地存放在内存中,如果该页表在内存中存放的起始地址为X,则M号页对应的页表项是存放在内存地址为X+ 3*M

一个页面为4KB,则每个页框可以存放4096/3 = 1365个页表项,但是这个页框会剩余4096%3=1B页内碎片。

因此,1365号页表项存放的地址为X+3*1365+1

如果每个页表项占4字节,则每个页框刚好可存放1024个页表项

1024号页表项虽然是存放在下一个页框中的,但是它的地址依然可以用X+4*1024得出。

结论:理论上,页表项长度为3B即可表示内存块号的范围,但是,为了方便页表的查询,常常会让一个页表项占更多的字节,使得每个页面恰好可以装得下整数个页表项。

当然,做题不考虑这个,还是按3B走

具有快表的地址变换机构

基于局部性原理,,一般来说命中率能到90%以上

快表,又称联想寄存器(TLB,translation lookaside buffer ),是一种访问速度比内存快很多的高速缓存(TLB不是内存),用来存放最近访问的页表项的副本;由于访问快表速度比访存快,所以可以加速地址变换的速度。

TLB和普通Cache的区别:TLB中只有页表项的副本,而普通Cache中可能会有其他各种数据的副本

与此对应,内存中的页表常称为慢表。快表能存的少(cache本身就小嘛),存的是页表的一部分副本

进程切换时,快表内容一并清除

其实就是有地址变换需求时(当然,肯定先进行越界检查)在查慢表之前先看一下快表有没有,如果有就直接拿来用(命中就不用访存了),没有就查慢表,返回结果时顺手给快表中也复制过去一份。

在这里插入图片描述

时间局部性:如果执行了程序中的某条指令,那么不久后这条指令很有可能再次执行;如果某个数据被访问过,不久之后该数据很可能再次被访问。(因为程序中存在大量的循环)

空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问。(因为很多数据在内存中都是连续存放的)

在这里插入图片描述


快表满了时,再加新项目肯定要替换,此处涉及替换算法

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

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

相关文章

[附源码]计算机毕业设计springboot物业管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

澜沧古茶在港交所上市申请失效:收入不及八马茶业,股东提前套现

12月1日,贝多财经从港交所披露易了解到,普洱澜沧古茶股份有限公司(下称“澜沧古茶”)的上市申请材料失效,目前已无法正常查看或下载。据贝多财经了解,“失效”并不意味着上市失败。 事实上,招股…

selnium操作输入框无法输入内容

问题描述 分析问题 1、开始以为等待时间问题没有找到元素(没解决) 2、使用js操作元素(没解决) 3、定位到光标元素 4、种cookie直接走接口调用 问题描述 selenium.common.exceptions.ElementNotInteractableException: Mess…

企业数据图表- FineReport函数计算组成和语法概述

1. 概述 1.1 版本 1.2 功能简介 在设计模板时用户需要频繁的使用公式函数,例如:求和、求个数、做判断等等。 本文介绍函数的计算组成和语法。 2. 计算语法 2.1 概览 组成部分 语法 示例 函数 SUM(合同金额)、SUM(A1) 数据列 可输入有数据列的…

基于Vue+nodejs+Element-ui的聊天框项目

目录一、项目简介二、环境介绍三、系统展示四、视频功能展示五、前端核心代码展示六、MySQL 数据库创建功能展示七、node.js 核心代码八、总结一、项目简介 本项目基于纯前端(移动端)技术开发一个聊天系统,界面美观大方,采用Node…

PowerShell禁止运行脚本

运行脚本报错(pnpm -v) pnpm : 无法加载文件 D:\win11\program\NVM\nodejs\pnpm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.mi crosoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 所在位置 行:1 字符: 1pnpm -v…

洛谷千题详解 | P1019 [NOIP2000 提高组] 单词接龙【C++、Java语言】

博主主页:Yu仙笙 专栏地址:洛谷千题详解 目录 题目描述 输入格式 输出格式 输入输出样例 解析: C源码: Java源码: -----------------------------------------------------------------------------------------------…

java+mysql基于SSM共享型汽车租赁系统-计算机毕业设计

项目介绍 共享汽车租赁公司的共享汽车租赁流程复杂、数据庞大,往往一个疏忽就会给公司造成极大的损失,于是越来越多的共享汽车租赁公司需要一个对各项信息的管理平台来避免这样的损失。为了满足这个需求,我们开发一个针对共享汽车租赁信息的…

MR直播实例(混合现实直播)高品质企业直播

阿酷TONY / 2022-12-2 / 长沙 / 超多组图 绿幕抠像 虚拟场景(三维场景)实时渲染,降低直播成本,带来线下活动所没有的沉浸式视听体验。 虚拟舞台场景介绍参见: 企业年会直播来个虚拟舞台场景如何?_阿…

负载均衡与高可用

目录 负载均衡 理论部分 应用层负载均衡 环境搭建 代理服务器配置 web服务器配置 验证 网络层负载均衡 环境搭建 代理服务器配置 mysql服务器配置 验证 高可用 理论部分 环境搭建 负载均衡高可用 lb1主要服务器配置 lb2备份服务器配置 web配置 验证 nginx故障问题 →→→→ 大虾…

【MySQL】-增删查改

作者:学Java的冬瓜 博客主页:☀学Java的冬瓜🌙 专栏:MySQL 分享:至若春和景明,波澜不惊,上下天光,一碧万顷。沙鸥翔集,锦鳞游泳,岸芷汀兰,郁郁青青…

傻妞旧版合集新版订阅

目录一、前言二、下载三、新版傻妞订阅合集一、前言 傻妞旧版本(合集),包含amd和arm版本收集于TG 我的是amd架构 [rootecs-mike_note ~]# cat /proc/version Linux version 4.11.8-1.el7.elrepo.x86_64 (mockbuildBuild64F25) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11…

Vue中的计算属性

计算属性&#xff1a;实际上是把vm中的属性进行计算加工&#xff0c;最后能够返回给页面一个结果 细想一下&#xff0c;其实methods方法也能实现1中描述的现象&#xff0c;但是计算属性最大的优势是缓存&#xff01;&#xff01;&#xff01; 举个例子 <div id"root&q…

【Android App】物联网实战项目之自动驾驶的智能小车(附源码和演示 超详细)

需要源码请点赞关注收藏后评论区留言私信~~~~ 当今社会正在步入一个万物互联的时代&#xff0c;它的技术基石主要来自5G、物联网和人工智能。 三者融合产生了许多新产品&#xff0c;其中最璀璨的当数自动驾驶的电动车&#xff1b;它汇聚了最新科技与工程实践的成果&#xff0c;…

【收纳】电脑资料-高效整理电脑上的文件

以前没想过整理文件&#xff0c;一般都是建各种文件夹&#xff0c;然后把资料拖进去&#xff0c;好像收起来了&#xff0c;但实际是随着文件越来越多&#xff0c;时间一久&#xff0c;经常找不到文件&#xff1b;后来逐渐意识到&#xff0c;需要改变。于是找了很多方法&#xf…

已分区的硬盘如何重新合并, 分出去的盘怎么重新合并

已分区的硬盘如何重新合并&#xff1f;磁盘分区后合区是指对原磁盘的分区进行合并&#xff0c;使之成为一个的磁盘分区&#xff0c;从具体的应用层面来分析&#xff0c;为什么会对磁盘分区后合区呢&#xff1f; 磁盘管理对磁盘分区后合区 在Windows系统中&#xff0c;磁盘管理…

UGUI性能优化学习笔记(二)合批

一、合批规则 合批&#xff1a;把渲染时使用相同材质、相同贴图的网格合并在一起&#xff0c;成为一个大网格&#xff0c;然后再调用一次Draw Call&#xff0c;直接渲染这一个大网格。这样做可以降低Draw Call的数量&#xff0c;以优化性能。 Unity是如何确定哪些网格可以进行…

[附源码]JAVA毕业设计货币博物馆展品管理系统(系统+LW)

[附源码]JAVA毕业设计货币博物馆展品管理系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项…

常用框架技术- 08 Spring Cloud简单易懂、易部署和易维护的分布式系统开发工具包

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言1.微服务理论1.1 微服务的特点1.2 微服务与微服务架构1.3 微服务的优点2.分布式集群概念2.1 分布式集群概念2.1.1 什么是分布式2.1.2 什么是集群2.1.3 分布式集群…

新品上线 Naive Admin Tenant 开箱即用多租户开发框架

Naive Admin Tenant 是一套企业级的权限管理开发平台&#xff0c;采用前后端分离模式&#xff0c;微服务版本前端框架支持多个选择&#xff0c;支持数据库&#xff1a;MySql、Oracle、SqlServer、PostgreSql 等&#xff0c;目前只支持 MySql&#xff0c;后面有客户需求会扩展支…