操作系统-内存管理(内存的分配与回收(非连续分配方式,基本分页存储管理方式,基本地址变换机构))

news2024/11/26 14:38:46

文章目录

  • 1. 基本分页存储管理
    • 基本地址变换机构

1. 基本分页存储管理

分页存储:

将内存空间分为一个个大小相等的分区(eg:每个分区4KB),每个分区就是一个页框
每个页框有一个编号,即页框号,页框号从0开始

注意:

  1. 页框=页帧=内存块=物理块=物理页面
  2. 页框号=页帧号=内存块号=物理块号=物理页号

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

操作系统以页框为单位为各个进程分配内存空间。进程的个页面分别放入一个页框中。
进程的页面与内存的页框是意义对应的关系。

页表:

操作系统需要找到进程的每个页面在内存的位置,需要为每个进程建立一张页表。
这张页表通常保存在进程的PCB中。

在这里插入图片描述
由上图可知:

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

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

内存块大小(页框)=页面大小=4KB
4GB内存总共会有2^20个页框(页框号0~2^20-1)
页框号至少需要20bit进行标识,所以对应页表块号项至少是20bit(至少3字节)

页号不需要占用存储空间,因为页表项是连续存放的,因此页号可以隐藏
可以类比数组(页表存储结构是连续的)

注意:页表记录的只是内存块号,而不是内存块的起始地址,i号内存块的起始地址=i×内存块大小

基本分页的地址转化步骤

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

eg:访问A的逻辑地址

  1. 确定逻辑地址A对应的页号P
  2. 查找页表,找到P页面在内存中的起始地址
  3. 确定逻辑地址A的页内偏移量w

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

页号=逻辑地址/页面长度(取结果的整数部分)
页内偏移量w=逻辑地址%页面大小(取结果的余数部分)

总结:

  1. 如果页面大小刚好是2的整数幂,则只需把页表中记录的物理块号拼接上页内偏移量就能得到对应的物理地址。

    结构:物理块号+页内偏移量

逻辑地址结构:

eg:假设一个页面大小为4KB=4096B
在这里插入图片描述

基本地址变换机构

基本地址变换机构可以借助进程的页表将逻辑地址转换为物理地址。

通常会在系统中设置一个页表寄存器(PTR),存放页表在内存中的起始地址F和页表长度M(页表项数)。
进程未执行时,页表的始址和页表长度放在进程控制块(PCB)中,当进程被调度时,操作系统内核会把它们放到页表寄存器中。

整个过程如下:

  1. 进程被调度,操作系统恢复进程的运行状态,将进程PCB中的页表的始址和页表长度放入页表寄存器上
  2. 首先将逻辑地址的页号分离出来,和页表寄存器中的页表长度进行越界判断,出错的话以中断的形式通知操作系统。
  3. 找到页表项地址(页表项地址=F+P*页表项长度)。通过页表地址的映射,找到内存块号
  4. 将找到的内存块号与页内偏移量w进行拼接,找到对应的物理地址。(注意,这里的页面大小默认为2的整数幂)(不是2次幂物理地址=内存块号×页面大小+页内偏移量)

在这里插入图片描述

需要注意:

  1. 比较页号P和页表长度M时,若P>=M,则产生越界中断,否则继续执行。页号是从0开始的,而页表长度至少是1,因此P=M时也会越界

  2. 注意区分页表项长度、页表长度、页面大小的区别。

    页表长度:指的是这个页表中总共有几个页表项,即总共有几个页
    页表项长度:指的是每个页表项占多大的存储空间
    页面大小:指的是一个页面占多大的存储空间

在分页存储管理(页式管理)的系统中,只要确定了每个页面的大小,逻辑地址结构就确定了。因此,页式管理中地址是一维的。

只要给出一个逻辑地址,系统就可以自动地算出页号(系统已知页面大小)、页内偏移量两个部分,并不需要显式地告诉系统这个逻辑地址中,页内偏移量占多少位。

需要注意:

页表在内存中是连续存储的,如果已知页表在内存的起始地址为X,页表大大小为4KB,系统的物理内存的大小为4GB。

首先可以退出需要20bit(3字节)才可以表示内存块号(页号不需要保存)

所以一个页框可以存放的页表项为4KB(4096B)/3(B)=1365个。但是每个页框还会留下1B的页内碎片

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

如果每个页表项占4字节,则每个页框刚好可存放1024个页表项。这样就避免了页内碎片。

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

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

相关文章

C++ 重要笔记与题 (循环-嵌套-数组)

文章目录十 循环10.1 字符与循环10.2 数与循环十一 循环嵌套——不拘一格11.2数学与循环——脉脉相通十 循环 10.1 字符与循环 题1.1&#xff1a;循环输出26个字母&#xff0c;从A-Z。 for(char i A;i<Z;i){cout<<i<<" ";}题1.2&#xff1a;输入某…

第二证券|定增市场回暖 机构争抢优质项目

今年下半年以来&#xff0c;定增商场持续回暖。最新数据显现&#xff0c;到12月13日&#xff0c;下半年以来A股商场实施定增计划的上市公司近200家&#xff0c;比较上半年的133家显着增加。持续回暖的定增商场吸引了不少组织的目光&#xff0c;不只百亿级私募活跃捡拾筹码&…

大学生个人博客网页设计模板 学生个人博客网页成品 简单个人网站作品下载 静态HTML CSS个人网页作业源代码

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

[附源码]Python计算机毕业设计SSM基于java网上心理咨询系统数据分析(程序+LW)

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

docke+gitlab+jenkins+springboot

安装Gitlab 开放防火墙端口80和配置映射文件夹 firewall-cmd --zonepublic --add-port80/tcp --permanent firewall-cmd --reload mkdir -p /docker_data/gitlab/{data,logs,config}启动Gitlab容器&#xff08;启动容器之前确保80&#xff0c;443端口没用被占用&#xff0c;被…

通话类型转换流程之AudioCall到VideoCall

目录 概述时序图关键代码关键log总结 一、概述 这里的通话类型指的是语音通话和视频通话&#xff0c;转换包括upgrade/ downgrade升降级&#xff0c;就是语音通话升级为视频通话、视频通话降级为语音通话。升级为视频通话一般就是包括如下图示的4步&#xff0c;MO发起请求&…

Microsoft SharePoint Online 更新功能可能是下一次勒索攻击的目标

Microsoft SharePoint Online是被使用最广泛的内容管理平台之一。但令人担忧的是&#xff0c;最近几年我们发现大部分攻击者可以滥用 SharePoint Online 和 OneDrive for Business 中的某项功能来加密您的所有文件并以此来勒索赎金。 SharePoint Online 据观察发现可能存在潜在…

四旋翼无人机学习第15节--PCB Editor简单绘制封装-手动绘制封装

文章目录1 前言2 class与sub class3 手动绘制3.1 芯片手册分析3.2 手动绘制1 前言 上一篇博客我们学习了获取封装的几种途径&#xff0c;分别是下载&#xff0c;软件生成与软件转化。本次博客开始讲手动绘制封装。 2 class与sub class 参考博客&#xff1a;第11讲、Allegro …

前端高频手写面试题集锦

手写深度比较isEqual 思路&#xff1a;深度比较两个对象&#xff0c;就是要深度比较对象的每一个元素。> 递归 递归退出条件&#xff1a; 被比较的是两个值类型变量&#xff0c;直接用“”判断被比较的两个变量之一为null&#xff0c;直接判断另一个元素是否也为null 提前结…

对受控组件和非受控组件的理解,以及应用场景?

一、受控组件 受控组件&#xff0c;简单来讲&#xff0c;就是受我们控制的组件&#xff0c;组件的状态全程响应外部数据 举个简单的例子&#xff1a; class TestComponent extends React.Component {constructor (props) {super(props);this.state { username: lindaidai }…

从事生活垃圾(含粪便)经营性清扫、收集、运输服务许可证

《城市生活垃圾管理办法》&#xff08;2007年4月28日建设部令第157号公布2015年5月4日修正本&#xff09;第十七条从事城市生活垃圾经营性清扫、收集、运输的企业&#xff0c;应当取得城市生活垃圾经营性清扫、收集、运输服务许可证。 未取得城市生活垃圾经营性清扫、收集、运输…

安卓玩机搞机技巧综合资源-----查看手机硬件全部参数 隐藏参数 多个软件【十七】

接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 【一】 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your device is corrupt. 设备内部报错 AB分区等等【二】 安卓玩机搞机技巧综合资源------EROFS分区格式 小米红…

绿色消费积分,共建开放生态,让消费变投资

随着市场的逐渐饱和&#xff0c;不断推出新产品、开拓推广渠道、增加客户量是商家想要实现可持续发展的生存之道。商家为了刺激消费&#xff0c;可以说是无所不用&#xff0c;但还是面临着缺少新用户&#xff0c;推广难&#xff0c;客户活跃度低&#xff0c;复购率低等痛点。 商…

7个用Python就可以搞副业的方法

抢茅台 全民开抢1499元的茅台&#xff0c;你抢到过吗&#xff1f;我表弟去年开始到现在抢到30瓶&#xff0c;一瓶轻松赚1000元。 没想到表弟私信我说&#xff0c;他的茅台都是用软件抢的。 Python是啥&#xff1f;我是2G网了吗&#xff0c;还有这么好用的工具&#xff01;&…

如何把自定义的函数,记录到你的Airtest报告里

1. 前言 熟悉Airtest的同学都知道&#xff0c;像touch、swipe这类核心API&#xff0c;运行之后&#xff0c;都会在Airtest报告里记录一个步骤&#xff1a; 但有很多情况下&#xff0c;我们可能会使用自定义的函数&#xff0c;这种自定义的函数&#xff0c;就不会被记录到我们的…

易观分析:手机银行季度活跃用户突破7亿人,个人养老金业务争夺战开启

易观分析&#xff1a;近期&#xff0c;个人养老金制度正式启动实施&#xff0c;在全国36个先行城市或地区落地&#xff0c;首批可开办个人养老金业务的23家商业银行争抢养老蓝海市场&#xff0c;纷纷上线了个人养老金资金账户开户、缴存、产品代销费率优惠等激励活动。 由于个人…

JBoss漏洞 - CVE-2017-12149

文章目录漏洞简介影响范围靶场环境搭建漏洞发现漏洞利用攻击机检查JAVA环境下载利用反序列化工具 CVE-2015-7501进行漏洞测试Jboss Application Server反序列化命令执行漏洞 漏洞简介 JBOSSApplication Server 反序列化命令执行漏洞(CVE-2017-12149)&#xff0c;远程攻击者利用…

RTP协议--介绍

一、什么是RTP 数据传输协议RTP&#xff0c;用于实时传输数据。RTP报文由两部分组成&#xff1a;报头和有效载荷。 二、RTP的会话过程 当应用程序建立一个RTP会话时&#xff0c;应用程序将确定一对目的传输地址。目的传输地址由一个网络地址和一对端口组成&#xff0c;有两个…

js多边形算法:多边形缩放、获取中心、获取重心/质心、判断是否在多边形内、判断点排序是否顺时针等

一、前言 最近做多边形相关的工作&#xff0c;涉及比较多相关算法&#xff0c;总结一下&#xff0c;方便大家&#xff0c;如果帮到您&#xff0c;记得点赞&#xff01; 二、演示 【在线演示】 【源码gitee】 三、使用 所有核心算法都在utils.js里面&#xff0c;含参数说明…

扩散模型代码剖析

前言 相信大家对扩散模型早有耳闻&#xff0c;其着实大火了一把&#xff0c;效果也确实是好。今天写这篇博客的主要动机就是想真正进入到代码层面去看看其到底是怎么实现的。 其实在看完代码后&#xff0c;会觉得其实现的非常简单&#xff0c;而且也会对原理的理解有一个更好的…