【操作系统】第四章:非连续内存分配(Part1:基于分页-分段的物理/逻辑地址转换)

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: 【操作系统】第四章:非连续内存分配(Part1:基于分页-分段的物理/逻辑地址转换)

目录


  • 非连续内存的管理方式
  • 分段机制
  • 分页机制
  • 页帧Frame
  • 页Page


正文


非连续内存的管理方式


引言:连续内存分配的缺点:

1.分配给一个程序的物理地址是连续的

2.内存利用率低

3.有内碎片、外碎片问题

且不论何种适配方式,都不能完全杜绝碎片问题

引入非连续内存分配方法

0dabc39418f7ef2293426d225f18ce0c_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

非连续内存分配方法:解决碎片问题,同时令运行的程序能够有效地隔离和内存资源管理,还可以支持共享数据和代码,类似共享库。

潜在问题:管理开销本身

如何建立虚拟地址和物理地址之间的转化(软件方案/硬件方案)

软件方案:开销非常大

硬件方案:开销相对小,这里主要介绍分段分页机制


分段机制


784399c37c619b19401f119aa872f63e_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

不同段之间有不同的属性,我们需要一个方法有效隔离这些不同的断的话,则有助于我们更好地去管理地址空间。

15c3461280a46ff18398a4eba6ad4991_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

从应用程序的编写和运行来说, 他虚拟的逻辑地址空间是一个连续的地址空间。但是虽连续,通过分段后也可以有效的隔离开来。如图所示,可以把不同的数据、库、代码段等相应的分离出来。放在某一个特定的地址用一个特定的管理权限管理起来。分离出来后,可以相互共享或访问;也可以令一些数据相对隔离,部分只读部分读写。有效地进行管理分配,有效地实现保护机制。

左边是连续的虚拟地址,右边是不连续的物理地址,那么中间就需要一个映射机制来确定相互间的联系。

645a6d8456eb1ccc5c869c4b74945380_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

我们把执行程序运行的逻辑地址空间看作一个连续的一维线性数组,通过映射关系,将不同的内存块(数据、代码、堆、栈等)分别映射到不同的内存的段中。映射之后,他们大小不同,位置不同。这之间的关系就是通过段管理机制实现的。这种机制也可以用软件实现,但是开销会非常大,所以我们尽可能想要用硬件支持。

这里就需要怎么通过硬件机制来支持分段的寻址。

5242e88341e9cce81f92cddbc46ccd4e_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

d9d2fdd62172706bd1352f29910f950a_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

一个一维的逻辑地址其实是不同的段组成的,这个段可以不连续。那么首先,一维地址分成两块,一块是段的寻址和段内的偏移寻址。s和addr放在一起,就形成了以段机制来管理的寻址方式。如果段号s和addr是分开的,那么是段寄存器+地址寄存器实现方式,x86是典例。另一种是把段和段内偏移合在一起形成一个完整地址,没有段寄存器来把段的编号单独管理起来,这是单一地址管理方式。

9d8da45adeabda8d611dc291a9cd2ba8_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

从一维线性逻辑地址空间映射到不同的物理空间去,而这个物理空间是由不同的段组成的。

详细过程:

程序通过CPU执行某条指令。CPU就需要去寻址(找数据、代码在什么地方),那么OS会把这个逻辑地址分成两块(段号/段内偏移),通过段号希望找到所在物理内存的起始地址;段表会存着逻辑地址和物理地址之间的映射关系,又因为每一个段的大小不同,所以段表也会存这些信息,也就说段表会放段的起始地址和段的长度限制这两种信息。段表的索引就是段号,段号决定了在段表中的每一项的位置。有了这些信息,CPU就会通过段表找到对应的段在物理内存中的起始地址。然后CPU会去做一个比对,大小是否满足限制,满足则合法,否则将因非法访问异常,OS将处理。

寻址之前,段表就由OS建立了。

收费员公司法.gif


分页机制


分页和分段类似,也有页号,页内偏移;区别在于,段的尺寸是可变的,而页的大小是固定不变的。

划分物理内存至固定大小的帧,大小是2的幂。逻辑的页和物理的页都是一样的,物理的页帧是8K那么逻辑的页帧也是8K。Frame(帧)代表的是物理页,Page(页)代表的是逻辑页。OS需要建立的是逻辑页地址和物理页地址的映射关系。其中用到的有快表(TLB)和内存管理单元(MMU)。


页帧Frame


2b1c4d545698b5324e098f9ebcabefbe_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

image.png

例题:

5640a8ac96e39062e7f007c7aa648a2b_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png


页Page


一个程序的逻辑空间被划分为大小相等的页。区别于页帧Frame,页号和帧号可能不同,但是页内偏移和帧内偏移是相等的。

935878c24ef80fe3b026ded4f0b5cf4b_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

image.png

b98c07473cbfd195203c69fbe4b8e9bf_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

dd830f405f9a3e5f4cbba02296171635_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png


程序运行,CPU(因执行指令或者访问数据)寻址,地址是一个逻辑地址,这个地址分为了p和o,然后将页号p作为索引index去查页表,页表存的是以页号为索引的对应项的帧号(frame number)。这个过程还需要页表基址(逻辑地址从哪开始)。有了这两个信息,就可以查到对应的帧号。我们可以通过页号查到帧号,帧号再加上偏移量,就是物理地址。

页表也是操作系统在操作系统初始化,在使能enable阶段建立好的。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
6月前
|
算法 程序员
深入理解操作系统内存管理:分页系统的优势与挑战
【4月更文挑战第7天】 在现代操作系统中,内存管理是一项至关重要的任务,它确保了计算机能够高效、安全地运行各种程序。分页系统作为内存管理的一种技术,通过将物理内存分割成固定大小的单元——页面,为每个运行的程序提供了一种独立且连续的内存地址空间。该技术不仅简化了内存分配,还允许更高效的内存使用和保护。本文探讨了分页系统的核心原理,优势以及面临的挑战,旨在为读者揭示其在操作系统设计中的重要性。
|
存储 缓存 算法
【OSTEP】分页: 快速地址转换(TLB) | TLB命中处理 | ASID 与页共享 | TLB替换策略: LRU策略与随机策略 | Culler定律
【OSTEP】分页: 快速地址转换(TLB) | TLB命中处理 | ASID 与页共享 | TLB替换策略: LRU策略与随机策略 | Culler定律
244 0
|
6月前
|
缓存 算法 安全
深入理解操作系统内存管理:分页系统的优势与挑战
【5月更文挑战第31天】 在现代操作系统中,内存管理是核心功能之一。分页系统作为内存管理的一种流行技术,其设计哲学基于时间和空间的局部性原理,旨在提高内存利用率和系统性能。本文将探讨分页系统的关键优势及其面临的挑战,包括页面置换算法、内存碎片问题以及虚拟到物理地址转换的复杂性。通过对分页机制的深入分析,我们揭示了它在多任务处理环境中如何允许多个进程共享主存资源,并保证了操作系统的稳定性与高效性。
|
6月前
|
算法 内存技术
深入理解操作系统内存管理:从虚拟内存到物理内存的旅程
【5月更文挑战第24天】 在现代计算机系统中,操作系统的内存管理是确保系统高效稳定运行的关键组成部分。本文将探讨操作系统是如何通过虚拟内存到物理内存的映射机制,实现对内存资源的高效管理和保护。我们将剖析分页和分段两种主要的内存管理技术,并讨论它们如何协同工作以提供内存抽象、重定位、共享和保护。文章还将涉及虚拟内存的技术细节,包括页面置换算法和内存分配策略,以及它们对系统性能的影响。
|
6月前
|
存储 缓存 算法
深入理解操作系统内存管理:从虚拟内存到物理内存
【5月更文挑战第30天】操作系统的心脏——内存管理,在系统性能和稳定性中扮演着关键角色。本文将深入探讨操作系统中的内存管理机制,特别是虚拟内存与物理内存之间的映射关系、分页机制以及内存分配策略。通过分析现代操作系统如何处理内存资源,我们可以更好地理解计算机系统的内部工作原理,并掌握提升系统性能的关键因素。
|
6月前
|
缓存 算法
深入理解操作系统内存管理:分页系统的优势与挑战
【5月更文挑战第28天】 在现代操作系统中,内存管理是一项至关重要的功能,它不仅确保了系统的稳定运行,还提升了资源的利用效率。本文将探讨分页系统这一核心概念,并分析其在内存管理中的优势和面临的挑战。通过剖析分页机制的工作原理及其对虚拟内存实现的重要性,我们进一步阐述了它在多任务处理和内存保护方面的作用。同时,文章也将讨论分页带来的性能开销、页面置换算法的设计以及它们如何影响系统的整体性能。
|
6月前
|
存储 缓存 算法
深入理解操作系统内存管理:分页系统的优势与挑战构建高效Android应用:探究Kotlin协程的优势与实践
【5月更文挑战第27天】 在现代计算机系统中,内存管理是操作系统的核心功能之一。分页系统作为一种内存管理技术,通过将物理内存划分为固定大小的单元——页面,为每个运行的程序提供独立的虚拟地址空间。这种机制不仅提高了内存的使用效率,还为多任务环境提供了必要的隔离性。然而,分页系统的实现也带来了一系列的挑战,包括页面置换算法的选择、内存抖动问题以及TLB(Translation Lookaside Buffer)的管理等。本文旨在探讨分页系统的原理、优势及其面临的挑战,并通过分析现有解决方案,提出可能的改进措施。
|
6月前
|
安全 Linux Windows
深入理解操作系统内存管理:分页与分段的融合
【4月更文挑战第30天】 在现代操作系统中,内存管理是确保多任务环境稳定运行的关键。本文将深入探讨分页和分段两种内存管理技术,并分析它们如何相互融合以提供更为高效、安全的内存使用策略。通过对比这两种技术的优缺点,我们将探索现代操作系统中它们的综合应用,以及这种融合对操作系统设计和性能的影响。
|
6月前
|
存储 算法 内存技术
深入理解操作系统内存管理:从虚拟内存到物理内存的映射
【4月更文挑战第30天】 在现代操作系统中,内存管理是一个复杂而关键的功能。它不仅确保了系统资源的有效利用,还为每个运行的程序提供了独立的地址空间,保障了程序之间的隔离性和安全性。本文将探讨操作系统如何通过分页机制和虚拟内存技术实现内存的抽象化,以及这些技术是如何影响应用程序性能的。我们将详细解析虚拟地址到物理地址的转换过程,并讨论操作系统在此过程中扮演的角色。文章的目的是为读者提供一个清晰的框架,以便更好地理解内存管理的工作原理及其对系统稳定性和效率的影响。
|
6月前
|
人工智能 缓存 算法
深入理解操作系统内存管理:从虚拟内存到物理内存的映射
【4月更文挑战第8天】 在现代操作系统中,内存管理是核心功能之一,它负责协调和管理计算机的内存资源,确保系统稳定高效地运行。本文深入探讨了操作系统内存管理的关键概念——虚拟内存和物理内存的映射机制。通过剖析分页系统、分段机制和虚拟内存地址转换过程,文章旨在为读者提供一个清晰的理解框架,同时讨论了内存管理的优化技术及其对系统性能的影响。此外,还简要介绍了内存碎片问题以及垃圾回收机制的重要性,并展望了未来内存管理技术的发展趋势。