逻辑地址指的是程序自身看到的内存地址空间,它是一个抽象的地址,逻辑地址需要映射到物理内存中才能完成对内存的操作,为什么程序要需要操作虚拟的逻辑地址,而不是直接去操作物理地址,以及直接对内存条进行操作呢?
内存中,每个内存单元的大小为一个字节,即8个bit,它们都有对应的物理地址,从小到大排列
举个例子,MOVE REGISTER1 5,这个指令的意思是,将寄存器一号的数据移动到地址为5的内存单元中,这种方式很直接,没有抽象,早期的计算机就是这样,但是多进程运行的话,显然会有很大的问题
比方说有两个进程,存放着各自的数据,分别对用着各自的物理地址
首先进程1执行第一句JMP 20,跳转到地址是20的内存单元——MOV指令,接着进程2一开始执行JMP 20,这时跳转到地址20的位置,结果就跳到了进程1中,这就出问题了
总结一下
就是内存管理多进程时,需要让多个进程独立,程序中的地址不能是物理地址,而是进程内的相对地址
当有进程访问不是自己范围内的地址的话,操作系统需要干预保护,所以我们需要一种存储器抽象,称为地址空间,在cpu配备两个专门的寄存器,分别时基址寄存器和界限寄存器
现在进程2装载到内存的时候,系统会把起始地址16380存到基址寄存器,作为当前进程的起始地址,接下来是进程占据内存的长度——16408-16380= 32,存到界限寄存器
就相当于为进程2划定了界限,保护起来
现在我们还是让进程2从第一个位置JMP 20开始执行,cpu会检查20是否超过界限寄存器的长度,同时把20加上基址寄存器的16380,编程物理地址16400,跳转成功,这种方法可以称为动态重定位,但是要保证程序在内存中是连续的