PS:部分内容由 $gpt-3$ 生成,请仔细甄别正误

概念

任务管理器中

  • 已提交(内存)总量:系统交换文件大小+物理内存容量
  • 已提交(内存):已经接受应用申请的内存容量限制
  • 已缓存:开机后各种用过的数据和程序还保留在内存和虚拟内存中的部分的内存量
  • 分页缓冲池:进程占用的分页池中的虚拟内存,是进程调用某些系统功能时,由系统核心或者驱动程序分配的
  • 非分页缓冲池:用于存储无需交换到硬盘上的数据

    非分页缓冲池是存储在计算机操作系统内存中的一块区域,用于存储无需交换到硬盘上的数据。与分页缓冲池不同,非分页缓冲池不需要使用虚拟内存技术进行数据的交换,因为它们可以一直保留在内存中而不会被操作系统清除。

    非分页缓冲池通常会为常用的数据和程序分配更多的内存空间,可以加速计算机处理数据的速度,提高系统的响应能力。比如在数据库系统中,非分页缓存池可以缓存经常被查询的数据页,这样可以减少从硬盘中读取数据的次数,提高查询性能。

    需要注意的是,由于非分页缓冲池一直保留在内存中,因此如果分配的空间过大会对系统的其它资源产生竞争,导致系统出现性能问题。因此,在设计和使用非分页缓冲池时需要仔细考虑系统资源的利用,避免造成系统负担。

  • 共享GPU内存:共享GPU内存就是系统内存。

RamMap中

Process Private

Process Private(进程私有)是指计算机系统中的各个进程都拥有自己独立的内存空间,这个内存空间不能被其他进程访问或修改。

在计算中,进程指正在被计算机执行的程序。进程私有内存是进程内包含变量和数据的内存空间。这个内存空间是进程独有的,其他进程不能够访问或修改其中的数据。

进程私有内存非常重要,因为它为各个进程提供了隔离和保护。这样可以确保数据不会被其他进程意外覆盖或访问,从而避免了意外的行为或崩溃。这种机制也可以提高计算机内存资源的利用效率,因为只有需要内存的进程才会被分配内存。

Mapped File

Mapped File(映射文件)是指将文件映射到进程的地址空间中,使得进程可以像访问内存一样访问文件。

在映射文件的过程中,操作系统会将磁盘上的文件映射到进程的虚拟地址空间中,使得进程可以直接读写文件,而无需使用读取和写入文件的系统调用。此时对进程的访问看起来就像是对内存的访问一样,但实际上文件的内容仍存储在磁盘中。

映射文件可以提高文件访问的效率,因为文件不需要再被复制到进程读写的缓存中。在读写文件的过程中,映射文件可以避免数据的复制和重复移动,减少了 I/O 操作和 CPU 开销。但是,映射文件也有访问控制和错误处理的问题需要注意。

Shareable

Shareable(可以共享)指的是一些对象或资源可以被多个进程或程序同时访问和使用。这些对象或资源通常是操作系统中的公共资源,如内存、文件、设备等。

在操作系统中,多个应用程序可以同时访问和共享公共资源。这样就可以避免资源浪费和冗余的存储,提高系统的利用率和效率。例如,多个进程可以共享一块内存区域,从而实现进程间的通信和数据交换。

共享资源需要注意安全和互斥访问。为了确保多个进程可以安全地共享资源,操作系统通常会提供资源管理和同步机制,如信号量、互斥锁等。这些机制可以保证进程只有在获得资源访问权限后才能对其进行操作,并且每次只有一个进程能够访问资源,从而避免资源竞争和访问冲突。

Page Table(页表)

Page Table(页表)是一种数据结构,用于将虚拟地址映射到物理地址,实现操作系统的虚拟内存管理。

计算机中的程序使用虚拟地址来寻址内存,而物理内存是有限的,因此需要虚拟内存管理来管理内存资源。虚拟内存管理将内存划分为不同的页面(Page)或帧(Frame),将虚拟地址和物理地址进行映射。当程序访问虚拟地址时,操作系统会使用页表将其映射到物理地址,然后在物理内存中读取或写入数据。页表的结构包括页表项(Page Table Entry,PTE)和页表目录(Page Directory),其中页表项存储虚拟地址和物理地址的映射关系,而页表目录则存储页表的地址。

页表的主要作用是将程序的虚拟地址与物理地址进行映射,从而实现虚拟内存管理。它可以提供内存空间的保护和共享机制,避免程序访问非法地址和互相干扰。此外,也可以通过调整页表,实现内存的动态分配和回收,提高内存的利用效率。

Page Pool

Page Pool(页池)是操作系统管理内存的一种机制,用于存储和管理系统中的页面,以供操作系统和应用程序使用。

在计算机内存管理中,内存被划分为多个页面或帧,每个页面的大小是固定的。当进程需要访问新的页面时,操作系统会从空闲页面中分配一个页面给该进程使用。这些页面组成了一个页面池(Page Pool),也称为“页面桶”或“页面池缓存”。

操作系统可以使用页面池来提高系统的性能和效率。由于操作系统和应用程序经常需要分配和释放页面,如果每次都需要从系统中申请新的内存空间,将会消耗大量的 CPU 时间和内存资源。使用页面池可以避免这种开销,因为池中的页面已经被分配了物理内存,可以直接进行分配和释放操作。

同时,页面池也可以保证内存分配的效率和处理器的稳定性。因为不同的进程需要分配的页面数量和大小是不一样的,使用页面池可以根据不同的程序需求调整所分配的页面数量和大小,以保证内存的分配效率和系统的稳定性。

Page Pool vs. Page Table

页池和页表都是操作系统中虚拟内存管理的重要机制,但是它们属于不同的处理阶段和层次。

页表是用于将虚拟地址映射到物理地址的结构。在操作系统执行进程时,会根据该进程的虚拟地址空间创建相应的页表,并根据需要进行动态调整,实现内存的保护和共享机制,确保进程之间的地址空间互相独立。

而页池则是在实际的内存分配和回收中使用的一种机制。页池作为一个缓存区域,不需要与具体的进程或线程进行绑定,而是为系统内存的各种需求预先分配一定数量的内存空间,以供需要时快速分配和回收。

页表和页池之间的关联在于,当操作系统需要分配页面时,可以先从页池中分配物理页面,然后将该页面映射到正在执行的进程的虚拟地址空间中,并更新该进程的页表,使得进程可以直接访问该页面。同样,在页面被回收时,操作系统可以通过页表将页面的映射关系删除并将页面归还到页池中,以实现内存的回收和再利用。因此,页表和页池是互相关联、相互支持的两种内存管理机制。

Nonpaged Pool

Non-paged Pool(非分页池)是 Windows 操作系统中的一种内存池,用于存储内核和设备驱动程序的一些关键数据结构,如进程、线程、锁、句柄和系统缓存等,这些数据在操作系统运行时不能被分页到磁盘上,因此需要保存在物理内存中。

与 Paged Pool(分页池)不同,非分页池不会被分页到磁盘上,它们需要一直占用物理内存以提供实时访问。因为访问非分页池是非常频繁的,所以在内存高度压缩的情况下,可能会导致可用内存不足的情况。为了避免这种情况,Windows 系统将非分页池的大小限制在一个相对较小的范围内,并提供了相应的算法来控制其大小。

在 Windows 操作系统中,非分页池是通过按需分配和释放内存页的方式来管理非分页池内存的。操作系统和设备驱动程序可以使用非分页池来存储一些关键数据结构,以及在系统运行期间为系统和硬件驱动程序分配和实时管理内存资源。因此,非分页池对于系统的稳定性和性能是至关重要的。

System PTE

System PTE(系统页表项)是 Windows 操作系统中的一种页表项类型,用于管理系统内核中的虚拟地址映射,通常被称为“系统页表”。

与用户级别的页表项(User PTE)不同,系统页表项是为操作系统及其内核驱动程序而设计的。它们用于将内核过程及其请求的虚拟地址空间映射到物理地址空间中,并实现虚拟内存管理和保护。因为内核代码是系统的核心组成部分,所以系统页表项对于操作系统的性能和稳定性有着至关重要的作用。

System PTE 的数量和大小是由操作系统根据系统内存的大小和配置进行优化的。它们在 Windows 操作系统中主要有两个作用:一是为操作系统内核提供虚拟地址空间和物理地址空间的映射,以便于内核代码的管理和执行;另一个作用是分配和管理内核级别的内存池、缓存和资源,如非分页池、系统缓存等。

需要注意的是,由于系统页表项是一种有限的资源,因此它们应该经过安全和合理使用。不当的使用会导致系统内存不足或导致内核模式代码崩溃,从而导致系统不稳定甚至崩溃。

Session Private

Session Private 是指在 Windows 操作系统中,特定的进程或应用程序执行时,它们会创建一个独立的 Session 私有空间(Session Private Space)。这个 Session 私有空间与当前的用户 Session 完全独立,只能被当前进程或应用程序访问和使用,其他进程和应用程序无法访问,从而保护了当前进程或应用程序的机密数据和敏感信息。

Session Private 空间通常用于保护应用程序的安全和隐私。在一个多用户的计算机系统中,多个用户可以同时登录进入不同的 Session,如果一个进程或应用程序不使用 Session Private 空间,它可能会被其他还在使用同一 Session 的用户或进程所干扰,泄露敏感信息或造成安全问题。在这种情况下,Session Private 使得不同的应用程序共存时成为可能,同时也能够提高了应用程序的安全性和稳定性。

需要注意的是,Session Private 空间只能由当前进程或应用程序访问,其他任何用户或进程都无法访问 Session Private 空间中的数据。另外,在 Windows 操作系统中,只有少数受信任的系统进程或服务才能够访问或修改 Session Private 空间,否则可能会引发系统安全问题。

Metafile

元文件是一种包含有关其他文件或数据的信息的文件。它通常描述了其他文件或数据应该如何被处理、排列或显示。元文件可以用于许多目的,包括描述图像、文件和软件程序。它们通常用于计算机图形和打印中,用于存储有关图像或文档的布局、外观和内容的信息。元文件旨在易于在不同的软件应用程序之间传输,并可用于帮助确保不同应用程序中文件的不同版本之间的一致性。

AWE

AWE是Address Windowing Extensions的简称,它是一项主要用于32位Windows操作系统的技术,允许应用程序在不使用物理内存的情况下访问更多内存。在32位系统中,每个应用程序只能访问4GB的内存空间,这包括物理内存和虚拟内存。但是,一些应用程序需要访问更多内存,比如大型数据库或图形处理程序。AWE技术通过将应用程序的虚拟内存映射到物理内存之外的地址空间,实现了对更多内存的访问。这样,应用程序可以访问超过4GB的内存,而不必增加物理内存。AWE技术在现代计算机中已经被淘汰,在64位系统中已经不再需要。

Driver Locked

如果内存出现“Driver Locked”问题,可能是由于硬件故障、驱动程序错误或操作系统错误等原因引起的。通常这是因为设备驱动程序尝试读取或写入内存的某个区域时,由于访问权限不足或其他问题导致无法完成其任务,因此被锁定。如果内存的驱动程序被锁定,可能会导致系统出现蓝屏错误、程序崩溃、死机等严重问题。要解决内存出现“Driver Locked”的问题,可以尝试使用Windows系统自带的内存诊断工具进行检测和修复,或者考虑升级内存驱动程序或操作系统补丁。如果还是无法解决问题,可能需要更换内存条或联系硬件厂商进行修理。

Kernel Stack

Kernel Stack(内核栈)是在操作系统内核中创建的一种数据结构,用于存储内核执行过程中的调用堆栈。操作系统内核是操作系统最基本的部分,负责管理系统资源、提供进程管理、协调进程间通信等核心功能,内核栈是内核执行过程中的重要组成部分。在调用内核函数或处理中断、异常等操作时,CPU需要在内核栈中为中断或异常的处理程序分配一些内存空间,并在其中保存当前进程的状态和现场(如程序计数器和寄存器内容)等信息。当中断或异常处理程序执行完毕后,CPU会恢复之前的状态,弹出当前堆栈内容并继续执行先前的操作。内核栈的大小通常是固定的,可以在系统初始化阶段设置。如果内核栈的大小不足,可能会导致栈溢出等问题,影响系统稳定性和可靠性。

Large Page

大页面(Large Page)是一种提高内存访问性能的技术,用于处理大量连续内存的需求。在标准的内存管理中,内存以4KB页面的形式组织,使用大量的虚拟地址映射到物理内存。在一些高性能应用程序中,这种标准页面大小可能不够,因此可以使用大页面技术。大页面是一种更大的页面大小,通常为2MB到1GB,可以更有效地管理大块连续内存。使用大页面可以减少CPU在切换虚拟地址映射时的开销,并且可以更有效地利用CPU缓存,从而提高内存访问的速度和效率。大页面通常需要在操作系统内核中启用,并且在系统中使用前需要进行适当的配置和测试,以确保系统的稳定性和可靠性。

内存池

内存池在Windows操作系统中通常分为两类:分页池(Paged Pool)和非分页池(Non-Paged Pool)。

分页池是用于存储较小的、不连续的内存分配,使用虚拟内存机制进行管理的一种内存池。它主要用于存储操作系统和驱动程序等内核模式进程所需的内存数据结构和数据,可以被交换到硬盘上,以便在需要时重新加载。但是,由于分页池中的数据需要进行分页机制的管理,因此访问速度较慢。

非分页池是另一种内存池,存储内核模式进程永久需要使用的内存数据结构,如内核对象、系统内核栈等。与分页池不同,非分页池中的数据始终在物理内存中,不会被交换到硬盘上。由于非分页池访问速度较快,因此适用于需要频繁访问的数据结构。

两者都是用于存储操作系统和驱动程序等内核模式进程所需的内存数据结构和数据的内存池,但两者的实现和管理机制不同,因此具有不同的特点和适用场景。

分页池

分页池(Paged Pool)是Windows操作系统内存管理中的一个数据结构,用于存储操作系统和驱动程序所需的较小的、不连续的内存分配。它是虚拟内存机制的一部分,是操作系统为满足内核模式进程分配内存而使用的一种可分页的内存。分页池与非分页池(Non-Paged Pool)不同,非分页池用于存储内核模式进程永久需要使用的内存数据结构,如内核对象和系统内核栈等。分页池和非分页池合在一起构成了Windows操作系统全局内存池。

分布结构

分页池存在于物理内存中和虚拟内存中。在Windows操作系统中,内存是以物理内存和虚拟内存两种形式存在的。分页池、非分页池等内存池在物理内存中通过物理内存页来实现。而操作系统会为每个进程分配独立的虚拟地址空间,虚拟地址空间在物理内存和硬盘上之间进行交换,虚拟内存则是通过内存分页技术实现的。在这种情况下,操作系统可以将物理内存中的某些数据暂时存储到硬盘上,从而可以在需要时,再将这些数据加载回物理内存中,这种机制被称为分页。所以,在分页池这种数据结构中,部分数据是存在于物理内存中,但也有部分数据存在于虚拟内存中。

非分页池

非分页池(Non-Paged Pool)是Windows操作系统中的一个数据结构,用于存储操作系统和驱动程序等较小的内核模式进程所需的内存数据。与分页池不同,非分页池是不会被换出到虚拟内存进行分页的,因为这种数据结构中的数据需要在内核模式下始终处于内存中,如果被换出到磁盘上,将导致系统宕机或出现严重的不可预测问题。

非分页池通常用于存储内核对象、系统内核栈、设备驱动程序中使用的缓冲区等,这些数据需要能够快速访问,并且需要在操作系统运行时始终存在于内存中。非分页池的大小在系统启动时被分配,在运行时也可以动态地进行调整,以适应系统的需求。不过,由于非分页池的大小是有限制的,当非分页池中的空间使用过度时,系统可能会出现内存不足的问题,从而导致系统崩溃或出现其他严重问题。

与非分页缓冲池的区别

相同点: 两者都是用来管理计算机资源的,都是为了提高内存管理的效率。

区别点:

  1. 非分页缓冲池(Nonpaged Pool)是操作系统内存管理中的一个内存池,主要用于存放一些不能被交换到磁盘上的内核数据结构,如驱动程序使用的设备对象、I/O 请求包、诊断数据等。而非分页池(Nonpaged Memory)是系统内存中的一块内存空间,主要存放一些不能够被分页的内存区域。
  2. 非分页缓冲池和非分页池的优先级不同。非分页缓冲池的优先级要高一些,因为它存放的数据通常是用于处理硬件设备的请求的数据,需要保证它们能够快速地被访问到。而非分页池的优先级相对较低,因为它存放的数据通常是由普通的应用程序所分配的内存。
  3. 非分页缓冲池的大小是在系统启动时被动态分配的,而非分页池的大小是在系统安装时根据硬件配置预先分配的。这也就意味着非分页缓冲池的大小是可以调整的,而非分页池的大小则是固定的。

总的来说,非分页缓冲池和非分页池都是内存管理的重要概念,它们在具体的实现和用途上有所不同。

分页文件

分页文件是计算机操作系统中的一种虚拟内存技术,用于在物理内存不足时,将内存中一部分页面转移到磁盘上的专门分配的文件中,从而实现扩展内存空间的目的。

当系统需要将某一个页面从内存中释放出来时,它会首先检查这个页面是否被修改过,如果被修改过,就需要将它写入分页文件中,以便在将来重新需要时能够重新读入内存。

分页文件是以固定大小的逻辑块来进行存储的,称为“页面”或“页”。这些页面的大小通常与物理内存中的页面大小一样,并且通常是连续的。当系统需要将某个页面从内存中释放出来时,它将页面中的内容写入分页文件中,并释放该页面的内存空间,从而为将来所需的页面腾出空间。

尽管分页文件增加了系统的内存使用效率,但在使用过程中还是需要注意分页文件的大小和分配位置,避免分页文件过大或分配在低速磁盘上,这会影响系统性能。

句柄

在计算机操作系统中,句柄(handle)是指一个代表系统资源(如窗口、文件、设备等)的标识符,它可以用来标识和访问该资源。在不同的操作系统中,句柄的实现形式不同。在Windows操作系统中,句柄是32位的整数,它存储在进程的私有地址空间中,用于指向内核对象的指针。

句柄是一种封装性很强的数据类型,通常是由操作系统分配。

句柄的主要作用是使程序可以通过句柄标识符来引用系统资源,而无需了解这些资源的具体细节。例如,当程序需要访问一个打开的文件时,它可以使用句柄来引用该文件,而不必关心文件的物理位置、大小和存储方式等细节。

此外,句柄还可以用于实现某些高级特性,如GUI窗口和UI控件间的交互。程序可以将窗口句柄传递给操作系统,以便系统实现不同的窗口操作,如最小化、恢复、关闭等。

总之,句柄是操作系统中最重要的概念之一,它为程序员提供了一种简便的方式来处理系统资源,也是各种Windows API函数的重要参数之一。