a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 83|回复: 1

[计算机四级] 全国计算机四级考试复习纲要七(5)

[复制链接]
发表于 2012-7-31 20:48:14 | 显示全部楼层 |阅读模式
三、存储体系
5 T2 Y+ n( q; ]9 o4 `" l4 h(一) 存储层次的形成及评价9 k- t& H. [( O6 E
1.存储层次的形成
& C, s8 o$ k7 I. P由于速度快的存储器价格贵,容量就不能做得太大;而价格低的存储器容量可能做得很大,但它的存取速度却比较慢。因此,在综合考虑容量、速度、价格的基础上,人们建立了能满足系统对存储器在性能与价格两方面要求的存储组合,称为存储层次(memory hierarchy)。存储层次由若干层组成,高层存储器更小、更快、每字节价格也更贵,低层存储器则更大、更慢、价格也更便宜,任何相邻两层之间的关系都是如此。此外,高层的数据都是低层数据的子集,也就是说所有的数据都能在最底层中找到。
/ R$ }: H' S8 H* N2 m- i9 i2.存储体系的依据: X7 U+ X  t) X
实现存储体系的依据是局部性原理。我们已经知道有两种类型的局部性:时间局部性是指当前访问的项目在最近的将来还会访问;空间局部性是指某地址附近的内容可能会被一起访问。这就是说,在主存储器内,顺序执行的程序和数据往往在一段时间内集中分布在某个局部或者在同一时刻内出现在邻近的区域内。这是计算机程序所共有的特性,它也称为程序或数据的局部性,或称访问的局部性。这种局部性乃是存储器逻辑地址可预测性的基础,也是多级存储体系能成功运行的依据。尤其是为实现Cache提供了理论根据,即在某一段时间内,可以集中访问小容量的Cache,而且,当Cache需要从主存读取信息时,不是只读一条指令或一个数据,而是把该单元所在的主存的某一局部区域的内容都读入Cache.5 a% G# O3 W$ k
(二) 虚拟存储的原理
$ r# o, [& x) G( t1.虚拟存储的管理方式4 W& M0 A0 p1 `( b" d- w- a; r
虚拟存储(virtual memory)技术的概念是:把很大的程序分成许多较小的块,全部存储在辅存中。运行时,把要用到的程序块先调入主存,并且把马上就要用到的程序块从主存再调入高速缓存。这样,一边运行程序,一边进行所需程序块的调进调出。只要及时供应上所需处理的程序与数据,程序就能顺利而高速地运行下去。因此,对于应用程序员来说就好像有一个比实际主存大得多的,可以放得下整个程序的虚拟主存空间。当辅存中的程序块调入主存时,必须使程序在主存中定位。为了使应用程序员对其程序不同修改就可以在虚拟存储器上运行,即应用程序员不用考虑如何把程序地址映象和变换成实际主存的物理地址,这种程序的定位应由系统自动完成,从而使虚存技术对于应用程序员来说是透明的。这种定位技术是把程序分成若干较小的段或页,用相应的映象表来指明该程序的某段或某页是否已经装入主存。若已装入主存,则应同时指明它在主存的起始位置;若尚未装入主存,则去辅存中调用相应的段或页,并建立起程序空间和实存空间的地址映象关系。由于采用的存储映象算法不同,就形成不同的存储管理方式,常用的有段式管理、页式管理以及段页式管理。
回复

使用道具 举报

 楼主| 发表于 2012-7-31 20:48:15 | 显示全部楼层

全国计算机四级考试复习纲要七(5)

段式管理(segmentation)把一个程序分成若干个段(segment)进行存储,每个段都是一个逻辑实体(logical entity),程序员需要知道并使用它。它的产生是与程序的模块化直接有关的。段式管理是通过段表进行的,它包括段号或段名、段起点、装入位、段的长度等。此外还需要主存占用区域表、主存可用区域表。为了进行段式管理,每道程序在系统中都有一个段(映象)表来存放该道程序各段装入主存的状况信息。段表中的每一项(对应表中的每一行)描述该道程序一个段的基本状况,由若干个字段提供。段名字段用于存放段的名称,段名一般是有其逻辑意义的,也可以转换成用段号指明。
; S8 V9 e; O! a2 F5 G由于段号从0开始顺序编号,正好与段表中的行号对应,如2段必是段表中的第3行,这样,段表中就可不设段号(名)字段。装入位字段用来指示该段是否已经调入主存,“1”表示已装入,“0”表示未装入。在程序的执行过程中,各段的装入位随该段是否活跃而动态变化。当装入位为“1”时,地址字段用于表示该段装入主存中起始(绝对)地址,当装入位为“0”时,则无效(有时机器用它表示该段在辅存中的起始地址)。段长字段指明该段的大小,一般以字数或字节数为单位,取决于所用的编址方式。段长字段是用来判断所访问的地址是否越出段界的界限保护检查用的。访问方式字段用来标记该段允许的访问方式,如只读、可写、只能执行等,以提供段的访问方式保护。除此之外,段表中还可以根据需要设置其它的字段。段表本身也是一个段,一般常驻在主存中,也可以存在辅存中,需要时再调入主存。假设系统在主存中最多可同时有N道程序,可设N个段表基址寄存器。对应于每道程序,由基号(程序号)指明使用哪个段表基址寄存器。段表基址寄存器中的段表基址字段指向该道程序的段表在主存中的起始地址。段表长度字段指明该道程序所用段表的行数,即程序的段数。由系统赋给某道程序(用户、进程)一个基号,并在调入调出过程中对有关段表基址寄存器和段表的内容进行记录和修改,所以这些都不用用户程序员来管。6 N$ y0 v, [$ e" L% s3 M
某道活跃的程序在执行过程中产生的指令或操作数地址只要与基号组合成系统的程序地址,即可通过查表自动转换成主存的物理地址。下图示意性地表示了这一地址变换的过程。分段方法能使大程序分模块编制,从而可以多个程序员并行编程,缩短编程时间,在执行或编译过程中对不断变化的可变长段也便于处理。5 ^6 ?4 [+ P, \9 a
各个段的修改、增添并不影响其它各段的编制,各用户以段的连接形成的程序空间可以与主存的实际容量无关。分段还便于几道程序共用已在主存内的程序和数据,如编译程序、各种子程序、各种数据和装入程序等。不必在主存中重复存储,只需把它们按段存储,并在几道程序的段表中有公用段的名称及同样的基址值即可。由于各段是按其逻辑特点组合的,容易以段为单位实现存储保护。例如,可以安排成常数段只能读不能写;操作数段只能读或写,不能作为指令执行;子程序段只能执行,不能修改;有的过程段只能执行,不能读也不能写,如此等等。一旦违反规定就中断,这对发现程序设计错误和非法使用是很有用的。段式管理的虚拟存储器由于各个段的长度完全取决于段自身,当然不会恰好如下图那样是1K的整数倍,段在主存中的起点也会是随意的,这就给高效地调入段分配主存区域带来困难。为了进行段式管理,除了系统需要为每道程序分别设置段映象表外,还得由操作系统为整个主存系统建立一个实主存管理表,它包括占用区域表和可用区域表两部分。占用区域表的每一项(行)用来指明主存中哪些区域已被占用,被哪道程序的哪个段占用以及该段在主存的起点和长度。此外,还可以设置诸如该段是否进入主存后被改写过的字段,以便该段由主存中释放时,决定是否还要将其写回到辅存中原先的位置来减少辅助操作。可用区域表的每一项(行)则指明每一个未被占用的基地址和区域大小。当一个段从辅存装入主存时,操作系统就在占用区域表中增加一项,并修改可用区域表。而当一个段从主存中退出时,就将其在占用区域表的项(行)移入可用区域表中,并进行有关它是否可与其它可用区归并的处理,修改可用区域表。当某道程序全部执行结束或者是被优先级更高的程序所取代时,也应将该道程序的全部段的项从占用区域表移入可用区域表并作相应的处理。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-15 18:38 , Processed in 0.498578 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表