目录
一、什么是内存
- 内存可存放数据,程序执行前需要先放到内存中才能被CPU处理。
- 内存中也有一个一个的"小房间",每个小房间就是一个"存储单元"。
- 如果计算机"按字节编址"则每个存储单元大小为1字节,即1B,即8个二进制位。
- 如果字长为16位的计算机"按字编址",则每个存储单元大小为1个字;每个字的大小为16个二进制位。
二、有何作用
缓和CPU与硬盘之间的速度矛盾。
三、常用数量单位
四、指令的工作原理
指令是计算机执行某个特定任务的基本操作,也是计算机进行数据处理和控制的基本单位。指令的工作原理可以简单地概括为以下四步:
-
读取指令:计算机从内存中读取指令,并将指令存储到处理器中。
-
解析指令:计算机解析指令,确定需要执行的操作,并确定需要的数据和操作符。
-
执行指令:计算机执行指令所需的操作,并将结果存储到指定的位置。
-
更新程序计数器:计算机更新程序计数器中的指令地址,以便读取下一条指令。
简单来说,指令的工作原理就是根据特定的操作码和操作数,让计算机进行相应的运算和控制操作。在执行指令的过程中,计算机需要根据指令中给定的地址,从内存中读取数据,将其存储到寄存器中,并根据指令中给定的操作码进行相应的计算和输出。指令的工作原理包括多个步骤,但每个步骤都是计算机系统中必不可少的一部分。
五、装入方式
1、绝对装入
在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。
装入程序按照装入模块中的地址,将程序和数据装入内存。
2、可重定位装入(静态重定位)
静态重定位是指在程序编译或链接的过程中,将程序中的逻辑地址转换为物理地址,使程序能够在内存中正确地运行的过程。在静态重定位过程中,编译器或链接器将程序的逻辑地址转换成物理地址,并将转换后的地址写入程序中需要访问的内存地址中。
静态重定位通常在程序装载时进行,重定位的过程主要包括以下几个步骤:
-
编译器或链接器为程序中的每个变量、函数和常量分配逻辑地址。
-
在程序被装载到内存之前,重定位程序会将程序中的逻辑地址转换成物理地址。
-
重定位程序会在程序中插入符号表,用于记录程序中的符号地址和信息。
-
如果程序在运行过程中需要地址的修改,静态重定位就会被触发,重定位程序会将需要修改的地址重新计算并写入正确的物理地址。
静态重定位是计算机系统中重要的概念,它使得程序能够在内存中正确地运行,提高了计算机的可移植性和灵活性。
注意:静态重定位的特点是在一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业。作业一旦进入内存后,在运行期间就不能再移动,也不能再申请内存空间。
3、动态运行时装入(动态重定位)
动态重定位是指在程序运行时,将程序中的逻辑地址转换为物理地址的过程。
和静态重定位不同,动态重定位是在程序运行时根据实际情况进行地址转换的。
在动态重定位过程中,操作系统或库函数会在程序被装载进内存之后,根据程序运行时的情况动态地对程序中的地址进行转换。动态重定位通常发生在以下情况下:
-
程序中使用了动态链接库或共享库,需要在运行时进行地址转换。
-
程序在运行过程中需要动态分配内存,需要动态地调整程序中的地址。
动态重定位通常通过虚拟内存机制来实现,操作系统会将程序中的逻辑地址映射到物理地址上,当程序需要访问某个地址时,操作系统会根据映射关系将逻辑地址转换为物理地址。动态重定位使得程序能够更加灵活地运行,能够适应不同的运行环境和硬件平台。
注意:采用动态重定位时允许程序在内存中发生移动。
六、从写程序到程序运行
- 编译:由编译程序将用户源代码编译成若干个目标模块。(编译就是把高级语言翻译为机器语言)
- 链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块。
- 装入(装载):由装入程序将装入模块装入内存运行。
七、链接的三种方式
1、静态链接
静态链接:在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。
2、装入时动态链接
将各目标模块装入内存时,边装入边链接的链接方式。
3、运行时动态链接
在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享。