win32 - 虚拟内存的一些介绍
对32位Windows来说,其虚拟地址空间总数就是2的32次方,即4GB。
如果没有在引导时加上/3GB或/BOOTVA选项,Windows默认最大会分2GB给内核模式程序使用,2GB给用户模式程序。
其实32位Windows不管系统物理内存有多少,它只会映射这4GB的虚拟地址空间。
也就是说,你不需要做任何额外的操作就可以直接使用这4GB虚拟地址空间。
那剩下的物理内存怎么办呢?32位Windows有一个机制,名叫地址窗口扩展(AWE,Address
Windowing Extension)。
这个机制是给程序员准备的,作用是提供了一种方法,可以让程序员将4GB以外的物理内存地址映射到已被分配的用户模式地址空间中。
(即一个多对一关系,多于用户模式地址空间大小的物理内存挤在用户模式地址空间里;而且这是要程序员自己实现的,系统并不会帮你实现)
这个机制可以使一个用户模式的应用程序申请多达64GB的物理内存(当然,由于4GB虚拟地址空间的限制,如果同时要使用这么多内存肯定是不太可能的)。
用Windows Internals, 4th Edition这本书的原话来说——
“虽然AWE将管理“虚拟内存-物理内存”映射关系的负担放到了程序员的身上,但是,它确实解决了问题”
所以,32位的Windows并不是只支持4GB的物理内存(你装8GB也可以,只不过如果想用到额外内存的话会很费力气)。
虚拟内存的作用简单来说就是将内存按照一定的单位进行组织,并使用虚拟地址重新映射(至物理地址)。
(这样就出现了一种状况,即一系列连续的虚拟地址所指向的内存页面,物理地址并不一定是连续的。)
为了实现使用访问模式来保护系统数据的目的,系统有意地将虚拟内存的地址空间(即虚拟地址)进行分隔,规定用户模式和内核模式的虚拟地址空间为多少。
因此,用户模式的程序可以访问用户模式的虚拟地址空间,但是它不能随意访问内核模式程序的虚拟地址空间。而内核模式的程序可以访问所有虚拟地址空间。
另外,用户模式的进程由于虚拟内存的保护,不需担心其它进程侵入到当前进程的地址空间中从而破坏数据或留下安全隐患。
每个进程可用的虚拟地址范围称为该进程的“虚拟地址空间”,每个用户模式进程都有其各种的专用虚拟地址空间。对于32位进程,虚拟地址空间通常为2GB,范围从 0x00000000 至 0x7FFFFFFF。对于 64 位进程,虚拟地址空间为 8 TB,范围从 0x000'00000000 至 0x7FF'FFFFFFFF。
在 32 位 Windows 中,可用的虚拟地址空间共计为 2^32 字节(4 GB)。通常较下的 2 GB 用于用户空间,较上的
2 GB 用于系统空间。
在 32 位 Windows 中,你可以指定(在启动时)超过 2 GB 用于用户空间。结果是系统空间可用的虚拟地址更少。可以将用户空间的大小增至 3 GB,在这种情形下系统空间仅有
1 GB。
虚拟地址会通过页表(page table)映射到物理内存,页表由操作系统维护并被处理器引用,每个进程都有自己的页表。内核空间在页表中拥有较高特权级,因此用户态程序试图访问这些页是会导致一个页错误(page fault)。其中内核空间是持续存在的,并且在所有进程中都映射到同样的物理内存。与此相反,用户模式空间的映射随进程切换的发生而不断变化。
在用户空间中,所有物理内存页面都可以根据需要进行分页至磁盘文件。在系统空间中,某些物理页面可以分页,而其他页面不能。系统空间具有用于动态分配内存的两个区域:页面缓冲池和非页面缓冲池。在 64 位 Windows 中,页面缓冲池为 128 GB 的虚拟地址,范围从 0xFFFFA800'00000000 至
0xFFFFA81F'FFFFFFFF。非页面缓冲池为 128 GB 的虚拟地址,范围从
0xFFFFAC00'00000000 至 0xFFFFAC1F'FFFFFFFF。
win32 - 虚拟内存的一些介绍的更多相关文章
- 探索Win32系统之窗口类(转载)
Window Classes in Win32 摘要 本文主要介绍win32系统里窗口类的运做和使用机制,探索一些细节问题,使win32窗口类的信息更加明朗化. 在本文中,"类", ...
- win32创建工具栏的自定义图标
注意点:使用LoadImage函数加载bmp图片,这里特指BMP图片,其实LoadImage可以加载很多格式的图片 HBITMAP bitmap = (HBITMAP)LoadImage((HINST ...
- 低层级GPU虚拟内存管理引论
低层级GPU虚拟内存管理引论 Introducing Low-Level GPU Virtual Memory Management CUDA应用程序越来越需要尽可能快速高效地管理内存.在CUDA 1 ...
- Msys+Mingw在手 妙用在心!
1 缘起 平时在一些c++群面,看见很多大学十分努力的学习c++/MFC ,看见在编程语言百花争芳的时候,C/C++还是很有很有魅力.估计很多初学者使用都是window下的visual stdio 开 ...
- redis入门教程
21) Redis 简介Redis 是一个开源的使用 ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库.2) 数据类型2.1. Redis 的 KeyRedi ...
- Windows API 之 VirtualAlloc
Reserves, commits, or changes the state of a region of pages in the virtual address space of the cal ...
- 【转】pywinauto教程
一.环境安装 1.命令行安装方法 pip install pywinauto==0.6.7 2.手动安装方法 安装包下载链接:pyWin32: python调用windows api的库https:/ ...
- System.InvalidOperationException:“寄宿 HWND 必须是子窗口。”
原文:System.InvalidOperationException:"寄宿 HWND 必须是子窗口." 当试图在 WPF 窗口中嵌套显示 Win32 子窗口的时候,你有可能出现 ...
- Linux--重要文件
目录 /etc/resolv.conf /etc/host /etc/sysconfig/network /etc/fstab /etc/rc.local /etc/profile /etc/bash ...
- pywinauto教程
转:pywinauto教程https://blog.csdn.net/weixin_40161673/article/details/83246861 ** 一.环境安装**1.命令行安装方法pip ...
随机推荐
- [转帖]Kibana查询语言(KQL)
时间 2020-12-27 标签 html java 数据库 ide ui 翻译 日志 htm 对象 blog 栏目 HTML 繁體版 原文 https://www.cnblogs.com/-b ...
- [转帖]谈 JVM 参数 GC 线程数 ParallelGCThreads 合理性设置
https://my.oschina.net/u/4090830/blog/7926038 1. ParallelGCThreads 参数含义 在讲这个参数之前,先谈谈 JVM 垃圾回收 (GC) 算 ...
- CentOS7 通过移植二进制文件的方式安装redis、nginx以及dotnet core的简单办法
新的centos机器安装预制软件比较麻烦 最简单的方法是在保证服务器或者是虚拟机硬件架构相同,并且操作系统版本差别不是很大的情况下, 直接使用其他机器已经变异好的二进制文件最为简单. 比如本次 我这边 ...
- CTT Day3
T1 忘了叫什么名字 对于一个排列 \(p\),定义它的权值为其有多少个子串是一个值域从 \(1\) 开始的排列.给定排列 \(p\),对于 \(1\le i\le j\le n\),定义 \(f(i ...
- 关于async函数的错误处理
1. 关于async函数的错误处理 有些时候,我们请求的接口可能会报错: 从而导致后面的代码无法去执行: 这样就会造成页面上某些状态出错! 那么怎么样才能 既能捕获到错误 还能让代码往后面执行呢 2. ...
- js分钟转化为小时并且以某个数字进行递增
有些时候,我们需要将分钟转为小时: 并且还有以一个数字进行递增: 呈现出[3,6,9,12,15,18]这样的递增形式 // 因为是递增,所以是相加: // 在使用+号的时候: // 注意两边都是数字 ...
- 微信小程序-常用弹窗
官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showToast.html showToast ...
- python快速入门【五】---- 面向对象编程、python类
python入门合集: python快速入门[一]-----基础语法 python快速入门[二]----常见的数据结构 python快速入门[三]-----For 循环.While 循环 python ...
- 强化学习技巧五:numba提速python程序
numba是一款可以将python函数编译为机器代码的JIT编译器,经过numba编译的python代码(仅限数组运算),其运行速度可以接近C或FORTRAN语言. numba使用情况 使用numpy ...
- 我管你什么okr还是kpi,PPT轻松交给你
word一键转ppt 通过[文件]→[选项]→[快速访问工具栏],选择[不在功能区中的命令],找到[发送到Microsoft PowerPoint ],单击[添加]后再[确定] 调出功能按钮后,就可以 ...