语言处理系统
高级语言->汇编语言->机器码->硬件
预处理器:将源程序的存放在不同文件中的多个模块聚合起来,并替换宏。
汇编器:将编译器形成的汇编语言程序输出转换成可重定位的机器码。
编译器是一个程序,它可以将 高级编程语言编写的程序 翻译成目标语言(如机器语言)编写的程序。
解释器也是一个程序,但它不是翻译,而是直接根据用户的输入来执行制定的操作。
java就是编译器和解释器(虚拟机)的结合,实现一次编译,到处运行。Javac 的编译,编译 Java 源码生成“.class”文件里面实际是字节码,而不是可以直接执行的机器码。Java通过字节码和 Java 虚拟机(JVM)这种跨平台的抽象,屏蔽了操作系统和硬件的细节,这也是实现“一次编译,到处执行”的基础。
链接器:大型程序会分成多部分编译,一个文件中的代码可能指向另一文件中的位置。链接器可以解决外部内存地址的问题。
加载器:把所有可执行文件放在内存中执行。
可重定位
程序内使用的是逻辑地址,在系统加载程序,给出物理地址时,才会把逻辑地址转换为物理地址,这就是可重定位。即将逻辑地址重新定位成物理地址。
- 静态重定位:即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常是在装入时一次完成的,以后不再改变,故成为静态重定位。
- 动态重定位:它不是在程序装入内存时完成的,而是CPU每次访问内存时 由动态地址变换机构(硬件)自动进行把相对地址转换为绝对地址。动态重定位需要软件和硬件相互配合完成。