清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 编译链接 源程序 虚拟空间地址转换 物理存储器 图51地址变换与物理存储器 将进程中的目标代码。数据等的虚拟地址组成的虚 拟空间称为虚拟存储器。虚拟存储器不考虑物理存 储器的大小和信息存放的实际位置,只规定每个进 程中互相关连的信息的相对位置。与实际物理存储 器只有一个(单机系统中),且被所有进程共享不 样,每个进程都拥有自己的虚拟存储器,且虚拟 存储器的容量是由计算机的地址结构和寻址方式确 定的。例如,直接寻址时,如果CPU的有效地址 长度为16位,则其寻址范围为0到64K
图5.1 地址变换与物理存储器 将进程中的目标代码。数据等的虚拟地址组成的虚 拟空间称为虚拟存储器。虚拟存储器不考虑物理存 储器的大小和信息存放的实际位置,只规定每个进 程中互相关连的信息的相对位置。与实际物理存储 器只有一个(单机系统中),且被所有进程共享不 一样,每个进程都拥有自己的虚拟存储器,且虚拟 存储器的容量是由计算机的地址结构和寻址方式确 定的。例如,直接寻址时,如果CPU 的有效地址 长度为16位,则其寻址范围为 0到64K
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 图51中的编译和链接主要是语言系统的设计问题。 不过,由虚拟存储器到物理存储器的变换是操作系 统所必须解决的问题。要实现这个变换,必须要有 相应的硬件支持,并使这些硬件能够完成统一管理 内存和外存之间数据和程序段自动交换的虚拟存储 器功能。即,由于每个进程都拥有自己的虚存,且 每个虚存的大小不受实际物理存储器的限制,因此, 系统不可能提供足够大的内存来存放所有进程的内 容。内存中只能存放那些经常被访问的程序和数据 段等。这就需要有相当大的外部存储器,以存储那 些不经常被访问或在某一段时间内不会被访问的信 息。待到进程执行过程中需要这些信息时,再从外 存中自动调入主存
图5.1中的编译和链接主要是语言系统的设计问题。 不过,由虚拟存储器到物理存储器的变换是操作系 统所必须解决的问题。要实现这个变换,必须要有 相应的硬件支持,并使这些硬件能够完成统一管理 内存和外存之间数据和程序段自动交换的虚拟存储 器功能。即,由于每个进程都拥有自己的虚存,且 每个虚存的大小不受实际物理存储器的限制,因此, 系统不可能提供足够大的内存来存放所有进程的内 容。内存中只能存放那些经常被访问的程序和数据 段等。这就需要有相当大的外部存储器,以存储那 些不经常被访问或在某一段时间内不会被访问的信 息。待到进程执行过程中需要这些信息时,再从外 存中自动调入主存
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 5.12地址变换 内存地址的集合称为内存空间或物理地址空间。内 存中,每一个存储单元都与相应的称为内存地址的 编号相对应。显然,内存空间是一维线性空间。 怎样把几个虚存的一维线性空间或多维线性空间变 换到内存的唯一的一维物理线性空间呢?这涉及到 两个问题。一个是虚拟空间的划分问题。例如进程 的正文段和数据段应该放置在虚拟空间的什么地方。 虚拟空间的划分使得编译链接程序可以把不同的程 序模块(它们可能是用不同的高级语言编写的), 链接到一个统一的虚拟空间中去。虚拟空间的划分 与计算机系统结构有关。VAX-11机的虚拟空间结 构如图52
5.1.2 地址变换 内存地址的集合称为内存空间或物理地址空间。内 存中,每一个存储单元都与相应的称为内存地址的 编号相对应。显然,内存空间是一维线性空间。 怎样把几个虚存的一维线性空间或多维线性空间变 换到内存的唯一的一维物理线性空间呢?这涉及到 两个问题。一个是虚拟空间的划分问题。例如进程 的正文段和数据段应该放置在虚拟空间的什么地方。 虚拟空间的划分使得编译链接程序可以把不同的程 序模块(它们可能是用不同的高级语言编写的), 链接到一个统一的虚拟空间中去。虚拟空间的划分 与计算机系统结构有关。VAX-11机的虚拟空间结 构如图5.2
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 0|程序区 30 进程空间 控制区 31 系统区 系统空间 232|保留区 图52虚拟空间的划分 第二个问题是把虚拟空间中已链接和划分好的内容 装入内存,并将虚拟地址映射为内存地址的问题。 称之为地址重定位或地址映射。地址映射就是要建 立虚拟地址与内存地址的关系。实现地址重定位或 地址映射的方法有两种:静态地址重定位和动态地 址重定位
图5.2 虚拟空间的划分 第二个问题是把虚拟空间中已链接和划分好的内容 装入内存,并将虚拟地址映射为内存地址的问题。 称之为地址重定位或地址映射。地址映射就是要建 立虚拟地址与内存地址的关系。实现地址重定位或 地址映射的方法有两种:静态地址重定位和动态地 址重定位
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 1.静态地址重定位 静态地址重定位( static address relocation)是在虚 拟空间程序执行之前由装配程序完成地址映射工作。 假定分配程序已分配了一块首地址为BA的内存区 给虚拟空间内的程序段,且每条指令或数据的虚拟 地址为ⅤA,那么,该指令或数据对应的内存地址 为MA,从而完成程序中所有地址部分的修改,以 保证CPU的正确执行。显然,对于虚拟空间内的指 令或数据来说,静态地址重定位只完成一个首地址 不同的连续地址变换。它要求所有待执行的程序必 须在执行之前完成它们之间的链接,否则将无法得 到正确的内存地址和内存空间
1. 静态地址重定位 静态地址重定位(static address relocation)是在虚 拟空间程序执行之前由装配程序完成地址映射工作。 假定分配程序已分配了一块首地址为BA的内存区 给虚拟空间内的程序段,且每条指令或数据的虚拟 地址为VA,那么,该指令或数据对应的内存地址 为MA,从而完成程序中所有地址部分的修改,以 保证CPU的正确执行。显然,对于虚拟空间内的指 令或数据来说,静态地址重定位只完成一个首地址 不同的连续地址变换。它要求所有待执行的程序必 须在执行之前完成它们之间的链接,否则将无法得 到正确的内存地址和内存空间