1、本章要点 存储器管理的有关概念存储器管理的有关概念 内存的覆盖和交换技术内存的覆盖和交换技术 存储器的具体管理方法存储器的具体管理方法内存的分配和回收提高内存的利用率实现地址映射“扩充”主存容量存储保护:哪些是已分配的,哪些是未分配的 在系统程序或用户提出申请时,分配相应的空间,同时修改内存记录表,并相应地修改分配记录表 用户作业使用的逻辑地址 装入内存按照实际的地址空间 所以需要有从逻辑地址到实际地址的转换机制 扩种不是物理的增大内存容量,而是对内存空间的逻辑扩充(通过软件的方法),即:用户感受到的内存容量,比实际的内存容量大确保各道作业都在所分配的存储区诶操作,互不干扰程序员在编写程序时,
2、或编译程序对源程序进行编译时,所用的是实际存储地址,为用户分配内存就按照这个实际地址进行分配前提:存储器的可用容量是固定且可知的 存储分配所要解决的问题是:1、程序在装入的时候才确定实际地址2、一个作业装入时必须分配其要求的全部存储量3、存储空间不够,不能装入该作业4、作业退出系统前,一直占用它的存储空间1、程序在装入的时候才确定实际地址2、一个作业无需全部一次性装入3、在其执行过程中可根据需要申请存储空间 4、作业的占用的存储空间,可以在不需要的时候,归还给系统():任何一个程序的逻辑地址空间都是的逻辑地址的集合,逻辑地址空间的地址称为逻辑地址。逻辑地址又称为相对地址,程序中的逻辑地址,相对
3、于地址0 LOAD A,10hLOAD A,20h000H200H000H230H():一个程序在执行时所占用的内存空间称作它的物理存储空间,不同程序的存储空间不能冲突LOAD A,10hLOAD A,20h000H200H000H230HLOAD A,10hLOAD A,20h作业编译后的目的程序逻辑地址空间存储空间作业的逻辑地址空间作业的实际地址空间装入内存一个编译好的程序,存在于它自己的逻辑空间内,装入内存时,才把它装入内存空间在一般情况下,一个作业在装入时,分配到的实际存储空间地址和它的逻辑地址空间是不一致的。由于一个作业装入到与其逻辑地址空间不一致的存储空间所引起的对,就是我们所说的
4、地址重定位LOAD A,220h000H200H2345220HA=2345LOAD A,87650220H0000H1200H1000H23451220H 作业由装配程序进行的地址变换方式,称为 当访问指令或数据时(),由附加的地址变换机构进行的地址变换方式,称为LOAD A,1、地址映射是在程序装入的时候,集中一次性完成2、由编译程序将程序中出现的逻辑地址改成实际的物理地址1、地址映射是在程序执行的时候,由硬件地址映射机构完成2、采用基地址寄存器BR,存放现行程序的内存空间的起始地址只要改变基地址寄存器BR的内容,便可把程序定位在新的内存空间。虚拟存储器管理的基本思想是利用来逻辑扩充内存,
5、产生一种,通过对这种虚拟存储器的管理,充分发挥内存资源的利用率,使系统能够有效地支持多道程序的并发运行以及解除对用户作业大小的限制,从而增强系统的处理能力。虚拟存储器虚拟存储器是指对内存的虚拟一级存储器概念作业地址空间概念虚拟存储器的实现条件要有相当容量的辅存要有一定容量的主存要使用动态分配和动态重定位要有交换技术的支持交换技术 交换技术使得一个作业同时被分配到内存和外存两部分运行成为可能,所以只有使用了交换技术才能实现虚拟存储一个区域供操作系统占用,另一个区域则为用户的应用程序所使用。采用静态分配技术,作业一次性装入内存一旦进入内存,等该作业结束后才能释放内存空间当作业需求的空间大于实际可用
6、空间时,系统会出现内存不足的错误致使作业无法运行把一个大的程序划分成一系列的。每个覆盖是一个相对独立的程序单位。把程序执行时并不要求同时装入主存的覆盖组,组成一组,称为通常,一个大作业的覆盖结构要求编程人员事先给出;为了实现覆盖管理,则需要得到相应的编译程序和连接装配程序的协助。只需要考虑对操作系统程序区域的保护自动地址修改 若操作系统位于低端(如低4KB区域),则对用户的存储访问,地址自动加上4K。高端同理。0页、1页寻址 用户程序和操作系统各占一半空间(不同页)界限寄存器 又称隔离寄存器(上、下限寄存器)内存分配内存分配 1)对地址空间进行分段方法 2)覆盖技术基本思想:把内存划分成若干个
7、连续区域,称为分区,每个分区装入一个作业运行。1、系统初始化时,把存储空间划分成的区域,作业运行时,为其选择一个合适的区域2、存储区域是在系统启动时划定的,在用户作业装入及运行过程中,其区域的大小和边界是不能改变的3、为了实现这种固定分区的分配,系统需要建立一张。在每个分配的分区中,通常都有一部分未被作业占用而浪费掉。这种分配给用户而未被利用的部分,称作存储区的“内碎片”(Internal Fragmentation)。112K20K已分配232K32K已分配364K64K已分配4128K128K未分配操作系统作业A作业B作业C空分区可变分区是指系统不预先划分固定分区,而是在装入作业时划分,使
8、分区的大小正好适应作业的需求量,且分区的个数是可变的。一个可变分区分配和回收的示例减少存储区的“内碎片”,提高主存的利用率操作系统作业A(16K)空闲区10K作业B(90K)作业C(30K)作业D(70K)空闲区24K操作系统作业A(16K)空闲区10K作业B(90K)作业C(30K)空闲区94K作业作业D(70k)和作业)和作业E(50k)请求装入)请求装入操作系统作业A(16K)空闲区10K作业B(90K)作业C(30K)作业D(70K)空闲区24K操作系统空闲区26K作业B(90K)空闲区30K作业D(70K)空闲区24K作业作业A和作业和作业C完成完成作业作业E仍然不能分配仍然不能分配
9、描述主存分配信息的表格一般用两张表格:“已分配区表”和“空闲区表”可变分区的分配(装入作业)从空闲区表中找一个区域分配,修改“空闲区表”修改“已分配区表”,加入新装入的作业可变分区的回收(作业结束)“空闲区表”的修改有下面三种情况:归还区有归还区有归还区既有区归还区有起始地址长度标志7001000未分配2300800未分配40002000未分配80001000未分配2300归还区有起始地址长度标志7001000未分配2300800未分配40002000未分配80001000未分配1700归还区有起始地址长度标志7001000未分配2300800未分配40002000未分配80001000未分配
10、17002300 为一作业选择分区时总是寻找最接近于作业所要求的存储区域。换句话:分配作业后,剩下的空白区最小缺点:1、回收时,插入到空白区链比较麻烦2、容易产生一些较小的无法再分配的碎片如何从空闲区中选择一个区域分配给作业?为作业选择存储区域时,总是寻找最大空白区。为了支持这个算法的实现,空白块应以大小递减的顺序链接起来。首次适应算法是对它们进行折中考虑后设计出来的算法思想:空白区按照地址从小到大链接,为作业分配空间,从中查找,找到第一个足以满足该作业的空白区,分配给作业。随着分配和回收次数的增加,必然导致“碎片”的出现。通过重新安排作业在内存中的位置成一个大的空闲区。必须有动态重定位的支持
11、。采用移动技术时必须注意下列问题:移动会增加系统开销移动是有条件的P118,习题7:在用可变分区方式管理主存时,假定主存中按地址顺序依次有,空闲区的大小依次为32K,10K,5K,228K,100K。现有五个作业J1,J2,J3,J4和J5,它们各需主存1K,10K,108K,28K和115K。若采用能把这五个作业按的顺序全部装入主存吗?可使主存空间利用率最高。5k10k32k100k228k10k32k100k228k4k32k100k228k4k32k100k4k100k120k按怎样的次序装入这五个作业可使主存空间利用率最高?答:上图分配结果,存在两个4k和1个5k的碎片,若再来三个5k
12、的作业,分配不下。更改次序,使得最后的空闲区链表中有多于3个5k空闲区,则内存利用率会提高。本题,只要J4在J1之前进入内存,利用率就会提高4k100k把主存的存储空间,分成相同大小的块,这些块称为物理页面(物理块),将这些存储块编号,称为页面号设内存容量为16MB,假如每4KB为一块,可分成4096个块,页面号为0-4095同理,将每个作业的地址空间,分成与内存大小相等的片,并称为页(Page),其编号为 在为一个作业分配内存空间时,总是以块(页)为单位,将每一个作业的页,放到一个内存的物理块中所谓静态分页系统,就是在调度一个作业时,使用的是静态分配的方法,系统调度另外的作业运行.为了实现逻
13、辑地址到物理地址的映射,系统需要如下三个表目:逻辑页号物理块号0 151 232 703 68进程运行时,每当要访问逻辑地址时,先将逻辑地址分离成和,然后查页表,得到P所对应的,将物理块号(F块长+d),得到逻辑地址对应的物理地址。地址映射过程如下:由指令产生逻辑地址由逻辑页号查得到物理块号由物理块号与页内地址合并得到物理地址。分页管理的存储保护分页管理的存储保护 在分页存储管理中,存储保护功能在分页存储管理中,存储保护功能是采用是采用页表地址寄存器页表地址寄存器代替界地址代替界地址寄存器实现的,它规定了作业可访寄存器实现的,它规定了作业可访问的页表起始地址及其长度。问的页表起始地址及其长度。
14、指导思想:在作业运行之前,只要求把装入主存,另外一部分装入到中,当作业运行过程中需要其他的页时,由虚拟存储系统(Virtual Memory System)自动控制内、外存之间的页面交换。在虚拟存储系统中所用的辅存,可以是一个专用的磁鼓或磁盘,也可以是用于存储文件的磁盘的一部分。1)进程运行之前,将装入主存,另外一部分装入到中2)当进程运行过程中如果所访问的页在内存,则可直接访问3)如果所访问的页不在内存,则发生缺页中断,由操作系统进行页面的动态调度逻辑页号 物理块号 访问权限 内外标志 修改标志 外存地址内外标志=1,对应页在内存;=0,对应页在外存修改标志=1,对应页在内存期间被修改过,淘
15、汰时,需要重新写回外存 =0,对应页没修改过,淘汰时,无需重新写回外存平均分配按进程的程序长度比例分配按进程优先级比例分配进程长度和优先级比例分配所谓请调是当缺页发生时进行调度。当访问的页面不在内存时,由操作系统将其调入内存不会发生无意义的页面调度从缺页中断到所需页面被调入内存,进程需要等待,影响进程的推进速度预调预调也称先行调度。是在缺页发生前进行调度,即当一个页面即将被访问之前,由操作系统将其调入内存。这样可以节省进程因缺页而等待的时间。减少缺页中断次数可能存在无意义的调页;实现开销大程序的顺序性特征(正在访问12页,下一个要访问的可能是13、14页)当要访问页面在外存而不在内存时,需要将
16、其调入内存,如果此时内存中无空闲页面,则需要将内存中某一个页面移出,被移出的页面称为淘汰页面。淘汰算法不仅可以用于页面的置换,也可用于快表项目以及段的置换,以下为几个常用的淘汰算法:)计时法堆栈法淘汰以后不会再需要的,或者在最长的时间以后才会用到的页面,这种算法的缺页率最低该算法只有理论上的意义最简单的页面淘汰算法两种方法可以实现:1、记录页面进入内存的时间;2、页面进入内存时排成一个队列缺点:1、效率不高 2、存在异常现象(Belady现象)计时法:每个页面设置一个访问计时器,每次被访问,从0开始计时。堆栈法:栈中存放当前在主存中的页面,每当访问一页时就调整一次,使栈顶总是指向最近访问的页面
17、,栈底是最近最久没有被访问的页面P106,图4.11认为:过去一段时间里不曾被访问过的页面,在最近的将来,也不会再被访问当需要置换一个页面时,选择在最近一段时间内最久不用的页面予以淘汰利用位记录一个页面自上次访问以来所经历的时间t,并选择t最大的页面淘汰根据在一段时间内页面被访问的次数,选择可以调出的页面。如果一个页面被访问的次数多,则是经常要使用的页面,就不该被调出利用统计每个页被访问的次数进程执行中,若,有,则产生了F次缺页中断。现定义:f=FA 把f称为缺页中断率。影响缺页中断率的因素有:分配给作业的主存块数分配给作业的主存块数多,则同时装入主存的页面数就多,因此减少了缺页中断的次数,即
18、降低了缺页中断率。页面的大小页面调度算法程序编制方法动态分页系统具有如下:可提供大容量的多个虚拟存储器。作业的地址空间不再受实际内存大小的限制。更有效地利用了主存。作业中不常使用的页不会长期驻留在内存,本次运行不到的信息也不会装入内存。多道程序运行的程度更高了更加方便了用户,特别是大作业的用户分页存储管理也有不少:增加了计算机的硬件成本,降低了处理机的速度必须用一部分存储空间来存放各种表格(页表,存储分块表)出现了块内的碎片问题:作业所占用的空间不一定是页的整数倍,一个作业,最后一页往往是不满的。对于静态分页系统,要求运行的作业,必须全部装入主存在动态分页系统中,为处理增加了系统开销P118,
19、习题8:某采用页式虚拟存储管理的系统,接受一个共7页的作业,作业执行时依次访问的页为 1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6。若采用最近最少用(LRU)调度算法,作业在得到和各会产生多少次缺页中断?如果采用先进先出(FIFO)调度算法又会有怎样的结果?1232缺页缺页1 1次次1,2,4,2,1,5,6,2,1,2,3,7,63234缺页缺页2 2次次1,2,3,2,1,5,6,2,1,2,3,7,63424缺页缺页3 3次次1,2,3,4,1,5,6,2,1,2,3,7,62421缺页缺页4 4次次1,2,3,4,2,5,6,2,1,2,3,7,621
20、51缺页缺页5 5次次1,2,3,4,2,1,6,2,1,2,3,7,61252缺页缺页1 1次次1,2,3,4,2,1,6,2,1,2,3,7,634345256缺页缺页1 1次次1,2,3,4,2,1,5,2,1,2,3,7,63434一个段定义为一组(如主程序,过程,数组等都可以作为一个段),按其内在的分成若干段段的长度是不固定的段内都是从0开始编址的连续地址空间段间的地址空间是不连续的。段式存储管理中作业的分段是由用户决定的。作业分段后,作业中的任一逻辑地址可表示为:页式存储管理提供连续的地址,由系统自动进行分页(整个作业的逻辑地址空间都是连续的)段式存储管理,分段是由用户决定的,每一
21、段独立编程;段内的逻辑地址空间时连续的,但是段间的地址空间是不连续的作业的各个段,可被装入不相连的几个内存区域因此,装入作业时,操作系统需为作业建立一张“段表”,指出该作业的每个分段的长度和在主存中的位置段号起始地址段长0120K40K1380K20K2460K20K3780K30K040K-1020K-1020K-1030K-1段式存储管理分配主存空间的方法与可变分区管理方式的分配方法相同:回收存储空间的方法与可变分区管理方式相同:段式管理的存储保护通过作业的段表实现在段表中,每一段有段的起始位置和长度,这相当于界限寄存器的基地址寄存器基地址寄存器和长度寄存器长度寄存器分页的作业地址空间是线
22、性地址空间,而分段作业的地址空间是二维的“页”是信息的物理单位,大小固定,对用户不可见;“段”是信息的逻辑单位,长度不定,用户可见。分页管理查页表得到的是页所对应的内存块号 物理地址=+块内位移 分段管理查段表得到的是段对应内存的起始地址 物理地址=+段内位移与页式管理相比,段式管理因为对作业是由用户从逻辑上分割,所以便于多用户多作业共享某一段。P118习题9:某采用段式存储管理的系统为装入主存的一个作业建立了如下所示的段表。段号 始址 段长 0 8K 3K 1 12K 2K 2 20K 4K 3 30K 8K 回答下列问题:(1)计算该作业访问0,432,1,10,2,500,3,400时的
23、绝对地址。(2)总结段式管理的地址转换过程。虚拟段式存储管理仍以段式存储管理为基础,可以为用户提供比主存实际容量大的虚拟空间。若要访问的段在内存,则按段式管理进行地址映射,若访问的段不在内存,则产生一个“缺段中断”分段式内存管理的优缺点:1、程序的分段具有逻辑结构清晰,便于共享的优点2、但是,内存分配采用可变分区方式,因此,它带有分区管理的一些缺点3、每段必须占据主存的一个连续区域4、装入段时,可能产生内存已有信息的移动5、段长受空闲分区容量之和的限制为克服这个缺点,可用分段和分页相结合的方法,构成分页的段式存储管理,通常被称为“段页式存储管理”。段页式存储管理兼顾了段式在逻辑上清晰和页式在管
24、理上方便的优点基本思想:1、仿照分页管理方法,将内存分成大小相等的块(页)2、作业仍由用户分段,每一段的段内地址仍是从“0”开始的一组连续地址3、每一段再细分成若干块(页),大小和内存块大小相同4、作业装入时,无需将一个段整体装入连续的内存空间,可以将段的信息按照页、存入不必相邻的空闲主存块中段页式内存管理的逻辑地址格式:段内地址 w程序员只知道段号S和段内地址w页号P和页内地址d,是由拆分w得到的每一个装入主存储器的作业建立一张段表,且为每一段建立一张页表。地址映射段页式存储管理中,这将使CPU的执行指令速度大大降低。为了提高地址转换速度,通常引入快表。段页式存储管理的存储保护段页式存储管理
25、的存储保护是通过作业的段表和页表共同实现的。Windows 2000/XP内存管理概述 Win2K中的内存管理由位于ntoskrnl.exe中的内存管理器来实现,它由一组执行体系统服务程序、一个转换无效和访问错误陷阱的处理程序及其它组件组成。利用虚拟内存管理器(VMM)部件实现虚拟内存的管理。Windows系统的存储管理监测内存的使用情况在Windows性能监视器中,可以观察到与内存使用有关的一些数据信息 精确地设置虚拟内存的大小利用性能监视器来观察分页文件的使用情况 分析统计数据 在“记数器日志”窗口中,选中所建的oldpage记数器,然后单击鼠标右键,选择“停止”。用记事本打开日志文件。精确地设置虚拟内存的大小 Windows操作系统为了提高访问磁盘的速度,在内存中开辟出一块区域,称为“磁盘高速缓存”,用户可以使用性能监视器中的系统监视器监视磁盘高速缓存的使用情况。