OS(六):存储器管理之 存储器结构
存储器管理的主要对象是内存。
1、存储器的层次结构
1.1、多级存储器结构
存储器至少应具有三级:最高层为CPU寄存器,中间为主存,最底层是辅存。可以根据功能分工细分为 寄存器、高速缓存、主存储器、磁盘缓存、固定磁盘、可移动存储介质。
如上图,存储层次越往上,存储介质访问速度越快,相对存储容量越小。
由于主存储器的访问速度远低于CPU执行指令的速度,为缓解速度不匹配的问题,引入了寄存器和高速缓存。
寄存器和主存储器也被称为可执行存储器。
不同层次的存储介质,由操作系统统一管理。操作系统的存储管理,负责对可执行存储器的分配、回收以及提供在存储层次间数据移动的管理机制。
1.2、主存储器与寄存器
1.2.1、主存储器
主存储器,简称内存或主存,用于保存进程运行时的程序和数据,也称可执行存储器。
CPU的控制部件只能从哪个主存储器中取得指令和数据,数据从主存中读取并将它们装入到寄存器,或从哪个寄存器存入到主存处器。
1.2.2、寄存器
寄存器访问速度最快,与CPU协调工作,用于加速存储器的访问速度,如寄存器存放操作数,或用作地址寄存器加快地址转换速度。
寄存器的长度以 字(word) 为单位。
1.3、高速缓存和磁盘缓存
1.3.1、高速缓存
高速缓存用于存放主存中经常被访问的信息,以减少访问主存储器的次数,可大幅度提高程序执行速度。
进程的信息(程序和数据)存放在主存储器中,当使用时被临时复制到一个速度较快的高速缓存中。当CPU访问特定信息时,先检查它是否在高速缓存,如果已经存在,直接从高速缓存中取出使用,避免访问主存;否则,再从主存中读出信息。
1.3.2、磁盘缓存
磁盘I/O速度远低于对主存的访问速度,将频繁使用的一部分磁盘数据和信息,暂时存放在磁盘缓存中,以减少访问磁盘的次数。
主存可以看做是辅存的高速缓存,因为辅存中的数据必须复制到主存才能使用;处理后的数据必须先存在主存,再输出到辅存。
2、程序的装入和链接
多道程序环境下,程序若要运行,必须先创建进程,创建进程首要完成的事就是将程序和数据装入内存。
将源程序变为可执行程序的需要经过如下步骤:1、编译;2、链接;3、装入。
编译:将源代码编译成若干个目标模块;
链接:由链接程序将编译后形成的一组目标模块,及它们锁需要的库函数链接在一起,形成一个完整的装入模块;
装入:有装入程序将装入模块转入内存。
2.1、程序的装入
程序装入有三种方式,分别是 绝对装入、可重定位装入和动态运行时装入。
2.1.1、绝对装入
绝对装入程序按照装入模块中的地址,将程序和数据装入内存。装入模块被装入内存后,由于程序中的逻辑地址与实际内存地址完全相同,不须对程序和数据的地址进行修改。
绝对装入方式只能将目标模块装入到内存中事先指定的位置,仅适用于单道程序环境。在多道程序环境下,编译程序无法预知锁编译的目标模块应放在内存的哪个位置。
2.1.2、可重定位装入
装入时对目标程序中指令和数据的修改过程称为重定向。因为地址变换通常是在装入时一次完成的,以后不再改变,故称为静态重定向。
在多道程序环境下,得到的目标起始地址通常是从0开始的,程序中的其它地址是相对于起始地址计算的。
可重定位装入方式,根据内存的当前情况,将装入模块装入到内存的适当位置。
采用可重定位装入,装入模块中的所有逻辑地址和实际装入内存的物理地址不同。
可重定位装入可将转入模块装入到内存中任何允许的位置,可用于多道程序环境,但不允许程序运行时在内存中移动位置。
2.1.3、动态运行时装入
程序运行过程中,它在内存的位置可能要改变,这也就意味着它的物理位置发生了变化,必须对程序和数据的绝对地址进行修改后才能运行,此时采用动态运行时装入方式。
动态运行时的装入程序把装入模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这中地址转换推迟到程序真正要执行时才进行,因此装入内存后的所有地址仍是相对地址。
2.2、程序的链接
源程序经过编译得到一组目标模块,利用链接程序形成装入模块。
链接的方式有三种,分别是静态链接、装入时动态链接、运行时动态链接。
2.2.1、静态链接
静态链接是实现进行链接的方式。
在程序运行前,将各目标模块及所需库函数,链接成一个完整的装配模块,以后不再拆开。
静态链接:1、对相对地址进行修改;2、变换外部调用符号。
2.2.2、装入时动态链接
编译后的一组目标模块,在装入内存时,边装入边链接。
2.2.3、运行时动态链接
编译后的一组目标模块,程序执行中需要用到哪个目标模块,才对哪个目标模块进行链接。
某些模块的链接推迟到程序执行时才进行链接,在执行过程中,发现一个被调用的模块尚未装入内存,立即由OS去检索该模块并装入内存,把它连接到调用者模块上。