内存管理-分页、虚拟地址、虚拟内容、页面置换算法
文章目录
- 一、5W2H角度分析内存管理
- What是内存管理
- Why需要内存管理
- Who使用内存管理
- Where内存管理应用
- When需要内存管理
- How内存管理工作
- How much内存管理的成本
- 二、分页
- 什么是分页
- 分页的原理
- 分页的优缺点
- 分页的应用
- 三、虚拟地址
- 什么是虚拟地址
- 虚拟地址的作用
- 虚拟地址的转换
- 虚拟地址的优缺点
- 四、虚拟内存
- 什么是虚拟内存
- 虚拟内存的实现
- 虚拟内存的管理
- 虚拟内存的优缺点
- 五、页面置换算法
- 什么是页面置换算法
- 常见的页面置换算法
- 页面置换算法的实现
- 页面置换算法的优缺点
一、5W2H角度分析内存管理
What是内存管理
内存管理是指操作系统对计算机内存资源进行有效分配和利用的过程。它涉及到内存的分配、回收、保护和共享等方面的工作。
Why需要内存管理
内存管理的目的是为了最大限度地提高计算机的性能和效率。通过合理地管理内存资源,可以避免内存溢出、提高程序的执行速度和响应能力。
Who使用内存管理
内存管理主要由操作系统负责,但是应用程序也需要使用内存管理来分配和释放内存资源。
Where内存管理应用
内存管理应用于计算机的操作系统和应用程序中。
When需要内存管理
内存管理在计算机启动时就开始工作,直到计算机关闭。它在操作系统运行过程中,以及应用程序执行过程中都起到重要作用。
How内存管理工作
内存管理通过分配和回收内存空间来管理内存资源。它使用数据结构来记录内存的使用情况,并通过调度算法来决定哪些内存空间可以分配给应用程序。
How much内存管理的成本
内存管理的成本包括内存分配和回收的开销,以及管理内存使用情况所需要的数据结构和算法的开销。这些成本会影响计算机的性能和效率。
二、分页
什么是分页
分页是一种内存管理技术,将物理内存划分为固定大小的页框,将逻辑地址空间划分为相同大小的页。通过页表的映射关系,将逻辑地址转换为物理地址。
分页的原理
分页的原理是将逻辑地址分割成页号和页内偏移两部分,通过页表的映射关系,将页号转换为物理内存的页框号,再加上页内偏移,得到最终的物理地址。
分页的优缺点
分页的优点是可以提高内存的利用率,减少内存碎片。但是它也会增加内存访问的开销,因为需要进行地址转换。
分页的应用
分页广泛应用于操作系统和应用程序中,可以提供更大的地址空间,支持更多的进程同时运行。
三、虚拟地址
什么是虚拟地址
虚拟地址是指应用程序使用的地址空间,它是相对于物理内存的地址,可以通过地址转换得到物理地址。
虚拟地址的作用
虚拟地址的作用是为应用程序提供一个统一的地址空间,使得程序可以独立于物理内存的具体情况。
虚拟地址的转换
虚拟地址通过页表的映射关系,转换为物理地址。页表记录了虚拟页号和物理页框号之间的映射关系。
虚拟地址的优缺点
虚拟地址的优点是可以提供更大的地址空间,支持更多的进程运行。但是它也增加了地址转换的开销,会影响程序的执行速度。
四、虚拟内存
什么是虚拟内存
虚拟内存是一种将磁盘空间作为辅助内存使用的技术。它将部分程序和数据存储在磁盘上,只在需要时才将其加载到物理内存中。
虚拟内存的实现
虚拟内存的实现需要使用页表和页面置换算法。页表记录了虚拟页号和物理页框号之间的映射关系,页面置换算法用于决定哪些页面需要被置换出去。
虚拟内存的管理
虚拟内存的管理包括页面的加载和置换,以及页面的保护和共享等方面的工作。操作系统负责管理虚拟内存,提供相应的系统调用接口。
虚拟内存的优缺点
虚拟内存的优点是可以提供更大的地址空间,支持更多的进程运行。同时它也可以提高程序的执行速度,减少内存碎片。但是它会增加内存访问的开销,影响系统的响应能力。
五、页面置换算法
什么是页面置换算法
页面置换算法是一种用于决定哪些页面需要被置换出去的算法。当物理内存不足时,需要将一部分页面置换到磁盘上,以便为新的页面腾出空间。
常见的页面置换算法
常见的页面置换算法有FIFO(先进先出)、LRU(最近最少使用)、LFU(最不经常使用)等。它们根据页面的访问情况来决定哪些页面需要被置换出去。
页面置换算法的实现
页面置换算法的实现需要使用数据结构来记录页面的访问情况,以及相应的算法来决定哪些页面需要被置换出去。
页面置换算法的优缺点
页面置换算法的优点是可以提高内存的利用率,减少内存碎片。但是不同的算法适用于不同的场景,各有优缺点。有些算法可能会导致页面频繁置换,影响系统的性能。
相关文章:
内存管理-分页、虚拟地址、虚拟内容、页面置换算法
文章目录 一、5W2H角度分析内存管理What是内存管理Why需要内存管理Who使用内存管理Where内存管理应用When需要内存管理How内存管理工作How much内存管理的成本 二、分页什么是分页分页的原理分页的优缺点分页的应用 三、虚拟地址什么是虚拟地址虚拟地址的作用虚拟地址的转换虚拟…...
【C++入门】命名空间详解(从零开始,冲击蓝桥杯)
C入门 命名空间 南喵小鸡汤程序员可以让步,却不可以退缩,可以羞涩,却不可以软弱,总之,程序员必须是勇敢的。一 . 命名空间的介绍二.命名空间的实际应用1.为什么要有命名空间我们在使用变量时,通常会为他定义一个名字,在…...
通过代码MyBatis-plus实现对表中createTime和updateTime进行自动更新
通过代码MyBatis-plus实现对表中createTime和updateTime进行自动更新 实现这样的效果可以在数据库中设置,但是我们一般建议在代码里实现, 但是总不能每次insert和update的时候都手写new当前时间 因此推荐使用mybatis-plus 1导入依赖 <dependency&g…...
HTML 实时显示本地电脑时间(精确到毫秒)
<!DOCTYPE html> <html> <head><title>实时显示本地电脑时间(精确到毫秒)</title> </head> <body><h1>本地电脑时间(精确到毫秒):</h1><h1 id"clock&q…...
opencv跨平台arm交叉编译之ubuntu
目录 1. 安装交叉编译工具链2. 安装依赖3. 配置工具链3.1 新建build目录3.2 安装cmake-gui3.3 工具链配置界面进行配置3.3.1 终端输入以下命令3.3.2 点击Configure,弹出编译方式选择对话框:3.3.3 点击Next3.3.4 点击Finish3.3.5 点击Configure。3.3.6 Ge…...
Git命令全集
1、克隆代码 查看项目地址 git remote -v直接克隆 git clone url克隆指定分支 git clone -b 分支 git地址RPC failed错误:修改Git的传输字节限制 git config --global http.postBuffer 10485760002、查看分支 查看 git branch -a切换分支 git branch 分支名从指定分支…...
[BigData:Hadoop]:安装部署篇
文章目录 一:机器103设置密钥对免密登录二:机器102设置密钥对免密登录三:机器103安装Hadoop安装包3.1:wget拉取安装Hadoop包3.2:解压移到指定目录3.2.1:解压移动路径异常信息3.2.2:切换指定目录…...
ubuntu 上vscode使用cmake编译运行c++程序
参考:ubuntu 上vscode使用cmake编译运行c程序_vscode ubuntu运行c程序_SCH0的博客-CSDN博客 文章是对官方过程的翻译: Get started with CMake Tools on Linux...
Node.js 新特性 SEA/单文件可执行应用尝鲜
#1 关于 SEA 单文件可执行应用(SEA,Singe Executable Applications),是 Node.js 新版本的特性,最初在 v19.7.0、v18.16.0 加入,并在 v20.x 得到扩展。而上个月发布的全家桶 Bun.js,就自带了 SEA…...
137.只出现一次的数字II
137. 只出现一次的数字 II - 力扣(LeetCode) 给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来…...
k8s-15 strogeclass
官网: https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner StorageClass提供了一种描述存储类 (class)的方法,不同的cass可能会映射到不同的服务质量等级和备份策略或其他策略等 每个 StorageClass 都包含 provisioner、parameters 和…...
微信小程序开发实战:利用差异对比显示对象属性变化
前言 在小程序开发中,经常会遇到需要比较两个对象之间的差异并将这些差异可视化展示在界面上的情况。这一过程对于数据管理和用户反馈至关重要。本文将介绍一种实用的方法,可以帮助开发者高效地比较两个对象的属性差异,并将这些差异以直观的方…...
Redis的GEO结构
GEO就是Geolocation的简写形式,代表地理坐标。Redis在3.2版本中加入了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据。常见的命令有: GEOADD:添加一个地理空间信息,包含:经度…...
做UI设计师是否需要美术功底?
UI确实需要一定的手绘能力,但是跟画画是有很大不同的。 很多人问:学UI需不需要手绘能力。或者学UI需要什么绘画基础。 所以今天集体回答一下。 我们先来看一下跟绘画有关系的行业: 漫画: 主要的不是绘画能力,更重…...
python txt or 日志等超大文本文件读取
判断文件路径是否存在 要判断一个路径文件是否存在,可以使用Python的os.path模块中的exists()函数。下面是一个示例: import os# 要检查的文件路径 file_path = "path/to/file.txt"# 使用os.path.exists()函数判断文件是否存在 if os.path.exists(file_path):pri…...
Windows:Arduino IDE 开发环境配置【保姆级】
物联网开发学习笔记——目录索引 参考官网:Arduino - Home Arduino是一款简单易学且功能丰富的开源平台,包含硬件部分(各种型号的Arduino开发板)和软件部分(Arduino IDE)以及广大爱好者和专业人员共同搭建和维护的互联…...
【LeetCode 算法专题突破】双指针(⭐)
文章目录 前言1. 移动零题目描述代码 2. 复写零题目描述代码 3. 快乐数题目描述代码 4. 盛最多水的容器题目描述代码 5. 有效三角形的个数题目描述代码 6. 三数之和题目描述代码 7. 四数之和题目描述代码 总结 前言 学算法入门必学的一个章节,双指针算法࿰…...
ts知识点——基础积累
第一章 快速入门 1、TypeScript简介 TypeScript是JavaScript的超集。它对JS进行了扩展,向JS中引入了类型的概念,并添加了许多新的特性。TS代码需要通过编译器编译为JS,然后再交由JS解析器执行。TS完全兼容JS,换言之,…...
mybatis plus MetaObjectHandler 不生效
首先要知道,spring boot 只会加载启动类同级和下级的bean 如果把bean放在启动类不同的上级目录,是加载不了bean的 如果把mybatisplus的配置文件放在与启动类不同包,就会扫描不到 例如放在这里,就扫描不到 放到这里,就可以扫描到...
力扣第216 组合总和 ||| c++ 回溯 + 注释
题目 216. 组合总和 III 中等 相关标签 数组 回溯 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
