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
1700435992
图3-14 摘自丹尼斯·里奇的博士论文书影(计算机历史博物馆供图)
1700435993
1700435994
“本科经历告诉我,我不够聪明,成不了物理学家,那时我也认识到计算机有多厉害。研究生经历令我确信,我不够聪明,成不了算法理论专家。我也认识到,自己更喜欢过程式语言而不是函数式语言。”
1700435995
1700435996
就像C++的创造者本贾尼·斯特劳斯特鲁普曾说过的那样,“如果丹尼斯决定把那10年的时间花在研究深奥的数学上,Unix就会‘胎死腹中’。”
1700435997
1700435998
丹尼斯在贝尔实验室度过了几个夏天,并于1967年正式入职,成为计算科学研究中心技术团队的一员。在最初的几年里,他一直参与研发Multics。如前所述,Multics被证明野心过甚,而且大家越来越明白,目标无法实现。贝尔实验室于1969年退出Multics研发计划,肯、丹尼斯和其他同事拥有了设计创新操作系统的经验和对高级语言实现的品位,并得到机会,向着更合适的目标重新启程。其结果就是Unix操作系统和C语言。
1700435999
1700436000
C语言的起源可以追溯到20世纪70年代初。它基于丹尼斯为Multics实现高级语言的经验而创造,但由于当时大多数计算机能力有限,根本没有足够的内存或处理能力来支持复杂语言的复杂编译器,所以C语言的规格大大缩小了。这种被迫最小化符合肯和丹尼斯对简单性和统一性的偏好。对于真实的计算机硬件来说,C语言也很适合,将其翻译为高效运行的好代码的方法显而易见。
1700436001
1700436002
有了C语言,就有可能使用高级语言编写整个操作系统。到了1973年,Unix已经从原来的汇编语言改为C语言编写,系统的维护和修改变得更加容易。将操作系统从最初的PDP-11计算机移植到其他不同架构的计算机,这是C语言带来的另一个巨大进步。由于大部分系统代码都用C语言编写,所以移植系统所需工作并不比移植C语言编译器多多少。
1700436003
1700436004
丹尼斯是超一流的技术作家,文风清雅,用词灵巧,字里行间闪烁着干练的智慧,准确地反映了他的个性。我和他合著了《C程序设计语言》(The C Programming Language),该书于1978年出版,1988年出第2版,此后被翻译成20多种语言。丹尼斯原著的C语言参考手册是1988年首次推出的ANSI/ISO(美国国家标准学会American National Standards Institute/国际标准化组织International Organization for Standardization)的C标准的基础,也是该标准的主要构成部分。毋庸置疑,C语言和Unix的部分成功可以归功于丹尼斯的写作。
1700436005
1700436006
因他和肯·汤普森一起为C语言和Unix所做的工作,丹尼斯获得了许多荣誉和奖项,包括ACM图灵奖(1983年)、美国国家技术奖章(National Medal of Technology)(1999年)、日本信息通信奖(Japan Prize for Information and Communications[5])(2011年)并入选美国国家发明家名人堂(National Inventors Hall of Fame)(2019年追授)。
1700436007
1700436008
在很多年里,丹尼斯成功逃脱承担管理职责的重任,但最终还是屈服,担任软件系统部门主管,负责组建Plan 9操作系统团队。2007年,丹尼斯卸任,正式退休,但几乎每天都会来贝尔实验室,直到2011年10月去世。
1700436009
[
上一页 ]
[ :1.70043596e+09 ]
[
下一页 ]