Unix时代的开创者Ken Thompson
自图灵奖诞生以来,其获得者一直都是计算机领域的科学家与学者,而在所有这些界的图灵奖中只有唯一的一届有个例外,那就是Ken Thompson与Dennis M. Ritchie,他们都是计算机软件工程师。
Ken Thompson,1943年出生于美国新奥尔良。1960年,Ken进入加州大学伯克利分校主修电气工程。1965年从伯克利毕业后,又花了一年的时间在该校取得了电子工程硕士的学位。不知道是时代造就英雄,还是英雄顺应时代而生,在Ken读书期间,正好赶上了计算机时代蓬勃发展的起步阶段,自小喜欢电气的Ken接触到计算机后,立即完全沉迷了进去,从1962年的开始,他就在学校的计算机中心找到份工作,专门负责程序的编写。这也为其后他一手开创的Unix时代奠定了良好基础。
1966年离开校园的Ken加入了贝尔实验室。那时的计算机系统还是批处理的天下,程序员只能在又慢又笨重大型机上工作,一般来讲是先将程序卡片装入设备,然后再等1个小时再过来取回运算的结果,其效率之低可想而知。应市场的需要,当时贝尔实验室与麻省理工学院以及通用电气公司联合开发了一个多用户分时操作系统,取名为Multics(多路信息计算系统),Ken当时就是这个系统的开发人员之一,在开发Multics的期间,Ken创造出了名为Bon的编程语言。可惜因为这个系统不但开发周期长,成本高,而且庞大而缓慢,市场前景完全不被看好,最后贝尔实验室从这个项目中撤了出来。这对于Ken而言,简直是个巨大的不幸,因为他自己用写的一个“star travel”游戏就是完全基于Multics的,退出Multics项目意味着Ken将没有机器可以再玩这个游戏了。
面对此情此景,Ken作为一个创造者的本性立即体现了出来,于是他决定自己写一个操作系统来满足他玩游戏的需要,说干就干,Ken找到了一台废弃已久的老式PDP-7,并在这台机器上重写了他的游戏。在这个过程中,Ken有了一个主意,要开发一个全新的操作系统。利用PDP-7上的汇编语言,Ken只花了一个月就编写完了操作系统的内核,在这个一个月中,他一周一个内核,一个文件系统,一个编辑器和一个编译程序的完成。做完这个系统后,Ken将其命名为UNiplexed Information and Computing System,缩写为 UNICS,后来做了一下改动,称为UNIX。在开发第一版Unix的过程中,Ken还开发出一种新的语言,即C语言的前身——B语言,这种语言简洁明了,接近于硬件语言,第一版的Unix就是基于B语言来开发的。
Unix的出现开始虽然并不为大家所看好,但是却引起了贝尔实验室另一位同事的注意,这就是Dennis M. Ritchie,于是Dennis主动加入了进来共同完善这个系统。至此一场轰轰烈烈的Unix的传奇时代才真正的拉开了序幕。1972年,他们联手将Unix移植到当时最先进的大型机PDP-2上,由于Unix是如此的简洁、稳定与高效,以至于当时大家都放弃了PDP-2上自带的DEC操作系统,而完全改用Unix,这时的Unix已经开始走向成熟了。
在1973年之前Unix还不太为外界所知,到同年10月,Unix在IBM举办的操作系统原理专题研讨会上被提及,当Ken和Dennis在会上宣读论文并展示Unix后,整个会场轰动了,大家都立即涌上来索取这种新型的操作系统的程序。随着Unix的需求量的日益增加,Ken与Dennis决定将Unix进一步改写,以便可以移植到各种不同的硬件系统,由于Unix的原码中不少是用汇编完成,不具备良好的移植性,正好Dennis在1973年在B语言的基础上开发出了C语言,C语言灵活,高效性,与硬件无关,并且不失其简洁性,正是Unix移植所需要的法宝,于是旧版的Unix与C语言完美结合在一起产生了新的可移植的Unix系统。随着Unix的广泛使用,C语言也成为了当时最受欢迎的编程语言一直到延续至令。
说到Unix与C语言,还有一段小故事,当时安装了Unix的PDP-11被放在贝尔实验室供大家使用,有一天大家伙发现Ken总是可以得到最高的权限轻松进入他们的帐户,在贝尔实验室这种高人云集的地方,这简单是太不能容忍了,于是有若干高人跳了出来,仔细分析Unix代码,找到后门,修改后再重新编译整个Unix,当所有人都以为这个世界应该从此清静了的时候,却发现Ken还是很容易就取得了他们的帐户权限,为此大家郁闷不已。只到很多年后,Ken才道出其中的原委,原来代码里确实存在后门,不过并不在Unix代码中,而是藏在编译Unix的编译器里,每次编译器编译时就会自动加入后门代码,而当时整个贝尔实验室都用的是Ken所写的C编译器。
由于Unix与C语言的深远影响,1983年美国计算机协会将当年的图灵奖破例颁给了作为软件工程师的Ken与Dennis,并在当年还决定新设立一个奖项――软件系统奖,以奖励那些优秀的软件开发者,当然首个软件系统奖也是非他们两人莫属了。
虽然Unix与C语言让Ken与Dennis功成名就,但是他们两人都没有走那些IT史上自己创业的通用套路,而是一直留在贝尔实验室从事其喜爱的软件开发工作。到了2000年12月时,Ken正式退休,离开了工作了几十年的贝尔实验室开始享受他晚年的时光,但是Ken怎么能闲得下来呢,于是他干脆将他的另一个爱好:飞机,变成正式的职业,成为了一名专职的飞行员。至此,他所开创的Unix时代已经完全与他无关了。
Unix时代的开创者Ken Thompson的更多相关文章
- 【历史】- Unix时代的开创者Ken Thompson
自图灵奖诞生以来,其获得者一直都是计算机领域的科学家与学者,而在所有这些界的图灵奖中只有唯一的一届有个例外,那就是Ken Thompson与Dennis M. Ritchie,他们都是计算机软件工程师 ...
- 【说文解字】Unix与Linux
历史 Unix操作系统是由Ken Thompson和Dennis Ritchie于1969-1970年发明. 它的部分技术来源可以追溯到Multics工程,后者因为过于庞大复杂而失败. 研究人员吸取教 ...
- (译文)The Linux Programming Interface:第1章(历史和标准)
1 HISTORY AND STANDARDS (译者:鱼时代 校对:fgn) Linux 是UNIX操作系统家族中的一员,在计算机出现以来,UNXI已经有很长的历史了.在这一章中的第一部分将对Un ...
- C语言程序设计预报作业
1. 阅读邹欣老师的博客--师生关系,针对文中的几种师生关系谈谈你的看法,你期望的师生关系是什么样的? 答:万物都是变化的,师生关系也一样.小学中学把老师看作春蚕,蜡烛的的比喻到了大学显然行不通了.大 ...
- 20175221 2018-2019-2 《Java程序设计》第一周学习总结
20175221 2018-2019-2 <Java程序设计>第一周学习总结 教材学习内容总结 本周通过观看书本配套视频,学到了如解释器,编译器等一些简单概念. 还懂得了java的一些简单 ...
- 【Linux】- cat命令的源码历史
转自:Cat 命令的源码历史 以前我和我的一些亲戚争论过计算机科学的学位值不值得读.当时我正在上大学,并要决定是不是该主修计算机.我姨和我表姐觉得我不应该主修计算机.她们承认知道如何编程肯定是很有用且 ...
- python基础教程总结14——测试
1. 先测试,后编码 对程序的各个部分建立测试也是非常重要的(这也称为单元测试).测试驱动编程:Test-driven programming 1)精确的需求说明: 程序设计的理念是以编写测试程序开始 ...
- 第02课 操作系统及Linux 系统介绍
1.操作系统介绍 操作系统(Operating System,简称OS),是计算机系统中必不可少的基础系统软件,它是应用程序运行以及用户操作必备的基础环境支撑,是计算机系统的核心. 操作系统的作用是管 ...
- Linux入门(历史与现状)
Linux 入门之 历史与现状 Linux是一个计算机的操作系统,与windows类似,是一款系统软件.操作系统首先是一个计算机程序,使用计算机语言开发,比如C语言.VC语言.是计算机硬件和应用软 ...
随机推荐
- Java课程设计-定时器
Java课程设计--定时器 1.团队课程设计博客链接 团队博客地址 2.个人负责模块或任务说明 框架构建 时间设置面板,倒计时面板 按钮设置 3.自己的代码提交记录截图 4.自己负责模块或任务详细说明 ...
- 从文本中读取内容并把读取到的内容转化成二进制保存的形式(包含十进制数如何转换成二进制数dtob函数)
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<malloc.h> d ...
- Activiti-04-.Spring integration
ProcessEngineFactoryBean <beanid="processEngineConfiguration"class="org.activiti.s ...
- angular学习笔记01
angular.js路由功能 用于实现单页应用 //html 代码 <div ng-view></div> //js代码 angular.module('myM1',['ng' ...
- JSTL之c:set
<jsp:setProperty>标记只能用来做一件事,那就是设置bean的性质. 但是,如果你想设置一个Map中的值呢?或者说想在Map中创建新的一项呢?或者只是希望创建一个新的请求作用 ...
- 接口测试——httpclient介绍与请求方式详解
httpClient工具介绍 HTTP协议可能是现在lntemet上使用得最多.最重要的协议了,越来越多的Java应用程序需要直接通过HTTP协议来访问网络资源.虽然在JDK的java.net包中已经 ...
- (译)通过 HTML、JS 和 Electron 创建你的第一个桌面应用
原文:Creating Your First Desktop App With HTML, JS and Electron 作者:Danny Markov 近年来 web 应用变得越来越强大,但是桌面 ...
- Clojure——学习迷宫生成
背景 初学clojure,想着看一些算法来熟悉clojure语法及相关算法实现. 找到一个各种语言生成迷宫的网站:http://rosettacode.org/wiki/Maze_generation ...
- .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限
一.Linux下的文件目录 简介:linux的文件系统是采用级层式的树状目录结构,在此 结构中的最上层是根目录“/”,然后在此目录下再创建 其他的目录.深刻理解linux文件目录是非常重要的,如下图所 ...
- C# 使用FileUpload控件上传图片,将文件转换成二进制进行存储与读取
状况描述: 需要上传文件,但是不想要保存到实体路径下,便可以用该功能来实现. 效果图: 点击[Upload]按钮,上传文件到数据库: 点击[Preview],预览文件: 具体实现: 前台: <t ...