【愚公系列】软考高级-架构设计师 019-存储管理(快表、段式存储、段页存储)
🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏
🚀前言
存储管理是操作系统中一个非常关键的组成部分,涉及到数据的存储、检索和管理。操作系统需要有效地管理不同类型的存储资源,包括主存(RAM)、辅助存储(如硬盘驱动器和固态硬盘)以及在某些情况下的网络存储。这一过程确保系统的高效运行和资源的最优利用。
主要目标和功能
存储管理的主要目标包括:
- 抽象化:为程序员提供简单且一致的视图来隐藏底层的硬件复杂性。
- 保护:确保一个进程的数据不会被其他进程非法访问。
- 共享:允许多个进程安全地共享存储资源。
- 虚拟化:提供比物理内存更大的地址空间,允许程序使用比实际可用内存更多的存储空间。
- 持久性:确保数据在电源关闭后仍然存在。
存储管理的主要技术
存储管理使用多种技术来实现其目标,包括:
-
内存管理:
- 连续内存分配:早期操作系统使用,如固定分区、可变分区。
- 分页(Paging):将内存分割为固定大小的页,内存管理单元(MMU)将虚拟地址转换为物理地址。
- 分段(Segmentation):将程序的不同部分分割为逻辑上的段,每个段都可以独立地被放置和保护。
-
虚拟内存:
- 通过使用磁盘作为额外的存储空间来扩展物理内存。
- 使用页面置换算法,如最近最少使用(LRU)、先进先出(FIFO)等,来管理哪些数据应保留在内存中,哪些应被移至磁盘。
-
辅助存储管理:
- 管理硬盘和其他非易失性存储设备的数据。
- 包括格式化、分区、文件系统实现等。
-
文件系统:
- 提供一个组织存储数据的方法,包括文件的创建、删除、读取和写入。
- 实现文件的安全和保护,确保文件系统的完整性和可靠性。
实例:内存管理
考虑一个简单的分页系统,操作系统将程序的虚拟内存分成多个页面,这些页面可以独立地加载到物理内存的任何可用页面帧中。虚拟内存使得每个程序都认为自己在使用一个连续的内存块,而实际上它的各个部分可能散布在物理内存的不同位置。这种方法简化了内存管理,提高了内存的利用率,并允许使用更多的虚拟内存空间。
存储管理是确保操作系统稳定、高效运行的关键。随着技术的发展,存储管理的方法和技术也在不断进步,例如,现代系统中广泛使用的固态驱动器(SSD)提供了比传统硬盘更快的数据访问速度,这对存储管理策略产生了重大影响。操作系统必须不断地更新其存储管理技术,以充分利用这些新硬件的潜力。
🚀一、快表
快表是一块小容量的相联存储器,由快速存储器组成,按内容访问,速度快,并且可以从硬件上保证按内容并行查找,一般用来存放当前访问最频繁的少数活动页面的页号(可以看成是页表的频繁访问数据的副本)。
快表是将页表存于Cache中
慢表是将页表存于内存中
因此慢表需要访问两次内存才能取出数据,而快表是访问一次Cache和一次内存,因此更快。
🔎1.快表(TLB)
快表,或称为转址旁路缓冲器(Translation Lookaside Buffer, TLB),是一种特殊的缓存,用于加速虚拟地址到物理地址的转换过程。在分页内存管理系统中,虚拟地址通常需要通过访问页表来转换成物理地址。页表可能非常大,通常存放在内存中,因此每次地址转换可能都需要访问内存,这会显著降低系统的效率。
快表作为页表的一个小型缓存副本,存放在CPU中,可以快速地进行地址转换,因为它仅存放最近或最频繁访问的页表项。当进行地址转换时,CPU首先检查快表:
- 如果在快表中找到对应项(快表命中),则直接使用快表中的信息进行地址转换,不需要访问内存。
- 如果未找到(快表未命中),则需要访问内存中的页表(慢表),将结果放入快表中,这个过程可能涉及到替换已有的快表项。
🔎2.慢表
慢表即存放在内存中的页表。由于内存的访问速度虽然比硬盘快很多,但与CPU速度相比仍然较慢,因此直接从内存中访问页表会较慢。在快表未命中的情况下,CPU必须访问这个慢表来获取所需的页表项,然后进行地址转换。
🔎3.访问过程
- 使用快表:首先查找TLB,如果找到(命中),直接进行地址转换,这是最快的路径。
- 访问慢表:如果TLB未命中,那么CPU需要访问内存中的页表来查找所需的映射,然后更新TLB,这需要更多时间因为涉及到两次内存访问(一次查页表,一次访问数据)。
🔎4.性能优化
使用快表的目的是减少访问内存的次数,因为即使是现代的内存访问也比缓存慢得多。快表能显著提高系统的性能,特别是在内存访问模式呈现局部性特征时(即程序倾向于重复访问相同的数据或相近的存储位置)。这使得TLB能够高效地缓存这些访问最频繁的页表项,从而减少对慢表的访问需求。
🚀二、段式存储
段式存储管理是一种内存管理方式,它将程序的不同部分划分为有逻辑意义的单元,称为“段”(Segment)。每个段可以代表程序的某一部分,如代码、数据、堆栈等。与分页存储管理相比,分段存储管理更强调逻辑划分和保护,更符合程序的结构和组织方式。
🔎1.段的特点
- 逻辑单位:段是根据程序的逻辑结构来划分的,例如代码段、数据段、堆栈段等,每个段都有明确的含义和作用。
- 动态大小:每个段的大小不是固定的,而是根据实际需要确定的。这与分页系统中的固定大小页不同。
- 独立的地址空间:每个段在内存中有其独立的地址空间,程序内部对内存的引用通常是通过段名和段内偏移来实现的。
🔎2.段的寻址和管理
在段式存储管理中,地址通常由两部分组成:段号和段内偏移。CPU使用这两部分信息来确定数据在物理内存中的实际位置:
- 段号(Segment number)用来索引一个段表,从中获取段的基址。
- 段内偏移(Offset within the segment)用来从该基址开始计算实际的物理内存地址。
段表
操作系统为每个进程维护一个段表,用于存储各个段的信息,包括:
- 段基址(Base):段在物理内存中的起始地址。
- 段长度(Limit):段的长度。
- 保护位:指示段的访问权限,如读/写/执行。
当程序尝试访问某个内存地址时,操作系统首先检查段号是否有效,然后使用段表中的基址和限制来确定访问是否合法(即段内偏移是否超出了段的长度)。如果访问越界或违反了访问权限,操作系统会产生一个异常。
🔎3.优点和缺点
优点:
- 保护和安全性:由于每个段都可以有独立的保护属性,这提高了程序的安全性。
- 灵活性:段的大小可以根据需要动态调整,不受固定分页大小的限制。
- 适应性:分段非常适合程序的自然结构,易于程序的组织和管理。
缺点:
- 外部碎片:由于每个段的大小不同,内存中可能出现难以利用的小空间,称为外部碎片。
- 管理复杂性:分段系统的管理通常比分页系统更复杂,需要更多的硬件和软件支持。
段式存储管理提供了一种符合程序逻辑结构的内存管理方式,虽然在内存利用率和管理上可能存在一些挑战,但它的适应性和保护特性使其在某些应用场景中非常有用。
🔎4.练习
🚀三、段页存储
段页存储管理是一种先进的内存管理技术,它结合了分段(Segmentation)和分页(Paging)两种方法的优点,以提供更灵活、高效的内存使用方式。这种技术旨在同时处理两个主要问题:内存保护和内存分配的灵活性。
🔎1.段页存储管理
段页存储结合了上述两种技术。在这种系统中,程序首先被分为多个段,每个段提供了逻辑上的划分;然后,每个段内部又被进一步细分为多个页,这样做的好处是:
- 灵活性和保护:分段提供逻辑上的分组和保护(不同的段可以有不同的访问权限),而分页则提供了对物理内存的有效管理。
- 地址转换:地址转换包括两个层次,首先是段表将逻辑地址中的段号转换成物理段的起始地址,然后通过页表将段内偏移转换成物理页框号。
- 减少内部碎片:由于每个段都是独立分页的,所以可以更精细地控制内存分配,减少了内部碎片。
这种结合方法的地址结构通常包括段号(用于查找段表)、页号(段内页表的索引)和页内偏移。
🔎2.优缺点
优点:空间浪费小、存储共享容易、能动态连接。
缺点:由于管理软件的增加,复杂性和开销也增加,执行速度下降
🔎3.应用
段页存储管理在现代操作系统中非常普遍,特别是在那些需要同时提供高度内存保护和灵活内存管理的环境中,如多用户、多任务的操作系统中。这种方法不仅提高了内存的使用效率,还加强了程序间的隔离,提高了系统的安全性。
🚀感谢:给读者的一封信
亲爱的读者,
我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。
如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。
我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。
如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。
再次感谢您的阅读和支持!
最诚挚的问候, “愚公搬代码”
- 点赞
- 收藏
- 关注作者
评论(0)