文档详情

操作系统-第4章-存储管理ppt课件.ppt

发布:2019-04-14约2.35万字共158页下载文档
文本预览下载声明
第4章 存储管理 重要内容 存储器 连续存储空间管理 分页存储管理 分段存储管理 虚拟存储管理 Intel x86分段和分页存储结构 Linux虚拟存储管理 Windows 2003虚拟存储管理 存储管理的功能 分配和去配 请求和释放主存空间 抽象和映射 抽象成一维数组或二维地址空间 地址转换 隔离和共享 隔离实现存储保护功能 超越隔离机制,提高主存利用率 存储扩充 虚拟,允许进程虚拟地址空间大于主存空间 4.1 存储器 4.1.1 存储器的层次 4.1.2 地址转换与存储保护 4.1.1 存储器的层次 4.1.2 地址转换与存储保护(1) 地址转换与存储保护(2) 逻辑地址(虚地址):CPU所生成的地址 物理地址(实地址):内存单元所看到的地址 逻辑地址空间:由程序所生成的所有逻辑地址的集合 物理地址空间:由逻辑地址所对应的所有物理地址的集合 地址转换或重定位:把逻辑地址转换为物理地址 例:使用重定位寄存器的动态重定位 4.2 连续存储空间管理 4.2.1 固定分区存储管理 4.2.2 可变分区存储管理 4.2.3 伙伴系统 4.2.4 主存不足的存储管理技术 4.2.1 固定分区存储管理 固定分区存储管理的基本思想 主存空间被分成数目固定不变的分区,各分区的大小不等,每个分区只装入一个作业。 固定分区存储管理的数据结构 主存分配表:指出各分区的起始地址和长度; 占用标志:指示此分区是否被使用。 作业进入固定分区排队策略 每个分区有单独的作业等待队列; 所有等待处理的作业排成一个等待队列。 固定分区存储管理的地址转换和存储保护 固定分区的优缺点 优点 能够解决单道程序运行在并发环境下不能与CPU速度匹配的问题 解决了单道程序运行时主存空间利用率低的问题 实现简单 缺点 大作业可能无法装入 主存空间利用率不高,会出现内碎片 扩充困难 限制多道运行程序的个数 4.2.2 可变分区存储管理 可变分区存储管理是按作业的实际大小来划分分区,且分区个数也是随机的,实现多个作业对主存的共享,进一步提高主存资源利用率。 可变分区方式主存分配示例 可变分区存储管理数据结构 可变分区主存分配表可由两张表格组成, 已分配区表 未分配区表 可变分区回收算法 链表空闲区管理方法 空闲区开头单元存放本空闲区长度及下个空闲区起始地址,把所有空闲区都链接起来,设置第一块空闲区地址指针,让它指向第一块空闲区地址。 申请空闲区:沿链查找并取一个长度能满足要求的空闲区; 归还空闲区:把此空闲区链入空闲区链表的相应位置。 可变分区管理分配算法 1)最先适应分配算法 空闲区通常按地址从小到大排列,分配第一个满足长度要求的空闲区; 优点:分配从低地址开始,使高地址部分比较少用,以保持一个大空闲区,有利于大作业的装入; 缺点:分区利用不均衡,回收分区比较麻烦。 可变分区地址转换与存储保护 多对基址/限长寄存器 4.2.3 伙伴系统 伙伴原理 伙伴系统是一种固定分区和可变分区折中的主存管理算法,基本原理:任何尺寸为2i的空闲块可以被分为两个尺寸为2i-1的空闲块,这两个空闲块称为伙伴。 伙伴通过对大块的物理主存划分而获得 假如从第0个页面开始到第3个页面结束的主存 每次都对半划分,那么第一次划分获得大小为2页的伙伴,如0、1和2、3 进一步划分,可以获得大小为1页的伙伴,例如0和1,2和3 伙伴系统原理 2.Linux伙伴系统 1) 以page结构为数组元素的mem_map[ ]数组 2) 以free_area_struct结构为数组元素的free_area数组 3) 位图数组(bitmap) 3.Linux基于伙伴的slab分配器(1) 为什么要使用slab分配器? 缓冲机制,能够提高效率 slab的结构 见下页图 slab的操作 kmem-cache-create() kmem-cache-aloc() 与kmem-cache-free() kmem-cache-grow() 与kmem-cache-reap() kmalloc()kfree() kmem-getpages() 与kmem-frepages() Linux基于伙伴的slab分配器(2) 4.2.4 主存不足的存储管理技术 有关移动问题讨论 移动条件 在可变分区算法中,随着进程不断的装入和撤销,导致主存中常常出现分散的小空闲区,称为碎片。 当在未分配区中找不到足够大的空闲区来装入新进程时,可采用移动技术,将分散的空闲空闲区汇集成片。 移动时机 进程撤销之后释放分区时,如果它不与空闲区邻接,立即实施移动。 进程装入分区时,如果它不与空闲区邻接,立即实施引动。 移动算法(假设进程A请求分配x KB主存) 步骤1:查主存分配表,若有大于x KB
显示全部
相似文档