一、概述
在复习操作系统的时候 ,遇到的第一个难点,当年的操作系统课上老师这块也没讲,所以对这些知识的了解几乎为空白,特此记录,怕过后忘了。
好,现在进入正题。
页式,段式或者段页式都管理属于离散存储管理中的一种 ,采用这种方式的主要目的是为了解决碎片问题,不用连续地分配内存,可以将一个进程/程序离散地装入到不连续的内存中。
二、主要过程及涉及技术介绍说明
①分页式存储
首先将进程和内存都已页为单位进行分块,进程中的称为页,内存中的称为块,一一对应,大小相等,这个时候就需要一个专门的数据结构来管理这种映射关系,也就是页表,页表也是存在内存中的。在这种映射关系的基础上,通过相应的硬件转换机制可以将逻辑地址转换为对应的物理地址,从而实现内存的分配与管理。
页面大小一般是由机器决定的,通常为4KB,如图1.1所示,以某一32位逻址为例,4KB(2^12B)的页大小,12根地址线可以完全表示,即快内偏移为12位。剩下20位用来表示页号,最多可以表示2^20-1页。再来看页表项,一个页表项就代表了一个进程中页与内存中块的映射,故页面数等于页表项个数,页表项中有两个数据项,页号和块号。(图1.2)根据给定的逻址可以算出对应的页号,再结合页表可以求出对应的块号,此时再结合偏移地址便可得出物理地址。
具体过程见图1.3,在映射的过程中,系统还设置了相应的内存保护机制,使用一个界限保护寄存器,来确保没有地址越界等事情的发生。同时,设置了一个页面寄存器来存放页表始址和页面长度。
上述过程通常由处理器的硬件直接完成,不需要软件参与。通常,操作系统只需在进程切换时,把进程页表的首地址装入处理器特定的寄存器中即可。
一般来说,页表存储在主存之中。这样处理器每访问一个在内存中的操作数,就要访问两次内存:
第一次用来查找页表将操作数的 逻辑地址变换为物理地址;第二次完成真正的读写操作。
这样做时间上耗费严重。为缩短查找时间,可以将页表从内存装入CPU内部的关联存储器(例如,快表)中,实现按内容查找。
此时的地址变换过程是:在CPU给出有效地址后,由地址变换机构自动将页号送人快表,并将此页号与快表中的所有页号进行比较,而且这种比较是同时进行的。
若其中有与此相匹配的页号,表示要访问的页的页表项在快表中。于是可直接读出该页所对应的物理页号,这样就无需访问内存中的页表。由于关联存储器的访问速度比内存的访问速度快得多。
页式管理方式的优点是:
1)没有外碎片,每个内碎片不超过页大比前面所讨论的几种管理方式的最大进步是,
2)一个程序不必连续存放。
3)便于改变程序占用空间的大小(主要指随着程序运行,动态生成的数据增多,所要求的地址空间相应增长)。
缺点是:要求程序全部装入内存,没有足够的内存,程序就不能执行
②分段式管理
跟页式管理不同的是,段式管理是针对用户的,它是将程序进行分段,装入内存。在段式存储管理系统中,为每个段分配一个连续的分区,而进程中的各个段可以不连续地存放在内存的不同分区中。程序加载时,操作系统为所有段分配其所需内存,这些段不必连续,物理内存的管理采用动态分区的管理方法。
段式管理的内存格式和页式相似,由段号和段内偏移组成(如图2.1),而有点略微不同的是每一段的大小不是由系统决定的,是由用户编程决定的。
同样,段表项也发生了变换,页表项只有两项,而在段表中增加了一栏,用来表示段长,具体结构如下(图2.2):
同样,在地址变换机构中,有两种越界保护,①段号是否小于段长 ②段内偏移是否小于段长。
在段式管理系统中,整个进程的地址空间是二维的,即其逻辑地址由段号和段内地址两部分组成。为了完成进程逻辑地址到物理地址的映射,处理器会查找内存中的段表,由段号得到段的首地址,加上段内地址,得到实际的物理地址。(如图2.3)这个过程也是由处理器的硬件直接完成的,操作系统只需在进程切换时,将进程段表的首地址装入处理器的特定寄存器当中。这个寄存器一般被称作段表地址寄存器。