1、第三章 存储管理操作系统概论1主要内容3.1计算机系统中的存储器3.2重定位3.3单用户连续存储管理3.4固定分区存储管理3.5可变分区存储管理3.6页式虚拟存储管理23.1 计算机系统中的存储器存储器storage,memmory能接收数据和保存数据、而且能根据命令提供这些数据的装置主存 系统区(OS标准子程序)用户区(用户程序、数据)存储器的层次结构存储器的层次结构存储器主存储器和高速缓冲存储器辅存(外存)硬盘、光盘、磁带、软盘寄存器外存(secondary storage)DOS核心命令处理程序内存(primary storage)高速缓存(cache)寄存器(register)33.1
2、 计算机系统中的存储器存储器分成三个层次存储器分成三个层次主存储器(内存、主存)主存储器(内存、主存)处理机能直接访问的存储器。存储容量较大,存取速度也较快,存储单元以字节为单位进行编址。用来存放系统和用户的程序和数据,其存储方式是以新换旧,断电信息丢失。高速缓冲存储器高速缓冲存储器处理机能直接访问的存储器。存取速度快于主存,存储容量较小。用来存放主存中经常要被访问的信息。辅助存储器(外存、辅存)处理机不能直接访问的存储器。存储容量很大,可用来长期保存用户信息(如程序、数据、执行的结果等),但处理器不能直接读/写辅助存储器上的信息,必须在输入输出控制系统的管理下,才能够使辅助存储器与主存之间相
3、互传送信息。寄存器寄存器处理机能直接访问的存储器。存取速度最快,但容量小,一般每个寄存器只能存储一个字长的信息。用来存放临时的工作数据和控制信息。常用的寄存器主要有:指令寄存器、通用寄存器、控制寄存器等。寄存器不存在分配问题,但主存和辅存中经常存放多个程序和数据,会发生竞争的现象,因此要合理的分配和使用。43.1 计算机系统中的存储器存储管理的功能存储管理的功能对主存储器中的用户区域进行管理,包括:对主存储器中的用户区域进行管理,包括:(1)(1)地址转换地址转换 (地址映射、地址重定位地址映射、地址重定位)把程序的逻辑地址变换为存储器的物理地址的过程。地址转换的方式有静态重定位和动态重定位。
4、(2)(2)主存空间的分配与回收主存空间的分配与回收为多个程序分配内存空间,各程序在规定的那一部分内存空间里运行。程序运行完毕时,回收相应的内存空间。(3)(3)主存空间的主存空间的共享与保护共享与保护对OS以及各用户的信息提供保护措施。(4)(4)主存空间的的扩充(提供虚拟存储技术)主存空间的的扩充(提供虚拟存储技术)使用户程序的大小和结构不受主存容量和结构的限制,即使在用户程序比实际主存容量还要大的情况下,程序也能正确运行。存储器管理的基本目的存储器管理的基本目的是:充分发挥内存的利用率;为用户使用存储器提供方便。53.2重定位重定位内存的物理组织内存的物理组织物理地址:把内存分成若干个大
5、小相等的存储单元,每个单元给一个编号,这个编号称为内存地址(物理地址、绝对地址、实地址),存储单元占8位,称作字节(byte)。物理地址空间:物理地址的集合称为物理地址空间(主存地址空间),它是一个一维的线性空间。63.2重定位重定位程序的逻辑结构程序的逻辑结构程序地址:用户编制程序时所用的地址(或称相对地址、逻辑地址、虚地址)。源程序经过汇编或编译后再经过链接形成程序的装配模块形式,即转换为相对地址编址形式,它是以0为基址顺序进行编址的。程序地址空间(相对地址空间、逻辑地址空间、虚地址空间):是逻辑地址的集合,它的编址总是从0开始的,可以是一维线性空间,也可以是多维空间。73.2重定位重定位
6、程序的逻辑结构程序的逻辑结构物理存储器的结构是个一维的线性空间,容量是有限的。用户程序结构:一维空间一维空间一个用户程序就是一个程序,并且程序和数据是不分离的;二维空间二维空间程序由主程序和若干个子程序(或函数)组成,并且程序与数据是分离的;n维空间维空间即一个大型程序,由一个主模块和多个子模块组成,其中,各子模块又由主程序和子程序(或函数)组成。用户程序的大小,可能比内存容量小,也可能比内存容量大,有时候要大得多。83.2重定位重定位程序的装入和链接程序的装入和链接在多道程序环境下,程序要运行必须为之创建进程,而创建进程的第一件事,就是要将程序和数据装入内存。如何将一个用户源程序变为一个可在
7、内存中执行的程序?通常要经过以下几步:(1)编译编译由编译程序(Compiler)将用户源代码编译成若干个目标模块(ObjectModule);(2)链接链接由链接程序(Linker)将编译后形成的目标模块以及它们所需要的库函数,链接在一起,形成一个装入模块(LoadModule);(3)装入装入由装入程序(Loader)将装入模块装入内存。93.2重定位重定位程序的链接程序的链接根据链接时间的不同,可把链接分成如下三种:1.静态链接(static-linking)2.装入时动态链接(dynamic-linking)3.运行时动态链接(dynamic-linking)103.2重定位重定位程序
8、的链接程序的链接 1.1.静态链接静态链接(static-linking)(static-linking)静态链接静态链接是在程序运行之前,先将目标模块及它们所需的库函数,链接成一个完整的装配模块,以后不再拆开。这种方式形成的一个完整的装入模块又称为可执行文件可执行文件。Module AModule Acall function10L-1Module BModule B0M-1function1().function1FModule AModule AJSR L+F0L-1Module BModule BLL+M-1function1().function1L+F113.2重定位重定位程序的链
9、接程序的链接2.2.装入时动态链接装入时动态链接(dynamic-linking)(dynamic-linking)将编译后所得的一组目标模块,在装入内存时边装入边进行链接。即在装入一个目标模块时,若发生一个外部模块调用事件,将引起装入程序去找出相应的外部目标模块,并将它装入内存,以及修改目标模块中的相对地址。通常被链接的共享代码称为动态链接库(DLL,Dynamic-LinkLibrary)或共享库(sharedlibrary)。123.2重定位重定位程序的链接程序的链接3.3.运行时动态链接运行时动态链接(dynamic-linking)(dynamic-linking)将对某些模块的链接
10、推迟到运行时才执行。即在执行过程中,当发现一个被调用模块尚未装入内存时,立即由OS去找到该模块并将之装入内存,把它链接到调用者模块上。凡在执行过程中未被用到的目标模块,都不会被调入内存和被链接到装入模块上。133.2重定位重定位程序的链接程序的链接动态链接的优缺点动态链接的优缺点优点:共享:多个进程可以共用一个DLL,节省内存,减少文件交换。部分装入:一个进程可以将多种操作分散在不同的DLL中实现,而只将当前操作相应的DLL装入内存。便于局部代码修改:即便于代码升级和代码重用;只要函数的接口参数(输入和输出)不变,则修改函数及其DLL,无需对可执行文件重新编译或链接。便于运行环境适应:调用不同
11、的DLL,就可以适应多种使用环境和提供不同功能。如:不同的显示卡只需厂商为其提供特定的DLL,而OS和应用程序不必修改。缺点:链接开销:增加了程序执行时的链接开销;管理开销:程序由多个文件组成,增加管理复杂度。143.2重定位重定位 程序的装入程序的装入一、绝对装入方式一、绝对装入方式(Absolute Loading Mode)绝对装入程序按照装入模块中的逻辑地址,将程序和数据装入内存。装入模块被装入内存后,由于装入模块中的逻辑地址与实际物理地址完全相同,因此不须对程序和数据的地址进行修改。优点:装入过程简单,不需要硬件的支持。缺点:只能将装入模块装入到内存中事先指定的位置,因此只能用于单用
12、户、单任务的操作系统,不适于多道程序系统(此环境下,编译程序不可能预知所编译的目标模块应放在内存的何处)。装入模块在系统中是不能做任何移动的,否则就会出错。153.2重定位重定位 程序的装入程序的装入二、可重定位装入方式二、可重定位装入方式(Relocation Loading Mode)(亦称静态地址重定位)亦称静态地址重定位)由装入程序根据内存中当前的实际使用情况将装入模块装入到内存中某个适当位置。在程序装入内存时完成从逻辑地址到物理地址的转换。即装入程序将程序中的逻辑地址与本程序在内存中的起始地址相加得到正确的物理地址,将程序和数据装入内存。由于程序中的逻辑地址是从0开始编址的,因此需要
13、对程序中指令和数据的地址进行修改,这种由于一个作业装入到与其逻辑地址空间不一致的绝对地址空间,使得逻辑地址与绝对地址不同,而引起的对有关地址部分的调整,即逻辑地址转换成绝对地址的过程称为重定位重定位,也称为地址转换地址转换。可重定位装入方式是在装入一个作业的时候,把作业中的指令地址和数据地址全部一次性地转换成绝对地址,以后不再改变。故称为静态地址重定位静态地址重定位。163.2重定位重定位 程序的装入程序的装入二、可重定位装入方式二、可重定位装入方式(Relocation Loading Mode)(亦称静态地址重定位亦称静态地址重定位)优点:优点:实现简单,不需要硬件的支持。缺点:缺点:程序
14、一旦装入内存,移动就比较困难。有时间上的浪费。在程序装入内存时要将所有访问内存的地址转换成物理地址。173.2重定位重定位 程序的装入程序的装入三、动态运行时装入方式(三、动态运行时装入方式(Dynamic Run-Time LoadingDynamic Run-Time Loading)(亦称动态地址重定位)亦称动态地址重定位)在程序运行时完成从逻辑地址到物理地址的转换,靠硬件地址变换机在程序运行时完成从逻辑地址到物理地址的转换,靠硬件地址变换机构实现。构实现。即装入程序在把程序(装入模块)装入内存后,并不立即把程序中的逻辑地址转换为物理地址,而是把这种地址转换推迟到程序真正要执行时才进行。
15、最简单的办法是利用一个基址基址(重定位重定位)寄存器寄存器。在程序实际运行前,由操作系统把程序在内存的起始地址送入基址寄存器。在程序运行期间,凡遇到访问内存的操作,就由硬件机制自动地把用户程序的逻辑地址与基址寄存器的内容相加,其和就是实际访问内存的有效地址。所谓动态重定位动态重定位是由软件和硬件相配合来实现的。地址重定位不再是装入的时候一次完成了,而是设置一个基址寄存器,装入作业的时候,将作业在主存区域的首地址放入到基址寄存器中。作业执行的时候,由硬件的地址转换机构动态地对地址进行转换,执行指令的时候,只要将逻辑地址加上基址寄存器的内容,就得到了绝对地址。183.2重定位重定位 程序的装入程序
16、的装入三、动态运行时装入方式(三、动态运行时装入方式(Dynamic Run-Time LoadingDynamic Run-Time Loading)(亦称动态地址重定位)亦称动态地址重定位)193.2重定位重定位 程序的装入程序的装入三、动态运行时装入方式(三、动态运行时装入方式(Dynamic Run-Time LoadingDynamic Run-Time Loading)(亦称动态地址重定位)亦称动态地址重定位)动态地址重定位是由硬件机制在程序执行时完成的,程序中不执行的模块就不做地址映射的工作,这样节省了CPU的时间。重定位寄存器的内容由OS用特权指令来设置,比较灵活。动态地址重定位适合于多道程序运行环境,并且允许目标程序在内存中浮动。现代计算机系统中都采用动态地址映射技术。动态地址映射技术能满足以下目标:(1)具有给一个用户程序任意分配内存区的能力;(2)可实现虚拟存储;(3)具有重新分配的能力;(4)对于一个用户程序,可以分配到多个不同的存储区。203.2重定位重定位 静态地址重定位和动态地址重定位的区别静态地址重定位和动态地址重定位的区别静态重定位是在作业装入的时候一
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1