『译』计算机体系结构发展史(二)

9d78f03bd69b8581493718a66171f626.png

系列文章第二篇(对应M.3)


往期文章

『译』计算机体系结构发展史‍(一)


M.3 The Development of Memory Hierarchy and Protection (Chapter 2 and Appendix B)


尽管计算技术的先驱者们就深知层次化内存结构的必要性,并创造了“Memory Hierarchy”这个术语,但直到Kilburn et al. [1962]才首先提出了两级的内存自动管理 。曼彻斯特大学的Atlas计算机展示了这项技术。这台计算机出现在IBM 360发布的前一年。尽管IBM计划将这项技术引入其下一代 计算机(System / 370),但1970年的操作系统TSS还没有做好准备。虚拟内存(Virtual Memory)技术是1972年伴随370系列计算机发布的,也正是这台计算机创造了“Translation Lookaside Buffer”这一术语(变换旁路缓冲区,或页表缓存, 或转址旁路缓存)[Case and Padegs 1978]。当今,很少有计算机不使用虚拟内存技术,例外情况包括一些超级计算机,以及一些嵌入式处理器和老旧的个人计算机。 

Atlas和IBM 360都提供了内存页保护功能,而GE 645是第一个提供页式分段(paged segmentation)的系统。较早的Burroughs计算机使用分段方式来支持虚拟内存,这和Intel 8086的分段地址方案类似。80286是第一个具有附录C中所述保护机制的80x86处理器,它受到运行在GE 645上的Multics保护软件的启发。随着时间的推移,一些更为复杂的机制相继出现。最精细的机制是“capabilities”,它在70年代末和80年代初引起了极大的兴趣[Fabry 1974; Wulf, Levin, and Harbison 1981]。Wilkes [1982]是最早从事相关研究的工作者之一,他曾这样说:

“Anyone who has been concerned with an implementation of the type just described [capability system], or has tried to explain one to others, is likely to feel that complexity has got out of hand. It is particularly disappointing that the attractive idea of capabilities being tickets that can be freely handed around has become lost ….

Compared with a conventional computer system, there will inevitably be a cost to be met in providing a system in which the domains of protection are small and frequently changed. This cost will manifest itself in terms of additional hardware, decreased runtime speed, and increased memory occupancy. It is at present an open question whether, by adoption of the capability approach, the cost can be reduced to reasonable proportions. [p. 112]”

如今,尽管对内存保护和安全性的关注度越来越高,操作系统或计算机体系结构领域对于这项技术已经几乎没什么兴趣了。

Bell and Strecker [1976]对PDP-11的设计进行了反思,并确定了“地址空间较小”是唯一难以修复的体系结构错误。在设计PDP-11的时期,核心内存的容量增长非常缓慢。此外,当时有100多家小型计算机公司,竞争非常激烈。如果每个地址必须两次通过16位的数据通路,那么DEC的产品可能就失去成本竞争力了。因此,架构师决定相对其前身只增加4个地址位。

IBM 360的架构师意识到地址空间大小的重要性,因此计划将体系结构扩展到32位地址。但是,由于在1964年使用更大的地址时,低端360机型甚至会变得更慢,因此在IBM 360中仅使用了24位地址。不幸的是,当时架构师没有向软件开发人员说明他们的计划,一些程序员在高8位“未使用”地址位中存储额外信息导致了问题。(20年后,Apple在Motorola 68000中使用24位地址犯了类似的错误,当稍后的68000使用完整的32位虚拟地址时,需要一个额外的程序来为Macintosh计算机检查哪些是“ 32位干净”的程序。)此后几乎每台计算机都会对地址访问进行检查,确保未使用的地址位保持未使用状态,并在这些位的值出现错误时触发“陷阱”(trap)。

据记载,系统虚拟机( system virtual machines)由IBM率先提出,是其虚拟内存研究的一部分。IBM的第一台带有虚拟内存的计算机是1967年推出的IBM 360/67。IBM研究人员为其编写了CP-67程序,该程序可以虚拟多台独立的360台计算机。之后,他们编写了一个在可在这些虚拟机上运行的名为CMS的交互式单用户操作系统。CP-67为后续产品VM/370打下了基础。今天,IBM为其大型机销售z/VM虚拟机操作系统 [Meyer and Seawright 1970; Van Vleck 2005]。 

在Atlas论文发表几年后,Wilkes发表了第一篇描述高速缓存(Cache)概念的论文[1965]:

The use is discussed of a fast core memory of, say, 32,000 words as slave to a slower core memory of, say, one million words in such a way that in practical cases the effective access time is nearer that of the fast memory than that of the slow memory. [p. 270]”

这篇两页纸的论文介绍了直接映射缓存(direct-mapped cache)的概念。尽管这是有关高速缓存的第一份出版物,但第一个高速缓存的实现可能是在剑桥大学建造的直接映射指令缓存(direct-mapped instruction cache)。它基于隧道二极管存储器(tunnel diode memory),这是当时最快的存储器形式。Wilkes 曾指出,G.Scarott提出了高速缓存的想法。

在这篇论文之后,IBM启动了一个相关项目,推出了第一台带有高速缓存的商用计算机IBM 360/85 [Liptay 1968]。Gibson [1967]描述了如何使用访存流量(memory traffic)和未命中率(miss rate)来测量程序行为,并展示了未命中率在不同程序之间的变化情况。Gibson使用包括20个程序(每个有300万个引用!)的样本,依据平均内存访问时间来对比具有和不具有高速缓存的系统的性能。这个尝试已有40多年的历史了,直到90年代初,未命中率仍然在架构研究和评测中得到广泛应用。

Conti,Gibson和Pitkowsky [1968]描述了360/85的最终性能。尽管360/85相较360/91的时钟较慢(时钟周期80ns对60ns),内存交织更少(4对16),主内存更慢(1.04us与0.75us),但在这篇论文使用的11个程序中,360/91只在3个程序上优于360/85。这篇论文也是第一个使用“Cache”一词的。

此后高速缓存的研究快速发展。Strecker [1976]发表了第一篇比较高速缓存设计的论文,研究了PDP-11的高速缓存。Smith(1982)后来发表了一份详尽的综述论文,其中使用了术语“spatial locality”(空间局部性)和“temporal locality”(时间局部性)。这篇文章为许多计算机设计师提供了参考。

尽管大多数研究都依赖于仿真,但是Clark [1983]在分析中使用硬件监视器(hardware monitor)记录了几天内VAX-11/780的高速缓存未命中的情况。Clark and Emer [1985]随后比较了对地址转译功能的仿真和硬件测量。 

Hill(1987)提出了附录B中描述的用三个C(Compulsory, Capacity, Conflict)来解释高速缓存未命中的情况。Jouppi [1998]回顾说,Hill的三C模型直接导致了他发明victim cache(牺牲块缓冲区),以利用更快的直接映射缓存的优势,同时又避免了大多数冲突导致的未命中(conflict misses)的代价。Sugumar和Abraham [1993]认为,三C模型的基线缓存应使用最佳替换(optimal replacement)策略。这可以消除基于“最近最少使用”(LRU)的未命中分类所导致的异常。同时,这种方法还可以将冲突导致的未命中分解为两种:由映射引起的未命中,以及由非最佳替换算法引起的未命中。

关于非阻塞式缓存(nonblocking caches)的最早的论文之一是Kroft [1981]。之后,Kroft [1998]说明,他是第一个在Control Data Corporation(CDC,a mainframe and supercomputer firm)设计带有高速缓存的计算机的人。在尝试把旧的概念用于新机制时,他想到了使用双端口的高速缓存可以在发生未命中的情况时继续为其他访问提供服务。

Baer and Wang [1988] 对多级包含性(multilevel inclusion)进行了首次分析。Wang, Baer, and Levy [1989]随后发表了一篇有关多级高速缓存性能评估的早期论文。后来,Jouppi和Wilton [1994]提出了片上多级高速缓存的多级互斥性(multilevel exclusion)。

除了victim cache外,Jouppi [1990]还研究了通过流缓冲区(streaming buffers)进行的预取。Farkas, Jouppi, and Chow [1995]将他的工作进行了扩展,使流缓冲区可以很好的配合无阻塞负载和针对顺序处理器的推测执行(speculative execution)。之后,Farkas et al. [1997]表明,尽管乱序处理器对于不可预测的延迟有更好的容忍性,仍然可以通过该技术受益。他们还优化了流缓冲区对内存带宽的要求。

90年代的Symposium on Architectural Support for Compilers and Operating Systems(ASPLOS)和International Computer Architecture Symposium(ISCA)会议中充斥大量关于高速缓存的论文。(有些说法称,ISCA应该称为“International Cache Architecture Symposium”)

本书正文第2章使用Cantin and Hill [2001]收集的SPEC2000基准测试。第二章中一些图表使用了下面一些论文中的数据:Agarwal and Pudar [1993]; Barroso, Gharachorloo, and Bugnion [1998]; Farkas and Jouppi [1994]; Jouppi [1990]; Lam, Rothberg, and Wolf [1991]; Lebeck and Wood [1994]; McCalpin [2005]; Mowry, Lam, and Gupta [1992]; and Torrellas, Gupta, and Hennessy[1992]。 

- 第二部分完 -


参考资料见『译』计算机体系结构发展史(二)

7e9ee5a2fef8a5dc33427b71985cd9b5.jpeg


题图由stable diffusion生成

prompt: a beautiful oil and canvas painting of computers and networks technology, abstract, by Caravaggio, trending on artstation

本文为个人兴趣之作,仅代表本人观点,与就职单位无关

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值