老婆离家三周,我写了一个操作系统!

编码之外

共 2673字,需浏览 6分钟

 ·

2021-05-15 17:20

我出生于1943年,今年已经78岁了,依然战斗编程的第一线,今天给大家讲讲我当年写操作系统的故事......


我小时候特别喜欢鼓捣电器,玩了10年。


当我去加州大学伯克利分校读电子工程的时候,我发现课程超级简单,于是我迷上了一个新玩意儿:计算机。


每天晚上,我都会偷偷打开机房大门......

到了大四,我觉得自己玩得太嗨,学业不够优秀,就没有申请读研。


但是有一天,教我课的Berlekamp教授突然给我我一个“惊吓”。


原来Berlekamp教授替我做了申请,并且通过了!教授真是一个好人。


一年以后,我拿到了电子工程和计算机科学的硕士学位。


大名鼎鼎的贝尔实验室想把我招去工作,但是当时我的心还比较“野”。


贝尔实验室不厌其烦地邀请我, 我把他们拒绝了七八次,最后他们居然找到了我家里!

我来到了贝尔实验室参观,被震撼了!

第二天,我租车出行,去找我的朋友。


贝尔实验室不知怎么查到了行踪, 居然在我旅途的第三站留下来一份offer。


1966年,我加入贝尔实验室。


悲催的是,我的第一项工作就和同事们一起掉进了坑:Multics操作系统。


这个操作系统是我们和GE、MIT一起研制的,试图做一个比CTSS更好的OS,但是大家犯了一个大错误:过度设计。

(注:第二系统效应,意思是在首个系统(如CTSS)创建成功以后,打算创建一个新系统,修正旧系统的遗留问题,添加新特性,结果塞进去太多东西,得到了过于复杂的系统)


1969年,Multics还是无法完成,忍无可忍的贝尔实验室决定退出。


回来以后, 我和项目组成员还是想做操作系统,向经理申请费用。


(其实我是有点想念Multics上我开发的太空旅行游戏了)


但是管理层被Multics伤透了心,不愿意给我们买硬件。


既然如此,我只能“废物利用”了,我很快找到一台没怎么用过的PDP-7。


PDP-7的图形显示还不错, 我很快在上面“恢复”了太空旅行这个游戏。


玩家可以模拟操作太空船在代表太阳系的二维画面内进行飞行、着陆。太空船会受到万有引力影响。


这个游戏很容易上瘾,经常让人一玩就是好几个小时


我相信程序员热爱游戏的传统将会被传承下去,例如MySQL发明人, Linux发明人,都是游戏迷,他们不但玩游戏,还会像我一样写游戏。


我在移植游戏的过程中,开发了自己的数学计算和图形子程序。


但是太空旅行在PDP-7上运行得很慢, 于是,我和Dennis Ritchie等人又重新设计了文件系统:

等到太空旅行能顺利运行起来的时候,我赫然发现, 我离一个操作系统只剩下三周之遥了



恰巧,我太太休了三周假, 带着1岁的儿子回娘家,我就有了三周不受打扰的工作时间。


这三周,我的代码生产力简直爆棚!


1969年底,一个操作系统可以运行了,它被我的同事称为Unix。


Unix操作系统看起来像是我们为了玩游戏而产生的副产品 !


20多年后,一个芬兰的小伙子Linus会再次深刻地体会了这个过程:本来想给自己找点儿乐子, 结果却做出了伟大的操作系统



正所谓:有心栽花花不开,无心插柳柳成荫。


当然,这一切的底层基础是:对计算机强烈的兴趣,以及强悍的编程能力

(Linus的故事传送门在这里《Linux之父:财务自由以后,我失眠了!》)


虽然我们直接买机器的企图失败了,但我们很快找到了替代办法。


贝尔实验室创新太强了,平均每天都能产出一项专利,处理专利文件成了一个大问题。

交易达成,买了一台PDP-11 , 我和Dennis Ritchie很快就把Unix移植了过来,哈哈。


打字员们白天处理专利文档,到了晚上,我们Unix小组的人就它来开发软件。


后来,专利部门尝到甜头,又给我们买了一台PDP-11, 这样我们才能全天候开发了


于是就有了这张著名的图片,我和Dennis Ritchie在一起工作。

说起Dennis Ritchie,这可是我一生的好友,超级大牛。


他看到Unix是汇编写的,而不同架构的机器,汇编语言是不同的,移植起来很费劲。


于是,他发明了C语言,并且用C语言重写了Unix,让Unix可以轻松地在各种机器间移植。

Unix很快便在大学和科研机构流行起来。


1975的秋天,我休了一个长假,回到了母校加州大学伯克利分校,开设了一门Unix课程。


我不仅讲解理论,还在晚上带着大家阅读一行行的Unix内核代码,向大家解释为什么这么做。


我在伯克利大学的教学激发了很多人对操作系统的热情, Bill Joy尤其突出,他后来创建了著名的Unix分支:BSD 。


(Bill Joy的故事传送门在这里:《那些神一样的程序员》)

贝尔实验室是个非常棒的地方, 既给每个人提供独立办公室,又提供可以协作的共享空间, 这里鼓励创造,不同的思想在这里碰撞、激发,充满了黑客的氛围。


我的同事道哥在Unix上开发了一个叫speak的程序,可以和一个叫Votrax的语音合成器连接,把文字变成语音输出。


每天下午一点,Votrax的大喇叭就会提醒大家1点15分食堂就关门,该去吃饭了。

我从小就热爱国际象棋,1971年,我在PDP-11上写了一个国际象棋程序,后来又制作了加速运算的特殊硬件, 最终形成了一台叫Belle的国际象棋计算机。

Belle战绩骄人,在于人类的常规比赛中,获得了2200等级分,成为第一台荣升国际象棋大师的计算机,还获得了1980年世界计算机国际象棋大赛的冠军。


除了象棋之外,我还是一个狂热的飞行爱好者。

在我的影响下, 贝尔实验室计算机科学研究中心出现了六七位私人飞行员 。


我们经常约着飞出去看秋叶,或者到有意思的地方吃午饭。


但是,这些飞机开起来不过瘾。


1992年,我决定玩儿一票大的,来到莫斯科,去玩了一把米格29战斗机

由于在Unix操作系统和C语言的杰出贡献,我和Dennis Ritchie获得了1983年的图灵奖。

2000年,57岁的我从贝尔实验室退休。


但是我觉得还能折腾。


2006年,我又加入了Google ,和Rob Pike, Robert Griesemer等人发明了Go 语言,现在Go语言的发展势头还不错!

这就是我这几十年的故事,我是Ken Thompson, 一个写过操作系统,会开飞机的程序员!


再谈synchronized锁升级


害怕面试被问HashMap?这一篇就搞定了!


图文详解Java对象内存布局

浏览 20
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报