📜  Windows 内存管理

📅  最后修改于: 2022-05-13 01:56:11.626000             🧑  作者: Mango

Windows 内存管理

操作系统中的内存管理是控制或维护主存,并在执行过程中将进程从主存转移到磁盘。内存管理跟踪所有内存位置,无论进程是否使用它们。确定应该为每个进程分配多少内存。指定每个进程应该分配多少内存。它决定了哪些过程将被记住以及何时被记住。它跟踪内存何时被释放或何时被共享并相应地更改状态。

Windows 内存管理

Microsoft Windows 对每个 32 位进程都有自己的虚拟地址空间,最多允许查看 4 GB 的内存。每个进程在 64 位 Windows 上都有 8 TB 的地址空间。所有线程都可以访问进程的可见地址空间。另一方面,线程不能访问另一个进程的内存,这可以保护一个进程不被另一个进程损坏。

32 位 Windows 的体系结构: 32 位 Windows 操作系统 (OS) 的自动配置为内核和用户程序平均分配 4 GB (232) 的可访问内存空间。如果有 4 GB 物理内存可用,内核将获得 2 GB,应用程序内存将获得 2 GB。内核模式地址空间由所有进程共享,但为每个用户进程提供应用模式访问空间。

64 位 Windows 架构: 64 位 Windows 操作系统 (OS) 的自动配置为内核和用户程序平均分配高达 16 TB (254) 的可访问内存空间。由于 16 TB 实内存可用,内核将拥有 8 TB 的虚拟地址 (VA) 空间,而用户应用程序内存将拥有 8 TB 的 VA 空间。内核中的可见地址空间分配给所有进程。每个 64 位功能都有自己的位置,但每个 32 位系统都可以在 2 GB (Windows) 虚拟机上运行。

虚拟地址空间

进程的可见地址空间是您可以使用的内存地址范围。每个进程的地址区都是私有的,如果是共享的,只能通过其他进程访问。

虚拟地址并不反映对象在内存中的实际位置;相反,系统为每个进程存储一个表,这是一个将可见地址转换为本地地址的内部数据结构。每次链引用它时,程序都会将虚拟地址转换为本地地址。

Windows的虚拟地址区分为两部分:一是进程使用,二是系统使用。

虚拟内存功能

进程可以使用虚拟内存函数更改或确定其虚拟地址空间中页面的状态。

可见地址空间的宽度是为进程保留的。虽然节省地址空间并不能提供材料存储,但它会阻止范围使用其他共享进程。它不会影响其他进程的其他活动地址空间。页存储减少了对虚拟存储的不必要使用,同时允许为灵活的数据结构留出部分地址空间。根据需要,该过程可以为该区域提供物理存储库。

在进程的地址中提供一组缓存页面,以便只有共享进程才能访问真实存储(RAM 或磁盘)。

对于最专用的页面,指定读/写、只读或无访问权限。这与通常提供对页面的读/写访问的一般分发过程不同。

释放一组已保存的页面,使可见地址集可用于以下呼叫过程共享操作。

我们可以撤回一组已提交的页面,从而释放可分配给未来任何进程的便携式存储空间。

为防止程序更改文件中的页面,请锁定绑定到虚拟内存 (RAM) 的一个或多个内存页面。查找有关调用进程中的一组页面或特定进程的地址空间的信息。它可能会改变绑定到调用进程物理地址的一组页面的访问保护。

堆函数

系统为每个进程提供一个默认堆。私有堆可以帮助从堆中进行频繁分配的应用程序性能更好。私有堆是调用者进程地址空间中的一个或多个页面块。构建私有堆后,进程通过 HeapAlloc 和 HeapFree 等操作管理其中的内存。

文件映射

文件内容与进程中一块可见地址空间的关联称为文件映射。为了跟踪这种关系,系统会创建一个文件映射生成器(也称为类别对象)。文件视图是用于文件内容访问过程的物理地址区域。由于文件映射,该过程可以同时使用输入和输出序列 (I/O)。它还允许该过程有效地处理大型数据文件,例如网站,而无需将整个文件映射到内存。具有内存映射的文件可以与许多进程一起使用以交换数据。