1700435943
UNIX传奇:历史与回忆 3.4 存储略谈
1700435944
1700435945
1700435946
1700435947
1700435948
1700435949
1700435950
1700435951
年轻读者可能会怀疑前文提及的内存大小不准确。例如,IBM 7090或7094拥有32K(32 768)个36位字长的内存;肯用过的原版PDP-7拥有8K(8 192)个18位字长内存,也就是7090内存的大约八分之一;第一台PDP-11拥有24 KB主存储器和半兆硬盘。我的2015年版MacBook Air有8 GB内存(超过33万倍)和500 GB的硬盘(50万倍),价格不过1 000美元。
1700435952
1700435953
简而言之,以当下标准看,那时的计算机内存很小。现在主存储器动辄以GB计,硬盘以TB为单位,而且既便宜又小巧,被广为使用。但在20世纪60年代和70年代早期,存储技术和现在可不太一样。那时的计算机的主存储器由一系列甜甜圈形状的铁氧体细小磁芯构件组成。制造工人手工将导线穿过磁芯,将它们连接起来。每个磁芯都可以用两种方式进行磁化(如顺时针或逆时针),因此能够代表1个信息位,8个磁芯就是1字节。
1700435954
1700435955
磁芯内存非常昂贵,因为制造它需要高度熟练的手工劳动。它也很笨重。图3-12显示了一个16K bit(2KB)的磁芯内存,在1971年,它大概要卖1.6万美元,即每位接近1美元。
1700435956
1700435957
1700435958
1700435959
1700435960
图3-12 磁芯内存;16K bit, 2KB ( ~5.25英寸,13厘米)
1700435961
1700435962
内存往往是计算机中最昂贵的部件。每个字节都很珍贵。程序员受内存资源约束,得随时清楚使用了多少内存,有时不得不采取讨巧和冒险的编程技术来将程序放入可用内存中。
1700435963
1700435964
Unix擅长高效利用计算机的有限内存。这首先得归功于像肯和丹尼斯这样天赋异禀的程序员,他们知道如何节省内存。
1700435965
1700435966
其次,这些天才找到了实现通用性和统一性的方法,于是就能用较少的代码完成更多任务。有时这得靠巧妙的编程手段,有时是拜更好的算法所赐。
1700435967
1700435968
汇编语言也厥功至伟,相比高级语言,它能让指令执行得更快,使用更少内存。只有到了20世纪70年代,基于半导体和集成电路的新内存技术变得普遍,程序员才负担得起使用C之类高级语言所需的额外开销(这些开销虽然不特别高,但也得仔细盘算)。
1700435969
1700435970
存储分配器,如最初的alloc和道格·麦基尔罗伊后来写的malloc库,用来在程序运行时动态分配和重新分配内存,这是充分利用稀缺资源的另一种方式。当然,得谨慎操作内存,因为最微小的错误都可能导致程序出错(即使在今天,起码从我在课堂上看到的学生操作而言,这种情况也未绝迹)。内存管理不当仍然是C语言程序出错的主要原因之一。
1700435971
1700435972
当程序出现严重错误时,操作系统会注意到,并试图通过创建一个保存主存储器状况(即磁芯中的内容)的文件来帮程序员定位错误,这就是“磁芯转储”(core dump)一词的由来。虽然磁芯早已退出舞台,这个词仍在使用。保存主存储器状态的文件仍然被称为磁芯(core)。
1700435973
1700435974
1700435975
1700435976
1700435978
UNIX传奇:历史与回忆 3.5 丹尼斯·里奇小传
1700435979
1700435980
以下丹尼斯·里奇的生平简介改编自我2012年为美国国家工程院(National Academy of Engineering)撰写的纪念文章。
1700435981
1700435982
丹尼斯(图3-13)生于1941年9月。他的父亲阿利斯泰尔·里奇(Alistair Ritchie)在墨里山的贝尔实验室工作多年。丹尼斯在哈佛大学完成了物理学的本科学业和应用数学的研究生学业。他博士论文[4](1968年)的主题是函数的亚递归层次结构,这是专家才能应对的题目,远远超出我的能力范围。图3-14展示的是丹尼斯博士论文中的一页,取自一份模糊的复本。在谈及职业道路时,丹尼斯说:
1700435983
1700435984
1700435985
1700435986
1700435987
图3-13 丹尼斯·里奇,约1981年 (杰勒德·霍尔兹曼供图)
1700435988
1700435989
1700435990
1700435991
[
上一页 ]
[ :1.700435942e+09 ]
[
下一页 ]