0%

操作系统第三章

内存的基础知识

操作系统知识总览3.1
一、什么是内存?有何作用?
1、内存是用于存放数据的硬件。程序执行前需要先放到内存中才能被CPU处理。
2、内存地址从0开始,每个地址对应一个存储单元。
3、如果计算机“按字节编址”,则每个存储单元大小为1字节,即1B,也是8bit。
4、如果字长为16位的计算机“按字编址”,则每个存储单元大小为1个字,每个字的大小为16个二进制。
二、几个常用的数量单位。

1、一台手机/电脑有4GB内存,则该设备内存中可以存放$4 \times 2^{30}$个字节。如果是按字节编址的话,也就是有$4 \times 2^{30} = 2^{32}$个“小房间”。
2、有的题目会告诉我们内存的大小,让我们确定地址长度应该是多少(即要多少个二进制位才能表示相应数目的存储单元)。
3、在4GB内存的设备中,需要$2^{32}$个地址才能一一标识,所以地址需要用32个二进制位来表示$(0-2^{32}-1)$。
三、进程的运行原理—指令
1、实际在生成机器指令的时候并不知道该进程的数据会被放到什么位置。所以编译生成的指令中一般是使用逻辑地址(相对地址)。
2、逻辑地址vs物理地址:编译时产生的指令只关心“相对地址”,实际放入内存中时再想办法根据起始位置得到“绝对地址”。相对地址又称逻辑地址,绝对地址又称物理地址。
四、从写程序到程序运行
1、编译:由编译程序将用户源代码编译成若干个目标模块(编译就是把高级语言翻译为机器语言)。
2、由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块。
3、装入(装载):由装入程序将装入模块装入内存运行。
操作系统从写程序到程序运行3.1
4、装入模块中的指令地址指的是“相对地址”,即相对于开始地址而言的地址。
5、装入模块装入内存时,需要对指令中的地址进行处理,这就是装入的三种方式(用三种不同的方法完成逻辑地址到物理地址的转换):
1)绝对装入。
2)静态重定位。
3)动态重定位。
五、装入的三种方式—绝对装入
1、绝对装入:在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。装入程序按照装入模块中的地址,将程序和数据装入内存。
2、在绝对装入中,编译、链接后得到的装入模块的指令直接就使用了绝对地址。
3、绝对装入只适用于单道程序环境。
4、程序中使用的绝对地址,可在编译或汇编时给出,也可由程序员直接赋予。通常情况下都是编译或汇编时再转换为绝对地址。
六、装入的三种方式—静态重定位
1、静态重定位:又称可重定位装入。编译、链接后的装入模块的地址都是从0开始,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对地址进行“重定位”,将逻辑地址变换为物理地址(地址变换是在装入时一次完成的)。
2、静态重定位的特点是在一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业。
3、作业一旦进入内存后,在运行期间就不能再移动,也不能再申请内存空间。
七、装入的三种方式—动态重定位
1、动态重定位:又称动态运行时装入。编译、链接后的装入模块的地址都是从0开始。装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址。这种方式需要一个重定位寄存器的支持。
2、重定位寄存器:存放装入模块存放的起始位置。
3、采用动态重定位时允许程序在内存中发生移动。
4、并且可将程序分配到不连续的存储区中:在程序运行前只需装入它的部分代码即可投入运行,然后在程序运行期间,根据需要动态申请分配内存;便于程序段的共享,可以向用户提供一个比存储空间大得多的地址空间。
八、链接的三种方式。
1、静态链接:在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。
2、装入时动态链接:将各目标模块装入内存时,边装入边链接的链接方式。
3、运行时动态链接:在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享。
操作系统知识回顾3.1

内存管理的概念

操作系统知识总览3.2
一、内存空间的分配和回收
1、操作系统负责内存空间的分配与回收。
2、操作系统需要提供某种技术从逻辑上对内存空间进行扩充。
3、操作系统需要提供地址转换功能,负责程序的逻辑地址与物理地址的转换。
为了使编程更方便,程序员写程序时应该只需要关注指令、数据的逻辑地址。而逻辑地址到物理地址的转换(这个过程称为地址重定位)应该由操作系统负责,这样就保证了程序员写程序时不需要关注物理内存的实际情况。
4、操作系统需要提供内存保护功能。保证各进程在各自存储空间内运行,互不干扰。
二、内存保护
内存保护可采取两种方法:
1、在CPU中设置一对上、下限寄存器,存放进程的上、下限地址。进程的指令要访问某个地址时,CPU检查是否越界。
2、采用重定位寄存器(又称基址寄存器)和界地址寄存器(又称限长寄存器)进行越界检查。重定位寄存器中存放的是进程的起始物理地址。界地址寄存器中存放的是进程的最大逻辑地址。(即首地址+偏移量)
操作系统知识回顾3.2

覆盖与交换