资源预览内容
第1页 / 共182页
第2页 / 共182页
第3页 / 共182页
第4页 / 共182页
第5页 / 共182页
第6页 / 共182页
第7页 / 共182页
第8页 / 共182页
第9页 / 共182页
第10页 / 共182页
亲,该文档总共182页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第六章 存储管理,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、SDRAM、SRAM等; 硬盘技术在大容量方面的发展:接口标准、存储密度等; 存储组织是指在存储技术和CPU寻址技术许可的范围内组织合理的存储结构。 其依据是访问速度匹配关系、容量要求和价格。 “寄存器-内存-外存”结构 “寄存器-缓存-内存-外存”结构; 微机中的存储层次组织: 访问速度越慢,容量越大,价格越便宜; 最佳状态应是各层次的存储器都处于均衡的繁忙状态(如:缓存命中率正好使主存读写保持繁忙);,返回,存储层次结构,快速缓存: Data Cache TLB(Translation Lookaside Buffer) 内存:DRAM, SDRAM等; 外存:软盘、硬盘、光盘、磁带等;,6.1.2 存储管理的功能,存储分配和回收:分配和回收算法及相应的数据结构。 地址变换: 可执行文件生成中的链接技术 程序加载(装入)时的重定位技术 进程运行时硬件和软件的地址变换技术和机构 存储共享和保护: 代码和数据共享 地址空间访问权限(读、写、执行) 存储器扩充:存储器的逻辑组织和物理组织; 由应用程序控制:覆盖; 由OS控制:交换(整个进程空间),虚拟存储的请求调入和预调入(部分进程空间),返回,6.1.3 重定位方法,重定位:在可执行文件装入时需要解决可执行文件中地址(指令和数据)和内存地址的对应。由操作系统中的装入程序loader来完成。 程序在成为进程前的准备工作 编辑:形成源文件(符号地址) 编译:形成目标模块(模块内符号地址解析) 链接:由多个目标模块或程序库生成可执行文件(模块间符号地址解析) 装入:构造PCB,形成进程(使用物理地址) 重定位方法: 绝对装入 可重定位装入 动态装入,返回,1. 逻辑地址、物理地址和地址映射,逻辑地址(相对地址,虚地址):用户的程序经过汇编或编译后形成目标代码,目标代码通常采用相对地址的形式。 其首地址为0,其余指令中的地址都相对于首地址来编址。 不能用逻辑地址在内存中读取信息。 物理地址(绝对地址,实地址):内存中存储单元的地址。物理地址可直接寻址。 地址映射:将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址。 当程序装入内存时, 操作系统要为该程序分配一个合适的内存空间,由于程序的逻辑地址与分配到内存物理地址不一致, 而CPU执行指令时,是按物理地址进行的,所以要进行地址转换。,逻辑地址、物理地址和地址映射,地址映射,2. 绝对装入(absolute loading),优点:装入过程简单。 缺点:过于依赖于硬件结构,不适于多道程序系统。,在可执行文件中记录内存地址,装入时直接定位在上述(即文件中记录的地址)内存地址。,3. 可重定位装入(relocatable loading),优点:不需硬件支持,可以装入有限多道程序(如MS DOS中的TSR)。 缺点:一个程序通常需要占用连续的内存空间,程序装入内存后不能移动。不易实现共享。,在可执行文件中,列出各个需要重定位的地址单元和相对地址值。当用户程序被装入内存时,一次性实现逻辑地址到物理地址的转换,以后不再转换(一般在装入内存时由软件完成)。即:装入时根据所定位的内存地址去修改每个重定位地址项,添加相应偏移量。,可执行文件在内存中的重定位,说明:重定位表中列出所有修改的位置。如:重定位表的150表示相对地址150处的内容为相对地址(即100为从0起头的相对位置)。在装入时,要依据重定位后的起头位置(2000)修改相对地址。 重定位修改:重定位表中的150-绝对地址2150(=2000+150) 内容修改:内容100变成2100(=100+2000)。,4. 动态装入(dynamic run-time loading),优点: OS可以将一个程序分散存放于不连续的内存空间,可以移动程序,有利用实现共享。 能够支持程序执行中产生的地址引用,如指针变量(而不仅是生成可执行文件时的地址引用)。 缺点:需要硬件支持(通常是CPU),OS实现较复杂。它是虚拟存储的基础。,在可执行文件中记录虚拟内存地址,装入和执行时通过硬件地址变换机构,完成虚拟地址到实际内存地址的变换。,6.1.4 链接,6.1.4.1 链接方法 6.1.4.2 链接举例,返回,链接是指多个目标模块在执行时的地址空间分配和相互引用。,6.1.4.1 链接方法,1. 静态链接(static-linking),返回,静态链接是在生成可执行文件时进行的。在目标模块中记录符号地址(symbolic address),而在可执行文件中改写为指令直接使用的数字地址。,2. 动态链接(dynamic-linking),优点 共享:多个进程可以共用一个DLL,节省内存,减少文件交换。 部分装入:一个进程可以将多种操作分散在不同的DLL中实现,而只将当前操作相应的DLL装入内存。 便于局部代码修改:即便于代码升级和代码重用;只要函数的接口参数(输入和输出)不变,则修改函数及其DLL,无需对可执行文件重新编译或链接。 便于运行环境适应:调用不同的DLL,就可以适应多种使用环境和提供不同功能。如:不同的显示卡只需厂商为其提供特定的DLL,而OS和应用程序不必修改。 缺点: 链接开销:增加了程序执行时的链接开销; 管理开销:程序由多个文件组成,增加管理复杂度。,在装入或运行时进行链接。通常被链接的共享代码称为动态链接库(DLL, Dynamic-Link Library)或共享库(shared library)。,6.1.4.2 Windows NT动态链接库,返回,库程序文件 .C:相当于给出一组函数定义的源代码; 模块定义文件 .DEF:相当于定义链接选项,也可在源代码中定义;如:DLL中函数的引入和引出(dllimport和dllexport)。 编译程序利用 .C文件生成目标模块 .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_DESCRIPTOR结构。 在装入时由系统根据该DLL映射在进程中的地址改写Import Address Table中的各项函数指针。Hint是DLL函数在DLL文件中的序号,当DLL文件修改后,就未必指向原先的DLL函数。在装入时,系统会查找相应DLL,并把它映射到进程地址空间,获得DLL中各函数的入口地址,定位本进程中对这些函数的引用;,装入时动态链接过程,注:Import Address Table是在装入时依据DLL模块的加载位置确定。,DLL函数的调用过程,运行时动态链接(run-time):在编程时通过LoadLibrary(给出DLL名称,返回装入和链接之后该DLL的句柄), FreeLibrary, GetProcAddress(其参数包括函数的符号名称,返回该函数的入口指针)等API来使用DLL函数。这时不再需要引入库(import library)。 LoadLibrary或LoadLibraryEx把可执行模块映射到调用进程的地址空间,返回模块句柄; GetProcAddress获得DLL中特定函数的指针,返回函数指针; FreeLibrary把DLL模块的引用计数减1;当引用计数为0时,拆除DLL模块到进程地址空间的映射;,运行时动态链接的例子,HINSTANCE hInstLibrary;/模块句柄定义 DWORD (WINAPI *InstallStatusMIF)(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 (InstallStatusMIF(“office97”, “Microsoft”, “Office 97”, “999.999”, “ENU”, “1234”, ”Completed successfully”, TRUE) !=0)/调用DLL模块中的函数FreeLibrary(hInstLibrary);/拆除映射,6.2 单一连续区存储管理,返回,内存分为两个区域:系统区,用户区。应用程序装入到用户区,可使用用户区全部空间。 最简单,适用于单用户、单任务的OS。 优点:易于管理。 缺点:对要求内存空间少的程序,造成内存浪费;程序全部装入,很少使用的程序部分也占用内存。,单一连续区存储管理,6.3 分区存储管理,6.3.1 原理 6.3.2 固定分区(fixed partitioning) 6.3.3 动态分区(dynamic partitioning) 6.3.4 分区分配算法 6.3.5 MS DOS中的分区存储管理,返回,6.3.1 原理,把内存分为一些大小相等或不等的分区(partition),每个应用进程占用一个或几个分区。操作系统占用其中一个分区。 特点:适用于多道程序系统和分时系统 支持多个程序并发执行 难以进行内存分区的共享。 问题:可能存在内碎片和外碎片。 内碎片:占用分区之内未被利用的空间 外碎片:占用分区之间难以利用的空闲分区(通常是小空闲分区)。,返回,分区的数据结构:分区表,或分区链表 可以只记录空闲分区,也可以同时记录空闲和占用分区 分区表中,表项数目随着内存的分配和释放而动态改变,可以规定最大表项数目。 分区表可以划分为两个表格:空闲分区表,占用分区表。从而减小每个表格长度。空闲分区表中按不同分配算法相应对表项排序。,内存紧缩(compaction):将各个占用分区向内存一端移动。使各个空闲分区聚集在另一端,然后将各个空闲分区合并成为一个空闲分区。 对占用分区进行内存数据搬移占用CPU时间 如果对占用分区中的程序进行“浮动“,则其重定位需要硬件支持。 紧缩时机:每个分区释放后,或内存分配找不到满足条件的空闲分区时,6.3.2 固定分区(fixed partitioning),分区大小相等:只适合于多个相同程序的并发执行(处理多个类型相同的对象)。 分区大小不等:多个小分区、适量的中等分区、少量的大分区。根据程序的大小,分配当前空闲的、适当大小的分区。,返回,把内存划分为若干个固定大小的连续分区。,固定分区(大小相同),固定分区(多种大小),优点:易于实现,开销小。 缺点: 内碎片造成浪费 分区总数固定,限制了并发执行的程序数目。 可以和覆盖、交换技术配合使用。 采用的数据结构:分区表记录分区的大小和使用情况,
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号