知名百科 >> 逻辑地址 >> 历史版本
编辑时间历史版本内容长度图片数目录数修改原因
2024-04-30 10:45 最新历史版本 10352 1 6
  返回词条

逻辑地址

逻辑地址也称为相对地址,是编译器根据规则生成的程序的内部地址,在加载或执行时通过地址映射将其转换为物理内存地址。逻辑地址分为两部分:段基址和偏移量。在16位地址空间中,这两个值的范围是从0到0~FFFFH。最初,计算机的逻辑地址与物理地址相同。20世纪60年代以后,随着多程序的广泛应用,为了防止一个程序的修改和更改影响其他程序,出现了基地址的方法,逻辑地址和物理地址不再一致。当计算机处理源程序时,它必须经历编译、链接、加载和运行等步骤。在这个过程中,需要生成一个逻辑地址,并实现从逻辑地址到物理地址的映射过程,从而将用户源程序转换为可在内存中执行的程序。其中,需要寻址,并且已经开发了各种寻址方法。在地址映射的过程中,逻辑地址还涉及存储管理系统中的各种管理方法。

在现代计算机系统中,逻辑地址在许多方面都起着重要作用,例如闪存管理和实验数据提取。与逻辑地址相关的概念还包括物理地址、虚拟地址和线性地址。这些地址类型在计算机系统中都起着重要的作用,它们共同支持程序的运行和内存的有效管理。

目录

概念定义

存储单元的真实地址称为物理地址,它是可识别的、实际存在的和可寻址的。物理地址是一个20位的数字,它定义了空间中的每个内存位置。在微处理器中,物理地址以段基和段基偏移量的形式出现。

在编程中,很难确定物理地址,因此采用逻辑地址。逻辑地址不需要预生成代码在内存中的具体位置,只需给出一个标签作为逻辑地址即可。程序输入计算机后,由机器自动转换成物理地址。在逻辑地址中,段基址是段寄存器(CS、ss、DS或ES)中的值,偏移量存储在通用寄存器中,以此基址为参考。在16位地址空间中,这两个值必须在0到65535(FFFFH)的范围内。

发展历史

早期计算机系统

在原始计算机中,程序员编译的用户程序和数据在主存中的存储位置由程序员确定和指示,它们的逻辑地址与主存的实际地址相同,由逻辑地址组成的逻辑地址空间(程序空间)与主存的实际地址组成的物理地址空间(实际内存空间)相同。

汇编程序和编译器的出现

随着汇编程序、编译程序和操作系统的出现,主存中至少有两个程序,即系统程序和用户程序。此时,源程序不是由机器指令代码和主存储器中的指令和数据寻址的,而是由运算符、符号、标量和数据描述编写的。这些符号形成的空间称为符号命名空间或命名空间。机器通过编译程序来处理源程序。在这个阶段,命名空间不会直接转换为物理地址空间,而只是转换为逻辑地址空间,即编译后的输出是从零地址开始寻址的目标程序,然后加载程序将目标程序的逻辑地址空间转换为目标程序的物理地址空间来执行程序的定位。在多道程序系统中,多个用户作业同时存储在主存中。每次转入运行时,操作系统都会根据主存的使用情况为用户分配主存空间,用户程序中使用的地址是逻辑地址。

多道程序系统的发展

20世纪60年代初,随着多程序的广泛应用,一个程序可能被多个用户程序共享。此时修改指令地址码不方便。例如,当用户程序调用此程序修改地址码时,如果地址码纠正错误,不仅会影响此程序,还会使其他程序出错。这种指令(包括地址码)允许修改,阻碍了程序重入的实现,不利于诊断和程序调试,给采用重叠和流水线技术带来困难。

引入基址寻址和保护机制

20世纪60年代以后,不再允许修改指令地址码。此时,在加载程序时,除了将程序加载到主存储器中之外,还需要将程序在主存储器中的起始地址添加到程序的相应地址码中(一般用“A”表示)。基于这一思想,出现了基地址法。当一个程序访问主存时,它需要将存储在基址寄存器中的程序基点地址相加,形成一个物理地址后才能访问主存。

相关技术

当计算机处理源程序时,它必须经过与逻辑地址相关的编译、链接、加载和运行等步骤,从而将用户源程序变成可在内存中执行的程序。在整个过程中,涉及到逻辑地址,这需要程序员在程序中写入逻辑地址或将逻辑地址转换为其他地址形式。

编译:编译的过程就是把用高级语言编写的源程序翻译成机器能识别的目标程序。编译器将源程序的每个模块编译成相应的目标模块,每个目标模块中的地址从0开始寻址。一些相关的目标模块链接后,形成一个完整的目标模块,其地址也从0开始。这些地址空间被称为逻辑地址空间。

互连:链接的作用是将编译后生成的多个目标模块链接成一个完整的目标模块。在这个过程中,要解决两个问题:一是因为链接之前有很多模块,每个模块都有自己的地址空间和逻辑地址,所以要先修改逻辑地址,使链接成为一个地址空间;其次,由于模块之间原来的调用关系是通过函数调用语句实现的,而链接之后只有一个模块,因此需要将调用语句改为跳转语句。实现链接的方式有三种:静态链接、加载时动态链接和运行时动态链接。

包装:在早期,编译、链接、加载和运行的步骤是依次进行的。随着计算机技术的发展,为了提高内存的利用率,引入了动态加载模式,将上述步骤交织在一起。程序加载方法分为绝对加载方法、可重定位加载方法和动态运行时加载方法。

绝对加载模式:编译时,如果你知道程序将驻留在内存中的什么位置,编译器将生成带有绝对地址的目标代码。绝对装入程序根据装入模块中的地址将程序和数据装入内存。加载模块加载到内存后,由于程序中的逻辑地址与实际内存地址完全相同,因此无需修改程序和数据的地址。程序中使用的绝对地址可以在编译或汇编时给出,也可以由程序员直接给出。

浮动装载模式:一般来说,作业加载到内存时分配的存储空间与其地址空间不一致,因此作业要访问的指令和数据的物理地址与地址空间中的逻辑地址不同。当加载或执行作业时,需要在程序中调整相关的地址部分并转换地址。这种将逻辑地址转换为物理地址的过程称为地址重定位,也称为地址映射或地址转换。因为这种地址转换只在加载时完成一次,以后不会再更改,所以称为静态重定位。

动态运行时加载模式:动态运行时加载程序在将加载模块加载到内存中后,不会立即将加载模块中的逻辑地址转换为物理地址,而是将这种地址转换推迟到程序实际执行时进行。此时,加载到内存后的所有地址仍然是逻辑地址。这种地址转换方法称为动态重定位。在程序执行过程中,每当访问一条指令或数据时,要访问的程序或数据的逻辑地址就被转换成物理地址。动态重定位的实现依赖于硬件地址转换结构。

运行:在一维逻辑地址空间中,每个作业的逻辑地址空间的大小是不同的,但逻辑地址从0开始。在二维逻辑地址空间中,每个用户的作业被分成几个段,每个段被赋予一个名称,每个逻辑地址被表示为段号和单元号。地址中的段名表示要访问的目标段,单元号表示要访问的段的目标单元。

当运行一个写在逻辑地址的程序时,首先编译或汇编几个目标代码,然后链接不同模块中的同类型段,最后形成一个可执行程序的存储镜像文件,将其加载到内存中运行。

选址方式

寻址模式是指确定此指令的数据(操作数)地址和下一条要执行的指令的地址的方法。

指令寻址模式:由于现代计算机使用PC来跟踪程序的执行并知道要执行的指令的地址,因此当程序开始运行时,程序的起始地址通常由系统程序直接给出并发送给PC。当程序执行时,PC的值可以以顺序方式或跳过方式改变,以完成对下一条要执行的指令的寻址。

按序方式:顺序模式是通过PC增量形成下一个指令地址。增量取决于下一条指令占用的存储单元数量。当指令地址被顺序寻址时,CPU可以根据PC的内容依次从存储器中读取指令。

跳跃模式:跳过模式是在程序传输时根据指令的传输目标地址修改PC的内容。当程序需要转移时,转移指令生成转移目标地址并发送给PC,从而可以转移程序。这个过程也称为程序跳转。

操作数寻址模式:操作数寻址是指找到操作数地址的方法。关于操作数的来源和目的地以及指令中的地址排列有多种情况。不同的指令使用不同数量、不同来源、不同用途的操作数,因此地址码字段的编码灵活多样,需要寻址时根据编码原理采用不同的寻址方式。

存储管理

虚拟内存由一部分主存和辅存组成,它弥补了实际物理内存的不足,为系统提供了比物理内存大得多的容量,解决了程序运行时计算机系统性能差的问题。

计算机中运行的程序通常存储在磁盘上。当程序运行时,CPU使用虚拟地址访问内存。计算机系统由硬件和软件组成,完成逻辑地址和真实地址之间的转换,从而达到访问内存的目的。

分段管理:段管理是将分配的内存组织成段,存储单元的地址由两部分组成:段地址和段内偏移量。任何内存单元的物理地址都是段地址和偏移量的线性组合,操作系统为应用程序分配和管理段地址。这样,应用程序只涉及段内的偏移地址,即程序的逻辑地址。

应用程序编译或汇编后得到的程序代码实际上是程序执行时的内存映像,可能会留下大量的相对地址。在将这些相对地址加载到内存的过程中,操作系统会完全填充这些相对地址,以便它们可以顺利执行。在分段管理模式下,同一应用程序可以在不同的计算机上运行。

页面管理:计算机通常可以同时运行多个应用程序。这些应用程序是操作系统的任务,它们的代码占用大量存储空间。在这个过程中,需要不断地管理逻辑地址。操作系统需要将当前使用逻辑地址数据加载到物理存储器中,并将暂时未使用的逻辑地址数据保存到外部存储器中。

为此,内存需要分成几页,如Windows操作系统,4KB内存为一页。程序代码中的地址可以是逻辑地址,并且该逻辑地址的容量可以远远大于物理地址的可访问范围。在运行时,页面管理机制将逻辑地址映射到物理地址。如果CPU访问的页面已经在物理内存中,则可以正常运行;当CPU访问的页面不在物理内存中时,就会发生缺页异常。CPU执行操作系统的异常处理代码,将暂时不用的页面保存到硬盘上的虚拟内存中,然后将当前请求的页面转移到内存中,以便应用程序可以继续执行。

段页面管理:分页系统可以有效地提高逻辑地址的内存利用率,分段系统可以很好地满足用户的需求。将两者结合起来的“段-页管理”具有两者的优点。逐页管理的基本原理是将用户程序分成几个段,然后将每个段分成几个页面,并给每个段取一个段名。在分段页面系统中,其地址结构由段号、段内页码和页内地址组成。

逻辑地址逻辑地址

每个段都分配有相同页数的内存块,内存块可以是连续的也可以是不连续的。系统为每个段建立一个页表以记录每个页对应块的信息,还为程序建立一个段表以记录每个段对应的页表。

存储保护:在多任务运行环境中,任务之间以及任务与操作系统之间都涉及到逻辑地址的管理,需要进行隔离保护。例如,任务A的代码段不能执行任何旨在破坏任务B的指令,反之亦然,更不用说破坏操作系统的运行环境了。存储保护的目的是防止用户程序之间地址映射过程中的相互干扰。通常的保护方式有越界保护和越权保护。

跨境保护:跨境保护有两种方法。一种方法是硬件为分配给应用程序的每个连续主内存空间设置上限和下限寄存器,它们分别指向内存空间的上限和下限。另一种方法是使用基址和有限长度寄存器。基址寄存器存储当前正在执行的进程的地址空间所占用的分区的起始地址。地址空间的长度存储在长度限制寄存器中。在操作期间,生成的逻辑地址与长度限制寄存器的内容进行比较,如果超过长度限制,则会发送越界中断信号。

越权保护:越权保护可以防止不同程序在映射逻辑地址和物理地址时相互干扰。越权保护就是读写属于自己区域的信息;允许在公共区域共享的信息或授权使用的信息可以被读取且不能被修改;未授权使用的信息不可读、不可写,只能执行;其他人,什么都不做。

主要应用

闪存转换层(FTL):闪存转换层(TFL)是固态硬盘的核心组件,其功能之一是实现逻辑地址到物理地址的映射。根据映射规模,FTL映射方法分为块映射、页映射和混合映射。地址映射过程可以分为两级:第一级映射用于平衡内存块的磨损,第二级映射用于处理坏块问题。TFL的中间逻辑地址是串联的第一和第二层映射关系的中间地址。当没有坏块时,中间逻辑地址等于物理地址。

近代物理实验的数据提取:现代应用物理学中的多单元翻转(Multi-cell flip,MCU)是指入射到存储器件上的单个粒子通过在多个敏感单元中沉积能量而导致多个存储单元同时翻转的现象。在这个过程中,随着存储器件特征尺寸的减小,MCU的频率显得越来越高,这将影响微电子存储器件的可靠性。从SEU数据中提取MCU信息时,主要问题是缺少物理地址和逻辑地址之间的映射关系。解决这一问题的常用方法是通过逆向工程获得芯片的内部布局,并进一步分析芯片的物理地址和逻辑地址之间的映射关系。还有一种基于概率统计提取物理地址和逻辑地址映射关系的方法,也可以解决这个问题。

标签