搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
Cpp五条
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
深度学习模型部署TensorRT加速(五):TensorRT部署流程及基本使用
2
Windows 名称解析机制探究及缺陷利用_win节点类型混合
3
Windows远程桌面连接被拒绝,因为没有授权此用户帐户进行远程登录问题排查方法_win10你可能没有远程登录权限
4
10种排序算法总结及c++代码_算法与设计zhijiecharupaixudaima
5
从鸿蒙活到现在,鸿蒙是否真实存在?_科技数码通
6
win10如何开启远程桌面连接_windows10远程桌面连接怎么设置
7
【LeetCode】二叉搜索树相关题解汇总_小红拿到了一个二叉树,每个节点有一个权值。 小红定义,每一层的权值为该层所有节
8
push发出去php,unipush 服务端PHP不能离线发送
9
utf8和utf8mb4的区别_c utf8mb4
10
什么是限流?为什么会限流呢?常见的限流算法【固定窗口限流、滑动窗口限流、漏桶限流、令牌桶限流】是什么呢?_限流固定窗口
当前位置:
article
> 正文
全面解析虚拟内存概念_.虚拟空间64位
作者:Cpp五条 | 2024-03-22 03:22:48
赞
踩
.虚拟空间64位
一个系统中的进程是与其他进程共享CPU和主存资源的。随着对CPU需求的增长,进程以某种合理的平滑的方式慢了下来。
但是如果太多的进程需要太多的内存,那么它们中的一些就根本无法运行。当一个程序中没有空间可以用时,那就是它运气不好了。内存还容易被破坏。如果某个进程不小心写了另一个进程使用的内存,它就可能以某种完全和程序逻辑无关的令人迷惑的方式失败。
为了更加有效的管理内存并且少出错,现代系统提供了一种对主存的抽象的概念,叫做虚拟内存(VM)。虚拟内存时硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每一个进程提供一个大的、一致的和私有的地址空间。通过一个很清晰的机制,虚拟内存提供了三个很重要的能力:
它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,高效的使用了主存。
它为每个进程提供了一致的地址空间,从而简化了内存管理
它保护了每个进程的地址空间不被其他进程破坏。
一。物理和虚拟寻址
计算机系统的主存被组织成一个有M个连续的字节大小的单元组成的数组。每字节都有一个唯一的物理地址(PA)。第一个字节的物理地址为0,接下来的字节地址为2,依次类推。给定这种简单的结构,CPU方位内存的最自然的方式就是使用物理地址。我们把这种方式称为物理寻址(physical addressing)。
早期的PC使用的是物理地址,而且诸如数字信号处理器、嵌入式微控制器以及Cray超级计算机这样的系统仍然还是继续使用这种寻址方式。然而现代的处理器使用的是一种称为虚拟寻址(virtual address)的寻址方式。
使用虚拟地址,CPU通过生成一个虚拟地址(Virtual Address,VA)来访问主存,这个虚拟地址在被送到内存之前先转换成适当的物理地址。将这个虚拟地址转换成物理地址的任务叫做地址翻译(address translation)。就像异常处理一样,地址翻译需要CPU硬件和操作系统的紧密合作。CPU芯片上叫做
内存管理单元
(MMU)的专有硬件,利用存放主存中的查询表来动态的翻译虚拟地址,该表的内容由操作系统来管理。
二。地址空间
地址空间是一个非负整数的有序集合{0,1,2,.......}。如果地址空间中的整数是连续的,那么我们说它是一个线性的连续地址空间。在一个带有虚拟内存的系统中,CPU从一个由N个地址的地址空间中生成虚拟地址,这个地址空间称为虚拟地址空间(virtual address space)。一个地址空间的大小是由表示最大地址所需要的位数来描叙的。现代系统通常支持32位或者64位虚拟地址空间。
一个系统还有一个物理地址空间(physical address space),对应于系统中物理内存的M个字节。地址空间的概念是十分重要的,因为它清楚地区分了数据对象(字节)和它们地属性(地址)。一旦认识到了这种区别,那么我们就可以将其推广了,允许每个数据对象有多个独立地地址空间,其中每个地址都选自一个不同的地址空间。这就是虚拟内存的基本思想。主存中的每字节都有一个选自虚拟空间的虚拟地址和一个选自物理空间的物理地址。
三。虚拟内存作为缓存的工具
概念上而言,虚拟内存被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组。每字节都有一个唯一的虚拟地址,作为到数组的索引。磁盘上数组的内容被缓存到主存中。和存储器层次结构中其他缓存一样,磁盘(较低层)上的数据被分割为块,这些块作为磁盘和主存之间的传输单元。VM系统通过将虚拟内存分割为称为虚拟页(Vitrual Page)的大小固定的块来处理这个问题。每个页面大小为P字节。类似的,物理内存页被分割为物理页(Physical page,PP
),大小也为P字节(物理页面也被称为页帧 Page frame)。
在任何时刻,虚拟页面的集合都分为三个不相交的子集:
未分配:VM系统还未分配(或者创建)的页。未分配的块没有任何数据和它们相关联,因此也就不占用任何磁盘空间。
缓存的:当前已缓存在物理内存中的已分配页。
未缓存的:未缓存在物理内存中的已分配页。
四。页表
同任何缓存一样,虚拟内存系统必须由某种方法来判定一个虚拟页是否缓存在DRAM中的某个地方。如果是,系统还必须确定这个虚拟页存放在哪个物理页面中。如果不命中,系统必须判断这个虚拟页面放在磁盘的哪个位置,在物理内存中选择一个牺牲页,并将虚拟页从磁盘复制到DRAM中,替换这个牺牲页面。
这些功能是软硬件联合提供的,包括操作系统、MMU(内存管理单元)中的地址翻译硬件和一个存放在物理内存中叫作页表(page table)的数据结构,页表将虚拟页映射到物理页面。每次地址翻译硬件将一个虚拟地址转换为物理地址时,都会读取页表。操作系统负责维护页表的内容,以及在磁盘与DRAM之间来回传送页。
下图展示了一个页表的基本组织结构。页表就是一个页表条目(Page Table Entry)的数组。虚拟地址空间中的每个页在页表中都有一个固定的偏移量处都有一个PTE。为了我们的目的,我们假设每个PTE是由一个有效位(valid bit)和一个n位地址字段组成的。有效位表明了该虚拟页面当前是否被缓存在DRAM中。如果设置了有效位,那么地址字段就表示DRAM中相应的物理页的起始位置,这个物理页中缓存了该虚拟页。如果没有设置有效位,那么这个空地址表示这个虚拟页还未被分配。否则,这个地址就会指向该虚拟页在磁盘上的起始位置。
五。地址翻译
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/Cpp五条/article/detail/284964
推荐阅读
article
vue
中对
axios
的二次
封装
和
节流
与
防抖
_
axios
节流
...
.........
_
axios
节流
axios
节流
axios
...
赞
踩
article
1.
列表
和
列表
项
...
FreeRTOS
列表
和
列表
项
列表
是FreeRTOS中的一个数据结构,类似于链表,挂载各种数据FreeRTOS中的
列表
为双...
赞
踩
article
微信小
程序
登录
流程...
1、调用接口,换取用户唯一标识OpenID、用户在微信开放平台账号下的唯一标识UnionID和会话密钥session_k...
赞
踩
article
Android
Studio
3.0 正式版 踩坑记录_
android
studio
new ui ...
记录一下更新
Studio
3.0 之后所遇到的一些坑~!1 , Error:Could not find common...
赞
踩
article
C++
OpenCV
图像
分割
之
GrabCut
分割
...
前言在
OpenCV
中的图像
分割
中
GrabCut
分割
算法,该算法可以方便的
分割
出前景图像,操作简单,而且
分割
的效果很好。在...
赞
踩
article
android
studio
65535插件化
解决方案
,4.3、
Android
Studio突破64...
当应用代码和库代码代码超过64K
限制
时,早期版本的构建系统会出现如下提示:Conversion to Dalvik fo...
赞
踩
article
php
通过GD库
实现
验证码
_
php
生成
验证码
gd库...
首先看看
实现
的效果:再来看具体
实现
:vertify.
php
php
verifyImage();//通过GD库
实现
验证码
...
赞
踩
article
Redis
的
事务
...
Redis
的
事务
Redis
的
事务
Redis
事务
功能是通过MUL...
赞
踩
article
亚马逊云计算平台---------
AWS
(三)
S3
存储桶中
上传下载
删除
文件
Java
代码实现_...
上一篇由于时间仓促,写了一个在
S3
上
上传下载
文件
的客户端说明。但是在实际的开发中我们肯定不需要手动操作,要
通过
代码来进行...
赞
踩
article
Android
日常(09)同时集成
u
meng
的推送和统计两个功能时,在打
release
包所遇到的代码...
Android
日常(08)Umeng P
u
sh集成遇到的
问题
写在前面的话
问题
出现的场景处理方式结束语写在前面的话最近在维...
赞
踩
article
2024
(
最新)
前端
面試題
----
歡迎補充...
一个域下的js脚本未经允许的情况下,不能访问另一个域下的内容。通常判断跨域的依据是协议、域名、端口号是否相同,不同则跨域...
赞
踩
article
Android
:
代码
混淆
概念整理_
android
代码
混淆
...
混淆
整理_
android
代码
混淆
android
代码
混淆
...
赞
踩
article
计算机网络题库——第4章
网络层
_考虑如右图
所示
的
子网
,该
子网
使用
了
距离
向量
算法
...
第 4 章
网络层
一、单项选择题1.路由器连接的异构网络指的是( )。A.网络的拓扑结构不同B.网络中计算机操作系统不同...
赞
踩
article
时序分析 43
--
时序
数据
转为
空间
数据
(二)
马尔可夫
转换场_
马尔可夫
转移
场...
马尔可夫
转化场基本原理介绍_
马尔可夫
转移
场
马尔可夫
转移
场 马尔可...
赞
踩
article
[
vue
项目笔记]
axios
在
vue
-
router
里面的第
二次
封装
_怎么
在
二次
封装
axios
中使用v...
axios
二次
封装
request.js//对
axios
进行
二次
封装
import
axios
from "
axios
"//...
赞
踩
article
ncnn
之一:
ncnn
概述
...
github https://github.com/Tencent/
ncnn
ncnn
是一个为手机端极致优化的高性能神经...
赞
踩
article
docker
运行
jar
文件...
一、环境 本地虚拟机安装的centos7 二、安装
docker
yum install
docker
-engine 三、...
赞
踩
article
STM32
系统学习——
TIM
(
基本
定时器
)_
tim
寄存器
有
哪些...
一、
定时器
分类
STM32
F1 系列中,除了互联型的产品,共
有
8 个
定时器
,分为
基本
定时器
,通用
定时器
和高级
定时器
。基...
赞
踩
article
小
程序
的异步导至
app
.
onLaunch
和
index
的
onload
执行
先后顺序无法控制_微...
当我们设计小
程序
的时候, 我们希望在
app
.
js
开始加载的时间, 就对后端发起请求, 返回用户的信息, 之后来决定用...
赞
踩
article
通过构建
Storage
Explorer
应用学习
Windows
Azure
Storage
API...
公告:本博客为微软云计算中文博客的镜像博客。部分文章因为博客兼容性问题,会影响阅读体验。如遇此情况,请访问原博客 。通过...
赞
踩
相关标签
vue.js
javascript
前端
vue
axios
微信小程序
小程序
java
android studio
android
3-0
算法
c++
python
css
opencv
android studio 65535插件化解决方案
php
验证码
gd库
redis
数据库
缓存
umeng统计