十年JAVA搬砖路——操作系统内存管理

计算机内存管理概念

计算机内存管理是指操作系统对计算机系统中的内存资源进行分配、使用和释放的管理过程。内存是计算机系统中用于存储程序和数据的重要资源,内存管理的目标是最大化内存的利用率,提高系统的性能和效率。
内存管理包括:
1. 内存分配:内存管理负责将可用的内存空间分配给进程或应用程序。它会跟踪哪些内存块是空闲的,哪些是已分配的,并根据需求进行分配。常见的内存分配算法包括首次适应、最佳适应和最坏适应等。
2. 内存映射:内存管理将进程的虚拟地址空间映射到物理内存中的实际地址。这样,每个进程都可以独立地访问自己的内存空间,而不会干扰其他进程的内存。
3. 内存保护:内存管理通过设置访问权限、地址空间隔离等机制,保护进程的内存不被其他进程非法访问或篡改。这样可以确保系统的安全性和稳定性。
4. 内存回收:当进程终止或不再需要分配的内存时,内存管理负责回收这些内存空间,并将其标记为空闲状态,以便后续的内存分配使用。

物理地址逻辑地址概念

物理地址是指计算机系统中实际的内存地址,它对应着计算机硬件中的存储单元。物理地址是由硬件直接管理和使用的,操作系统无法直接访问或控制物理地址。 因为物理地址是由硬件中的内存管理单元(MMU)内存控制器负责处理和管理的。
MMU是一种硬件组件,位于计算机的中央处理器(CPU)和物理内存之间。它负责将逻辑地址(由操作系统和应用程序使用)转换为对应的物理地址,并进行内存访问的控制。
当CPU发出一个内存访问请求时,MMU会根据逻辑地址和页表(或段表)中的映射关系,将逻辑地址转换为物理地址。然后,MMU将物理地址传递给内存控制器,以进行实际的内存访问。
内存控制器是负责与物理内存模块进行通信的硬件组件。它根据物理地址来选择要读取或写入的内存位置,并处理与内存传输相关的细节,如数据的读取和写入、数据的缓存等。
因此,物理地址是由硬件中的MMU和内存控制器直接控制和访问的,操作系统通过与硬件的协作来管理和使用物理地址空间。

逻辑地址空间是指一个进程或程序所使用的虚拟内存地址空间。逻辑地址是相对于进程而言的,它是程序在运行时使用的地址。逻辑地址空间由操作系统分配给每个进程,并在运行时将其映射到物理地址空间上的实际物理内存。

操作系统通过内存管理单元(MMU)来实现逻辑地址到物理地址的映射。MMU负责将进程的逻辑地址转换为对应的物理地址。这种映射可以通过页表、段表等数据结构来实现,这些数据结构记录了逻辑地址与物理地址之间的对应关系。

逻辑地址空间可以比实际的物理内存空间大得多,这是通过虚拟内存技术实现的。虚拟内存技术允许操作系统将部分进程的数据和代码存储在磁盘上,只有在需要时才将其加载到物理内存中。这样可以提供更大的地址空间,使得系统可以同时运行更多的进程,并且可以更好地管理内存资源。
内存重定位,内存保护概念

重定位(Relocation)是指在程序执行或加载时,将程序中使用的地址从相对地址(如偏移量)转换为实际的物理地址的过程。在计算机系统中,程序通常会使用相对地址来引用内存中的数据或指令。重定位机制通过计算相对地址和基地址的和,将其转换为实际的物理地址,以便程序能够正确地访问内存中的数据和指令。

内存保护(Memory Protection)是指通过硬件和操作系统的机制,保护进程的内存不被非法访问或篡改。内存保护可以分为以下几个方面:

  1. 访问权限:操作系统可以为每个进程或内存区域设置访问权限,例如只读、读写或执行权限。这样可以限制进程对内存的访问,防止非法操作。

  2. 地址空间隔离:每个进程都有自己独立的虚拟地址空间,使得每个进程只能访问自己的内存,而不能访问其他进程的内存。这种隔离保护了进程之间的数据和代码的安全性。

  3. 异常处理:操作系统可以检测并处理访问非法内存或越界访问等异常情况。当发生内存访问错误时,操作系统可以终止进程或采取适当的措施,以保护系统的稳定性和安全性。

通过重定位和内存保护机制,操作系统可以确保程序能够正确地访问内存,并保护内存免受非法访问和损坏。这对于系统的正常运行和应用程序的执行至关重要。

**

内存管理的分区管理

**
内存管理的分区管理是指将计算机内存划分为不同的区域,每个区域用于存储不同的程序或数据。这种划分可以提高内存的利用率和管理效率。
内存管理主流的分区管理方法包括:

  1. 固定分区:在这种方法中,将内存划分为固定大小的分区或区域。每个分区分配给特定的进程或程序。这是一种简单高效的方法,但如果分区大小大于所需内存,则可能导致内部碎片。

  2. 可变分区:与固定分区不同,可变分区允许根据程序或进程的大小动态分配内存。内存被划分为可变大小的分区,每个分区根据需要分配给进程。这种方法减少了内部碎片,但可能导致外部碎片。

  3. 动态分区:动态分区是可变分区的扩展。它允许在运行时将内存划分为可变大小的分区。当进程请求内存时,操作系统会搜索合适的空闲分区并将其分配给进程。这种方法有助于优化内存利用,但需要更复杂的内存管理算法。

  4. 伙伴系统:伙伴系统是一种内存分配技术,使用二叉树数据结构将内存划分为固定大小的块。每个块的大小都是2的幂次方。当进程请求内存时,系统找到能够容纳请求大小的最小可用块。如果块比所需大小大,则将其拆分为两个相等大小的伙伴块。这种方法减少了外部碎片,但可能导致内部碎片。

交换技术是一种在内存不足时将部分程序或数据从内存交换到磁盘或其他外部存储介质的方法。通过交换技术,可以释放内存空间以供其他程序使用,同时保留了被交换出的程序或数据的状态,以便在需要时可以重新加载到内存中。

覆盖技术是一种在内存有限的情况下,将程序或数据分成若干个模块或段,并在需要时将不同的模块或段加载到内存中的方法。通过覆盖技术,可以有效地利用有限的内存空间,提高内存的利用率。每个小块都会被覆盖。覆盖技术的应用相对较少,更多地使用了分页和分段等更高级的内存管理技术。

分段管理的方式:

内存的分段式管理是一种内存管理技术,它将程序的逻辑结构分成多个逻辑段,并为每个段分配独立的内存空间。每个段代表程序中的一个逻辑单元,如代码段、数据段、堆段和栈段等。

在分段式管理中,每个段都有自己的起始地址和长度。这些段可以根据程序的需求进行动态分配和释放。每个段的大小可以根据程序的要求而不同,因此可以更好地适应不同类型的程序。

分段式管理相对于传统的固定分区管理和可变分区管理,提供了更灵活的内存分配方式。它允许程序根据需要分配和释放内存段,而不需要整个程序都在内存中。这样可以提高内存利用率并支持更大的程序。

然而,分段式管理也引入了一些挑战。其中之一是外部碎片化,当多个段被分配和释放时,可能会留下不连续的空闲内存块。这可能导致内存的碎片化,从而降低内存的利用效率。

为了解决外部碎片化的问题,通常会采用分页和段页式管理等更高级的内存管理技术。这些技术结合了分段和分页的优点,提供了更好的内存管理和利用效率。

分页管理方式:

内存的分页管理是一种内存管理技术,其中将物理内存和逻辑内存划分为固定大小的页面。每个页面具有相同的大小,并按顺序编号。

在分页管理中,程序的逻辑地址空间被划分为逻辑页面,而物理内存被划分为物理页面。逻辑页面和物理页面之间通过页表进行映射。页表是一种数据结构,用于记录逻辑页面与物理页面之间的对应关系。

当程序访问逻辑地址时,操作系统将逻辑页面的页表项转换为对应的物理页面的物理地址。这种转换过程称为地址翻译或页表查找。通过分页管理,程序可以使用连续的逻辑地址空间,而无需关心物理内存的实际布局。

分页管理有助于提高内存的利用率和灵活性。它允许多个程序共享物理内存,并且可以动态地分配和回收页面。此外,分页管理还提供了一种虚拟内存的抽象层,使得程序可以访问比物理内存更大的逻辑地址空间。

然而,分页管理也会引入一些开销,如页表的维护和地址翻译的时间开销。为了优化分页管理的性能,可以使用高级的页表结构、缓存机制和页面置换算法等技术。这些技术可以减少页表查找的时间,并提高内存访问的效率。

**

段页式管理方式:

**
段页式管理是一种将内存管理的分段和分页两种技术结合起来的内存管理方式。它将程序的逻辑地址空间划分为多个段,而每个段又被划分为多个固定大小的页。通过段页式管理,可以同时享受分段管理和分页管理的优势。

在段页式管理中,程序的逻辑地址由两个部分组成:段号和页号。通过段号可以找到对应的段表项,然后通过页号找到对应的页表项。最终,通过段表项和页表项的组合,可以将逻辑地址转换为物理地址。

段页式管理的主要优点是可以提供更灵活的内存分配和更高的内存利用率。它可以根据程序的需求,动态地分配和释放段和页,从而适应不同大小的程序和数据结构。此外,段页式管理还可以提供更好的内存保护和安全性,通过设置不同的权限位,可以控制对不同段和页的访问权限。

尽管段页式管理具有许多优点,但它也增加了内存管理的复杂性和开销。需要维护段表和页表,并进行段页的地址转换。因此,在实际应用中,段页式管理主要用于大型操作系统和需要更高级的内存管理功能的场景,而不是普遍使用的内存管理方式。

个人笔记本电脑通常使用的是分页式内存管理。分页式内存管理将内存划分为固定大小的页,而不是按照程序的逻辑结构划分为段。每个页的大小通常是4KB或更大。当程序需要访问内存时,操作系统将逻辑地址转换为物理地址,并将所需的页面加载到物理内存中。

分页式内存管理的优点是简单且高效。它允许操作系统以页面为单位进行内存的分配和回收,提供了更好的内存利用率和灵活性。此外,分页式内存管理还提供了虚拟内存的支持,允许每个进程拥有独立的虚拟地址空间。

需要注意的是,个人笔记本电脑可能还会使用其他内存管理技术,如虚拟内存管理和内存缓存等。这些技术可以进一步提高内存的利用率和性能。具体使用的内存管理方式可能会因操作系统和硬件的不同而有所差异

虚拟内存的基本概念

虚拟内存是计算机操作系统中的一种技术,它将计算机的物理内存和磁盘空间结合起来,为每个运行的程序提供一个虚
拟的内存空间。 虚拟内存的概念允许操作系统将部分程序的内存暂时存储在磁盘上,而不是全部加载到物理内存中。这样可以有效地扩展可用的内存空间,使得计算机可以同时运行更多的程序

虚拟内存的局部性原理是指在程序访问内存时,存在着时间局部性和空间局部性的特点,即程序倾向于访问最近使用过的内存位置或附近的内存位置。

  1. 时间局部性(Temporal Locality):该原理表明,如果程序访问了某个内存位置,那么在不久的将来,它很可能再次访问相同的内存位置。这是因为程序往往以循环或迭代的方式执行,会重复访问同一块内存区域。

  2. 空间局部性(Spatial Locality):该原理表明,如果程序访问了某个内存位置,那么它很可能会在接下来的一段时间内访问附近的内存位置。这是因为程序的数据通常以连续的方式存储在内存中,而且程序往往会以块的方式处理数据。

虚拟内存的局部性原理对系统性能有重要影响,因为它允许操作系统在内存管理中采取一些优化措施,例如:

  1. 缓存:操作系统可以利用缓存机制,将最近使用的内存数据存储在高速缓存中,以便更快地访问。

  2. 页面置换:当物理内存不足时,操作系统可以根据局部性原理选择将一些不常访问的内存页面置换到磁盘上,从而为更常访问的页面腾出空间。

  3. 预取(Prefetching):操作系统可以根据程序的访存模式,提前将可能需要的数据加载到内存中,以减少访问延迟。

理解虚拟内存的局部性原理有助于优化内存管理策略,提高系统的性能和资源利用率。

缺页中断

缺页中断(Page Fault)是指在虚拟内存系统中,当程序访问的页面(Page)不在物理内存中时,会触发一个中断,称为缺页中断。

当程序访问一个虚拟内存地址时,操作系统会首先检查该地址对应的页面是否已经加载到物理内存中。如果页面已经在物理内存中,则称为页面命中(Page Hit),程序可以直接访问该页面。但如果页面不在物理内存中,则称为页面缺失(Page Fault)。

当发生页面缺失时,操作系统会执行以下步骤:
1. 保存当前程序的上下文信息,包括寄存器状态和程序计数器等。
2. 查找磁盘上存储的该页面的数据。
3. 将页面从磁盘加载到物理内存中的一个空闲页面框(Page Frame)中。
4. 更新页表(Page Table)中对应虚拟内存地址的映射关系。
5. 恢复程序的上下文信息,并重新执行被中断的指令。

通过缺页中断机制,操作系统可以将虚拟内存中的页面按需加载到物理内存中,从而实现了更大的内存空间和更高的运行效率。当发生页面缺失时,可能会引起一定的延迟,因为需要从磁盘加载页面数据。但通过合理的页面置换算法和预取机制,可以尽量减少页面缺失的次数,提高系统性能。

地址变换过程

虚拟内存的地址变换过程可以通过以下步骤来描述:

  1. 程序访问虚拟内存地址:当程序访问虚拟内存地址时,它会使用虚拟地址来寻址所需的数据或指令。

  2. 虚拟地址到物理地址的映射:操作系统中的内存管理单元(Memory Management Unit,MMU)负责将虚拟地址转换为物理地址。它使用页表(Page Table)来进行地址映射。

  3. 页表查找:MMU根据虚拟地址中的页号部分,在页表中查找对应的页表项(Page Table Entry)。

  4. 检查有效位(Valid Bit):在页表项中,有一个有效位用于指示该页是否在物理内存中。如果有效位为有效(valid),则表示该页在物理内存中,可以直接访问。如果有效位为无效(invalid),则表示该页不在物理内存中,需要进行页面调度(Page Replacement)。

  5. 缺页中断处理:如果页表项的有效位为无效,表示发生了缺页中断(Page Fault)。操作系统会处理该中断,将缺失的页面从磁盘加载到物理内存中,并更新页表项的有效位和物理地址。

  6. 物理地址生成:一旦页表查找成功,MMU会使用页表项中的物理页号和虚拟地址的页内偏移量来生成最终的物理地址。

  7. 访问物理内存:使用生成的物理地址,CPU可以直接访问物理内存中的数据或指令。

通过地址变换过程,虚拟内存系统可以将程序使用的虚拟地址转换为物理地址,实现对内存的透明访问和管理。这种地址映射机制使得虚拟内存可以提供更大的内存空间,同时允许多个程序同时运行,并提供了更好的内存隔离和保护机制。

猜你喜欢

转载自blog.csdn.net/weixin_43485737/article/details/132607363
今日推荐