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

操作系统 内存管理 分页/分段/段页式管理 前言 上篇介绍了内存管理的连续分配方式,本文介绍非连续分配方式。 非连续分配方式 连续分配方式的缺点: 固定分区分配:缺乏灵活性,会产生大量内存碎片,内存的利用率极低。 动态分区分配:会产生很多外部碎片,虽然可以用紧凑技术来处理,但是紧凑的时间代价很高。 非连续分配 如果可以将一个进程分散的装入到许多不相邻的分区中,便可以充分的利用内存,而无需再进行紧凑。于是变产生了非连续分配方式。 连续分配:为用户进程分配的是一个连续的内存空间; 非连续分配:为用户进程分配的是一些分散的内存空间; 分页式存 阅读详情

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个页表项。这样就避免了页内碎片。

【王道操作系统】3.1.6 分页存储(页号、页偏移量等) 基于《王道操作系统》得出的理论知识精华 阅读详情

相关推荐

操作系统-内存管理

文章目录一、内存管理1.1 内存的基础知识1.1.1 什么是内存,有何作用1.1.2 进程运行的原理-指令1.1.3 逻辑地址VS物理地址1.1.4 进程运行的基本原理(从写程序到程序运行)1.1.5 装入内存的三种方式1.1.5 链接的三种方式1.1.6 总结1.2 内存管理的概念1.2.1 内存空间的分配与回收1.2.2 内存空间的扩展1.2.3 地址转换1.2.4 内存保护1.2.5 总结1...

王道长的技术博客 5万+

【操作系统】——基本分页存储管理

文章目录一、什么是分页存储二、页表(存PCB中)三、如何实现地址转换 一、什么是分页存储 将内存分为一个个大小相等的分区, 这些分区称作为(页框、页帧、内存块、物理块、物理页面)若对分区进从编号,则又有了对应的(页框号、页帧号、内存块号、物理块号、物理页号),从0开始 进程的信息都是要存在内存中的,既然内存有了分区,那么进程逻辑地址空间上也会有相应的大小相等的分区,称为 (页、页面),对应编号为(页号、页面号),从0开始。 上面这么多名称着实是难记,但是我们只需要记住只有(页、页面)/(页号、页面号)是和

m0_54385790的博客 1万+

【操作系统】-- 基本分页存储管理(基本地址变换机构、具有快表的地址变换机构)

考虑支持多道程序的两种连续分配方式:1、固定分区分配:缺乏灵活性,会产生大量的内部碎片,内存的利用率低。2、动态分区分配:会产生很多外部碎片,虽然可以用“紧凑”处理,但是带价高。如果允许将一个进程分散装入不相邻分区中,便可充分利用内存,而不需再“紧凑”,产生了非连续分配方式。连续分配方式:为用户进程分配的必须是一个连续的内存空间。非连续分配:为用户进程分配的可以是一些分散的内存空间。非连续分配三种方式:基本分页存储管理、基本分段存储管理、段页式存储管理。分页存储管理将内存空间的逻辑地址(相对地址)空间分成若

个人博客 4971

简易内存池

import java.util.Arrays; import java.util.List; import java.util.Scanner; import java.util.TreeMap; import java.util.stream.Collectors; public class Main11 { public static void main(String[] args) { /* 有一个简易内存池,内存按照大小粒度分类 .

一个酱油成长之路 1427

操作系统:第三章 内存管理1 - 详解存储管理方式,段表、页表

基础知识 逻辑地址 / 物理地址 装入的三种方式 1、绝对装入:编译时完成地址变换 2、静态重定位:装入时完成地址变换 3、动态重定位:运行时才进行地址变换表(普遍使用) 从写程序到程序运行 链接的三种方式 内存管理 内存空间的分配与回收 覆盖技术(只用于早期的操作系统) 交换技术 覆盖与交换的区别 连续分配管理方式 单一连续分配 固定分区分配 动态分区分配 动态分区分配算法 非连续分配管理方式 基本分页存储管理 思想 易混 页表(page frame) 逻辑地址结构 如何实现地址转换 基本地址变换机构 具

寒泉 7万+

12 操作系统第三章 内存管理 非连续分配管理方式 基本分页存储管理 基本分段存储管理 段页式存储管理

1 基本分页存储管理 连续分配:为用户进程分配的必须是一个连续的内存空间。 非连续分配:为用户进程分配的可以是一些分散的内存空间。 1.1 什么是分页存储 将内存空间分为一个个大小相等的分区(比如:每个分区4KB),每个分区就是一个“页框”(页框=页帧=内存块=物理块=物理页面)。每个页框有一个编号,即“页框号”(页框号=页帧号=内存块号=物理块号=物理页号),页框号从 0 开始 。 将进程的逻辑地址空间也分为与页框大小相等的一个个部分, 每个部分称为一个“页”或“页面” 。每个页面也有一个编号, 即“页

夜飘凌的博客 2646

操作系统在实模式下的内存地址分配表

操作系统在实模式下的内存地址分配表 编号 起始内存地址 结束内存地址 内存大小 说明 1 0xFFFF0 0xFFFFF 16 B BIOS入口地址,jmp far F000:E05B,机器码 EA5BE000F0 跳转到固化在ROM中的自检程序处,对系统硬件(包括内存)进行检查。 https://blog.csdn.n...

招财猫_Martin 的专栏 1201

树莓派5搭建ROS1开发环境:从系统安装到环境变量配置

本文详细指导如何在树莓派5上搭建ROS1开发环境。针对树莓派OS非标准安装路径导致的常见CMake报错问题,提供了从系统烧录、一键安装ROS到关键环境变量配置的完整解决方案,确保工作空间能成功编译,助力机器人项目开发。

weixin_29159127的博客 385

【操作系统——内存基本分页存储管理】

连续分配的三种管理方式有一个共同的特点就是,用户程序在内存当中都是连续存放的,在连续存放的方式当中,即使内存由超过1GB的内存,可是却未必有超过1GB的连续内存,需要1GB内存的作业仍然是无法运行的,所以就引入了分连续分配的内存管理方式,他的存储密度是低于连续分配的管理方式的。非连续分配方式有根据分区的大小是否固定,分为页式存储管理和段式存储管理,而在页式存储管理当中又将作业运行是否需要将全部的页面都调入内存分为基本分页式存储管理和请求分页式存储管理。...

weixin_59658448的博客 9923

服务器冗余电源维修图纸,冗余热备份电源的电路图设计

在设计某高可靠性计算机系统时,要求其配套电源采取冗余设计。一般来说,可以采取的方案有容量冗余、冗余冷备份方式、并联均流的N+1备份方式、冗余热备份方式。容量冗余是指电源的最大负载能力大于实际负载,也就是“大马拉小车”,其缺点是不利于提高电源的效率,而且对提高电源的可靠性意义不大。冗余冷备份方式是指电源由两个或多个功能相同的单元模块组成,电源启动后由其中一个单元模块向设备供电,当工作单元发生故障时,...

weixin_39671509的博客 1995

Ubuntu系统下STM32开发环境搭建:从零配置CubeMX、VSCode与OpenOCD调试实战

本文详细介绍了在Ubuntu系统下搭建STM32开发环境的完整流程,包括CubeMX、VSCode和OpenOCD的安装配置。通过实战教程指导开发者从基础环境准备到工程创建与调试,提供高效的嵌入式开发解决方案,并分享常见问题解决方法。

potato的博客 942

万字长文!非常详细!操作系统【内存管理】

推荐关注博主!随时获取更多关于操作系统的最新技术分享!

m0_51574586的博客 7082

EEGLAB安装、EDF数据导入、EEG预处理(Matlab)

目录下载和安装下载安装遇到问题及解决方案导入EDF数据EEG预处理 下载和安装 下载 链接:https://pan.baidu.com/s/17eMT6B7LgZ4PyqWvD5ixmg 提取码:12gz 安装 **第一步:**将下载下来的文件解压,修改名称为eeglab,将此文件夹存放在matlab的安装目录里的toolbox文件夹下,下图是我的路径,需要拷贝到自己相对应的路径中 第二步: 打开Matlab软件,点击主页中的设置路径 设置路径 点击添加并包含子文件夹,将eeglab文件夹添加进来,保

y18771025420的博客 1万+

操作系统王道考研复习——第三章(内存管理/存储器管理)

操作系统——第三章3 内存管理(存储器管理)3.1 内存管理概念3.1.1 内存管理的基本原理和要求3.1.2 覆盖与交换3.1.3 连续分配管理方式3.1.4 非连续分配管理方式3.2 虚拟内存管理3.2.1 虚拟内存的基本概念3.2.2 请求分页管理方式3.2.3 页面置换算法(决定应该换入哪页、换出哪页)3.2.4 页面分配策略3.2.5 抖动3.2.6 工作集3.2.7 地址翻译 3 内存管理(存储器管理) 存储器管理的主要对象是内存。对外存的管理与对内存的管理相类似,只是它们的用途不同,外存主要用

壹的博客 1万+

Meta-World环境实战解析:pick-place-v2中的状态观测与动作控制

本文深入解析了Meta-World中pick-place-v2环境的强化学习实战要点。文章详细拆解了39维状态观测向量的构成与意义,包括机械臂末端、物体位置及目标坐标,并揭示了默认部分可观测设置的潜在影响。同时,阐述了4维动作空间的控制逻辑与奖励函数的分阶段设计,为训练高效稳定的抓放策略提供了核心指导与实用调优技巧。

weixin_29184371的博客 77

学习笔记9--智能驾驶的功能安全设计之功能安全设计

本系列博客包括6个专栏,分别为:《自动驾驶技术概览》、《自动驾驶汽车平台技术基础》、《自动驾驶汽车定位技术》、《自动驾驶汽车环境感知》、《自动驾驶汽车决策与控制》、《自动驾驶系统设计及应用》。此专栏是关于《自动驾驶系统设计及应用》书籍的笔记.

FUXI_Willard 1795

操作系统---内存管理之非连续分配(页表,段表)

操作系统内存管理的核心任务包括内存分配/回收、地址转换和保护功能。分页存储管理采用非连续分配方式,将内存和进程地址空间划分为固定大小的页框和页面,通过页表建立映射关系。关键点包括:①页表数据结构存储页面与内存块的对应关系;②逻辑地址转换为物理地址需计算页号和页内偏移量;③快表(TLB)作为高速缓存能加速频繁访问的页表项查询。该机制通过硬件地址变换机构实现高效转换,页面大小通常设为2的整数幂以优化二进制地址拆分效率。分页存储有效减少内存碎片,但需注意页表存储开销问题。

2401_84420653的博客 1650

复旦微FMQL45T900平台RGMII网口调试实战:从PHY寄存器读取异常到链路建立

本文详细记录了复旦微FMQL45T900平台RGMII网口调试的全过程,重点解决了PHY寄存器读取异常问题。通过电压配置调整、时序优化和硬件信号完整性检查,最终成功建立网络链路。文章提供了实用的调试经验和解决方案,适合嵌入式开发人员参考。

weixin_29193359的博客 288

【操作系统】内存管理(四)—— 内存的分配与回收(2)

与“分页”最大的区别就是——离散分配时所分配地址空间的基本单位不同。分段管理中产生的外部碎片也可以用“紧凑”来解决,只是需要付出较大的时间代价。

haoweixl的博客 3676

大数据NiFi(十一):NiFi入门案例一

注意:数据写出的目录可以不需要提前在对应节点上创建,默认是可以自动创建,可以通过“Create Missing Directories”属性配置。将输出文件的权限设置为此属性的值,格式必须是UNIX rwxrwxrwx,用-来代替被拒绝的权限(例如rw-r--r--)或八进制数字(例如644),可以使用表达式,例如${file.permissions}。这里需要使用到的处理器是“GetFile”和“PutFile”,完成以上需求对“GetFile”和“PutFile”相关属性进行配置。

Lansonli(蓝深李)的博客 1490

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

内存管理:内存的分配与回收

声明大部分截图来自王道考研操作系统,部分图已标明出处,侵删。

一个搬运知识的笨小孩 2902

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

操作系统 —— 内存管理

思维导图 有需要可以下载:内存管理思维导图PNG 内存的基础知识 进程应该放在内存的哪里? 操作系统如何记录哪些内存区域已经被分配了,哪些还空闲? 当进程运行结束之后,如何将进程占用的内存空间释放? 操作系统负责内存空间的分配与回收 操作系统需要提供某种技术从逻辑上对内存空间进行扩充 操作系统需要实现地址转换功能,负责程序的逻辑地址和物理地址的转换 操作系统需要提供内存保护功能,保证各进程在各自存储空间内运行, 互不干扰 什么是内存? 内存是用于存放数据的硬件 程序执行前需要先放到内存中才能

tsundere_x的博客 7491

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

基本分页存储管理方式

单臂路由简单实现 单臂路由拓展 (三个交换机 一个路由器 4台pc)

Xechos 9595

操作系统存储管理

目录 - 3.1 内存的基础知识 - 3.1.1 什么是内存,有何作用 - 3.1.2 进程运行的基本原理 - 3.2 内存管理的概念 - 3.3 覆盖与交换 - 3.4 连续分配管理方式 - 3.5 动态分区分配算法 - 3.6 基本分页存储管理的基本概念 - 3.7 基本地址变换机构 - 3.8 具有快表的地址变换机构 - 3.9 两级页表 - 3.10 基本分段存储管理方...

abraham的博客 2万+

内存管理 II(基本分页、基本分段、段页式)

对基本内存管理进行了概述,包括基本分页存储管理、基本分段存储管理以及段页式存储管理。

kusunoki的博客 2936

【操作系统】分页存储管理方式

离散分配方式 连续分配存储管理方式产生的问题: 要求连续的存储区 碎片问题 变连续分配为离散分配,允许将作业离散放到多个不相邻接的分区中。 分页式存储管理:离散分配的基本单位是页 分段式存储管理:离散分配的基本单位是段 段页式存储管理:离散分配的基本单位是段、页 页面和物理块 空间划分 将一个用户进程的地址空间(逻辑空间)划分成若干个大小相等的区域,称为页或页面,各页从 0 开始编号。 内存...

Mrchai521的博客 5741
上一篇: 数据结构-难点突破(C++实现图的基本操作(邻接矩阵,邻接表,十字链表法储存,邻接多重表代码))
下一篇: JavaEE - JVM八股文(JVM内存区域划分,典型面试题,JVM类加载机制)
BaiRong-NUC
博客等级 码龄6年 1914粉丝 266原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BaiRong-NUC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值