德国MADLER缓冲器的工作原理
时间:2017-11-02 阅读:1154
德国MADLER缓冲器的传输数据
此类的每个子类都定义了两种获取和放置操作:
相对操作读取或写入一个或多个元素,它从当前位置开始,然后将位置增加所传输的元素数。如果请求的传输超出限制,则相对获取操作将抛出BufferUnderflowException,相对放置操作将抛出BufferOverflowException;这两种情况下,都没有数据被传输。
德国MADLER缓冲器操作采用显式元素索引,该操作不影响位置。如果索引参数超出限制,获取操作和放置操作将抛出IndexOutOfBoundsException。
当然,通过适当通道的 I/O 操作(通常与当前位置有关)也可以将数据传输到缓冲区或从缓冲区传出数据。
做标记和重置
德国MADLER缓冲器缓冲区的标记是一个索引,在调用reset方法时会将缓冲区的位置重置为该索引。并非总是需要定义标记,但在定义标记时,不能将其定义为负数,并且不能让它大于位置。如果定义了标记,德国MADLER缓冲器则在将位置或限制调整为小于该标记的值时,该标记将被丢弃。如果未定义标记,那么调用reset方法将导致抛出InvalidMarkException。
不变式
德国MADLER缓冲器标记、位置、限制和容量值遵守以下不变式:
0<=标记<=位置<=限制<=容量新创建的缓冲区总有一个 0 位置和一个未定义的标记。德国MADLER缓冲器初始限制可以为 0,也可以为其他值,这取决于缓冲区类型及其构建方式。一般情况下,缓冲区的初始内容是未定义的。
清除反转重绕
德国MADLER缓冲器除了访问位置、限制、容量值的方法以及做标记和重置的方法外,此类还定义了以下可对缓冲区进行的操作:
clear()使缓冲区为一系列新的通道读取或相对放置操作做好准备:它将限制设置为容量大小,将位置设置为 0。
flip()使缓冲区为一系列新的通道写入或相对获取操作做好准备:它将限制设置为当前位置,然后将位置设置为 0。
rewind()使缓冲区为重新读取已包含的数据做好准备:它使限制保持不变,将位置设置为 0。
只读缓冲区
德国MADLER缓冲器每个缓冲区都是可读取的,但并非每个缓冲区都是可写入的。每个缓冲区类的转变方法都被为可选操作,当对只读缓冲区调用时,将抛出ReadOnlyBufferException。只读缓冲区不允许更改其内容,但其标记、位置和限制值是可变的。可以调用其isReadOnly方法确定缓冲区是否为只读。
线程安全
多个当前线程使用缓冲区是不安全的。如果一个缓冲区由不止一个线程使用,则应该通过适当的同步来控制对该缓冲区的访问。
德国MADLER缓冲器调用链
此类中的方法返回调用它们的缓冲区(否则它们不会返回任何值)。此操作允许将方法调用组成一个链;例如,语句序列
b.flip(); b.position(23); b.limit(42);可以由以下更紧凑的一个语句代替 b.flip().position(23).limit(42);
从以下版本开始:1.4
德国MADLER缓冲器的基本原理
在CPU的设计中,一般输出线的直流负载能力可以驱动一个TTL负载,而在连接中,CPU的一根地址线或数据线,可能连接多个存储器芯片,但存储器芯片都为MOS电路,主要是电容负载,直流负载远小于TTL负载。故小型系统中,CPU可与存储器直接相连,在大型系统中就需要加德国MADLER缓冲器。
任何程序或数据要为CPU所使用,必须先放到主存储器(内存)中,即CPU只与主存交换数据,所以主存的速度在很大程度上决定了系统的运行速度。程序在运行期间,在一个较短的时间间隔内,由程序产生的地址往往集中在存储器的一个很小范围的地址空间内。指令地址本来就是连续分布的,再加上循环程序段和子程序段要多次重复执行,因此对这些地址中的内容的访问就自然的具有时间集中分布的倾向。数据分布的集中倾向不如程序这么明显,但对数组的存储和访问以及工作单元的选择可以使存储器地址相对地集中。这种对局部范围的存储器地址频繁访问,而对此范围外的地址访问甚少的现象被称为程序访问的局部化(Locality of Reference)性质。由此性质可知,在这个局部范围内被访问的信息集合随时间的变化是很缓慢的,如果把在一段时间内一定地址范围被频繁访问的信息集合成批地从主存中读到一个能高速存取的小容量存储器中存放起来,供程序在这段时间内随时采用而减少或不再去访问速度较慢的主存,就可以加快程序的运行速度。这个介于CPU和主存之间的高速小容量存储器就称之为高速缓冲存储器,简称Cache。不难看出,程序访问的局部化性质是Cache得以实现的原理基础。同理,构造磁盘高速缓冲存储器(简称磁盘Cache),也将提高系统的整体运行速度CPU一般设有一级缓存(L1 Cache)和二级缓存(L2 Cache)。一级缓存是由CPU制造商直接做在CPU内部的,其速度极快,但容量较小,一般只有十几K。PⅡ以前的PC一般都是将二级缓存做在主板上,并且可以人为升级,其容量从256KB到1MB不等,而PⅡ CPU则采用了全新的封装方式,把CPU内核与二级缓存一起封装在一只金属盒内,并且不可以升级。二级缓存一般比一级缓存大一个数量级以上,另外,在CPU中,已经出现了带有三级缓存的情况。
高速缓冲存储器
高速缓冲存储器,即Cache。我们知道,数据分布的集中倾向不如程序这么明显,如果把在一段时间内一定地址范围被频繁访问的信息集合成批地从主的系统中,CPU访问数据时,在Cache中能直接找到的概率,它是Cache的一个重要指标,与Cache的大小、替换算法、程序特性等因素有关。增加Cache后,CPU访问主存的速度是可以预算的,64KB的Cache可以缓冲4MB的主存,且命中都在90%以上。以主频为100MHz的CPU(时钟周期约为10ns)、20ns的Cache、70ns的RAM、命中为90%计算,CPU访问主存的周期为:有Cache时,20×0.9+70×0.1=34ns;无Cache时,70×1=70ns。由此可见,加了Cache后,CPU访问主存的速度大大提高了,但有一点需注意,加Cache只是加快了CPU访问主存的速度,而CPU访问主存只是计算机整个操作的一部分,所以增加Cache对系统整体速度只能提高10~20%左右。
接口集成电路语
zui基本线路构成的门电路存在着抗干扰性能差和不对称等缺点。为了克服这些缺点,可以在输出或输入端附加反相器作为缓冲级;也可以输出或输入端同时都加反相器作为缓冲级。这样组成的门电路称为带德国MADLER缓冲器的门电路。
带缓冲输出的门电路输出端都是1个反相器,输出驱动能力仅由该输出级的管子特性决定,与各输入端所处逻辑状态无关。而不带德国MADLER缓冲器的门电路其输出驱动能力与输入状态有关。另一方面。带德国MADLER缓冲器的门电路的转移特性至少是由3级转移特性相乘的结果,因此转换区域窄,形状接近理想矩形,并且不随输入使用端数的情况而变化、加德国MADLER缓冲器的门电路,抗干扰性能提高10%电源电压。此外,带德国MADLER缓冲器的门电路还有输出波形对称、交流电压增益大、带宽窄、输入电容比较小等优点。不过,由于附加了缓冲级,也带来了一些缺点。例如传输延迟时间加大,因此,带德国MADLER缓冲器的门电路适宜用在高速电路系统中。