2001-05-16chapter6

上传人:ji****n 文档编号:54820268 上传时间:2018-09-20 格式:PPT 页数:182 大小:2.93MB
返回 下载 相关 举报
2001-05-16chapter6_第1页
第1页 / 共182页
2001-05-16chapter6_第2页
第2页 / 共182页
2001-05-16chapter6_第3页
第3页 / 共182页
2001-05-16chapter6_第4页
第4页 / 共182页
2001-05-16chapter6_第5页
第5页 / 共182页
点击查看更多>>
资源描述

《2001-05-16chapter6》由会员分享,可在线阅读,更多相关《2001-05-16chapter6(182页珍藏版)》请在金锄头文库上搜索。

1、第六章 存储管理,6.1 引言 6.2 单一连续区存储管理 6.3 分区存储管理 6.4 覆盖和交换技术 6.5 页式和段式存储管理 6.6 虚拟存储 6.7 高速缓冲存储器 6.8 存储管理举例,存储管理是指存储器资源(主要指内存并涉及外存)的管理。 存储器资源的组织(如内存的组织方式) 地址变换(逻辑地址与物理地址的对应关系维护) 虚拟存储的调度算法,6.1 引言,6.1.1 存储组织 6.1.2 存储管理的功能 6.1.3 重定位方法 6.1.4 链接,返回,6.1.1 存储组织,存储器的功能是保存数据,存储器的发展方向是高速、大容量和小体积。 内存在访问速度方面的发展:DRAM、SDR

2、AM、SRAM等; 硬盘技术在大容量方面的发展:接口标准、存储密度等; 存储组织是指在存储技术和CPU寻址技术许可的范围内组织合理的存储结构。 其依据是访问速度匹配关系、容量要求和价格。 “寄存器-内存-外存”结构 “寄存器-缓存-内存-外存”结构; 微机中的存储层次组织: 访问速度越慢,容量越大,价格越便宜; 最佳状态应是各层次的存储器都处于均衡的繁忙状态(如:缓存命中率正好使主存读写保持繁忙);,返回,存储层次结构,快速缓存: Data Cache TLB(Translation Lookaside Buffer) 内存:DRAM, SDRAM等; 外存:软盘、硬盘、光盘、磁带等;,6.1

3、.2 存储管理的功能,存储分配和回收:分配和回收算法及相应的数据结构。 地址变换: 可执行文件生成中的链接技术 程序加载(装入)时的重定位技术 进程运行时硬件和软件的地址变换技术和机构 存储共享和保护: 代码和数据共享 地址空间访问权限(读、写、执行) 存储器扩充:存储器的逻辑组织和物理组织; 由应用程序控制:覆盖; 由OS控制:交换(整个进程空间),虚拟存储的请求调入和预调入(部分进程空间),返回,6.1.3 重定位方法,重定位:在可执行文件装入时需要解决可执行文件中地址(指令和数据)和内存地址的对应。由操作系统中的装入程序loader来完成。 程序在成为进程前的准备工作 编辑:形成源文件(

4、符号地址) 编译:形成目标模块(模块内符号地址解析) 链接:由多个目标模块或程序库生成可执行文件(模块间符号地址解析) 装入:构造PCB,形成进程(使用物理地址) 重定位方法: 绝对装入 可重定位装入 动态装入,返回,1. 逻辑地址、物理地址和地址映射,逻辑地址(相对地址,虚地址):用户的程序经过汇编或编译后形成目标代码,目标代码通常采用相对地址的形式。 其首地址为0,其余指令中的地址都相对于首地址来编址。 不能用逻辑地址在内存中读取信息。 物理地址(绝对地址,实地址):内存中存储单元的地址。物理地址可直接寻址。 地址映射:将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址。 当程序装

5、入内存时, 操作系统要为该程序分配一个合适的内存空间,由于程序的逻辑地址与分配到内存物理地址不一致, 而CPU执行指令时,是按物理地址进行的,所以要进行地址转换。,逻辑地址、物理地址和地址映射,地址映射,2. 绝对装入(absolute loading),优点:装入过程简单。 缺点:过于依赖于硬件结构,不适于多道程序系统。,在可执行文件中记录内存地址,装入时直接定位在上述(即文件中记录的地址)内存地址。,3. 可重定位装入(relocatable loading),优点:不需硬件支持,可以装入有限多道程序(如MS DOS中的TSR)。 缺点:一个程序通常需要占用连续的内存空间,程序装入内存后不

6、能移动。不易实现共享。,在可执行文件中,列出各个需要重定位的地址单元和相对地址值。当用户程序被装入内存时,一次性实现逻辑地址到物理地址的转换,以后不再转换(一般在装入内存时由软件完成)。即:装入时根据所定位的内存地址去修改每个重定位地址项,添加相应偏移量。,可执行文件在内存中的重定位,说明:重定位表中列出所有修改的位置。如:重定位表的150表示相对地址150处的内容为相对地址(即100为从0起头的相对位置)。在装入时,要依据重定位后的起头位置(2000)修改相对地址。 重定位修改:重定位表中的150-绝对地址2150(=2000+150) 内容修改:内容100变成2100(=100+2000)

7、。,4. 动态装入(dynamic run-time loading),优点: OS可以将一个程序分散存放于不连续的内存空间,可以移动程序,有利用实现共享。 能够支持程序执行中产生的地址引用,如指针变量(而不仅是生成可执行文件时的地址引用)。 缺点:需要硬件支持(通常是CPU),OS实现较复杂。它是虚拟存储的基础。,在可执行文件中记录虚拟内存地址,装入和执行时通过硬件地址变换机构,完成虚拟地址到实际内存地址的变换。,6.1.4 链接,6.1.4.1 链接方法 6.1.4.2 链接举例,返回,链接是指多个目标模块在执行时的地址空间分配和相互引用。,6.1.4.1 链接方法,1. 静态链接(sta

8、tic-linking),返回,静态链接是在生成可执行文件时进行的。在目标模块中记录符号地址(symbolic address),而在可执行文件中改写为指令直接使用的数字地址。,2. 动态链接(dynamic-linking),优点 共享:多个进程可以共用一个DLL,节省内存,减少文件交换。 部分装入:一个进程可以将多种操作分散在不同的DLL中实现,而只将当前操作相应的DLL装入内存。 便于局部代码修改:即便于代码升级和代码重用;只要函数的接口参数(输入和输出)不变,则修改函数及其DLL,无需对可执行文件重新编译或链接。 便于运行环境适应:调用不同的DLL,就可以适应多种使用环境和提供不同功能

9、。如:不同的显示卡只需厂商为其提供特定的DLL,而OS和应用程序不必修改。 缺点: 链接开销:增加了程序执行时的链接开销; 管理开销:程序由多个文件组成,增加管理复杂度。,在装入或运行时进行链接。通常被链接的共享代码称为动态链接库(DLL, Dynamic-Link Library)或共享库(shared library)。,6.1.4.2 Windows NT动态链接库,返回,库程序文件 .C:相当于给出一组函数定义的源代码; 模块定义文件 .DEF:相当于定义链接选项,也可在源代码中定义;如:DLL中函数的引入和引出(dllimport和dllexport)。 编译程序利用 .C文件生成目

10、标模块 .OBJ 库管理程序利用 .DEF文件生成DLL输入库 .LIB和输出文件 .EXP 链接程序利用 .OBJ和 .EXP文件生成动态链接库 .DLL。,1. 构造动态链接库,DLL是包含函数和数据的模块,它的调用模块可为EXE或DLL,它由调用模块在运行时加载;加载时,它被映射到调用进程的地址空间。在VC中有一类工程用于创建DLL。,2. DLL的装入方法,装入时动态链接(load-time): 在编程时显式调用某个DLL函数,该DLL函数在可执行文件中称为引入(import)函数。 链接时需利用 .LIB文件。在可执行文件中为引入的每个DLL建立一个IMAGE_IMPORT_DESC

11、RIPTOR结构。 在装入时由系统根据该DLL映射在进程中的地址改写Import Address Table中的各项函数指针。Hint是DLL函数在DLL文件中的序号,当DLL文件修改后,就未必指向原先的DLL函数。在装入时,系统会查找相应DLL,并把它映射到进程地址空间,获得DLL中各函数的入口地址,定位本进程中对这些函数的引用;,装入时动态链接过程,注:Import Address Table是在装入时依据DLL模块的加载位置确定。,DLL函数的调用过程,运行时动态链接(run-time):在编程时通过LoadLibrary(给出DLL名称,返回装入和链接之后该DLL的句柄), FreeL

12、ibrary, GetProcAddress(其参数包括函数的符号名称,返回该函数的入口指针)等API来使用DLL函数。这时不再需要引入库(import library)。 LoadLibrary或LoadLibraryEx把可执行模块映射到调用进程的地址空间,返回模块句柄; GetProcAddress获得DLL中特定函数的指针,返回函数指针; FreeLibrary把DLL模块的引用计数减1;当引用计数为0时,拆除DLL模块到进程地址空间的映射;,运行时动态链接的例子,HINSTANCE hInstLibrary;/模块句柄定义 DWORD (WINAPI *InstallStatusMI

13、F)(char*, char*, char*, char*, char*, char*, char*, BOOL);/函数指针定义 if (hInstLibrary = LoadLibrary(“ismif32.dll“)/映射InstallStatusMIF = (DWORD (WINAPI *)(char*,char*,char*, char*, char*, char*, char*, BOOL) GetProcAddress(hInstLibrary, “InstallStatusMIF“);/获得函数指针if (InstallStatusMIF)if (InstallStatusMI

14、F(“office97”, “Microsoft”, “Office 97”, “999.999”, “ENU”, “1234”, ”Completed successfully”, TRUE) !=0)/调用DLL模块中的函数FreeLibrary(hInstLibrary);/拆除映射,6.2 单一连续区存储管理,返回,内存分为两个区域:系统区,用户区。应用程序装入到用户区,可使用用户区全部空间。 最简单,适用于单用户、单任务的OS。 优点:易于管理。 缺点:对要求内存空间少的程序,造成内存浪费;程序全部装入,很少使用的程序部分也占用内存。,单一连续区存储管理,6.3 分区存储管理,6.3

15、.1 原理 6.3.2 固定分区(fixed partitioning) 6.3.3 动态分区(dynamic partitioning) 6.3.4 分区分配算法 6.3.5 MS DOS中的分区存储管理,返回,6.3.1 原理,把内存分为一些大小相等或不等的分区(partition),每个应用进程占用一个或几个分区。操作系统占用其中一个分区。 特点:适用于多道程序系统和分时系统 支持多个程序并发执行 难以进行内存分区的共享。 问题:可能存在内碎片和外碎片。 内碎片:占用分区之内未被利用的空间 外碎片:占用分区之间难以利用的空闲分区(通常是小空闲分区)。,返回,分区的数据结构:分区表,或分区

16、链表 可以只记录空闲分区,也可以同时记录空闲和占用分区 分区表中,表项数目随着内存的分配和释放而动态改变,可以规定最大表项数目。 分区表可以划分为两个表格:空闲分区表,占用分区表。从而减小每个表格长度。空闲分区表中按不同分配算法相应对表项排序。,内存紧缩(compaction):将各个占用分区向内存一端移动。使各个空闲分区聚集在另一端,然后将各个空闲分区合并成为一个空闲分区。 对占用分区进行内存数据搬移占用CPU时间 如果对占用分区中的程序进行“浮动“,则其重定位需要硬件支持。 紧缩时机:每个分区释放后,或内存分配找不到满足条件的空闲分区时,6.3.2 固定分区(fixed partitioning),分区大小相等:只适合于多个相同程序的并发执行(处理多个类型相同的对象)。 分区大小不等:多个小分区、适量的中等分区、少量的大分区。根据程序的大小,分配当前空闲的、适当大小的分区。,返回,把内存划分为若干个固定大小的连续分区。,固定分区(大小相同),固定分区(多种大小),优点:易于实现,开销小。 缺点: 内碎片造成浪费 分区总数固定,限制了并发执行的程序数目。 可以和覆盖、交换技术配合使用。 采用的数据结构:分区表记录分区的大小和使用情况,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号