1、内存
内存也称主存,是指CPU能直接存取指令和数据的存储器。磁盘、磁鼓和磁带等存储器,一般称为外存或辅存。计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组。每字节都有一个唯一的物理地址。第一个字节的地址为0,接下来的字节地址依次为1、2、3 ……。对内存的访问是通过一系列对指定地址单元进行读或写来实现的。例如从物理地址2处取出一个double(8个字节):
2、程序处理的主要阶段
从用户的源程序进入系统到相应程序在机器上运行,要经历一系列步骤,主要处理阶段有:编辑、编译、连接、装入和运行。
编辑阶段
编译阶段
一般把处理机能识别的二进制代码称为目标代码。为了把源程序变成目标代码,需要经过编译或汇编处理阶段。编译是将源程序进行词法、语法分析及代码生成等一系列加工,产生相应的目标代码,即.o文件。
连接阶段
用户程序可以分别进行编译,从而得到不同的目标模块。而且用户程序中往往要调用系统库程序和应用程序,这些程序是预先编译好的。这些目标代码不能简单的合并在一起,因为各自分配的内存地址可能有冲突,并且调用者还不知道被调用模块放在什么地方,仅知道它的符号名称。这种分散的无法寻址的模块是不能由CPU执行的。所以,这些分开编译出来的模块在执行之前必须确定外部访问的地址,这就是说,需要把他们连成一个统一的整体。
连接就是将编译或汇编后得到的一组目标模块以及他们所需的库函数装配成一个完整的装入模块的过程,生成可执行文件。
装入阶段
程序必须装入到内存中才能运行。用户程序经编译之后的每个目标模块都以0为基地址顺序编址,这种地址称为相对地址或逻辑地址。内存中各物理存储单元的地址是从统一的基地址顺序编址的,这种地址称为绝对地址或物理地址。
程序和数据装入内存时需要根据目标程序中的地址转变为内存中的物理地址,这个过程叫重定位。
运行阶段
3、重定位
由程序中逻辑地址组成的地址范围叫做逻辑地址空间,或简称为地址空间。
而由内存中的一系列存储单元所限定的地址范围称为内存空间,也称为物理空间或者绝对空间。
如下图是将用户程序和数据装入内存,重定位的过程。(图来自网上)
对程序进行重定位的技术按重定位的时机可分为两种:静态重定位和动态重定位。
静态重定位
静态重定位是将程序和数据一次性都装入内存,该程序在运行期间不再进行重定位。
优点
无需增加硬件地址的转换机构,便于实现程序的静态连接。在早期计算机中大多采用这种方案。缺点
(1)程序的存储空间只能是一片连续的区域,而且在重定位之后就不能再移动,这不利于内存空间的有效使用。
(2)各个用户进程很难共享内存中的同一程序的副本。
动态重定位
动态重定位是在程序执行期间每次访问内存之前进行重定位。这种变换是靠硬件地址变换机构机构实现的。通常采用一个重定位寄存器,其中存放当前正在执行的程序在内存空间中的起始地址。
绝对地址=寄存器值+相对地址
- 优点
(1)程序占用的内存空间可变,不必连续存放在一起。
(2)容易实现几个进程共享同一程序副本。 - 缺点
需要附加的硬件支持,增加了机器成本,而且实现存储管理的软件算法比较复杂。
现在一般计算机系统中都采用动态重定位方法。