理解虚拟内存

虚拟内存管理

分页管理

将用户程序的地址空间分为若干个固定大小的区域,称为“页面”。典型的页面大小为 1KB。相应地,也将内存空间分为若干个物理块,页和块的大小相同。然后通过映射表,把连续的虚拟内存空间,映射到离散的物理内存空间。
两级页表:针对难于找到大的连续的内存空间来存放页表的问题,可利用将页表进行分页的方法,使每个页面的大小与内存物理块的大小,并为它们进行编号,然后离散地将各个页面存放在不同的物理块中。

swap

把内存中暂时不能运行的进程或者暂时不用的程序或数据换到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程或进程所需要的程序或数据换入内存。

内存映射(mmap)

一文说清mmap内存映射底层原理

把磁盘文件直接映射到内存,在内存中修改这部分映射到内存的文件时,操作系统会直接将修改内容同步到磁盘上。避免了将文件内容从用户态拷贝到内核态到性能损失。
操作mmap返回指针的流程示意图:

  1. 使用mmap映射物理内存到进程的虚拟内存
  2. 会自动更新页表,添加新的虚拟内存到物理内存的映射页表项
  3. 当操作mmap返回的指针时,CPU能看到的是进程的虚拟地址,CPU获取到虚拟地址
  4. MMU通过该进程的用户空间页表查询到该虚拟地址对应的真实物理地址,然后告诉给CPU
  5. CPU无需切换到内核态,直接操作对应的物理地址上的数据
    在这里插入图片描述
    容器和CPU那些事儿

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

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

相关文章

C++: 内联函数

目录 概念: 与宏的对比: 函数膨胀: 内联函数的特性: 概念: 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内联函数的地方展开,没有函数调 用建立栈帧的开销,内联函数…

【笔记】Helm-4 最佳实践-4 依赖

依赖 最佳实践的这部分阐述Chart.yaml中声明的dependencies。 版本 如果有可能的话,使用版本范围而不是某个固定的版本。建议的默认设置是使用补丁级别的版本的匹配: version: ~1.2.3 version: ~1.2.3 这样会匹配1.2.3以及该版本的任何补丁&#xff0…

Feign 体系架构解析

正所谓麻雀虽小五脏俱全,HTTP 调用看着简单,实则下面隐藏的是一套非常复杂的流程。 从上古时代 jspservlet,到后面的 SpringMVC,在 HTTP 请求解析和封装上同样是煞费苦心。 我们在学习中经常会碰到这种 case,有些开源…

阿里云一键部署搭建幻兽帕鲁联机服务器教程

幻兽帕鲁(Palworld)是一款多人在线游戏,为了获得更好的游戏体验,许多玩家会选择自行搭建游戏联机服务器,但是如何部署搭建幻兽帕鲁联机服务器成为一个难题,阿里云提供了一种高效且简便的一键部署方案&#…

qt初入门7:进度条,定时器,时间控件练习

参考课本demo,空闲时间练习一下进度条,定时器,日期相关控件和使用。 1:demo运行结果 2:进度条控件梳理 进度条显示控件实际上是QProgressBar, 显示的进度可以通过代码控制,也可以通过其他控件上获取到的值…

go语言文件操作

打开和关闭文件 os.Open()函数能够打开一个文件,返回一个*File和一个err。对得到的文件实例调用close()方法能够关闭文件。 package mainimport ("fmt""os" )func main() {// 只读方式打开当前目录下的main.go文件file, err : os.Open("…

学习PyQt5

1、布局之后,无法移动对象到指定区域,无法改变对象大小。 原因:因为CtrlA选中了整个窗口,然后布局的时候就相当于整个窗口都按照这种布局,如选了水平布局,按钮一直在中间,无法拖到其它位置。 …

Unity之动画和角色控制

目录 📕 一、动画 1.创建最简单的动画 2.动画控制器 📕二、把动画和角色控制相结合 📕三、实现实例 3.1 鼠标控制角色视角旋转 3.2 拖尾效果 📕四、混合动画 最近学到动画了,顺便把之前创建的地形&#xff0…

go语言数组和切片

1. 数组Array Golang Array和以往认知的数组有很大不同。 1. 数组:是同一种数据类型的固定长度的序列。2. 数组定义:var a [len]int,比如:var a [5]int,数组长度必须是常量,且是类型的组成部分。一旦定义&…

Redis3-秒杀活动

秒杀 准备工作 我是参照下面这位大佬的i骄傲成下载的 csdn友情链接 Jmeter模拟多线程的压力测试工具 秒杀代码: package com.aaa.controller;import io.netty.util.internal.StringUtil; import org.apache.commons.lang.StringUtils; import org.springfram…

appsmith安装手记:2.安装Docker compose

方法一:Install using the repository sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 在安装Docker 已经吃过了亏,所以已经修改成阿里云的镜像。 yum-config-manager --a…

【大数据】详解 Flink 中的 WaterMark

详解 Flink 中的 WaterMark 1.基础概念1.1 流处理1.2 乱序1.3 窗口及其生命周期1.4 Keyed vs Non-Keyed1.5 Flink 中的时间 2.Watermark2.1 案例一2.2 案例二2.3 如何设置最大乱序时间2.4 延迟数据重定向 3.在 DDL 中的定义3.1 事件时间3.2 处理时间 1.基础概念 1.1 流处理 流…

深度推荐模型之DeepFM

一、FM 背景:主要解决大规模稀疏数据下的特征组合遇到的问题:1. 二阶特征参数数据呈指数增长 怎么做的:对每个特征引入大小为k的隐向量,两两特征的权重值通过计算对应特征的隐向量内积 而特征之间计算点积的复杂度原本为 实际应…

javascript分解器

javascript分解器 //split into array of strings. var str "Well, how, are , we , doing, today"; var res str.split(",");

幻兽帕鲁的搭建和幻兽帕鲁需要什么配置的服务器

前言 大家好,今天教大家如何快速搭建幻兽帕鲁,并能满足8-32人游玩 第一步 购买服务器 1.CPU:4核(最低需要4核起,当然可以选择更高的)CPU的选择更看重单核性能,尽量选择主频2.5GHz以上的&#…

python3-cookbook-字典中的键映射多个值

第一章:数据结构和算法 Python 提供了大量的内置数据结构,包括列表,集合以及字典。大多数情况下使用这些数据结构是很简单的。但是,我们也会经常碰到到诸如查询,排序和过滤等等这些普遍存在的问题。 因此,这一章的目的就是讨论这些比较常见的问题和算法。 另外,我们也会…

嵌入式C语言--#pragma指令

嵌入式C语言–#pragma指令 嵌入式C语言--#pragma指令 嵌入式C语言--#pragma指令一. pragma预处理指令概念二. pragma预处理指令的作用三. 预处理指令的参数1)message参数2)code_seg参数3)once参数4)pack参数5) section…

OpenTCS IDEA 全流程搭建和运行指南

OpenTCS IDEA 全流程搭建和运行指南 JDK安装下载JDK版本 openTCS源码下载IDEA 打开运行查看下载源码中gradle版本号下载gradle 二进制文件配置IDEA Gradle本地仓库IDEA打开openTCS项目运行顺序 JDK安装 下载JDK版本 JDK网址 注意: 请下载官方文档标准的java13JDK o…

paddle 动态图命名重复问题

引言 具体场景是这样的,我用ai studio提供的notebook跑动态图代码,第一遍正常,第二遍的时候就报参数名称已存在,虽然我也知道这是notebook存储之前的参数变量引起的,只需要重启再运行就可以了。但是重启代价太高了,尤其是前面已经写了很多代码,而我只是想测试这一个cell…

4G模块Air724如何访问天气信息

1.这是获得json数据: 左边是标准官方api说明中的,右边是我用串口获取的: 2.首先找一个天气服务器,我的:YY天气,直接百度,注册,然后找api即可: 3.用接口工具测试接口是否…