内功修炼之操作系统学习(存储管理)

发表于:2012-7-06 09:56

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:ithzhang    来源:51Testing软件测试网采编

  对可变分区需采用动态地址重定位,进程的程序和数据的地址转换由硬件完成,硬件设置两个专用控制寄存器:基址寄存器和限长寄存器。基址寄存器存放分配给进程使用的分区的起始地址,限长寄存器存放进程所占用的连续存储空间的长度。当进程占有cpu运行后,操作系统可把分区的起始地址和长度送入基址寄存器和限长寄存器,在执行指令或访问数据时,由硬件根据基址寄存器进行地址转换得到绝对地址。

  当逻辑地址小于限长值时,逻辑地址加上基址寄存器的值就可以获得绝对地址。当逻辑地址大于限长值时表示进程所访问的地址超过所分得的区域,此时不允许访问。

  C语言的程序会被编译成至少三个段:代码段,数据段,堆栈段。Intel x86平台提供专用的存放段基址的寄存器:代码段寄存器CS在指令执行期间重定位指令地址;堆栈段寄存器SS为栈指令执行重定位地址;数据段寄存器DS在指令执行周期内重定位其他地址。提供多对基址、限长寄存器的机器中,允许一个进程占用两个或多个分区。可规定某对基址、限长寄存器的区域是共享的,用来存放共享的程序和数据。

  可变分区中常常出现分散的小空闲区,称之为碎片。当在分区表中找不到足够大的空闲区来装入进程时,可采用移动技术把已在主存中的进程分区连接到一起,使分散的空闲区汇集成片。这就是移动技术。第一种方法是把所有当前占用的分区移动到主存一端。第二种是也是把占用分区移动到另一端,但是当产生足够大的空闲区就停止移动。

  分区方式管理存储器,每道程序要求占用主存的一个或多个连续存储区域,这样不仅导致主存中产生碎片,而且处理器的开销太大。分页存储管理允许程序存放到若干不相邻的空闲块中,既可以免除移动信息工作也可充分利用主存空间。

  进程逻辑地址空间分成大小相等的区,每个分区成为页面或页,页号从0开始依次编号。 把主存物理地址空间分成大小相等的区,每个区是一个物理块或页框。页框大小与页面大小相等。

  与此对应分页存储器的逻辑地址由两部分组成:页号和页内位移。逻辑地址是连续的,用户在编制程序时仍使用相对地址,不必考虑如何分页,由硬件地址转换机构和操作系统的管理需要来决定页面尺寸,从而确定主存的分块大小。进程在主存中的每个页框内的地址是连续的,但页框之间的地址可以不连续。

  页表用于是操作系统为进程建立的,是程序页面和主存对应页框的对照表。页表中的每一栏指明程序中的一个页面和分得页框之间的对应关系。从数学角度来看,页表表示一个函数,其变量是页面号,函数值为页框号,通过页表可以把逻辑地址中的逻辑页面替换成物理页框。进程页表存放在内存中,系统设置了专门的硬件:页表基址寄存器(一对,地址和长度),存放当前运行进程页表的起始地址 ,以加快地址转换速度。

  进程运行前由系统把它的页表基地址送入页表基址寄存器,运行时借助于硬件的地址转换,按页面动态地址重定位。当cpu获得逻辑地址后,由硬件按设定的页面尺寸分成两部分:页号和页内位移。先从页表基地址寄存器找到页表基地址,再用页号作为索引查找页表,得到对应的页框号。根据

  物理地址=页框号*块长+页内位移。

  计算出欲访问的主存单元。虽然进程存放在若干不连续的页框中,

  但在执行过程中总能按正确的物理地址进行存取。

  按照给定逻辑地址进行读写操作时,至少访问两次主存:一次访问页面,另一个根据物理地址访问指令或数据。为了提高运算速度,设置了专门的硬件,用来存放进程最近访问的部分页表项,被称为转换后援缓冲或快表。对快表的访问速度远快于主存,但造价高,且只能存储几十个页表项。块表项包含页号及对应的页框号,它通过并行匹配对所有快表项进行查找。如果找不到,再查主存中的页表,同时将页号即页框号登记到快表中。当块表快满时,需要淘汰旧的块表项,最简单的策略是先进先出。

  通过快表实现主存访问的比率成为命中率。快表与高速缓存不同,前者记录最近转换的页号即页框号,后者保存最近实际访问的指令或数据的副本。

  分页存储管理能实现多个进程共享程序和数据,共享页面信息可大大提高主存空间的利用率。实现页面共享必须区分数据共享和程序共享。实现数据共享时,允许不同进程对共享的数据页面用不同的页号,只要让各自页表中的有关表项指向共享的数据页框。实现程序共享时,由于指令包含指向其他指令或数据的地址,进程依赖于这些地址才能执行,所以,不同进程正确执行共享代码页面,必须为它们在所有逻辑地址空间中指定同样的页号。实现信息共享必须解决共享信息的保护问题,通常的做法是在页表中增加标志位,指出此页的访问模式。进程访问时核对访问模式,当模式不符时抛出异常。

  分页存储管理是实存管理,必须为进程分配足够的主存空间,装入其全部信息,否则进程无法运行。把进程的全部信息装入主存后,实际上并非同时使用,有些部分甚至从不使用,这是对主存资源的一种浪费。于是提出一种想法:不必装入进程的全部信息,仅将当前使用部分先装入主存,其余部分存放在磁盘中,待使用时由系统自动将其装进来,这就是虚拟存储管理技术的基本思路。

  当进程被创建时,代码段和数据段部分数据被调入内存。如果处理器访问的程序或数据不在内存,系统自动将这部分信息从磁盘装入,这叫做部分装入。若此时内存没有足够的空闲空间,便把主存中暂时不用的信息移至磁盘,这叫做部分替换。在具有层次存储结构的计算机系统中,自动实现部分装入和部分替换功能,能从逻辑上为用户提供一个比实际物理存储器大得多的、可寻址的“主存储器”,这被称为虚拟存储器。它对用户隐蔽内部细节。虚拟地址空间等同于实际物理主存加部分硬盘区域的存储空间。引用基础是:程序执行的局部性原理:某存储单元被使用后,其相邻的存储单元也很快被使用---空间局部性。最近访问过的程序代码和数据很快被访问---时间局部性。

  虚拟存储器是基于程序局部性原理的一种假想的而非物理存在的存储器,其主要任务是:基于程序局部性特点,当进程使用某部分地址空间时,保证将相应部分加载至主存中。这种将物理空间和逻辑空间分开编制、互相隔离,但又统一管理和使用的计数为用户编程提供了极大地方便。

32/3<123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号