本文共 4269 字,大约阅读时间需要 14 分钟。
存储管理的主要任务是主存存储分配、地址变换、存储保护和存储扩充
我们用的系统中的线性地址通常采用10-10-12的三段结构
第一段是页目录表索引,第二段是页表索引,第三段是页内偏移。 无论是页目录表项还是页表中的表项,都记录了对该页的存储性保护字段。当然,存储性保护远远不只是单纯的依靠页来实现,cpu的段保护机制,起到了更加重要的作用,这是实现操作系统的基础。页表的作用是实现逻辑地址到物理地址的映射。
所谓碎片是指内存中出现的一些零散的小空闲区域。由于碎片都很小,无法再利用。如果内存中碎片很多,将会造成严重的存储资源浪费。
移动技术(紧凑技术)
解决碎片的方法是移动所有的占用区域,使所有的空闲区合并成一片连续区域。
移动技术除了可解决碎片问题还使内存中的作业进行扩充。显然,移动带来系统开销加大,并且当一个作业如果正与外设进行I/O时,该作业是无法移动的。覆盖技术是早期在单一连续存储管理中使用的扩大存储器容量的一种技术。
程序段先保存在磁盘上,当有关程序的前一部分执行结束后,把后续程序段调入内存,覆盖前面的程序段。
- 覆盖与交换技术目的是减少程序占用的主存空间,方法是逻辑上扩充主存容量
首次适应法:
从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区。
最佳适应算法:
从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区的一种计算方法,这种方法能使碎片尽量小。
最坏适应分配算法:
要扫描整个空闲分区或链表,总是挑选一个最大的空闲分区分割给作业使用。该算法要求将所有的空闲分区按其容量从大到小的顺序形成一空闲分区链,查找时只要看第一个分区能否满足作业要求。
循环首次适应算法:
该算法是首次适应算法的变种。在分配内存空间时,不再每次从表头(链首)开始查找,而是从上次找到空闲区的下一个空闲开始查找,直到找到第一个能满足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作业。该算法能使内存中的空闲区分布得较均匀。
一、分区存储管理
1、固定分区:
提前将内存划分成多个区,区的大小可以不同,但是划分好后,个数和大小都不能发生改变。 优点:易于实现、开销小 缺点:存在内部碎片(分区内未被利用空间)、分区总数固定,限制了并发执行的程序数量。2、动态创建分区:
按照程序申请要求分配。 优点: 没有内部碎片 缺点:有外部碎片(难以利用的小空闲分区)二、页式存储管理
优点: 没有外部碎片,最后一页可能有内碎片但不大; 程序不必连续存放;便于改变程序占用空间大小。
- 分区管理和分页管理的主要区别是: 分区要求一道程序存放在连续的空间内而分页没有这种要求
因为有”请求”两字,说明一个作业不必把程序所有的内容都写入内存中,而是什么时候需要用到了,什么时候就把该部分内容从外存调入到内存中。 因此,真实地址必须是在运行时才决定的,所以采用动态的方法。采用动态重定位和内存动态分配。
页表项有:
|页号|物理块号|状态位P|访问字段A|修改位M|外存地址|各字段说明如下:
1)状态位P:
用于指示该页是否已调入内存,供程序访问时参考,内存分配;
2)访问字段A:
用于记录本页在一段时间内被访问次数,供选择换出页面时参考;
3)修改位M:
表示该页在调入内存后是否被修改过,供置换页面时参考;
4)外存(辅存)地址:
用于指出该页在外存上的地址,通常是物理块号,供调入页面时参考;
如果一个页面已经被修改过(即,它是“脏的”),当页面被换出时,必须将其写回磁盘,如果该页面没有被修改过(即为“干净”的),则直接丢弃就可,因为它在磁盘上的副本仍然有效,修改位有时也称为“脏位”。
已修改过的页面再次装入时应来自磁盘对换区
不被修改的页面放到磁盘文件区分页式存储系统中,页面的大小与可能产生的缺页中断次数无关
若页面尺寸变小,则缺页中断的次数可能增加也可能减少;
若把页面尺寸增大一倍而且可容纳的最大页数不变,则在程序顺序执行时缺页中断次数会(减少)
在硬件和环境相同的条件下,一个作业在(分页)存储管理系统中运行的时间最长。
1.Belady现象:是指当所分配的物理块数增大而页故障数不减反增的异常现象。
2.抖动现象:是指刚刚换出的页面马上又要换入内存,刚刚换入的页面马上又要换出主存,这种频繁的页面调度行为称为抖动,或者颠簸。
FIFO页面的变化会引起抖动现象
请求分页处理不当会产生抖动在页式存储管理系统中,页表内容如表所列:
页表: 页号 块号 0 2 1 1 2 6 3 3 4 7 若页的大小为4KB,则地址转换机构将逻辑地址0转换成物理地址为(8192)。页面大小是4K = 2^12
块的大小与页大小一致=4K(页是进程里的称呼,块是存储器里的称呼,本质都是一样的) 地址偏移量=逻辑地址%页面大小=0 页号=逻辑地址/页面大小=0 查页表得到块号为2, 故物理地址=内存块号 * 块长 + 偏移量 = 2 *(2^12) + 0 = 8192;是指给外置的存储设备加个保护程序,写不进去数据,也删不掉数据。当多个用户共享主存时,为使系统能正常工作,应防止由于一个用户程序出错而破坏其它用户的程序和系统软件,还要防止一个用户程序不合法的访问不是分给它的主存区域。
通常采用的方法是:存储区域保护和访问方式保护。LRU(Least Recently Used)
最近最少使用页面置换算法,也就是首先淘汰最长时间未被使用的页面。
所基于的思想:在最近的过去很久未使用的在最近的将来也不会使用LFU(Least Frequently Used)
最近最不常用页面置换算法,也就是淘汰一定时期内被访问次数最少的页面。
系统”抖动”现象的发生是由(置换算法选择不当)引起的
在请求分页存储管理中,刚被替换出去的页,立即又要被访问因无空,此时因无空闲内存,又要替换另一页,而后者又是下一次要被访问的页,于是系统需花费大量的时间忙于进行这种频繁的页面交换,致使系统的实际效率很低,这种现象称为抖动现象。一般都是由于置换算法不佳引起,
程序静态链接发生在装入时
程序动态链接都可以发生在装入时和调用时(即运行时)静态重定位:
即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常是在装入时一次完成的,以后不再改变。
动态重定位
即在程序运行过程中要访问数据时再进行逻辑地址与物理地址的变换(即在逐条指令执行时完成地址映射。
动态内存分配
是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。操作系统可以提供给进程运行时申请和释放任意大小内存的功能
静态内存分配
需要预先分配存储空间
内存的静态分配和动态分配的区别主要是两个:
一是时间不同。静态分配发生在程序编译和连接的时候。动态分配则发生在程序调入和执行的时候。 二是空间不同。堆都是动态分配的,没有静态分配的堆。2、3、4、5、6、7适用于多道程序设计系统
1. 分为六种方式: 2. 单一连续区:一段时间内只能有一个进程在内存中,因此内存利用率低 3. 固定分区:把内存空间分割成若干区域,成为分区,每个分区装载一个且只能有进程 4. 可变分区:根据进程的需要,把内存空间分割出一个分区,分配给进程,剩余的部分成为新的空闲区。 缺点:产生外部碎片,内存利用率低 5. 页式存储 6. 段式存储:一个段是一个(不定长的连续)区域 7. 段页式存储连续分配
包括单一连续分配(单用户、单任务的操作系统) 和分区分配(多道程序) 两种分配策略
不连续分配的方式
包括页式、段式和段页式。初衷就是要改善内存的利用率,减少碎片,可以实现虚拟存储页式虚拟存储器地址空间是一维的,段式虚拟存储器地址空间是二维的, 段页式虚拟存储器地址空间仍然是二维的(段号+页号)。
各页可以分散存放在主存,每段必须占用连续的主存空间
页式和段式都是采用动态重定位方式。
页式、段式、段页式存储分配方法可能使系统抖动
由连续分配方式发展为分页存储管理方式的主要动力是:提高内存利用率
分段存储受内存空间的限制,但作业总的尺寸不受内存空间的限制。
磁带存储器也称为顺序存取存储器(SequentialAccessMemory,简称SAM)即磁带上的文件依次存放。磁带存储器存储容量很大,但查找速度慢,在微型计算机上一般用做后备存储装置,以便在硬盘发生故障时,恢复系统和数据。
按组织形式和处理方式可将文件分为以下几类:
1.普通文件:有ASCII码或二进制码组成的字符文件。 2.目录文件:由文件目录组成的,用来管理和实现文件系统功能的系统文件,通过目录文件可以对其他文件的信息进行检索。 3.特殊文件:特指系统中的各类 I/O 设备。转载地址:http://ybaen.baihongyu.com/