Operating_System_Chapter-6_Fall_2011

Operating_System_Chapter-6_Fall_2011 - 第6章 内存管理...

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: 第6章 内存管理 6.1 内存管理概述 6.2 分区管理 6.3 页式管理 6.4 段式管理 6.5 段页式管理 6.6 内存分配与释放系统调用 IE310, 1-1, Feb. 18th, 2008, [email protected] Shanghai Jiao Tong University 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.1 内存管理概述 内存管理的功能 内存的分配方式 地址转换 内存空间的共享和保护 内存空间的逻辑扩充 IE310, 6-2, [email protected] Shanghai Jiao Tong University 6.1 内存管理概述 6.1.1 内存管理的功能 内存空间的分配和回收 地址转换 程序在装入内存后,其程序地址和内存地址是不一致的。 为了能让程序正常执行,操作系统必须完成逻辑地址与物理地址之间 的转换。 内存空间的共享和保护 由操作系统完成内存空间的分配和管理,使程序设计人员摆脱内存分 配的麻烦,提高编程效率。 记住每个内存块的具体使用情况。 在用户不使用内存空间时,系统负责将其收回。 操作系统一般必须提供进程间的内存共享机制。 为了保证进入内存的每个程序都在自己的空间内运行,互不干扰,系 统必须提供相应的内存保护措施。 内存空间的逻辑扩充 借助覆盖、交换和虚拟存储技术,为用户提供比内存大的地址空间, 实现扩充内存容量的目的。 IE310, 6-3, [email protected] Shanghai Jiao Tong University 6.1 内存管理概述 6.1.2 内存的分配方式 内存分配按分配时机的不同,可分为三种方式: 直接分配 静态分配 这种方式是指程序员采用物理内存地址编写程序。使用这种方式,必须事先 划定内存的使用空间,因此,这种方式下的内存利用率不高,用户使用较困 难。 内存分配是在程序编写时一次性完成的。 在作业装入内存时才确定它在内存中的位置。 内存分配是在作业装入内存并投入运行前由系统为其一次性分配其所需的全 部内存;如果没有足够的内存空间,则该作业就不能装入内存运行。 一旦作业进入内存之后,在其整个运行过程中,不能移动位置,不允许作业 再申请其他内存。 内存分配是在作业运行前一次性完成的。 动态分配 在作业装入内存时才确定它在内存中的位置。 但是,在作业的运行过程中,允许作业申请附加的内存空间,或者向系统归 还其不再需要的内存。 在整个运行期间,作业在内存中的位置可能上下浮动。 即分配工作可以在作业运行前以及作业运行过程中逐步完成。 现代操作系统所一般采用的方式。 IE310, 6-4, [email protected] Shanghai Jiao Tong University 6.1 内存管理概述 6.1.3 地址转换 物理地址与逻辑地址 物理地址 也称内存地址、绝对地址、实地址,它是用于唯一 标识一个内存单元的编号。 内存单元一般为一个字节Byte,也就是8比特位bit。 比如,00 00 00 01H和00 00 00 02H所指定地址 的内存单位,就是两个相邻的内存字节。 所有的物理地址构成了物理空间。 符号地址 在源程序中采用符号所表示的地址。 用符号地址(符号名)表示的程序空间称为名空间。 IE310, 6-5, [email protected] 6.1 内存管理概述(地址转换) Shanghai Jiao Tong University 物理地址与逻辑地址 逻辑地址 现代操作系统对内存几乎均采用动态分配的方式, 在程序被加载到内存执行之前,它们在内存中的位 置预先是不确定的。 这样,由各目标模块连接形成的程序可执行代码, 使用的是逻辑地址,也称程序地址、虚拟地址、相 对地址。 逻辑地址指在源程序经过汇编或编译后形成的目标 代码中,用于反映目标代码中指令或数据的相对位 置关系的地址 逻辑地址都是以” 0”为基址顺序进行编址的,相对地 址就是相对于这个基址而言的。 所生成的目标程序占据一定的地址空间,称为程序 的逻辑地址空间,简称逻辑空间,0 ~ (2^N-1)。 IE310, 6-6, [email protected] 6.1 内存管理概述(地址转换) Shanghai Jiao Tong University 可执行程序 逻辑地址空间 源程序 (名空间) Data1: 3456 1000 0 Func_a: Load AX,[data1] 100 Load AX,[200] 1100 Load AX,[200] 地址映射 编译 连接 200 内存影像 物理地址空间 3456 1200 3456 IE310, 6-7, [email protected] 6.1 内存管理概述(地址转换) Shanghai Jiao Tong University 地址重定位 程序的可执行代码自身对内存使用的是逻 辑地址。 然而,处理器CPU执行指令时,按物理地 址存取在物理内存中的指令和数据。 为了保证程序能被正确执行,操作系统必 须根据实际分配的内存,将指令和数据的 逻辑地址转换为物理地址。 把逻辑地址转换为物理地址的工作称为" 地址转换"或"地址重定位" 。 IE310, 6-8, [email protected] 6.1 内存管理概述(地址转换) Shanghai Jiao Tong University 地址重定位之静态重定位 在加载一个程序到内存时,但是在程序执行之 前,由操作系统的装入程序,把程序中的指令 和数据所引用的相对地址全部转换成绝对地址。 由于地址转换工作是在程序执行之前集中一次 完成的,所以在程序的执行过程中就无需再进 行地址转换工作。 优点:不需要硬件的支持。 缺点: 程序必须占用连续的内存空间; 一旦程序装入内存之后就不能移动; 所需存储量必须事先确定。 IE310, 6-9, [email protected] 6.1 内存管理概述(地址转换) Shanghai Jiao Tong University 地址重定位之动态重定位 是在程序执行期间进行的地址转换,由专门的硬件机构来完成的 在处理器CPU中设置重定位寄存器。 在加载用户程序时,操作系统的装入程序把用户程序加载到所分配的内 存空间中。 然后,把该内存空间的起始地址写入重定位寄存器。 程序执行时,指令寄存器中的地址仍然还是相对地址。 该相对地址(偏移地址)与重定位寄存器(基地址)中的值相加就是该指令 的绝对地址。 实际从该绝对地址处的内存取指令。 所以,动态重定位是在指令的执行过程中进行的。 优点: 程序所占的内存空间位置是动态可变的,当程序从某个内存区域移到另一个 区域时,只需要修改相应的重定位寄存器BR 的内容即可; 提供了实现虚拟存储器的可能性,比如部分地、动态地分配内存。 缺点: 需要硬件的支持; 实现存储管理的软件算法较为复杂。 IE310, 6-10, [email protected] 6.1 内存管理概述(地址转换) Shanghai Jiao Tong University 地址重定位之动态重定位(示意) BR 0 . . . 1000 1000 . . . VR 100 LOAD AX,[200] . . . 200 3456 . . . 300 200 + LOAD AX,[200] 1100 . . . 3456 . . . . . . 1200 1300 IE310, 6-11, [email protected] Shanghai Jiao Tong University 6.1 内存管理概述 6.1.4 内存空间的共享和保护 共享内存是最为有效的进程间大容量通信手段。 在现代操作系统管理下内存之中,既有操作系 统的进程,又有用户应用程序的进程。 必须设法防止各进程之间的相互干扰,以免破 坏系统的安全性和一致性。 各进程分配有相应的内存空间范围,它们一般 只能访问自己的存储区域而不能互相干扰。 操作系统对内存中的程序代码和数据所作出的 访问控制与保护被称为存储保护。 IE310, 6-12, [email protected] Shanghai Jiao Tong University 6.1 内存管理概述(内存空间的共享和保护) 界限地址保护法 系统为每个进程设置一对上 界寄存器和下界寄存器,分 别用来存放其在物理内存空 间的上、下边界地址。系统 总是将地址映射所形成的物 理地址与这两个寄存器的值 进行比较。如果超出范围, 即生成越界中断。 与此等价的是基址寄存器和 限长寄存器。 IE310, 6-13, [email protected] Shanghai Jiao Tong University 6.1 内存管理概述(内存空间的共享和保护) xxxx存储保护键法/存储访问键法 为每一个受保护的存储块分配一个保护键 不同进程则有不同的权限代码 仅当权限代码和存储保护键匹配时才允许 访问 类似于Unix系统下文件系统的访问权限 设置:-rwxr-xr-x。 IE310, 6-14, [email protected] Shanghai Jiao Tong University 6.1 内存管理概述 6.1.5 内存空间的逻辑扩充 虚拟存储器 虚拟存储器是具有请求调入和交换功能, 能仅把作业的一部分装入内存便可运行作 业的存储器系统,它是一种从逻辑上对内 存容量进行扩充的虚构的存储器系统。 虚拟存储器的理论基础是程序的局部性原 理,包括时间局部性和空间局部性。 IE310, 6-15, [email protected] Shanghai Jiao Tong University 6.1 内存管理概述(内存空间的逻辑扩充) 常规处理问题分析 一次性:如果将作业的全部信息都装入内存, 那么,进程的执行过程实际上没有同时使用这 些信息,有些部分运行一遍后再也不用,有些 部分甚至在进程的整个运行过程中也不会被使 用到(如错误处理部分)。 驻留性:以上这些在运行中不用的、或暂时不 用的以及某种条件下才用的代码和数据,都继 续驻留在内存中。 前述一次性和驻留性,显然是对宝贵的内存资 源的一种严重浪费,极大地降低了内存空间的 利用率,减少了系统的吞吐量。 IE310, 6-16, [email protected] Shanghai Jiao Tong University 6.1 内存管理概述(内存空间的逻辑扩充) 局部性原理 程序执行时的局部性原理:进程的执行代码和数据的访问都有聚集 成群的倾向,在一个时间段内,程序仅在某个部分执行,或仅访问 存储空间的某个区域。比如: 程序中的某些部分在程序的整个运行期间可能根本就不用,如出错处 理程序,只有数据或计算处理出错时才会运行。而在程序正常执行情 况下,没有必要把它调入内存。 许多表格占用固定数量的内存空间,而实际上只使用其中的一部分。 许多程序段是顺序执行的,还有一些是互斥执行的,在运行过程中可 能只用到其中的某一个,没有必要同时驻留内存。 在程序的一次运行过程中,有些程序段执行后,从某个时刻起就不再 用到。 前述种种情况表现为时间局部性和空间局部性。 局部性原理充分说明,进程执行时没有必要把其全部信息都同时放 在内存中,而可以仅仅装入其中的一部分,其它部分需要用到时再 行换入。 IE310, 6-17, [email protected] Shanghai Jiao Tong University 6.1 内存管理概述(内存空间的逻辑扩充) 虚拟存储器的基本思想 把有限的内存空间与大容量的外存统一管理,构成一个 远大于实际内存的、虚拟的存储器。 外存是作为内存的直接延伸,用户并不会感觉到内、外 存的区别,即把两级存储器当作一级存储器来看待。 在一个程序运行期间,其全部信息装入虚存,实际上可 能只有当前运行的必需的一部分信息被存放在物理内存 中,其它的则存放于外存。 上述外存指由操作系统管理的虚拟存储器的一部分,比 如硬盘中的内存交换文件。 当需要访问目前不在内存的信息时,系统自动将其从外 存(比如硬盘中的内存交换文件)调入内存。 这就是,"部分装入、部分交换" 。 IE310, 6-18, [email protected] Shanghai Jiao Tong University 6.1 内存管理概述(内存空间的逻辑扩充) 虚拟存储器 虚拟存储器是基于程序局部性原理的一种假想的而不是 物理存在的存储器,允许用户程序以逻辑地址来寻址, 而不必考虑在物理内存上的位置和大小。 这种将物理空间和逻辑空间分开编址但又统一管理和使 用的技术为用户编程提供了极大的方便。 为了实现虚拟存储器,必须解决好以下有关问题: 主辅存统一管理问题; 逻辑地址到物理地址的转换问题; 部分装入问题; 部分交换问题。 目前,虚拟存储管理主要应用以下几种实现技术: 请求分页式 请求分段式 段页式虚拟存储管理 IE310, 6-19, [email protected] Shanghai Jiao Tong University 6.2 分区管理 分区管理是把内存划分为若干个大小不等 的区域,除操作系统占用一个区域以外, 其余的由各进程共享。 分区管理是一种最简单的存储管理方法 IE310, 6-20, [email protected] Shanghai Jiao Tong University 6.2.1 6.2.2 6.2.3 6.2.4 6.2 分区管理 单分区管理 固定分区 可变分区 覆盖与交换 IE310, 6-21, [email protected] Shanghai Jiao Tong University 6.2 分区管理 6.2.1 单分区管理 这是一种最简单的单一连续存储区管理方式。 只能用于单用户、单任务的操作系统。 采用这种存储管理方式时,内存分为以下三个 区: 系统区:仅提供给操作系统使用,通常设置在内存 的低址部分; 用户区:指除系统区以外的全部内存空间,提供给 用户使用。 空闲区:指剩余部分存储区。 IE310, 6-22, [email protected] 6.2 分区管理(单分区管理) Shanghai Jiao Tong University 6.2.1 单分区管理 单一连续区主要是指内存只供一个用户进程使用。 其分配方式主要采用静态分配方式,即作业一旦进入内 存,就要等到进程执行完毕之后才能释放内存。 此时,如果用户进程要求的内存资源大于内存可利用空 间,系统就会返回出错,导致该进程无法执行。 单分区管理方式基本上没有提供存储保护措施。这是因 为: 机器由用户独占,不可能存在来自其它用户进程的干扰问题。 如果出现破坏行为,一般也就是用户进程区破坏操作系统的系 统区。 上述破坏的后果,只是影响该用户进程自身的运行,就好比非 要对一独栋别墅进行破坏性装修的后果。 系统的重新启动对于单用户、单任务操作系统的影响一般不是 很大,且一般也能够较快地完成启动。 IE310, 6-23, [email protected] Shanghai Jiao Tong University 6.2 分区管理 6.2.2 固定分区 把可用空间划分成若干个连续的区域,每 个区域采用固定的大小,但可以各不相同。 除操作系统占用一个区域外,其余区域为 系统中多个进程所共享。 程序装入时,系统将尝试根据其需求量将 一个满足其要求的分区分配给它。 因为在系统运行期间,分区大小、数目都 不变,所以固定分区也称为静态分区。 IE310, 6-24, [email protected] Shanghai Jiao Tong University 6.2 分区管理(固定分区) 分区说明表 为了能对内存的划分和使用情况进行有效 的管理与控制,操作系统设置并维护数据 结构--分区说明表。 分区说明表包括各分区号、分区大小、起 始地址和是否空闲等信息。 内存的分配、释放、存储保护和地址变换 等都通过分区说明表进行。 IE310, 6-25, [email protected] 6.2 分区管理(固定分区) Shanghai Jiao Tong University 分区说明表的例子 0 20k 分区号 1 2 3 4 起始 地址 分区 长度 分区 状态 20k 8k 操作系统 进程A(6k) 已分配 28k 60k 32k 64k 124k 132k 28k 60k 已分 进程B(25k) 进程C(36k) 第1分区 第2分区 第3分区 124k 已分配 第4分区 未分配 256k IE310, 6-26, [email protected] 6.2 分区管理(固定分区) Shanghai Jiao Tong University 分区说明表(续) 固定分区法的内存分配:当用户程序装入执行时,通过 请求表提出内存分配要求,查询分区说明表,从中找出 一个满足要求的空闲分区。 固定分区法的内存回收:当进程执行完毕,不再需要内 存资源时,操作系统将对应分区的状态置为未分配即可。 固定分区法的主要优点:简单易行,特别是对于作业的 大小可以预先知道的专用系统比较实用。 固定分区法的缺点: 作业的大小受到分区大小的限制,这是因为分区的大小是在系 统启动时划定的。 由于作业的大小不可能正好等于某个分区的大小,故在每个分 配的区域中,通常都有一部分未被作业占用而浪费掉。 采用分区管理分配存储器时分配给用户而未被利用的部 分,称作存储器的”内零头(Internal Fragmentation)”, 即碎片。 IE310, 6-27, [email protected] Shanghai Jiao Tong University 6.2 分区管理 6.2.3 可变分区 为了减少存储区域的”内零头”,并使存储空间 更加适合不同的作业组合,设计了可变分区。 可变分区又称动态分区。 与固定分区的主要区别是: 系统在作业执行前并不划分分区,分区的划分是在 作业的处理过程中进行的—分区数目可变; 且分区的大小可随作业或进程对内存的要求而改 变—分区大小可变。 采用动态分区法,在系统启动时,除了操作系 统常驻内存部分之外,只有一个空闲分区。随 后,分配程序将该区依次划分给陆续调入的作 业。 IE310, 6-28, [email protected] 6.2 分区管理(可变分区) Shanghai Jiao Tong University 可变分区的例子 0k 进程A 进程B 进程C 进程D … 8k 16k 64k 124k … 操作系统 0k 操作系统 进程A(8k) 40k 空闲1(8k) 48k 40k 0k 40k 操作系统 进程B(16k) 48k 进程B(16k) 64k 64k 进程C(64k) 128k 128k 空闲1(472k) 空闲2(64k) 进程D(124k) 252k 进程D(124k) 252k 空闲1(260k) 512k 可变分区运行之初 512k 进程A.B.C.D进入内存 空闲3(260k) 512k 进程A和进程C已释放内存 IE310, 6-29, [email protected] 6.2 分区管理(可变分区) Shanghai Jiao Tong University 空闲分区的组织形式 与固定分区法类似,动态分区法也实用类 似分区说明表等数据结构对内存进行管理。 除了分区说明表之外,动态分区法还把内 存中的可用分区单独构成可用分区表或可 用分区链,以描述系统内的内存资源。 当然,请求内存的作业或进程也可以构成 一个内存资源的请求表。 IE310, 6-30, [email protected] Shanghai Jiao Tong University 6.2 分区管理(可变分区) 可变分区的组织形式:可用表、自由链、请求表 40k 分区 号 起始 地址 分区 长度 1 40k 8k 3 64k 64k 5 252k 260k … … … 操作系统 40k 64k 48k 64k 8k 进程B(16k) 252k 64k 128k 进程D(124k) 252k 0k 260k 进程 号 请求 长度 PA PC PE … 8k 64k 12k … IE310, 6-31, [email protected] 6.2 分区管理(可变分区) Shanghai Jiao Tong University 空闲分区的组织形式 可用表: 自由链: 用于为内存中每个尚未分配出去的分区设置一个表项,每个分区项包 含分区序号、分区起始地址及分区的大小等表目。 采用表格结构,管理过程比较简单。 表的大小难以确定,可用表要占用一部分内存。 自由链则是利用每个内存空闲区的头几个单元存放该空闲区的下一个 空闲区的起始地址以及本空闲区的大小。 所有的空闲区被链接起来。 操作系统还设置一个首指针,它指向自由的第一个空闲区的起始地 址。 操作系统通过该链首指针找到自由链,然后可以遍历自由链。 由于自由链数据结构基本上利用了空闲区自身的单元,所以基本上不 占用额外的内存。 请求表:请求表的每个表目描述请求内存资源的进程号以及所请求 的内存大小。 IE310, 6-32, [email protected] 6.2 分区管理(可变分区) Shanghai Jiao Tong University 内存的分配与回收 对于请求表中要求的内存长度,在可用表或者 自由链中遍历寻找出一个合适的空闲区。 在分配空闲区之后,必须更新可用表或自由链。 在释放所占的内存分区时,系统应进行回收。 在可变式分区中,应该检查回收区与内存中前 后空闲区是否相邻,若相邻,则应进行合并, 形成一个较大的空闲区,并对相应的链表指针 进行修改;若不相邻,应将空闲区插入到空闲 区链表的适当位置。 IE310, 6-33, [email protected] 6.2 分区管理(可变分区) Shanghai Jiao Tong University 外部碎片 动态存储分配在开始时很好,但最后将导致在存储器中出现许多空 洞,随着时间的推移,存储器中产生了越来越多的碎片,存储器的 利用率会随之下降,该现象被称作外部碎片(External Fragmentation)。 比如,每一个碎片不足以容纳一个新作业,但所有碎片的长度总和 却很可能满足该新作业的要求。 造成该问题的原因在于每个作业都要求占据连续的内存。 解决外部碎片问题的一种技术是压缩:操作系统移动各进程空间, 使得所有的自由空间连成一片。 把多个分散的小分区拼接成大分区的作业称为"紧凑"或"拼接" 。 压缩的困难在于它是一个非常费时的过程,浪费许多处理机时间。 压缩意味着要有动态重定位的能力,也即应能够把进程从主存的一 块区域移动到另一块区域而不会使进程对存储器的访问无效。 IE310, 6-34, [email protected] 6.2 分区管理(可变分区) Shanghai Jiao Tong University 外部碎片紧凑的例子 操作系统 操作系统 操作系统 进程A 进程A 进程A 空闲1 进程B 进程B 进程B 进程C 进程C 空闲2 进程D 进程C 空闲1 空闲3 紧凑之初 空闲1 紧凑之后 装入进程D之后 IE310, 6-35, [email protected] 6.2 分区管理(可变分区) Shanghai Jiao Tong University 内存的分配算法 解决外部碎片问题的另外一种技术是改进 操作系统所采用的内存分配算法。 对于内存的可变分区法,操作系统通常考 虑采用如下三种方法: 最佳适应算法--空闲区按由小到大的次序排列 最坏适应算法--空闲区按由大到小的次序排列 最先适应算法--空闲区按地址递增的次序排列 IE310, 6-36, [email protected] 6.2 分区管理(可变分区) Shanghai Jiao Tong University 内存的分配算法之最佳适应算法 空闲区按由小到大的次序排列。 按照大于所要求的大小且与之最为接近的 原则查找和分配空闲区。 被选中的自由块被划分成两个部分:一部 分与请求的大小相等,分配给进程;剩下 的部分留在自由块链中,但需要重新排序。 这样,作业一旦被装入选中的空闲区之后, 剩余部分将是最小的。 IE310, 6-37, [email protected] 6.2 分区管理(可变分区) Shanghai Jiao Tong University 内存的分配算法之最佳适应算法(续) 优点:如果存储空间中具有正好是所要求大小 的自由块,则必然被选中;否则,也只对比要 求稍大的自由块划分,而绝不会去划分一个更 大的自由块。这样,就比较容易满足其后可能 遇到大作业对存储区域的要求。 缺点:每次分配总是产生最小的自由块。长时 间运行之后,将产生大量的因为太小而无法使 用的小自由块。为此可以设置一个参数G,当 选中的自由块与要求的大小之差小于G ,则不再 对它划分,而把整个自由块分配给申请的作业。 对于回收过程,链表管理较为繁琐。 IE310, 6-38, [email protected] 6.2 分区管理(可变分区) Shanghai Jiao Tong University 内存的分配算法之最坏适应算法 空闲区按按由大到小的次序排列。 与最佳适应算法相反,在为作业选择存储区域 时,总是寻找最大的自由块。 优点:在划分之后剩下的自由块也是最大的, 因而很可能可以被再次分配使用。 缺点:由于最大的自由块总是首先被划分后分 配,往往不能满足其后可能到来的大作业对存 储区域的要求。 IE310, 6-39, [email protected] 6.2 分区管理(可变分区) Shanghai Jiao Tong University 内存的分配算法之最先适应算法 空闲区按地址递增的次序排列,即每个后继自由块的起 始地址总是比前者的大。 从自由块链的始端开始查找,选择第一个足以满足请求 的自由块,而不管它究竟有多大。 与前面的两个算法一样,被选中的自由块被划分成两个 部分:一部分与请求的大小相等,分配给进程;剩下的 部分留在自由块链中。 优点:算法简单,查找速度快。 缺点: 算法倾向于优先使用存储空间中低址部分的自由块。 由于所有的请求都是从自由块链的始端开始查找,长时间运行 之后,自由块链的前段往往会聚集许多小的甚至无用的自由块。 相应地,一些较大的自由块往往仅出现在链的尾端。 为此,将降低寻找合适自由块的速度。 IE310, 6-40, [email protected] 6.2 分区管理(可变分区) Shanghai Jiao Tong University 内存的分配算法之循环最先适应算法 最先适应算法往往存在较大自由块一般仅出现 在链的尾端的缺点。 为了克服上述缺点,出现了本改进算法。 算法首先将原先的自由块单向链修改为循环链。 每次为存储请求查找合适的分区时,总是从上 次查找结束的地方开始。 同样,一旦找到一个足够大的自由块,就将它 划分后分配出去。 缺点:自由块的最大大小可能会降低,从而较 难满足稍后可能出现的大作业对存储空间的要 求。 IE310, 6-41, [email protected] 6.2 分区管理(可变分区) Shanghai Jiao Tong University 内存的分配算法之算法比较 不同算法对于不同的请求序列所表现的性能是不同的。 从分配的查找速度上看,最坏适应算法具有最佳性能— 第一个就是。 从回收的释放速度上看,最先适应算法具有最佳性能— 拼接处理和归队定位最快。 从满足大作业之可能来看,最先适应算法和最佳适应算 法满足大块内存分配要求的可能性相对较大。 最佳适应算法找到的空闲区是最佳的,但是,在某些情 况下并不一定能提高内存的利用率。 最坏适应算法是基于不留下碎片空闲区这一出发点的。 产生碎片的可能性相对较小。 IE310, 6-42, [email protected] 6.2 分区管理(可变分区) Shanghai Jiao Tong University 内存的分配算法之例子 有作业序列: 作业A要求18K; 作业B要求25K; 作业C要求30K。 系统中空闲区按三种算法组成的空闲区队 列如下页所示。 经分析可知:最佳适应法对这个作业序列 是合适的,而其它两种对该作业序列是不 合适的。 IE310, 6-43, [email protected] 6.2 分区管理(可变分区) Shanghai Jiao Tong University 内存的分配算法之例子(18/25/30) 0 20 OS 30 50 20 120 160 作业 210 46 Next 20 Next 210 Next ^ 5 Size 20 Size 30 Size 46 5 165 100 Size 作业 Next 作业 100 160 256 最佳适应算法 210 Next 20 Next 100 Next 160 Next ^ Size 46 Size 30 Size 20 Size 5 最坏适应算法 20 Next 100 Next 160 Next 210 Next ^ Size 30 Size 20 Size 5 Size 46 最先适应算法 IE310, 6-44, [email protected] 6.2 分区管理(可变分区) Shanghai Jiao Tong University 内存的分配算法之课堂练习(21/30/25) 0 20 OS 30 50 20 120 160 作业 210 46 Next 20 Next 210 Next ^ 5 Size 20 Size 30 Size 46 5 165 100 Size 作业 Next 作业 100 160 256 最佳适应算法 210 Next 20 Next 100 Next 160 Next ^ Size 46 Size 30 Size 20 Size 5 最坏适应算法 20 Next 100 Next 160 Next 210 Next ^ Size 30 Size 20 Size 5 Size 46 最先适应算法 IE310, 6-45, [email protected] 6.2 分区管理(可变分区) Shanghai Jiao Tong University 内存的分配算法之课堂练习(25/18/30) 0 20 OS 30 50 20 120 160 作业 210 46 Next 20 Next 210 Next ^ 5 Size 20 Size 30 Size 46 5 165 100 Size 作业 Next 作业 100 160 256 最佳适应算法 210 Next 20 Next 100 Next 160 Next ^ Size 46 Size 30 Size 20 Size 5 最坏适应算法 20 Next 100 Next 160 Next 210 Next ^ Size 30 Size 20 Size 5 Size 46 最先适应算法 IE310, 6-46, [email protected] Shanghai Jiao Tong University 6.2 分区管理 6.2.4 覆盖与交换 前述的几个分区管理方法,对于作业的大小都有严格的 限制。 当作业要求运行时,作业的全部信息被一次性装入内存 并一直驻留在内存直至运行结束。 当作业的大小大于内存的可用空间时,作业也将无法运 行。 这样,就限制了在计算机系统上开发较大程序的可能。 而覆盖和交换是用以扩充内存的两种方法,它们本质上 是对内存空间进行了逻辑扩充。 覆盖技术主要用于早期的操作系统,而交换技术则在现 代操作系统中仍具有较强的生命力。 IE310, 6-47, [email protected] 6.2 分区管理(覆盖与交换) Shanghai Jiao Tong University 覆盖 覆盖技术是基于这样一种思想提出来的:一个程序并不需要 一开始就把它的全部指令和数据都装入内存后再执行。 把程序划分为若干个功能上相对独立的程序段,按照其自身 的逻辑结构将那些不会同时执行的程序段共享同一块内存区 域。 程序段先保存在磁盘上,当有关程序段的前一部分执行结束, 再把后续程序段调入内存,并覆盖前面的程序段。 这样,给用户的感觉,就是内存好像“扩大”了。 覆盖:一个作业的若干程序段,或几个作业的某些部分共享 某一个存储空间。 一般要求作业各模块之间有明确的调用结构,程序员要向系 统指明覆盖结构,然后由操作系统完成自动覆盖。 覆盖技术的应用对于程序员的要求很高,大大地提高了编程 的难度。 IE310, 6-48, [email protected] 6.2 分区管理(覆盖与交换) Shanghai Jiao Tong University 覆盖之例子 某进程的程序正文段由A、B、C、D、E和F等6个程序段组成。 它们之间的调用关系如后图所示。 由此可以看出,B不会调用C,C也不会调用B,它们无需同时驻 留内存,可共享同一个内存区。 同理,D、E、F也是如此。 这样,整个程序正文段被分为两个部分: 常驻内存部分。即本例中的A (20k) ,它与所有的被调用程序段有关, 不能被覆盖,称为根程序。 覆盖部分。本例分为两个覆盖区: B和C共享一个覆盖区,大小为它们所要求容量的 大者(50k); F和D、E共享一个覆盖区,大小为它们所要求容 量的大者(40k)。 这样,总共仅需使用110k内存,而非190k。 IE310, 6-49, [email protected] 6.2 分区管理(覆盖与交换) Shanghai Jiao Tong University 覆盖之例子(图) A 20K B 50K F 30K 作业的常驻区 A(20K) C 30K D 20K B C E 40K 作业内部调用关系 F E D 覆盖区0 B/C(50K) 覆盖区1 D/E/F(40K) IE310, 6-50, [email protected] 6.2 分区管理(覆盖与交换) Shanghai Jiao Tong University 交换 在多道程序环境或者分时系统,往往会有许多处于等待 状态的进程。 如果能够把处于等待状态的进程换出内存,那么应该能 够提高内存的利用率。 交换:需要时,系统将内存中特定进程的程序和数据暂 时写到外存交换区,或者从外存交换区中调入指定进程 的程序和数据到内存中来。 交换技术是进程在内存与外存之间的动态调度。多用于 分时系统中。 与覆盖技术相比,交换技术不要求用户给出程序段之间 的逻辑覆盖结构。 如果作为分区管理中的一项技术,交换仅发生在进程或 作业之间,而覆盖仅发生在同一进程或作业内部。 覆盖只能覆盖那些与覆盖段无关的程序段。 IE310, 6-51, [email protected] Shanghai Jiao Tong University 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3 页式管理 页式管理概述 静态页式管理 动态页式管理 页式置换算法 二级页表 页式管理的优缺点 IE310, 6-52, [email protected] Shanghai Jiao Tong University 6.3 页式管理 分区存储管理的特点 一般都要求把一个作业的地址空间装入到邻接连续的存 储区域内。 这样,必然存在严重的"零头(碎片)"问题,使得内存的 利用率不高。 对于外部碎片问题,虽然可以采用紧凑技术解决,但是 为移动大量信息花去不少处理机时间,代价较高。 如果能够取消进程对其存储区域的邻接连续性要求,必 然能进一步提高主存空间的利用率,且无需为移动信息 付出代价。 分页管理将取消邻接连续性要求,并减少碎片。 IE310, 6-53, [email protected] Shanghai Jiao Tong University 6.3 页式管理 6.3.1 页式管理概述 基本原理 分页存储管理是将一个进程的虚拟地址空间划分成若干 个大小相等的区域,称为页。 相应地,将物理内存空间划分成与页相同大小的若干个 块,称为物理块或页帧。 内存的所有物理块从0开始编号,称为物理块号或内存 块号。 物理块能够为系统中的进程所共享。 在为进程分配内存时,将进程中若干页分别装入多个不 相邻接也不连续的块中。 这样,用户进程在内存空间内除了在每个块内(物理)地 址连续之外,每个块之间不再连续。 IE310, 6-54, [email protected] 6.3 页式管理(页式管理概述) Shanghai Jiao Tong University 地址结构 分页系统的地址结构由两部分组成: 前一部分为页号P; 后一部分为页内偏移量W,即页内地址。 在下图中地址为32位,其中0~11位为页内位 移(每页的大小为4K),12~31位为页号,所以 允许地址空间的大小最多为多少个页? 1M 31 … 14 页号P 13 12 11 10 … 0 页内偏移量W IE310, 6-55, [email protected] 6.3 页式管理(页式管理概述) Shanghai Jiao Tong University 页式管理的好处 实现了内存中碎片的减少。因为任一个碎片都 会小于一个块。 实现了从连续存储到非连续存储的飞跃。为在 内存中部分地、动态地存储进程中那些经常反 复执行或即将执行的程序和数据段打下了基础。 IE310, 6-56, [email protected] 6.3 页式管理(页式管理概述) Shanghai Jiao Tong University 页式管理的特点 页式管理把页式虚地址与内存物理块地址建立一一对 应页表,并用相应的硬件地址变换机构,来解决离散 地址变换问题。 页表方式实质上是动态重定位技术的一种延伸。 页式管理采用请求调页或预调页技术实现了内外存存 储器的统一管理。即内存只存放那些经常被执行或即 将被执行的页,而那些不常被执行以及在近期不可能 被执行的页,存放于外存中,待需要时再调入。 由于使用了请求调页或预调页技术,页式管理时内存 页面的分配与回收已和页面淘汰技术及缺页处理技术 结合起来。 IE310, 6-57, [email protected] Shanghai Jiao Tong University 6.3 页式管理 6.3.2 静态页式管理 基本思想 静态页面管理方法又称纯分页系统。 在进程开始执行之前,必须把进程的程序 段和数据段全部装入内存的各个存储块中, 才能执行。 如果存储块不足,则必须等待,系统将调 度其它进程运行。 地址映射通过页表(Page Mapping Table – PMT)和硬件地址变换机构来实现。 IE310, 6-58, [email protected] 6.3 页式管理(静态页式管理) Shanghai Jiao Tong University 页表 在分页系统中,存储的分配问题变得非常简单, 进程的页面可以分配到存储空间中的任何一个 可用块。 可是其它问题: 系统如何知道进程的哪一页分配在哪一个块内? 进程的地址空间本来是连续的,现在把它分页并装 入至不相邻接的块内,如何保证它仍能正确运行? 也就是说,如何实现以及何时实现把进程的逻辑地 址变换为主存的物理地址。 一个可行的办法是采用动态重定位技术,即在 执行每条指令时进行这种地址变换。 IE310, 6-59, [email protected] 6.3 页式管理(静态页式管理) Shanghai Jiao Tong University 页表(续一) 由于现在是以页为单位分配的,因此实现地址变换的机 构就要求为每一页设置一个重定位寄存器。 系统为每个进程设置并维护了一张页面映射表,简称页 表,在系统创建进程分配内存时建立,它的起始地址及 大小填入该进程的PCB。 页表的作用是实现从页号到物理块号的地址映射。 每个页在页表中占一个表项,记录该页在内存中对应的 物理块号。 进程在执行时,通过查找页表,就可以找到每页所对应 的物理块号。 进程被调度执行时,它的页表始址和大小被装入特定的 页表寄存器中。 IE310, 6-60, [email protected] 6.3 页式管理(静态页式管理) Shanghai Jiao Tong University 页表(续二)之最简单的页表示意 最简单的页表由页号与存储块(页面)号组成。 页号 块号 0 3 1 1 …?… …?… 1023 511 IE310, 6-61, [email protected] 6.3 页式管理(静态页式管理) Shanghai Jiao Tong University 页表(续三)之页面映射示意 用户程序 0页 1页 2页 3页 4页 5页 n页 页表 页号 块号 0 2 1 3 2 6 3 8 4 9 5 XXX 内存 0 1 2 3 4 5 6 7 8 9 10 IE310, 6-62, [email protected] 6.3 页式管理(静态页式管理) Shanghai Jiao Tong University 分页系统的地址变换机构 地址变换机构的基本任务,是利用页表来实现把用户程 序中的逻辑地址变化为内存的物理地址的功能。 页内地址和物理地址是一一对应的,不需进行变换。 这样,地址变换机构的任务,实际上就是将页号变换成 物理块号。 为了实现地址变换功能,在系统中设置了页表寄存器, 其中存放了页表的始址和页表长度。 平时,在进程未执行时,页表始址和长度是存放在进程 的PCB中的。 当调度到某进程时,才将其页表的始址和长度装入页表 寄存器中。 IE310, 6-63, [email protected] 6.3 页式管理(静态页式管理) Shanghai Jiao Tong University 分页系统的地址变换机构(续一) 在进行地址变换时,系统将页号与页表的长度进行比较。 如果页号太大,表示访问越界,产生越界中断。 如果未出现越界情况,则根据页表始址和页号,计算出 该页的页表项位置。 从页表项得到该页的物理块号,装入物理地址寄存器。 再将页内地址送入物理地址寄存器的块内地址字段。 这样,便完成了逻辑地址到物理地址的变换。 IE310, 6-64, [email protected] 6.3 页式管理(静态页式管理) Shanghai Jiao Tong University 分页系统的地址变换机构(续二)之示意 越界中断 页表寄存器 页表始址 逻辑地址 页表长度 > 页号P 页内地址W 块号p` 块内地址W + 页号 块号 … … 页号P 块号p` … … 页表 物理地址 寄存器 IE310, 6-65, [email protected] 6.3 页式管理(静态页式管理) Shanghai Jiao Tong University 分页系统的地址变换机构(续三)之应用例子 设页长为1K,程序地址字长为16位,作业2空间和页表如下图所 示。 移 IE310, 6-66, [email protected] 6.3 页式管理(静态页式管理) Shanghai Jiao Tong University 分页系统的地址变换机构(续四)之效率分析 地址变换过程基本上由硬件地址变换机构自动完成。 由于页表是驻留在内存的某个区域中,而取数据或指令 又必须经过页表变换才能得到实际的物理地址。 因此,取一个数据或指令至少要访问内存两次以上。 第一次是访问页表,以确定所取数据或指令的物理地址。 另一次是根据物理地址取数据或指令。 这比通常执行指令的速度慢了一倍。 有什么办法可以提高查找速度呢? 一个很直观的方法就是把页表放在寄存器中,而不是内 存中。但是,由于寄存器价格太贵,这样做是不可取的。 另一种办法,则是在地址变换机构中加入一个高速联想 存储器,构成一张快表。 IE310, 6-67, [email protected] 6.3 页式管理(静态页式管理) Shanghai Jiao Tong University 快表 若页表存放在内存中,则每次访问内存时,都要先访问一次内存中 的页表,然后根据所形成的物理地址再次访问内存。这使访问内存 的次数增加了一倍,从而使计算机的处理速度也降低了一倍,以这 样的代价来换取存储器利用率的提高,显然是得不偿失的。 为了提高地址变换的速度,可在地址变换机构中增设一组数量不多 的寄存器,把它作为高速缓冲存储器(Cache),用于存放当前访问 的那些页表项。 这些高速缓冲存储器又称为联想存储器,或快表。 这样,地址变换过程变为: 在CPU给出了有效地址后,地址变换机构自动地将页号p送入高速缓存, 再确定所需的页是否在快表中。 若在,则直接读出该页所对应的物理块号,并送物理地址寄存器; 若不在,则需要再访问内存中的页表,找到后,把从页表中读出的页 表项存入快表中的一个寄存器单元中,以取代一个老的、被认为不再 需要的页表项。 IE310, 6-68, [email protected] 6.3 页式管理(静态页式管理) Shanghai Jiao Tong University 快表之示意 页表地址寄存器 页表长度寄存器 逻辑地址 b L 页号p 页内地址d + 比较 页表 P>=L 地址越界 p’ 快表 p p’ . . . P’ d 物理地址 IE310, 6-69, [email protected] 6.3 页式管理(静态页式管理) Shanghai Jiao Tong University 静态页式管理之其它重要数据结构 请求表 记录各进程所要求的页面数、页表的起始地址和长 度。 进程号 请求页面数 页表始址 页表长度 状态 1 20 1024 20 已分配 2 34 1044 34 已分配 3 18 1078 18 已分配 4 21 … … 未分配 … … … … … IE310, 6-70, [email protected] 6.3 页式管理(静态页式管理) Shanghai Jiao Tong University 静态页式管理之其它重要数据结构 存储块表 指出各物理内存块是否已被分配出去,以及未分配页面的总数。 位示图法 一种是在内存中划分一块固定区域,每个单元的每个比特描述一个 物理块的分配状态。 如果该物理块已经被分配,则对应比特位置1,否则清0。 位示图要占据一部分内存容量。比如,一个划分成1024块的内存, 如果内存单元长8比特,那么位示图要占据1024/8=128个内存单元。 空闲物理块链 各空闲物理块的第一个内存单元一律存放指向下一个空闲物理块的 指针。 第一个空闲物理块的第二个内存单元额外存放该空闲物理块的内存 单元总数。 系统维护一个指向空闲物理块链的首个空闲物理块的指针。 由于使用了空闲物理块自身的单元,不占据额外的内存空间。 IE310, 6-71, [email protected] 6.3 页式管理(静态页式管理) Shanghai Jiao Tong University 静态页式管理之其它重要数据结构 存储块表 位示图法 示意 7 6 5 4 3 2 1 0 1 1 0 1 0 0 0 1 第0-7块 0 0 1 0 0 1 0 1 第8-15块 … 0 1 … 0 0 … … 0 0 1 0 第1016-1023块 IE310, 6-72, [email protected] 6.3 页式管理(静态页式管理) Shanghai Jiao Tong University 静态页式管理之优缺点 解决了分区管理时的碎片问题。 由于要求进程在执行前全部装入内存,如果可 用内存块数小于用户的要求,该进程就只好等 待。 最大可运行进程的大小受可用内存块数的限制。 为了解决这些问题,引出了动态页式管理。 IE310, 6-73, [email protected] Shanghai Jiao Tong University 6.3 页式管理 6.3.3 动态页式管理 基本思想 动态页式管理是在静态页式管理的基础上发展 起来的。 动态页式管理不把进程的程序段和数据段一次 性地全部装入内存,只装入部分页面就能启动 运行。 以后再通过调页功能和页面置换功能,陆续把 将要运行的页面调入内存,把暂不运行的页面 置换到外存上,置换时以页面为单位。 IE310, 6-74, [email protected] 6.3 页式管理(动态页式管理) Shanghai Jiao Tong University 分类 动态页式管理分为 请求页式管理: 页面按需调入。 当需要执行某条指令而又发现它不在内存时或当执行某条指 令需要访问其它的数据或指令时,这些指令或数据不在内存 中,就发生缺页中断,由系统将外存中的相应页面调入内存。 使用较多。 预调入页式管理: 页面按计划调入。 系统对那些外存中的页进行了调入顺序计算,估计出这些页 中指令和数据的执行和被访问的顺序,并按此顺序将它们顺 序调入和调出内存。 相对缺乏可操作性。 IE310, 6-75, [email protected] 6.3 页式管理(动态页式管理) Shanghai Jiao Tong University 请求页式管理的实现细节 执行过程中会出现某些虚页不在内存中的问题。 如何发现虚页不在内存中的? 对页表增设该页是否在内存的状态位(中断位)以及该页 在外存中副本的起始地址。 如何处理虚页不在内存? 采用何种方式把所缺的页调入内存? 如果内存中没有空闲存储块,把调进来的页放在什么地方?也 就是说,采用什么样的策略来淘汰已占据内存的页? 往往需要知道哪个页被访问的频度比较小。 往往需要知道要淘汰的那个页是否发生了修改,淘汰被 修改过的页之前,首先要将它刷新到外存的副本上去。 为此,页表还应该增设改变位和访问字段。 IE310, 6-76, [email protected] 6.3 页式管理(动态页式管理) Shanghai Jiao Tong University 请求式动态页式管理的页表结构 页号 块号 状态位 访问字段 修改位 外存始址 0 10 1 15 0 120 1 14 1 0 0 123 2 15 1 20 0 134 3 - 0 - - 135 IE310, 6-77, [email protected] 6.3 页式管理(动态页式管理) Shanghai Jiao Tong University 缺页中断 在请求分页系统中,每当所要访问的页面不在 内存时,便要产生一缺页中断,请求操作系统 将所缺页调入内存。 缺页中断与一般中断的主要区别在于: 缺页中断在指令执行期间产生和处理中断信号,而 一般中断在一条指令执行完后检查和处理中断信号。 缺页中断返回到该指令的开始重新执行该指令,而 一般中断返回到该指令的下一条指令执行。 一条指令在执行期间,可能产生多次缺页中断。 IE310, 6-78, [email protected] 6.3 页式管理(动态页式管理) Shanghai Jiao Tong University 地址变换机构 请求分页系统中的地址变换机构,是在分 页系统的地址变换机构的基础上,再为实 现虚拟存储器而增加了某些功能所形成的, 如产生和处理缺页中断,以及从内存中换 出一页的功能等等。 IE310, 6-79, [email protected] Shanghai Jiao Tong University 6.3 页式管理 6.3.4 页面置换算法 置换算法在内存中没有空闲存储块时被调用。 它的目的是选出一个被淘汰的页。 应避免选择那些短时间内再次要求访问的页。 对被淘汰页的选择,可以在主存空间范围内, 也可以在本进程空间范围内进行,分别对应全 局置换和局部置换。 为了方便起见,我们仅讨论局部置换。 IE310, 6-80, [email protected] 6.3 页式管理(页面置换算法) Shanghai Jiao Tong University 最优置换算法(OPT算法) 从内存中移出以后不再使用的页面。 如无这样的页面,则选择以后最长时间内 不需要访问的页。 这样,淘汰掉该页将不会造成因需要访问 该页又需要将它调入的现象。 这种算法本身仅仅是一种理论化的算法, 不具有实际的可操作性,因为页面访问的 顺序是很难预知的。 IE310, 6-81, [email protected] 6.3 页式管理(页面置换算法) Shanghai Jiao Tong University 最优置换算法(OPT算法)之例子 假定某进程空间能分的的最大主存块数为M=3,该进程的页面访问 序列为:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0, 1,7,0,1。那么共发生9次缺页(其中前3次缺页无需置换)。 时刻 0 1 2 3 4 5 6 7 8 9 页面访 问序列 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1 块1 7 7 7 2 2 2 2 2 2 2 2 2 2 2 2 2 2 7 7 7 块2 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0 块3 1 1 1 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1 缺页 O O O X X X 10 X 11 12 13 X 14 15 16 17 18 19 X IE310, 6-82, [email protected] 6.3 页式管理(页面置换算法) Shanghai Jiao Tong University 先进先出算法(FIFO算法) 总是先淘汰那些驻留在内存时间最长的页 面,即先进入内存的页面先被置换掉。 理由是最先进入内存的页面不再被访问的 可能性最大。 IE310, 6-83, [email protected] 6.3 页式管理(页面置换算法) Shanghai Jiao Tong University 先进先出算法(FIFO算法)之例子1 假定某进程空间能分的的最大主存块数为M=3,该进程的页面访 问序列为:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0, 1。那么共发生几次缺页(其中哪几次缺页无需置换) ? 时刻 页面访问 序列 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 先 中 晚 缺页 IE310, 6-84, [email protected] 6.3 页式管理(页面置换算法) Shanghai Jiao Tong University 先进先出算法(FIFO算法)之例子1 假定某进程空间能分的的最大主存块数为M=3,该进程的页面访 问序列为:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0, 1。那么共发生12次缺页(其中前3次缺页无需置换)。 时刻 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 页面访问 序列 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 先 7 7 7 0 0 1 2 3 0 4 2 2 2 3 0 0 0 中 0 0 1 1 2 3 0 4 2 3 3 3 0 1 1 1 晚 1 2 2 3 0 4 2 3 0 0 0 1 2 2 2 缺页 O O O X X X X X X X X X IE310, 6-85, [email protected] 6.3 页式管理(页面置换算法) Shanghai Jiao Tong University 先进先出算法(FIFO算法)之例子2 假最大主存块数上升为M=4,对于前述进程同样的页面访问序 列,仅发生几次缺页(其中哪几次缺页无需置换)? 时刻 页面访问 序列 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 先 晚 缺页 IE310, 6-86, [email protected] 6.3 页式管理(页面置换算法) Shanghai Jiao Tong University 先进先出算法(FIFO算法)之例子2 假定最大主存块数上升为M=4,对于前述进程同样的页面访问序 列,仅发生9次缺页(其中前4次缺页无需置换)。 时刻 页面访问 序列 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 缺页 7 7 7 0 0 1 1 1 2 2 2 3 4 4 4 0 0 0 1 1 2 2 2 3 3 3 4 0 0 0 1 晚 7 7 0 先 1 1 2 2 3 3 3 4 4 4 0 1 1 1 2 2 3 3 4 4 4 0 0 0 1 2 2 2 X X O O O O X X X IE310, 6-87, [email protected] 6.3 页式管理(页面置换算法) Shanghai Jiao Tong University 先进先出算法(FIFO算法)之例子3 假定某进程空间能分的的最大主存块数为M=3,该进程的页面访 问序列为:1,2,3,4,1,2,5,1,2,3,4,5。那么共发生 几次缺页(其中哪几次缺页无需置换)? 时刻 页面访问 序列 0 1 2 3 4 5 6 7 8 9 10 11 1 2 3 4 1 2 5 1 2 3 4 5 先 晚 缺页 IE310, 6-88, [email protected] 6.3 页式管理(页面置换算法) Shanghai Jiao Tong University 先进先出算法(FIFO算法)之例子3 假定某进程空间能分的的最大主存块数为M=3,该进程的页面访 问序列为:1,2,3,4,1,2,5,1,2,3,4,5。那么共发生 9次缺页(其中前3次缺页无需置换)。 时刻 0 1 2 3 4 5 6 7 8 9 10 11 页面访问 序列 1 2 3 4 1 2 5 1 2 3 4 5 先 1 1 1 2 3 4 1 1 1 2 5 5 2 2 3 4 1 2 2 2 5 3 3 晚 缺页 3 4 1 2 5 5 5 3 4 4 O O O X X X X X X IE310, 6-89, [email protected] 6.3 页式管理(页面置换算法) Shanghai Jiao Tong University 先进先出算法(FIFO算法)之例子4 假定最大主存块数上升为M=4,对于前述进程同样的页面访问序 列。那么共发生几次缺页(其中哪几次缺页无需置换)? 时刻 页面访问 序列 0 1 2 3 4 5 6 7 8 9 10 11 1 2 3 4 1 2 5 1 2 3 4 5 先 晚 缺页 IE310, 6-90, [email protected] 6.3 页式管理(页面置换算法) Shanghai Jiao Tong University 先进先出算法(FIFO算法)之例子4 假定最大主存块数上升为M=4,对于前述进程同样的页面访问序 列,反而发生10次缺页(其中前4次缺页无需置换)。 时刻 0 1 2 3 4 5 6 7 8 9 10 11 页面访问 序列 1 2 3 4 1 2 5 1 2 3 4 5 先 1 1 1 1 1 1 2 3 4 5 1 2 2 2 2 2 2 3 4 5 1 2 3 3 3 3 3 4 5 1 2 3 4 晚 缺页 4 4 4 5 1 2 3 4 5 O O O O X X X X X X IE310, 6-91, [email protected] 6.3 页式管理(页面置换算法) Shanghai Jiao Tong University 先进先出算法(FIFO算法)之特点 缺点: 尽管有些页面变”老”了,但使用频率仍很高; 增加内存块数并不一定减少缺页率。 对于一个进程,如果给它分配的内存存储块数接近于它所要求的存 储块数,则发生缺页的次数会越少。 在极限情况下,这个推论是成立的。 因为如果给一个进程分配了它所要求的全部存储块,则不会发生缺 页现象。 但是,使用FIFO算法时,在未给进程分配足它所要求的存储块数 时,有时会出现分配的存储块数增多,缺页次数反而增加的奇怪现 象。 因为FIFO算法基于CPU按线性顺序访问地址空间的假设。但是,许 多时候并非按线性顺序访问,比如循环语句。因此,在内存中停留 时间最长的页往往正是经常被访问的页。尽管它们变”老”了,但 被访问的概率仍然很高。 IE310, 6-92, [email protected] 6.3 页式管理(页面置换算法) Shanghai Jiao Tong University (最近)最久未使用算法(LRU算法) 近期最长时间以来没被访问的页先淘汰 基局部性原理,根据一个进程在执行过程中过去的页 访问的踪迹来推测未来的行为。 认为,过去一段时间里不曾被访问过的页,在最近的将 来可能也不会再被访问。 最近最少(最不经常)使用算法(LFU算法) 近期被访问次数最少的页先淘汰 当需要置换一页时,选择在最近一段时间最少使用的页 面予以淘汰。 对于计数,实际上采用标志置位和定时移位的形式来近 似实现(从而蜕化成为最近未使用算法(NUR算法))。 IE310, 6-93, [email protected] 6.3 页式管理(页面置换算法) Shanghai Jiao Tong University 最近最久未使用算法(LRU算法)例子1 假定某进程空间能分的的最大主存块数为M=3,该进程的页面访 问序列为:4,3,2,1,4,3,5,4,3,2,1,5。那么共发生 几次缺页(其中哪几次缺页无需置换)? 时刻 页面访问 序列 0 1 2 3 4 5 6 7 8 9 10 11 4 3 2 1 4 3 5 4 3 2 1 5 久 近 缺页 IE310, 6-94, [email protected] 6.3 页式管理(页面置换算法) Shanghai Jiao Tong University 最近最久未使用算法(LRU算法)例子1 假定某进程空间能分的的最大主存块数为M=3,该进程的页面访 问序列为:4,3,2,1,4,3,5,4,3,2,1,5。那么共发生 10次缺页(其中前3次缺页无需置换)。 时刻 0 1 2 3 4 5 6 7 8 9 10 11 页面访问 序列 4 3 2 1 4 3 5 4 3 2 1 5 久 4 4 4 3 2 1 4 3 5 4 3 2 3 3 2 1 4 3 5 4 3 2 1 近 缺页 2 1 4 3 5 4 3 2 1 5 O O O X X X X X X X IE310, 6-95, [email protected] 6.3 页式管理(页面置换算法) Shanghai Jiao Tong University 最近最久未使用算法(LRU算法)例子2 假定最大主存块数上升为M=4,对于前述进程同样的页面访问序 列。那么共发生几次缺页(其中哪几次缺页无需置换)? 时刻 页面访问 序列 0 1 2 3 4 5 6 7 8 9 10 11 4 3 2 1 4 3 5 4 3 2 1 5 久 近 缺页 IE310, 6-96, [email protected] 6.3 页式管理(页面置换算法) Shanghai Jiao Tong University 最近最久未使用算法(LRU算法)例子2 假定最大主存块数上升为M=4,对于前述进程同样的页面访问序 列,仅发生8次缺页(其中前4次缺页无需置换)。 时刻 0 1 2 3 4 5 6 7 8 9 10 11 页面访问 序列 4 3 2 1 4 3 5 4 3 2 1 5 久 4 4 4 4 3 2 1 1 1 5 4 3 3 3 3 2 1 4 3 5 4 3 2 2 2 1 4 3 5 4 3 2 1 近 缺页 1 4 3 5 4 3 2 1 5 O O O O X X X X IE310, 6-97, [email protected] 6.3 页式管理(页面置换算法) Shanghai Jiao Tong University 抖动 如果置换算法选择不当,有可能发生刚被调出 内存的页又要马上调回内存,调回内存不久又 马上被调出内存,如此反复的局面。 这样将使得整个系统的页面调度非常频繁,以 致于大部分时间都花费在主存和辅存之间的来 回调入调出上。 这种现象被称为系统的"抖动"现象。 导致进程处于"抖动"状态的原因是所占主存块 数不够、置换算法不妥或页面访问序列异常。 仅在本进程内发生的颠簸称为局部颠簸。 全局颠簸是由进程间的相互作用引起的。 IE310, 6-98, [email protected] 6.3 页式管理 Shanghai Jiao Tong University 6.3.5 二级页表 对于过大的页表,可以采用二级页表或者多级页表的形式。 32位地址长度、页大小为1024字节的系统的页表有多少个项? 2^22 虚拟地址 目录位移 页表位移 页目录地址 页表 页目录(每进程一个) + 页表地址 . . . 页位移 内存块 块号 . . . + 代码或数据 . . . IE310, 6-99, [email protected] Shanghai Jiao Tong University 6.3 页式管理 6.3.6 页面管理的优缺点 优点: 由于不要求进程的程序段和数据在内存中的连续存放,从而有 效地解决了碎片问题。 动态页式管理提供了内存和外存统一管理的虚存实现方式,使 用户可以利用的存储空间大大增加。这样既提高了主存的利 率,又有利于组织多道程序执行。 缺点: 要求有相应的硬件支持,例如地址变换机构、缺页中断的产生 和选择淘汰页面等都要求有相应的硬件支持,这增加了机器成 本。 增加了系统开销,例如缺页中断处理等。 请求调页的算法如果选择不当,有可能产生抖动现象。 虽然消除了碎片,但每个进程的最后一页内总有一部分空间得 不到利用。如果页面较大,则这一部分的损失仍然较大。 IE310, 6-100, [email protected] Shanghai Jiao Tong University 6.4.1 6.4.2 6.4.3 6.4.4 6.4 段式管理 段式管理概述 段的共享和保护 段式虚存管理 段式管理与页式管理的比较 IE310, 6-101, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 6.4 段式管理 分区式管理和页式管理的特点 进程地址空间都是线性的。 要求对源程序进行编译、连接时,把源程序中的主程序、 子程序、数据区等按线性空间的一维地址顺序排列起来。 操作系统无法将程序名和数据块与那些被共享的程序和 数据在某个进程中的虚页对应起来,无法实现它们在进 程间的共享。 在页式管理中,由于在一个页面中装有两个不同子程序 段的指令代码,通过页面共享来达到一个逻辑上完整的 子程序或数据块是不可能的。 IE310, 6-102, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 6.4 段式管理 6.4.1 段式管理概述 程序的分段结构 存储管理方式从分区方式发展到分页方式的主要原因是 为了提高主存空间的利用率。 分段存储管理的引入,主要是为了满足用户(程序员)在 编程和使用上的要求。 程序往往具有一种逻辑分段的结构,比如由一个主程序 段、若干子程序段、数据段和工作区段所组成,每个段 内从0开始编址。 每个段都有模块名,分配一个段号,具有完整的逻辑意 义。 段与段之间的地址不连续,而段内地址是连续的。 这样,程序逻辑地址成为一个二维地址结构:首先用段 名或者段号指出是哪一个段;然后是段内偏移量。 IE310, 6-103, xqfang.sjtu@gmail.com 6.4 段式管理(段式管理概述) Shanghai Jiao Tong University 段式管理的基本内容 结合程序的逻辑分段结构,操作系统以程序的逻辑段为 单位进行内存的分配。 每一个段在内存中占据连续空间(内存随机分割,需要 多少分配多少),但各段之间可以不连续存放。 为此,提供了如图所示的二维逻辑地址。 段号 段内地址 每个程序中允许的最多段数和每个段的最大长度可能受 到前述地址结构的限制。 总体上来讲,一个段的最大长度限制往往要比分页管理 中的一个页的大小要大得多。 IE310, 6-104, xqfang.sjtu@gmail.com 6.4 段式管理(段式管理概述) Shanghai Jiao Tong University 段表与作业表 每个进程需要有一张段表,描述各段在主存中 的起始地址和长度。 段表用于将逻辑地址转换为绝对地址。 段表表目实际上起到了基址/限长寄存器的作用。 分段存储器的地址转换利用了段表控制寄存器。 同时,段式存储管理系统包括一张作业表,描 述所有进程的段表在主存中的起始地址和长度。 IE310, 6-105, xqfang.sjtu@gmail.com 6.4 段式管理(段式管理概述) Shanghai Jiao Tong University 段表与作业表 作业表 段表 段号 始址 长度 第0段 VVVV M 第1段 XXXX N … … … 第N段 ZZZZ K 进程号 段表始址 段表长度 PA PB … PD AAAA BBBB H I DDDD L IE310, 6-106, xqfang.sjtu@gmail.com 6.4 段式管理(段式管理概述) Shanghai Jiao Tong University 段表的作用 0 程序空间 (MAIN)=0 内存空间 0 段表 30K 0 段号 15K 0 10K 基址 0 30K 40K 1 20K 80K 2 15K (D)=2 3 (S)=3 40K 120K (X)=1 20K 0 段 10K 150K (MAIN)=0 30K (X)=1 20K (D)=2 15K (S)=3 10K 80K 120K 150K IE310, 6-107, xqfang.sjtu@gmail.com 6.4 段式管理(段式管理概述) Shanghai Jiao Tong University 地址转换示意 越界 段控制寄存器 段表始址 > 段表长度 逻辑地址 位移量 W 段号 S 100H 2 + 越界 段号 0 1 2 3 基址 A800H CE00H E800H 段长 2K F800H 1K 1K 4K > + 物理地址 E900H E800H 4K E900H F800H 主存 IE310, 6-108, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 6.4 段式管理 6.4.2 段的共享和保护 段的共享 在多进程环境下,有越来越多的可执行代 码和数据需要被多个进程所共享。 如果让每个进程均在内存保留共享代码和 数据的副本,就会极大地浪费内存空间。 最好的办法是在内存中仅留一个副本,供 多个进程使用,称为共享。 IE310, 6-109, xqfang.sjtu@gmail.com 6.4 段式管理(段的共享和保护) Shanghai Jiao Tong University 段的共享之例子 进程1 段表 editor 段长 基址 data 1 160 80 40 240 editor data 2 data 1 240 280 … 进程2 editor 80 160 40 80 380 data 2 380 420 IE310, 6-110, xqfang.sjtu@gmail.com 6.4 段式管理(段的共享和保护) Shanghai Jiao Tong University 段的保护 与页式管理时类似。 地址越界保护法 通过段表中的段长与虚拟地址中的段内相对地址相比较进行。 若段内相对地址大于段长,系统就会产生保护中断。 不过,在允许段动态增长的系统中,段内相对地址大于段长是 允许的。为此,在段表中需要设置相应的增补位,以指示是否 允许该段动态增长。 存取方式保护法 在段表中设置相应的用于访问控制的存取权限字段,说明控制 该段被各有关进程访问的权限。 根据段表中的以上存取权限字段,判断各有关进程的实际访问 是否越权,并相应地触发保护中断。 IE310, 6-111, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 6.4 段式管理 6.4.3 段式虚存管理 分段式虚拟存储系统也能为用户提供比主存实际容量大 的存储空间。 分段式虚拟存储系统把进程的所有分段的副本都存放在 辅助存储器中。 一旦被调度投入运行,首先把当前需要的一段或几段装 入主存。 在执行过程中访问到不在主存的段时,再把它们装入。 因此,段表必须能够说明是否在主存,在主存的什么位 置,或者在外存的什么位置,段长是多少,是否已经被 修改过,是否可扩充,能够共享等标志。 IE310, 6-112, xqfang.sjtu@gmail.com 6.4 段式管理(段式虚存管理) Shanghai Jiao Tong University 段式虚存管理之段表扩展 特征位:00不在内存、01在内存、11共享段。 存取权限:00可执行、01可读、11可写。 扩充位:00固定长度、01可扩充。 标志位:00未修改、01已修改、11不可移动。 段号 特征 存取权限 扩充位 标志 主存始址 段长 辅存始址 IE310, 6-113, xqfang.sjtu@gmail.com 6.4 段式管理(段式虚存管理) Shanghai Jiao Tong University 段式虚存管理之地址转换 访问某段时,由硬件地址转换机构查段表。 如果该段在内存,则按分段式存储管理中给出的办 法进行地址转换得到绝对地址。 否则该段不在内存,硬件发出一个缺段中断。 查找主存分配表,找出一个足够大的连续区域容纳该分段。 如果找不到足够大的连续区域,则检查空闲区的总和。 如果空闲区总和满足该分段要求,那么进行适当的移动。 否则,调出一个或几个分段到辅助存储器上。 将该分段从辅助存储器装入主存。 同样,按分段式存储管理中给出的办法进行地址转换得到绝 对地址。 IE310, 6-114, xqfang.sjtu@gmail.com 6.4 段式管理(段式虚存管理) Shanghai Jiao Tong University 段虚存管理之越界中断(段扩充处理) 在执行过程中,有些表格或数据段需要随输入数据的 多少而变化。比如,某个分段在执行期间因表格空间 用完而要求扩大分段。 这只要在该分段后添置新信息即可,添加后的长度应 不超过硬件允许的每段最大长度。 对于这种变化的数据段,当要往其中添加新数据时, 由于访问的地址超出原有的段长,硬件产生一个越界 中断。 操作系统处理该中断时,先判断该段的扩充位。 如果可以扩充,则增加该段的长度,必要时还要移动或调出 一个分段,以腾出主存空间。 如果不允许扩充,那么这个越界中断就表示程序出错。 IE310, 6-115, xqfang.sjtu@gmail.com 6.4 段式管理(段式虚存管理) Shanghai Jiao Tong University 段式虚存管理之地址转换、段扩充和存储保护处理示意 IE310, 6-116, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 6.4 段式管理 6.4.4 段式管理与页式管理的比较 页是信息的物理单位,以实现离散分配,减少内存的内零头, 消灭内存的外零头,满足操作系统管理上的需要; 段是信息的逻辑单位,含有一组其意义相对完整的信息,是 为了更好地满足用户的需要。 页的大小固定,具体取决于操作系统; 段的长度并不固定,取决于用户所编写的程序,通常由编译 程序在对源程序进行编译时,根据信息的性质来划分。 分页的进程地址空间是一维的,即单一的线性地址空间,由 系统把逻辑地址划分为页号和页内地址两部分; 分段的进程地址空间是二维的,程序员在标识一个地址时, 既需要给出段名,还需要给出段内地址。 段长可根据需要动态增长。 对具有完整逻辑功能的信息段进行共享。 段式管理便于动态链接。 IE310, 6-117, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 6.5 段页式管理 6.5.1 基本思想 研究动因 段式存储是基于用户程序结构的存储管理技术, 有利于模块化程序设计,便于段的扩充、动态 链接、共享和保护,但容易形成碎片而浪费存 储空间。 页式存储是基于系统存储器结构的存储管理技 术,存储利用率高,便于系统管理,但不易实 现存储共享、保护和动态扩充。 如果能够把两者的优点结合起来,就能在分页 式管理的基础上实现分段式存储管理,这就是 段页式存储管理。 IE310, 6-118, xqfang.sjtu@gmail.com 6.5 段页式管理(基本思想) Shanghai Jiao Tong University 基本原理 先分段,再分页 段号s 段内地址d’ 页号p 页内地址d 对用户来讲,按段的逻辑关系进行划分; 对操作系统来讲,按页划分每一段。 虚地址以程序的逻辑结构划分成段,这使段页式存储管理的段式特 征。 实地址划分成位置固定、大小相等的页框(块),这是段页式存储管 理的页式特征。 将每一段的线性地址空间划分成与页框大小相等的页面,于是形成 了段页式存储管理的特征。 逻辑地址由段号s、段内页号p和页内偏移d组成。 段页式存储管理的数据结构由作业表、段表和页表三级组成: 作业表-登记进入系统的所有进程对应段表的起始地址和段表长度; 段表-登记各段是否在内存中,各段对应页表的起始地址和页表长度; 页表-登记各页是否在内存,在内存中的位置等信息。 IE310, 6-119, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 6.5 段页式管理 6.5.2 地址转换 首先,根据进程号找到段表; 然后,根据段号s查找对应该段的页表; 然后,根据段内页号p定位对应该页的物 理内存块; 最后,根据页内偏移d确定物理内存块内 的地址偏移量。 IE310, 6-120, xqfang.sjtu@gmail.com 6.5 段页式管理(地址转换) Shanghai Jiao Tong University 段页式管理之动态地址转换和存储保护 IE310, 6-121, xqfang.sjtu@gmail.com 6.6 内存分配与释放系统调用 Shanghai Jiao Tong University 6.6.1 申请内存 #include <stdlib.h> void *calloc(size_t nmemb, size_t size); void *malloc(size_t size); size表示所需内存字节数大小。 返回NULL表示系统调用失败,否则返回 已分配内存的地址。 IE310, 6-122, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 6.6 内存分配与释放系统调用 6.6.2 改变原申请内存的大小 #include <stdlib.h> void *realloc(void *ptr, size_t size); ptr是原动态申请分配所得内存的地址,比如由 malloc()或者realloc()返回的内存地址,为NULL 表示初始申请所指定大小的内存。 size指定内存的新大小(字节数),为0表示释放 该内存。 返回NULL表示系统调用失败(原ptr所指向的内 存仍然有效),否则返回重新分配所得内存的地 址(原ptr所指向的内存不再有效) 。 IE310, 6-123, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 6.6 内存分配与释放系统调用 6.6.3 改变原申请内存的大小 #include <stdlib.h> void free(void *ptr); ptr是原动态申请分配所得内存的地址,比 如由malloc()或者realloc()返回的内存地址, 不应为NULL。 返回后原ptr所指向的内存不再有效。 IE310, 6-124, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 6.6 内存分配与释放系统调用 6.6.4 小例子gcc -o a memopr.c #include <stdlib.h> #include <stdio.h> #include <string.h> int main(int argc, char ** argv) { void * pOrg, * pNew, * pOld = NULL; int nSize = 4; while (pNew = malloc(nSize = nSize * 2)) { printf("成功分得%d字节的内存%p\n", nSize, pNew); if (NULL == pOld) { pOld = pNew; pOrg = pNew; } else { * ((void **)pOld) = pNew; pOld = pNew; } } if (NULL == pOld) { printf("严重问题,循环申请内存居然没有一次是成功的!!!\n"); } else { * ((void **)pOld) = NULL; } printf("申请%d字节的内存失败!!!\n", nSize); while (pOrg) { pOld = pOrg; pOrg = * ((void **)pOld); free(pOld); printf("成功释放%p内存\n", pOld); } } IE310, 6-125, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 内存管理的功能: 小结一 内存空间的分配和回收 地址转换 内存空间的共享和保护 内存空间的逻辑扩充 物理地址与逻辑地址 地址重定位、动态重定位 内存空间的逻辑扩充、虚拟存储器、程序 的局部性原理 IE310, 6-126, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 小结二 分区管理是把内存划分为若干个大小不等 的区域,一种最简单的存储管理方法。 单分区管理、固定分区、可变分区。 碎片(内部碎片与外部碎片)、紧凑。 可变分区的内存分配算法:最佳适应 算法、最坏适应算法、最先适应算法。 覆盖与交换。 IE310, 6-127, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 小结三 页式管理:进程的虚拟地址空间划分成若干个 大小相等的区域-页,物理内存空间划分成与页 相同大小的若干个块-物理块或页帧,在为进程 分配内存时,将进程中若干页分别装入多个不 相邻接也不连续的块中。 页式管理分为静态页式管理和动态页式管理。 页表与地址变换。 缺页中断:在请求分页系统中,每当所要访问 的页面不在内存时,便要产生一缺页中断,请 求操作系统将所缺页调入内存。 IE310, 6-128, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 小结四 页面置换算法在内存中没有空闲存储块时 被调用。最优置换算法(OPT算法);先进 先出算法(FIFO算法);最近最少使用算法 (LRU算法)。抖动问题。 段式管理:结合程序的逻辑分段结构,操 作系统以程序的逻辑段为单位进行内的 分配。 段表与地址转换。段的共享与保护。段式 虚存管理:地址转换、段扩充和存储保护 处理。 IE310, 6-129, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 小结五 段式存储是基于用户程序结构的存储管理技术, 有利于模块化程序设计,便于段的扩充、动态 链接、共享和保护,但容易形成碎片而浪费存 储空间。 页式存储是基于系统存储器结构的存储管理技 术,存储利用率高,便于系统管理,但不易实 现存储共享、保护和动态扩充。 段页式存储管理采用先分段再分页的模式 对用户来讲,虚地址以程序的逻辑结构划分成段, 这使段页式存储管理的段式特征; 对操作系统来讲,实地址划分成位置固定、大小相 等的页框(块),这是段页式存储管理的页式特征。 IE310, 6-130, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 课后任务(书面作业/择机上交) 1. 2. 3. 4. 5. 6. 7. 8. 9. 存储管理的基本功能是什么? 什么是逻辑地址和物理地址? 何谓地址重定位?为什么要进行地址重定位? 什么是存储保护?分区存储管理中如何实现分 区的保护? 什么是虚拟存储器?其实现原理是什么? 页式管理中有哪几种页面淘汰算法? 试比较页式存储管理和段式存储管理的特点? 试述存储的分区管理中的碎片产生的原因? 叙述段页式存储管理的主要优点? IE310, 6-131, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 课后任务(书面作业/择机上交) 10. 11. 设某时刻系统中有三个空闲区,其大小和首址 分别为:(35KB,80KB)、(12KB,156KB)、 (28KB,210KB),设作业序列及其内存请求分 别为:(JOB1,22KB)、(JOB2,15KB)、 (JOB3,15KB)、(JOB4,13KB),设操作系统 分配空闲区时,从空闲区的高地址开始分配。 分别使用首次适应、最佳适应和最坏适应3种 算法对该作业序列进行分配。分别画出空闲区 队列的初始状态和每次分配后的状态。 设进程的页面访问序列为:1、2、3、1、6、 5、1、6、2、1,画出当驻留集M大小为3时, 分别使用FIFO和LRU置换算法的置换过程并计 算缺页率。 IE310, 6-132, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 课后课程设计任务 自学第9章Linux应用基础; 自学第10章Linux的操作命令界面与内核编译; 练习实验1 实验环境与Linux操作系统的安装(虚拟机、红帽子Linux安装、 虚拟网卡的安装); 练习实验2-1 Linux的键盘命令; 练习实验2-2 Linux的图形界面; 练习实验2-3 Linux的批处理; 练习实验3-1 Linux进程的创建与父子进程同步; 练习实验3-2 Linux子进程映像的重新加载; 练习实验4-1 Linux软中断通信; 练习实验4-2 Linux管道通信; 练习实验4-3 Linux消息缓冲通信; 练习实验4-4 Linux共享存储通信; 练习实验5 Linux信号量与P、V操作; 练习实验6 动态申请内存(malloc/realloc/free); 练习实验7 Linux文件系统操作(open/creat/read/write/chmod/close); 联系TCP连接访问 IE310, 6-133, xqfang.sjtu@gmail.com ...
View Full Document

Ask a homework question - tutors are online