目录
- 页式存储管理
- 段式存储管理
- 分页和分段存储管理的主要区别
- 段页式存储管理
页式存储管理
1. 基本原理
页式存储管理是把主存储器划分成大小相等的若干区域,每个区域称为一块,并对它们加以顺序编号,如0#块、1#块等等。与此对应,用户程序的逻辑地址空间划分成大小相等的若干页,同样为它们加以顺序编号,从0开始,如第0页、第1页等。 页的大小与块的大小相等。
分页式存储管理的逻辑地址由两部分组成:页号和页内地址。其格式为:
2. 存储空间的分配与去配
分页式存储管理把主存空间划分成若干块,以块为单位进行主存空间的分配。由于块的大小是固定的,系统可以采用一张主存分配表来记录已分配的块、尚未分配的块以及当前剩余的空闲块总数。最简单的办法可用一张“位示图”来记录主存的分配情况。
例如主存的用户区被划分成512块,则可用字长为32位的16个字的位示图来构成一张主存分配表,位示图中的每一位与一个物理块对应,用0/1表示对应块的占用标志(空闲/已占用),另用一个字节记录当前系统的剩余空闲块总数。
进行主存分配时,首先查看空闲块总数是否能够满足作业要求,若不能满足,则不进行分配;若能满足,则从位示图中找出为“0”的位,并且将其占用标志置为“1”,并从空闲块总数中减去本次占用的块数,按找到的位计算出对应的块号,建立该作业的页表,并把作业装入对应的物理块中。
由于每一块的大小相等,在位示图中查找到一个为“0”的位后,根据它所在的字号、位号,按如下公式可计算出对应的块号:
块号=字号×字长+位号
当一个作业执行结束时,则应该收回作业所占的主存块。根据归还的块号计算出该块在位示图中对应的位置,将占用标志修改为“0”,同时把归还块数加入到空闲块总数中。假定归还块的块号为i,则在位示图中对应的位置为:
字号=[ i / 字长 ], 位号=i mod 字长
其中[ ]表示对i除以字长后取其整数,而mod表示对i除以字长后取其余数部分。
3. 页表与地址转换
在分页式存储管理系统中,允许将作业的每一页离散地存储在主存的物理块中,但系统必须能够保证作业的正确运行,即能在主存中找到每个页面所对应的物理块。为此,系统为每个作业建立了一张页面映像表,简称页表。页表实现了从页号到主存块号的地址映像。作业中的所有页(0~n)依次地在页表中记录了相应页在主存中对应的物理块号。页表的长度由进程或作业拥有的页面数决定。
调度程序在选择作业后,将选中作业的页表始址送入硬件设置的页表控制寄存器中。地址转换时,只要从页表寄存器中就可找到相应的页表。当作业执行时,分页地址变换机构会自动将逻辑地址分为页号和页内地址两部分,以页号位索引检索页表,如果页表中无此页号,则产生一个“地址错”的程序性中断事件;如果页表中有此页号,则可得到对应的主存块号,再按逻辑地址中的页内地址计算出欲访问的主存单元的物理地址。因为块的大小相等,所以
物理地址=块号×块长+页内地址
4. 总结
- 目的
减少分区管理的“碎片”,提高内存利用率。 - 实现原理
各个进程的虚拟空间被划分为若干个长度相等的页,并为各页加以编号,如第0页、第1页等 ;
内存空间也按相同的页大小划分为存储块,称为(物理)块或页框(frame), 也同样为它们加以编号,如0#块、1#块等等。
为进程分配内存时,以块为单位将进程的若干个页分别装入到多个可以不相邻接的物理块中。
采用页表进行页和块的一一对应。
段式存储管理
用户编制的程序是由若干段组成的:一个程序可以由一个主程序、若干子程序、符号表、栈以及数据等若干段组成。每一段都有独立、完整的逻辑意义,每一段程序都可独立编制,且每一段的长度可以不同。
段式存储管理支持用户的分段观点,具有逻辑上的清晰和完整性,它以段为单位进行存储空间的管理。
1. 原理
每个作业由若干个相对独立的段组成,每个段都有一个段名,为了实现简单,通常可用段号代替段名,段号从“0”开始,每一段的逻辑地址都从“0”开始编址,段内地址是连续的,而段与段之间的地址是不连续的。
其逻辑地址由段号和段内地址两部分所组成:
2. 空间的分配与去配
分段式存储管理是在可变分区存储管理方式的基础上发展而来的。在分段式存储管理方式中,以段为单位进行主存分配,每一个段在主存中占有一个连续空间,但各个段之间可以离散地存放在主存不同的区域中。为了使程序能正常运行,即能从主存中正确找出每个段所在的分区位置,系统为每个进程建立一张段映射表,简称“段表”。每个段在表中占有一个表项,记录该段在主存储器中的起始地址和长度。段表实现了从逻辑段到主存空间之间的映射。
如果在装入某段信息时找不到满足该段地址空间大小的空闲区,则可采用移动技术合并分散的空闲区,以利于大作业的装入。
当采用分段式存储管理的作业执行结束后,它所占据的主存空间将被回收,回收后的主存空间登记在空闲分区表中,可以用来装入新的作业。系统在回收空间时同样需要检查是否存在与回收区相邻的空闲分区,如果有,则将其合并成为一个新的空闲分区进行登记管理。
段表存放在主存储器中,在访问一个数据或指令时至少需要访问主存两次以上。为了提高对段表的存取速度,通常增设一个相联寄存器,利用高速缓冲寄存器保存最近常用的段表项。
3. 地址转换与存储保护
段式存储管理采用动态重定位方式装入作业,作业执行时通过硬件的地址转换机构实现从逻辑地址到物理地址的转换工作,段表的表目起到了基址寄存器和限长寄存器的作用,是硬件进行地址转换的依据。
分页和分段存储管理的主要区别
分页和分段系统都采用离散分配主存方式,都需要通过地址映射机构来实现地址变换,有许多相似之处。但两者又是完全不同的。具体表现如下。
- 页是信息的物理单位,是系统管理的需要而不是用户的需要;而段则是信息的逻辑单位,它含有一组意义相对完整的信息,分段是为了更好地满足用户的需要。
- 页的大小固定且由系统决定,因而一个系统只能有一种大小的页面;而段的长度却不固定,由用户所编写的程序决定,通常由编译程序对源程序进行编译时根据信息的性质来划分。
- 分页式作业的地址空间是一维的,页间的逻辑地址是连续的;而分段式作业的地址空间则是二维的,段间的逻辑地址是不连续的。
段页式存储管理
段式存储管理支持了用户的观点,但每段必须占据主存储器的连续区域,有可能需要采用移动技术汇集主存空间,为此,兼用分段和分页的方法,构成可分页的段式存储管理,通常被称为是“段页式存储管理”。段页式存储管理兼顾了段式在逻辑上的清晰和页式在管理上方便的优点。
1. 原理
用户对作业采用分段组织,每段独立编程,在主存空间分配时,再把每段分成若干个页面,这样每段不必占据连续的主存空间,可把它按页存放在不连续的主存块中。
段页式存储管理的逻辑地址格式如下:
段页式存储管理为每一个装入主存的作业建立一张段表,且对每一段建立一张页表。段表的长度由作业分段的个数决定,段表中的每一个表目指出本段页表的始址和长度。页表的长度则由对应段所划分的页面数所决定,页表中的每一个表目指出本段的逻辑页号与主存物理块号之间的对应关系。
2. 地址转换机制
执行指令时,地址机构根据逻辑地址中的段号查找段表,得到该段的页表始址,然后根据逻辑地址中的页号查找该页表,得到对应的主存块号,由主存块号与逻辑地址中的页内地址形成可访问的物理地址。如果逻辑地址中的段号超出了段表中的最大段号或者页号超出了该段页表中的最大页号,都将形成“地址越界”的程序性中断事件。
可以看出,由逻辑地址到物理地址的变换过程中,需要三次访问主存,第一次是访问主存中的段表,获得该段对应页表的始址,第二次是访问页表,获得指令或数据的物理地址,最后再按物理地址存取信息。
3. 特点
- 每一段分为若干页,再按页式管理,页间不要求连续;
- 用分段方法分配管理作业或进程,用分页方法分配管理内存;
- 兼有段式和页式管理的优点,系统复杂性和开销增大.