【愚公系列】软考高级-架构设计师 019-存储管理(快表、段式存储、段页存储)

举报
愚公搬代码 发表于 2024/06/30 09:34:41 2024/06/30
【摘要】 🏆 作者简介,愚公搬代码🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主...

🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏

🚀前言

存储管理是操作系统中一个非常关键的组成部分,涉及到数据的存储、检索和管理。操作系统需要有效地管理不同类型的存储资源,包括主存(RAM)、辅助存储(如硬盘驱动器和固态硬盘)以及在某些情况下的网络存储。这一过程确保系统的高效运行和资源的最优利用。

主要目标和功能

存储管理的主要目标包括:

  1. 抽象化:为程序员提供简单且一致的视图来隐藏底层的硬件复杂性。
  2. 保护:确保一个进程的数据不会被其他进程非法访问。
  3. 共享:允许多个进程安全地共享存储资源。
  4. 虚拟化:提供比物理内存更大的地址空间,允许程序使用比实际可用内存更多的存储空间。
  5. 持久性:确保数据在电源关闭后仍然存在。

存储管理的主要技术

存储管理使用多种技术来实现其目标,包括:

  1. 内存管理

    • 连续内存分配:早期操作系统使用,如固定分区、可变分区。
    • 分页(Paging):将内存分割为固定大小的页,内存管理单元(MMU)将虚拟地址转换为物理地址。
    • 分段(Segmentation):将程序的不同部分分割为逻辑上的段,每个段都可以独立地被放置和保护。
  2. 虚拟内存

    • 通过使用磁盘作为额外的存储空间来扩展物理内存。
    • 使用页面置换算法,如最近最少使用(LRU)、先进先出(FIFO)等,来管理哪些数据应保留在内存中,哪些应被移至磁盘。
  3. 辅助存储管理

    • 管理硬盘和其他非易失性存储设备的数据。
    • 包括格式化、分区、文件系统实现等。
  4. 文件系统

    • 提供一个组织存储数据的方法,包括文件的创建、删除、读取和写入。
    • 实现文件的安全和保护,确保文件系统的完整性和可靠性。

实例:内存管理

考虑一个简单的分页系统,操作系统将程序的虚拟内存分成多个页面,这些页面可以独立地加载到物理内存的任何可用页面帧中。虚拟内存使得每个程序都认为自己在使用一个连续的内存块,而实际上它的各个部分可能散布在物理内存的不同位置。这种方法简化了内存管理,提高了内存的利用率,并允许使用更多的虚拟内存空间。

存储管理是确保操作系统稳定、高效运行的关键。随着技术的发展,存储管理的方法和技术也在不断进步,例如,现代系统中广泛使用的固态驱动器(SSD)提供了比传统硬盘更快的数据访问速度,这对存储管理策略产生了重大影响。操作系统必须不断地更新其存储管理技术,以充分利用这些新硬件的潜力。

🚀一、快表

快表是一块小容量的相联存储器,由快速存储器组成,按内容访问,速度快,并且可以从硬件上保证按内容并行查找,一般用来存放当前访问最频繁的少数活动页面的页号(可以看成是页表的频繁访问数据的副本)。

快表是将页表存于Cache中
慢表是将页表存于内存中

因此慢表需要访问两次内存才能取出数据,而快表是访问一次Cache和一次内存,因此更快。

在这里插入图片描述

🔎1.快表(TLB)

快表,或称为转址旁路缓冲器(Translation Lookaside Buffer, TLB),是一种特殊的缓存,用于加速虚拟地址到物理地址的转换过程。在分页内存管理系统中,虚拟地址通常需要通过访问页表来转换成物理地址。页表可能非常大,通常存放在内存中,因此每次地址转换可能都需要访问内存,这会显著降低系统的效率。

快表作为页表的一个小型缓存副本,存放在CPU中,可以快速地进行地址转换,因为它仅存放最近或最频繁访问的页表项。当进行地址转换时,CPU首先检查快表:

  • 如果在快表中找到对应项(快表命中),则直接使用快表中的信息进行地址转换,不需要访问内存。
  • 如果未找到(快表未命中),则需要访问内存中的页表(慢表),将结果放入快表中,这个过程可能涉及到替换已有的快表项。

🔎2.慢表

慢表即存放在内存中的页表。由于内存的访问速度虽然比硬盘快很多,但与CPU速度相比仍然较慢,因此直接从内存中访问页表会较慢。在快表未命中的情况下,CPU必须访问这个慢表来获取所需的页表项,然后进行地址转换。

🔎3.访问过程

  1. 使用快表:首先查找TLB,如果找到(命中),直接进行地址转换,这是最快的路径。
  2. 访问慢表:如果TLB未命中,那么CPU需要访问内存中的页表来查找所需的映射,然后更新TLB,这需要更多时间因为涉及到两次内存访问(一次查页表,一次访问数据)。

🔎4.性能优化

使用快表的目的是减少访问内存的次数,因为即使是现代的内存访问也比缓存慢得多。快表能显著提高系统的性能,特别是在内存访问模式呈现局部性特征时(即程序倾向于重复访问相同的数据或相近的存储位置)。这使得TLB能够高效地缓存这些访问最频繁的页表项,从而减少对慢表的访问需求。

🚀二、段式存储

段式存储管理是一种内存管理方式,它将程序的不同部分划分为有逻辑意义的单元,称为“段”(Segment)。每个段可以代表程序的某一部分,如代码、数据、堆栈等。与分页存储管理相比,分段存储管理更强调逻辑划分和保护,更符合程序的结构和组织方式。

🔎1.段的特点

  1. 逻辑单位:段是根据程序的逻辑结构来划分的,例如代码段、数据段、堆栈段等,每个段都有明确的含义和作用。
  2. 动态大小:每个段的大小不是固定的,而是根据实际需要确定的。这与分页系统中的固定大小页不同。
  3. 独立的地址空间:每个段在内存中有其独立的地址空间,程序内部对内存的引用通常是通过段名和段内偏移来实现的。

🔎2.段的寻址和管理

在段式存储管理中,地址通常由两部分组成:段号和段内偏移。CPU使用这两部分信息来确定数据在物理内存中的实际位置:

  • 段号(Segment number)用来索引一个段表,从中获取段的基址。
  • 段内偏移(Offset within the segment)用来从该基址开始计算实际的物理内存地址。

段表

操作系统为每个进程维护一个段表,用于存储各个段的信息,包括:

  • 段基址(Base):段在物理内存中的起始地址。
  • 段长度(Limit):段的长度。
  • 保护位:指示段的访问权限,如读/写/执行。

当程序尝试访问某个内存地址时,操作系统首先检查段号是否有效,然后使用段表中的基址和限制来确定访问是否合法(即段内偏移是否超出了段的长度)。如果访问越界或违反了访问权限,操作系统会产生一个异常。

🔎3.优点和缺点

优点

  • 保护和安全性:由于每个段都可以有独立的保护属性,这提高了程序的安全性。
  • 灵活性:段的大小可以根据需要动态调整,不受固定分页大小的限制。
  • 适应性:分段非常适合程序的自然结构,易于程序的组织和管理。

缺点

  • 外部碎片:由于每个段的大小不同,内存中可能出现难以利用的小空间,称为外部碎片。
  • 管理复杂性:分段系统的管理通常比分页系统更复杂,需要更多的硬件和软件支持。

段式存储管理提供了一种符合程序逻辑结构的内存管理方式,虽然在内存利用率和管理上可能存在一些挑战,但它的适应性和保护特性使其在某些应用场景中非常有用。
在这里插入图片描述

🔎4.练习

在这里插入图片描述

🚀三、段页存储

段页存储管理是一种先进的内存管理技术,它结合了分段(Segmentation)和分页(Paging)两种方法的优点,以提供更灵活、高效的内存使用方式。这种技术旨在同时处理两个主要问题:内存保护和内存分配的灵活性。

🔎1.段页存储管理

段页存储结合了上述两种技术。在这种系统中,程序首先被分为多个段,每个段提供了逻辑上的划分;然后,每个段内部又被进一步细分为多个页,这样做的好处是:

  1. 灵活性和保护:分段提供逻辑上的分组和保护(不同的段可以有不同的访问权限),而分页则提供了对物理内存的有效管理。
  2. 地址转换:地址转换包括两个层次,首先是段表将逻辑地址中的段号转换成物理段的起始地址,然后通过页表将段内偏移转换成物理页框号。
  3. 减少内部碎片:由于每个段都是独立分页的,所以可以更精细地控制内存分配,减少了内部碎片。

这种结合方法的地址结构通常包括段号(用于查找段表)、页号(段内页表的索引)和页内偏移。

在这里插入图片描述

🔎2.优缺点

优点:空间浪费小、存储共享容易、能动态连接。
缺点:由于管理软件的增加,复杂性和开销也增加,执行速度下降

🔎3.应用

段页存储管理在现代操作系统中非常普遍,特别是在那些需要同时提供高度内存保护和灵活内存管理的环境中,如多用户、多任务的操作系统中。这种方法不仅提高了内存的使用效率,还加强了程序间的隔离,提高了系统的安全性。


🚀感谢:给读者的一封信

亲爱的读者,

我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。

如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。

我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。

如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。

在这里插入图片描述

再次感谢您的阅读和支持!

最诚挚的问候, “愚公搬代码”

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。