存储器管理(二)

本文介绍了分页存储管理的基本原理,包括页面与物理块、页表、虚地址结构及地址变换等内容,并探讨了快表、两级和多级页表的应用。此外,还讨论了分段存储管理的特点,如分段原理、信息共享与保护,以及段页式存储管理的综合优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分页存储管理方式
采用“紧凑”技术解决按区分配中存在的碎片问题,其实质是让存储器适应程序对连续性的要求。逻辑地址空间是从0~XKB一个连续的范围,要求主存中也有一个连续的分区用以加载。荡朱村现有的空闲区都小于程序的地址空间时,只有采用“紧凑”技术把碎片连接成一个人的空闲区才能满足作业的要求,但同时在CPU上的消耗代价会更大。所以,该方法只适用于在分配去的数目不太多,而且分配不太频繁的情况。
为了解决碎片问题,让程序不连续存放。这正是分页的思想。在分页存储管理中,主存被分成一些大小相等的物理块,程序的地址空间被分成一些逻辑页面,逻辑页与物理块大小相同。为程序分配内存空间时,程序和数据以页为单位分配内存块,将一个逻辑页存放在一个物理块中。
分页存储管理的基本方法
页面和物理块
在分页存储管理中,将一个进程的逻辑地址空间分成若干个相等的片,称为页面或页。内存空间也分成与页大小相同的若干个存储块,称为物理块或页框。为进程分配内存是,以块为单位将进程中若干页分别装入不相接的块中。由于进程的最后一页经常装不满一块,而形成不可利用的碎片称为页内碎片。每个作业最多能够形成一个页内碎片,它的长度小于一个页面的大小。
页表
在分页系统中,允许进程的每一页离散的存储在内存中,即分别占据一些不连续的物理块,系统应能保证进程的正确运行,即能在内存中找到每个页面所对应的物理块。系统又为每个进程建立一张页面映像表,简称页表。在进程地址空间的所有页内(0~n),依次在页表中有一页表项,其中记录了相应页在内存中对应的物理块。页表的作用是实现了从页号到物理块号的地址映像。为了对存储快中的内容进行保护,在页表的表项中加入了一个存取控制字。
虚地址结构
利用页表进行地址变化的方法与计算机所采用的地址结构有关,而地址结构又与所选择的页面大小有关。
页式地址变换
在页式存储管理方式下,程序员编制的程序或由编译程序给出的䯮程序经装配连接后形成一个连续的地址空间,其地址空间的分页是由系统自动完成的,而地址变换是通过页表自动、连续进行的。分页系统中地址变换过程主要是通过页表来实现的。
快表
若页表全部放在主存储器内,择取一个数据枝梢要访问两次内存。一次是访问页表,确定要取的数据的物理地址;第二次是根据所取的物理地址,到内存相关地址单元取要访问的操作数。写入一个数据情况也是一样。为了提高查表的速度,减少访问内存的次数,可以考虑将页表放在一个高速缓冲存储器中,该存储器也称为联想寄存器。联想寄存器中存放的部分页表称为“快表”。联想存储器一般由8~16个单元组成,用来存放正在运行进程的当前最常用的页号和它对应的块号,并具有进行查找的能力。
高速缓冲寄存器与内存的查找这二者同时进行,如果高速缓冲寄存器查找到所需的页号,则立即停止在内存页表中的查找。如果没有找到,则需要在内存中的页表进行查询,并将查询结果宜宾滚入高速缓冲寄存器中的空闲单元,若无空闲单元,则替换掉最先装入高速缓冲寄存器的那个页号。
两级和多级页表
在逻辑地址空间很大的情况下,页表就会变得非常大,并占用很大的一部分内存空间。因此,只将当前需要的部分页表调入内存,其余的存储在磁盘上,当需要时再将它们调入内存。为了解决查找问题,利用两级页表或多级页表来解决。
两级页表
针对难以找到大的连续存储空间存放页表的问题,可利用再将页表进行分页的办法,使每个页面的大小与内存物理块的打下相同,并为它们编号。离散的将各个页面分别放在不同的物理块中,同样为每个离散的页面建立一张页表,称为外层页表。在每个页表项中记录物理块号。可以利用外层页表和内层页表实现从进程的逻辑地址到物理地址的变换。为此,需要设置一个外层页表寄存器,用于存放外层页表的起始地址。
多级页表结构
分段存储管理方式
固定分区、动态分区到分页式存储管理方式,目的主要是为了提高内存利用率,而没有考虑程序的逻辑结构。分段存储管理方式,主要是为了满足用户和编程方面的要求,其中有些要求时其他存储管理方式难以满足的,因此,分段存储管理成为了存储管理的基础。
分段存储管理方式的基本原理
1. 分段。在分段存储管理方式中,段是一组逻辑信息集合。每个段都有自己的名字和长度,通常使用段号代替段名。每个段从0开始编号,并采用一段连续的内存空间。段和段之间可以使不连续的。分段系统中的逻辑地址由段号s和段内偏移量w组成。
2. 分页和分段的主要区别:页是信息的物理单位,分页是为了提高内存的利用率;段式信息的逻辑单位,每一段在逻辑上时相对完整的一组信息,分组是为了满足用户的需求;也得逻辑空间是一维的,而段是二维的;也得长度是由系统决定的,而段的长度是由具有相对完整意义的信息长度决定。
3. 基本原理。分段管理是将进程的地址空间划分为若干个罗极端,并按段进行存储分配。每个逻辑段占据一块连续的内存空间。短地址转换和分页地址换的过程基本相同。
信息共享
段是按逻辑意义划分的,可以按名存取。段式存储管理可以方便的实现内存的信息共享,并进行有效的内存保护。
1. 段的共享。段的共享是指两个以上的作业使用同一个子程序或数据段,该部分在内存中只包含一个副本,具体的操作是在每个进程的段表中,用相应的表项指向共享段在内存中的起始地址。当用户进程需要共享内存中某段的数据时,只要使用相同的名字,便可在新的段表中填入已存在段的内存起始地址,并设置一定的访问权限,从而实现段的共享。当不需要时,应将段释放。
2. 段的保护。在分段系统中,由于每个分段在逻辑上是独立的,比价容易实现信息保护。分段存储管理中的保护主要有地址越界保护和存取方式控制保护。
段页式存储管理方式
分页式存储管理能有效的提高内存的利用率,分段式存储管理充分考虑程序的逻辑结构,能有效的满足用户的需要。段页式存储管理方式结合了分页和分段存储管理两种方式的优点,即考虑了程序的逻辑结构,又实现了不连续加载内存目的。
1. 基本思想。段页式存储管理方便使用又提高了内存利用率,是目前应用较为广泛的一种存储管理方式。主要的概念有:采用页式存储管理的方式,将内存划分为一些大小相等的物理块;逻辑空间采用分段方式,按程序的逻辑关系把进程的地址空间分成若干逻辑段页大小等于内存块大小。在每个段内,从0开始一次编以连续的页号;逻辑地址结构,一个逻辑地址由短号s、段内页号p和业内地址d构成,记作v=(s,p,d);内存分配,内存以物理块为单位分配给每个进程;段表、页表和段表地址寄存器。系统为每个进程建立了一张段表,并且还要为改作业中的每一段建立一个页表。段表中的内容页表长度和页表地址。为了之处段表地址,系统提供了一个段表地址寄存器,它包含了段表的长度以及段表的起始地址。从而实现逻辑地址到物理地址的转换。在段页式存储管理系统中,面向物理实现的地址空间是页式划分的,而面向用户的地址空间是段式划分的。用户程序被逻辑划分为若干段,每段由划分成若干页面,内存划分成对应大小的块,进程映像是以页为单位进行的,从而使逻辑上连续的段存入到分散内存块中。
2. 地址转换。在段页式系统中,一个程序首先被分成若干程序段,每一段赋予不同的分段标识符,然后将每一段在分成若干个固定大小的页面。段页式存储管理方式中的地址转换过程包括如下步骤:首先利用段号s,将它与段长TL进行比较,若s 小于TL,表示为越界。于是地址转化硬件将段表地址寄存器的内容和逻辑地址中的短号相加,得到访问该进程段表的入口地址;将段表中的页表长度与逻辑地址中页号p进行比较,如果页号p大于页表长度,则发生中断;按照该段的页表基地址,找到该段的页表。在该页表中,找到页号p所在的项,得到访问段s的页表和第p页的入口地址;从该页表对应的表项中读出该页所在的物理块号f,再用块号f和页内地址d得到物理地址;如果对应的页不在内存,则发生缺页中断,系统进行缺页中断处理;如果该段的页表不在内存中,则发生缺段中断,然后由系统为该段在内存建立页表。在段页式系统中,为了获得一条数据,需要访问内存三次。
3. 管理算法。在地址转换过程中,软、硬件应密切配合。链接障碍中断,这个模块的功能是实现动态链接,即给每个段一个段号,在相应的段表和线性调用表中为其设置表目,并利用段号改造连接间接字;缺段中断,这个模块的功能是在系统的线性分段表中建立一个表目,并为调进的段建立一张页表,在其段表的相应表目中登记此页表的起始地址;缺页中断,发生缺页时进行。这个模块的功能是在内存中查找空闲的寻出快,如果找到,则将该页调入内存相应的空闲块;如果没有,则低啊用交换算法,交换内卒中的页到外村,冰钓金所需页面到内存,然后修改相应的页表表目。
段页式存储管理增加了软件的复杂性和管理开销。

<think>好的,用户想了解操作系统的存储器管理机制,特别是原理与实现。首先,我需要回忆存储器管理的主要功能和常见方法。根据提供的引用,有分页、分段、段页式以及虚拟内存等内容。 首先,存储器管理的基本功能包括内存分配、地址转换、存储保护和内存扩充。需要解释这些概念,比如地址转换中的逻辑地址到物理地址的映射,这涉及到基址寄存器和界限寄存器,可能还要提到动态重定位。引用[4]提到了目标模块装配时需要修改相对地址,这可能和地址转换有关。 然后是连续分配管理方式,比如单一连续分配和固定分区分配。引用[2]提到固定分区的例子,适用于单道系统,但内存利用率低。需要说明这些方法的优缺点,比如内部碎片的问题。 接下来是非连续分配,分页和分段。分页能提高内存利用率,而分段满足用户需求,两者结合成段页式,如引用[1]所述。需要解释分页如何工作,页表的作用,以及段页式的结构。 虚拟存储器是关键部分,引用[3]提到虚拟存储器的定义,通过请求调入和置换功能扩展逻辑内存。需要涵盖分页的虚拟内存实现,页面置换算法如FIFO、LRU,以及缺页中断的处理流程。 存储保护机制也很重要,引用[2]提到没有保护机制的缺点,这里可以说明基址和界限寄存器如何实现保护,防止进程越界访问。 最后,可能还需要提到相关技术如动态链接(引用[4]中的外部调用符号变换)和内存分配算法如伙伴系统。要确保各部分逻辑连贯,引用正确,并生成相关问题。 需要检查引用的匹配性,例如引用[1]关于段页式系统,引用[3]关于虚拟内存,引用[4]关于地址转换和模块装配。确保每个引用都自然地融入解释中,避免堆砌。 生成的问题应覆盖主要知识点,如分页与分段的区别、虚拟内存的实现、段页式的优势、置换算法等。确保问题有针对性,帮助用户深化理解。</think>### 操作系统的存储器管理机制详解 #### 一、存储器管理的基本功能 存储器管理的核心目标包括: 1. **内存分配与回收**:动态分配内存空间给进程,并在进程结束后回收资源[^4]。 2. **地址转换(重定位)**:将逻辑地址(程序中的相对地址)转换为物理地址。例如,通过基址寄存器(Base Register)和界限寄存器(Limit Register)实现动态重定位。 3. **存储保护**:防止进程越界访问内存空间,通过硬件机制(如界限寄存器)实现[^2]。 4. **内存扩充**:利用虚拟存储技术,将物理内存与外存结合,扩展逻辑内存容量[^3]。 #### 、连续分配管理方式 1. **单一连续分配** - 内存分为系统区和用户区,仅支持单道程序运行。 - **缺点**:内存利用率极低,无存储保护机制。 2. **固定分区分配** - 将内存划分为多个固定大小的分区,每个分区运行一个进程。 - **问题**:易产生内部碎片(未使用的分区空间)[^2]。 3. **动态分区分配** - 根据进程需求动态划分内存,使用算法如首次适应(First Fit)、最佳适应(Best Fit)。 - **挑战**:外部碎片(零散的小块未用空间)需通过紧凑技术解决。 #### 三、非连续分配管理方式 1. **分页管理** - 将内存和进程地址空间划分为固定大小的页(如4KB),通过页表实现逻辑地址到物理地址的映射。 - **优点**:减少外部碎片,提高内存利用率[^1]。 - **公式**:物理地址 $= \text{页框号} \times \text{页大小} + \text{页内偏移}$。 2. **分段管理** - 按逻辑单元(如代码段、数据段)划分内存,每段有独立的基址和长度。 - **优势**:支持模块化编程,便于共享和保护。 3. **段页式管理** - 结合分段和分页:先按逻辑分段,每段再分页管理。 - **特点**:兼具分段对用户友好和分页内存高效的优势。 #### 四、虚拟存储技术 1. **基本原理** - 允许进程部分装入内存即可运行,通过请求调入和页面置换实现逻辑内存扩展。 - **逻辑容量**:$ \text{虚拟内存容量} = \text{物理内存} + \text{外存交换区} $。 2. **页面置换算法** - 常用算法:FIFO(先进先出)、LRU(最近最少使用)、OPT(理想置换)。 - **示例**:LRU算法选择最久未访问的页面换出。 3. **缺页中断处理** - 流程:访问缺失页面→触发缺页中断→从外存加载页面→更新页表→重新执行指令。 #### 五、关键实现技术 1. **快表(TLB)**:缓存频繁访问的页表项,加速地址转换。 2. **多级页表**:减少页表内存占用,例如级页表结构。 3. **反向页表**:以物理页框为索引,节省存储空间。 #### 六、典型问题与优化 - **碎片问题**:通过分页减少外部碎片,紧凑技术解决动态分区的碎片。 - **抖动(Thrashing)**:因频繁页面置换导致性能下降,需调整进程内存分配策略。 ```text 存储器管理流程示例: 1. 进程请求内存 → 2. 分配页框/段 → 3. 更新页表 → 4. 设置保护位 → 5. 执行中处理缺页中断 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值