操作系统——精髓与设计原理之存储器管理读书报告一、存储器主要内容概述1、程序的装入和链接将一个用户源程序变为一个可在内存中执行的程序,通常要经过以下几步:(1)编译:由编译程序将用户源代码编译成若干个目标模块。(2)链接:由链接程序将编译后形成的目标模块以及它们所需要的库函数,链接在一起,形成一个装入模块;(3)装入:由装入程序将装入模块装入内存。2、连续分配存储管理方式连续分配方式可分为四种,(1)单一连续分配:把内存分为系统区和用户区两部分。(2)固定分区分配:将内存用户空间划分为若干固定大小(分区大小可等可不等)的区域,每个分区只装一道作业。(3)动态分区分配:根据用户程序的大小,动态地对内存进行划分,因此,各分区的大小是不定的,内存被划分成多少个分区,其数目也是可变的。(4)动态重定位分区分配:指将空闲分区紧凑成连续空闲区分配给需要的程序,同时修改有关数据结构使已经被分配空间的程序能继续正常运行。对换技术是指:所有其它作业都驻留在外存的后备队列上,只调入一个作业进入内存运行;此作业的时间片用完时,该作业调至外存,再将后备队列上的另一个作业调入内存;,也让它运行一个时间片的时间,然后又将它调出,再调下一个作业进入内存。3、基本分页存储管理方式将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,如第0页、第1页等。相应的,也把内存空间分成与页面相同大小的若干个存储块,称为物理块或页框,也同样为它们加以编号。在为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。基本分段存储管理方式作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息。例如,有主程序段MAIN,子程序段X,数据段D及栈段S等。通常用一个段号代替段名,每个段都从0开始编址,并采用一段连续的地址空间。段的长度由相应的逻辑信息组的长度决定。4、虚拟存储器的基本概念基于局部性原理,一个作业在运行之前,没有必要全部装入内存,而仅将那些当前要运行的那部分页面或段,先装入内存便可启动运行,其余部分暂时留在磁盘上。5、虚拟存储器的特征虚拟存储器最基本的特征是离散性,在此基础上又形成了多次性及对换性的特征。其所表出来的最重要的特征是虚拟性。(1)离散性:离散性是指在内存分配是采用离散分配方式,这是其他几个特征的基础。没有离散性,也就不可能实现虚拟存储器。(2)多次性:多次性是指一个作业被分成多次地调入内存运行,即在运行时没有必要将其全部装入,只须将当前要运行的那部分程序和数据装入内存即可;以后运行到那一部分时在将它调入。(3)对换性:对换性是指允许在作业的运行过程中换进、换出。在进程运行期间,允许将那些暂不使用的程序和数据,从内存调至外存的对换区(换出),以后需要时再将它们从外存调至内存换入;甚至还允许将暂时不运行的进程调至外存,具备运行条件时再调入内存。换进、换出能有效地提高内存利用率。可见,虚拟存储器具有对换性特征。(4)虚拟性:虚拟性是指能够从逻辑上扩允内存容量,使用户所看到的内存容量远大于实现内存容量。这是虚拟存储器所表现出来的最重要的特征,也是实现虚拟存储器的最重要的目标。6、请求分页存储管理方式请求分页系统是建立在基本分页基础上的,为了能支持虚拟存储器功能而增加了请求调页功能和页面置换功能。相应地,每次调入和换出的基本单位都是长度固定的页面,这使得请求分页系统在实现上要比请求分段系统简单。7、页面置换算法最佳(Optimal)置换算法:其所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再访问的页面。(2)先进先出页面置换算法:总是淘汰最先进入内存的页面,即选择在内存中的驻留时间最久的页面予以淘汰。(3)最近最久未使用置换算法:根据页面调入内存后的使用情况选择最近最久未使用的页面予以淘汰。(4)Clock置换算法:利用Clock算法时,只须为每页设置一位访问位,在将内存中的所有页面都通过链接指针链成一个循环队列。当某页被访问时,其访问位被置1。置换算法在选择一页淘汰时,只须检查其访问位。改进型的Clock置换算法:在将一个页面换出时,如果该页已被修改过,便须将它重新写到磁盘上;但如果该页未被修改过,则不必将它拷回磁盘。同时满足两条件的页面作为手癣淘汰的页。由访问位A和修改位M可以组合成下面四种类型的页面:1类(A=0,M=0)。表示该页最近既未被访问、又未被修改,是最佳淘汰页。2类(A=0,M=1)。表示该页最近未被访问,但已被修改,并不是很好的淘汰页。3类(A=1,M=0)。最近已被访问,但未被修改,该页有可能再被访问。4类(A=1,M=1)。最近已被访问且被修改,该页有可能再被访问。8、请求分段存储管理方式在请求分段系统中,程序运行之前,只需先调入若干个分段(不必调入所有的分段),便可启动运行。当所访问的段不在内存中时,可请求操作系统将所缺的段调入内存。为了实现分段共享,可在系统中配置一张段表,所有各共享段都在共享段表中占有一表项。表项中记录了共享段的段号和段长、内存始址、存在位等信息,并记录有共享此分段的每个进程的情况。二、问题与讨论1、虚拟存储器和物理存储器的区别。物理存储器是CPU可以访问的存储器,其大小为232字节。虚拟存储器是程序占有的空间,实际上这个空间是由磁盘等外部存储器的支持来实现的,所以编写的程序最多可达246字节。物理存储器的大小由CPU的地址总线的位数决定,而虚拟存储器的大小由CPU的体系结构确定。物理存储器的分配,就是存储器管理要解决的问题。即如何把232字节的物理存储器分配给具有246字节大小的程序。这种存储器管理或存储器分配一般是由操作系统(OS)进行的,但是CPU内部具有支持存储器管理的功能。在编写程序时,是不能直接制定程序的物理存储器的地址的(物理地址)。因为程序占有的是虚拟存储器,所以由程序制定的是虚拟地址。所谓虚拟地址,即是虚拟存储器的位置的地址,因为是由程序制定的,所以又称为逻辑地址。2、为什么要引入动态重定位?如何实现?a.程序在运行过程中经常要在内存中移动位置,为了保证这些被移动了的程序还能正常执行,必须对程序和数据的地址加以修改,即重定位。引入重定位的目的就是为了满足程序的这种需要。b.要在不影响指令执行速度的同时实现地址变换,必须有硬件地址变换机构的支持,即须在系统中增设一个重定位寄存器,用它来存放程序在内存中的起始地址。程序在执行时,真正访问的内存地址是相对地址与重定位寄存器中的地址相加而形成的。3、分页和分段有何区别?a.分页和分段都采用离散分配的方式,且都要通过地址映射机构来实现地址变换,这是它们的共同点;b.对于它们的不同点有三,第一,从功能上看,页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率,即满足系统管理的需要,而不是用户的需要;而段是信息的逻辑单位,它含有一组其意义相对完整的信息,目的是为了能更好地满足用户的需要;第二页的大小固定且由系统确定,而段的长度却不固定,决定于用户所编写的程序;第三分页的作业地址空间是一维的,而分段的作业地址空间是二维的。4.、为什么要配置层次式存储器?这是因为:a.设置多个存储器可以使存储器两端的硬件能并行工作。b.采用多级存储系统,特别是Cache技术,这是一种减轻存储器带宽对系统性能影响的最佳结构方案。c.在微处理机内部设置各种缓冲存储器,以减轻对存储器存取的压力。增加CPU中寄存器的数量,也可大大缓解对存储器的压力。5、为什么说分段系统较之分页系统更易于实现信息共享和保护?a.对于分页系统,每个页面是分散存储的,为了实现信息共享和保护,则页面之间需要一一对应起来,为此需要建立大量的页表项;b.而对于分段系统,每个段都从0开始编址,并采用一段连续的地址空间,这样在实现共享和保护时,只需为所要共享和保护的程序设置一个段表项,将其中的基址与内存地址一一对应起来即可。6、什么是抖动?产生抖动的原因是什么?a.抖动(Thrashing)就是指当内存中已无空闲空间而又发生缺页中断时,需要从内存中调出一页程序或数据送磁盘的对换区中,如果算法不适当,刚被换出的页很快被访问,需重新调入,因此需再选一页调出,而此时被换出的页很快又要被访问,因而又需将它调入,如此频繁更换页面,使得系统把大部分时间用在了页面的调进换出上,而几乎不能完成任何有效的工作,我们称这种现象为抖动。b.产生抖动的原因是由于CPU的利用率和多道程序度的对立统一矛盾关系引起的,为了提高CPU利用率,可提高多道程序度,但单纯提高多道程序度又会造成缺页率的急剧上升,导致CPU的利用率下降,而系统的调度程序又会为了提高CPU利用率而继续提高多道程序度,形成恶性循环,我们称这时的进程是处于抖动状态。7、在虚拟段页式存储管理中,考虑段的共享与段长度得动态变化,连接中断如何处理?由段名查本段的段名—段号对照表及共享段表,经判断可分为如下三种情形:(1)所有进程都未连接过(共享段表、段名—段号对照表均无):查文件目录找到该段;为该段建立页表,将该段由文件全部读入swap空间,部分读入内存,填写页表;为该段分配段号,填写段名—段号对照表;如该段可共享,填写共享段表,共享计数置1;填写段表;根据段号及段内地址形成无障碍指示位的一般间接地址。(2)其他进程连接过但本进程未连接过(共享段表有,段名—段号对照表无):为该段分配段号;填写段名—段号对照表;填写段表(指向共享段表),共享段表中共享计数加1;根据段号及段内地址形成无障碍指示位的一般间接地址。(3)本进程已连接过(共享段表无,段名—段号对照表有):根据段号及段内地址形成无障碍指示位的一般间接地址。这里,段内地址由两部分组成,即逻辑页号和页内地址。8、何为静态链接?何谓装入时动态链接和运行时动态链接?a.静态链接是指在程序运行之前,先将各自目标模块及它们所需的库函数,链接成一个完整的装配模块,以后不再拆开的链接方式。b.装入时动态链接是指将用户源程序编译后所得到的一组目标模块,在装入内存时,采用边装入边链接的一种链接方式,即在装入一个目标模块时,若发生一个外部模块调用事件,将引起装入程序去找相应的外部目标模块,把它装入内存中,并修改目标模块中的相对地址。c.运行时动态链接是将对某些模块的链接推迟到程序执行时才进行链接,也就是,在执行过程中,当发现一个被调用模块尚未装入内存时,立即由OS去找到该模块并将之装入内存,把它链接到调用者模块上。三、心得小体会存储器管理和上次的进程管理一样,都是操作系统的重要内容,学习完内存管理后自我感觉比进程管理要更简单一点。。在存储器管理这一章节中我感觉比较难的是段页式存储管理和虚拟内存。通过此次读书报告,我发现我还有很多没有掌握的知识点,对某些比较难的知识点还没有理解透彻,今后我会多看书,努力把这一章学好,把操作系统内容学好。