• 内容讲解

段式虚拟存储器中的段是按照程序的逻辑结构划分的,各个段的长度因程序而异。在段式虚拟存储系统中,虚拟地址由段号和段内地址组成,为了把程序虚地址变换成主存实地址,需要一个段表。段表一般驻留在主存中,其中每一行记录了某个段对应的若干信息,包括段号、装入位、段起点和段长等。这里的段号指的是虚拟段号。装入位为“1”,表示该段已调入主存;装入位为“0”,表示该段不在主存中。由于段的大小可变,所以在段表中要给出各段的起始地址与段的长度。段表实际上是程序的逻辑结构段与其在主存中的存放位置之间的关系对照表,如图3-19所示。段表也是一个段,可以保存在外存中,但一般驻留在主存中。

332.gif

段式虚拟存储器的虚-实地址变换如图3-20所示。CPU根据虚地址访存时,首先将段号与段表的起始地址相拼接,形成访问段表对应行的地址,然后根据段表的装入位判断该段是否已调入主存。若已调入主存,则从段表读出该段在主存中的起始地址,与段内地址(偏移量)相加,得到对应的主存实地址。

 

333.gif                      

由于段的分界与程序的自然分界相对应,具有逻辑独立性,所以易于实现程序的编译、管理、修改和保护,也便于多道程序共享。但是,因为段的长度参差不齐,起点和终点不定,给主存空间分配带来了麻烦,容易在段间留下不能利用的零碎空间,造成浪费。