Unix操作系统的安全性是众所周知的。但是如果要你说出Unix系统到底安全在哪里,估计也没有人能够说出一个所以然来。
一、同一个命令不同用户不同的权限。
Date命令是Unix系统的一个常用命令,其显示了系统的日期与时间。但是不同的用户角色其具有不同的功能。如是系统管理员用户,则可以通过这个命令来更改系统时间。但是如果执行这个命令的用户是系统普通用户,那么这个命令则只能够显示时间,而无法更改时间。也就是说,默认情况下,只有系统管理员才可以更改系统时间,但是修改时间与查看时间用的是同一个命令。系统会自动去判断当前用户是否有修改时间的权利。
这就是Unix系统中一个很有用的安全特性。一方面类似的功能采用同一个命令,方便了系统管理员的操作与维护;另一方面系统会自动对命令的权限进行审查,以保障用户只能够利用命令进行与自己权限相符合的操作。从这里可以看出,Unix系统不仅在安全上有保障,其更加看重与安全和便利的一种结合。不会为了安全,而牺牲管理维护的便利性。
大家都知道,随意更改系统的日期可能会给系统造成很大的负面影响,会使得一些作业计划混乱。如系统当前可能有多个进程在后台运行,此时系统会根据进程的优先性、管理员定义的作业计划等等安排好了这些命令进程执行的时间进度表,规定在某个特定的时刻启动这些作业或者进程。此时如果允许一个非管理员员用户随意更改系统时间,则系统中的作业可能会乱了套。如系统管理员为了系统的安全,设置了每天中午12点30分对系统中的重要文件进行备份。如果在中午12点的时候普通用户修改了时间,把时间从12点改为了1点。那么此时系统就不会对系统重要文件进行备份。若不幸的是,在第二天上午由于一些意外导致系统硬盘损坏或者其他系统故障,那么由于前一天没有正常备份,则损坏的文件将无法修复。可以随意更改系统时间会导致很多难以预料的结果。
所以从这个date命令中就可以看出,Unix系统在安全设计上确实比其他操作系统略高一筹。同一个命令不同帐户具有不同的操作功能,这让Unix系统在安全与便利上达到了同一。
二、不提示具体的出错信息。
Unix系统跟其他操作系统一样,也是通过账户名与密码来保证操作系统的基本安全性。但是,Unix在这方面可能考虑的更全面一点。
Unix系统是一个多用户操作系统。通常情况下,Unix系统只允许拥有帐号和密码的用户登录。用户的帐号列表往往有系统管理员来进行维护。系统管理员授予用户使用计算机的权限,并为其计统帐号、口令等信息。当系统出现提示信息要求用户登录时,用户只能够输入系统管理员所提供的正确用户名与密码之后才能够登陆到操作系统。如当系统出现了logon提示符之后,就表示该系统终端允许某个用户通过帐号与密码进行登录。在输入账户名之后,按下回车键之后,就需要输入密码。系统会要求用户输入准确的密码来进行身份验证。万一用户输入密码错误后(用户名准确),此时系统只会含糊的提示“login incorrect”(登陆不准确)。而不会提示用户到底错在哪里,是错在密码错误又或者是用户名输入错误。
这个含糊的提示,将会给非法攻击者造成一定的障碍。由于非法攻击者不知道到底是密码错误又或者是账户名错误,这会增加对方攻击的成本。或者说,这个提示对于攻击者来说,或多或少有一些欺骗性。但是,这个措施却可以很明显的提高系统的安全性。或许有些员工会抱怨这么设计友好性太差。不仅会欺骗攻击者,而且也会欺骗普通的用户。不过从安全性来说,这个安全措施仍然是必要的。
另外值得一提的是,在用户登录时,Unix系统还跟其他操作系统一样,提供了一种更高级别的安全措施。即当用户登录到Unix系统时,根据系统安全策略,可以让用户强制更改管理员所赋予的口令。此时用户最好能够立即更改默认口令,设置一个只有自己知道的口令(连管理员可能都不知道)。毕竟账户名或者口令若太多人知道的话,会给操作系统带来一定的安全隐患。
当Unix系统在登陆时如果用户名或者密码验证错误,系统不会提供详细的出错信息,从而不让非法攻击者找到出错的原因,增加其攻击的难度。其实这些类似的安全措施,在Unix系统中是比比皆是。从这个小小的安全设计中,就可以看出Unix操作系统的安全确性。
三、输出中不带有相应的表头。
利用命令who可以显示当前登陆用户的详细信息,如用户名、登陆的途径、登陆时间等内容。在Linux系统中也有类似的功能。不过两个系统有差异。
这个结果表示当前系统的登陆者有两个,都为Oracle操作系统允许同一个账户通过不同的渠道登陆到操作系统,这也是Unix系统的一个特性。在Linux操作系统中也可以实线类似的功能,但是在微软操作系统中好像不行。后面会显示用户登录的途径、登陆系统的时间等等。但是让很多Unix系统的初学者感到困扰的就是,在输出结果中竟然没有一个相应的表头来说明各个列的含义。这一点可能让人看起来觉得Unix操作系统不怎么友好,但是却可以保障Unix系统的安全性。如一些Unix系统的高级安全策略都是基于这个特性所实现的。
另外,由于这个用户信息具有非常重要的价值,故对此进行一些安全的防护就具有更大的现实意义。如系统管理员可以从who命令的输出结果中抽取一部分数据供下一个命令使用。
其实除了who命令之外,Unix系统类似的情况还有很多。正是这一个个的细节考虑,才保障了整个Unix系统的安全。
2009年4月13日星期一
2008年11月25日星期二
UNIX 與 Plan9 的比較
特別的硬體架構
所有的一切全是檔案
簡單就是美哲學
明智的安全性設計
九零年代的使用者界面
特別的硬體架構
標準的 Plan 9 會有一個專門的 CPU 伺服器、一個專門的檔案伺服器,
還有許多的終端機。檔案與 CPU 伺服器會用最快的網路連接。
所有的一切全是檔案
驅動程式、網路連線、環境變數,和許多其它的服務都是以檔案的形式來呈現在
獨立的檔案命名空間(file name space)。命名空間可依使用者的喜好調整。
使用者可以非常簡單的存取檔案伺服器,而且通訊協定使用單一的簡單協定。
簡單就是美哲學
Plan9 是為了程式設計師所設計的作業系統。它強調簡單就是美,這個概念到處
可見,所以 Plan9 強調 Simplicity 簡單設計而非到處可調(configurability),
優良設計而非相容性 (P9 與 UNIX 幾乎完全不相容),實用主義而非隨波逐流
(buzzword compliance)。
明智的安全性設計
P9 沒有 super-user 或是 root。與檔案伺服器的通訊協定非常簡單而沒有特殊
存取方式。所以密碼不用在網路上傳送。終端機直接與認證伺服器管理 challenge/
response 式的 session 。 (註:就是說,認證只在一次 session 中有效,可以想
成 one-time password 之類的東西。
九零年代的使用者界面
P9 直接假設系統都有一組三鍵滑鼠跟位元映射螢幕(bitmapped, 就是我們一般
在用的 CRT/LCD。 非 bitmap 的有 vector based...)。 天生支援 Unicode 系統
(事實上,P9 是第一個有 Unicode support 的 OS)。 字元式的界面 (如 vi, xterm,
rn) 已被慢慢放棄了。
所有的一切全是檔案
簡單就是美哲學
明智的安全性設計
九零年代的使用者界面
特別的硬體架構
標準的 Plan 9 會有一個專門的 CPU 伺服器、一個專門的檔案伺服器,
還有許多的終端機。檔案與 CPU 伺服器會用最快的網路連接。
所有的一切全是檔案
驅動程式、網路連線、環境變數,和許多其它的服務都是以檔案的形式來呈現在
獨立的檔案命名空間(file name space)。命名空間可依使用者的喜好調整。
使用者可以非常簡單的存取檔案伺服器,而且通訊協定使用單一的簡單協定。
簡單就是美哲學
Plan9 是為了程式設計師所設計的作業系統。它強調簡單就是美,這個概念到處
可見,所以 Plan9 強調 Simplicity 簡單設計而非到處可調(configurability),
優良設計而非相容性 (P9 與 UNIX 幾乎完全不相容),實用主義而非隨波逐流
(buzzword compliance)。
明智的安全性設計
P9 沒有 super-user 或是 root。與檔案伺服器的通訊協定非常簡單而沒有特殊
存取方式。所以密碼不用在網路上傳送。終端機直接與認證伺服器管理 challenge/
response 式的 session 。 (註:就是說,認證只在一次 session 中有效,可以想
成 one-time password 之類的東西。
九零年代的使用者界面
P9 直接假設系統都有一組三鍵滑鼠跟位元映射螢幕(bitmapped, 就是我們一般
在用的 CRT/LCD。 非 bitmap 的有 vector based...)。 天生支援 Unicode 系統
(事實上,P9 是第一個有 Unicode support 的 OS)。 字元式的界面 (如 vi, xterm,
rn) 已被慢慢放棄了。
2008年10月26日星期日
44本计算机科学类的经典书
1.The Art of Computer Programming
Author: Donald.E.Knuth
Web site: http://www-cs-faculty.stanford.edu/~knuth/taocp.html
Book Info: 这部书被誉为20世纪最重要的20部著作之一,与Einstein的<<相对论>>并列,是计算机科学
领域的权威著作.全书共分7卷,目前已经出版了3卷,被誉为"计算机程序设计理论的荷马史诗","可与牛顿的
<<自然科学的数学原理>>媲美的巨著".作者数学方面的功底造就了本书严谨的风格,虽然本书不是用当今流
行的程序设计语言描述的,但这丝毫不损伤它"程序设计史诗"的地位.道理很简单,它内涵的设计思想是永远
不会过时的.The Art of Computer Programming 原计划要出七册,但目前只完成了三册.该书有日文,俄文,
西班牙文等许多国的版本.其中,中文版由国防大学出版社发行.
Book Reviews:
无数的读者都在谈论Knuth的书所带来的深远影响.科学家惊叹于分析逻辑之透彻严谨,而普通的编程人
员也已成功地将书中所列方案运用到他们的日常问题中.所有的人都非常赞赏Knuth在这套书中所表现的精确
与风趣,并为其明确性与涉及面之广而感到欣喜.
我无法向你表达这套书在学习和创造性方面所带给我的兴奋与激动,我已经将它们带入了我的生活,就像
我的汽车,饭馆,工作,家庭……无所不在.
----Charles Long
无论你的背景怎样,如果你正在进行复杂的计算机编程,你就应该阅读本套书中的每本书,来补充你的专
业知识.
当一个问题难以解决,而必须使用Knuth的这套书来解决时,总是一件令人愉快的事情.我发现在计算机方
面使用它们会有惊人的效果.
----Jonathan Laventhol
如果你认为你是一名真正优秀的程序员……读Knuth的<<计算机程序设计艺术>>,如果你能读懂整套书的
话,请给我发一份你的简历.
----Bill Gates
The Art of Computer Programming, Volume 1: Fundamental Algorithms (3rd Edition)
Author: Donald.E.Knuth
Publisher: Prentice Hall
Amazon Reviews: Amazon.com
Book Info: 卷1为基础运算法则,该书以基本的编程概念和技术为开始,然后讲述信息结构--计算机内信
息的表示法,数据元素间的结构关系以及处理它们的有效方法.主要应用于模拟,数字方法,符号计算,软件和
系统设计.许多简单和重要的运算法则和技术已添加到前一版本中,精确的初步计算部分已经修改,以适应当
前趋势.
The Art of Computer Programming, Volume 2: Seminumerical Algorithms (3rd Edition)
Author: Donald.E.Knuth
Publisher: Prentice Hall
Amazon Reviews: Amazon.com
Book Info: 第2卷对半数值算法领域做了全面介绍,分"随机数"和"算术"两章.本卷总结了主要算法范例
及这些算法的基本理论,广泛剖析了计算机程序设计与数值分析间的相互联系.第3版中特别值得注意的是
Knuth对随机数生成程序的重新处理和对形式幂级数计算的讨论.
The Art of Computer Programming, Volume 3: Sorting and Searching (2nd Edition)
Author: Donald E.Knuth
Publisher: Prentice Hall
Amazon Reviews: Amazon.com
Book Info: 卷3为分拣和搜索,这是本书的第1个修订版,它是对计算机分拣和搜索的一流技术的最全面
的研究,它扩展了卷1中数据结构的处理方法,将大小数据库以及内存和外部存储都包含在内.本书包括对计算
机方法仔细检查的选择方案,和其效率的大量分析.本书该版的独特之处在于优化了的分拣,以及对通用散列
法和排列法的新的理论论述.
作者简介:
Donald.E.Knuth(唐纳德.E.克努特,中文名高德纳)是算法和程序设计技术的先驱者,是计算机排版系统
TeX和METAFONT的发明者,他因这些成就和大量创造性的影响深远的著作(19部书和160篇论文)而誉满全球,在
计算机科学领域享有崇高的威望,是计算机科学界公认的大宗师.作为斯坦福大学计算机程序设计艺术的荣誉
退休教授,他当前正全神贯注于完成其关于计算机科学的史诗性的七卷集.这一伟大工程在1962年他还是加利
福尼亚理工学院的研究生时就开始了.Knuth教授获得了许多奖项和荣誉,包括美国计算机协会图灵奖(ACM
Turing Award),美国前总统卡特授予的科学金奖(Medal of Science),美国数学学会斯蒂尔奖(AMS Steele
Prize),以及1996年11月由于发明先进技术荣获的极受尊重的京都奖(KyotoPrize).现与其妻Jill生活于斯坦
福校园内.
Donald.E.Knuth人生最辉煌的时刻在斯坦福大学计算机系渡过,获得了美国计算机协会图灵奖,成为本领
域内当之无愧的泰斗.
英文原版下载
http://www.shubulo.com/redirect.php?tid=34754
----------------------------------------------------------------
2.Introduction to Algorithms
Author:Thomas H.Cormen ,Charles E.Leiserson ,Ronald L.Rivest ,Clifford Stein
Amazon Reviews: Amazon.com
Book Info: 简称为CLRS的<<算法导论>>,被称作"计算机算法的圣经".
本书的主要作者来自麻省理工大学计算机,作者之一Ronald L.Rivest 由于其在公开秘钥密码算法RSA上
的贡献获得了图灵奖,目前是算法的标准教材,美国许多名校的计算机系都使用它,国内有些院校也将本书作
为算法课程的教材.另外许多专业人员也经常引用它.由于TAOCP只出版了3卷,CLRS比较起前者来则显得内容
更为全面,基本包含了所有的经典算法.本书程序全部由伪代码实现,这更增添了本书的通用性,使得利用各种
程序设计语言的程序员都可以作为参考.语言方面通俗,很适合作为算法教材和自学算法之用.国内的很多作
品名为数据结构,从本书中断章取义,把数据结构与算法混为一谈,搞得作者自己都迷迷糊糊.这也是我不十分
愿意向大家推荐国内作品的原因.你会发现现在基本上所有的数据结构与算法书籍都会将本书作为参考文献
之一,更可以说明一个问题,本书是作为读者进行算法学习的最佳选择.作为本书的补充内容,我愿意向大家推
荐下面的学习资料:你可以通过这个地址找到本书的所有练习答案:http://www.itu.dk/people/beetle/ .为
了更好的学习本书中的内容,最好的指导当然是来自作者本身讲述本书的课程,读者们可以通过
http://18.89.1.101/sma/5503fall2001/index5503fall2001.html获得课程的录像.
中文版
http://www.shubulo.com/thread-31351-1-1.html
习题及答案
http://www.shubulo.com/thread-33989-1-1.html
----------------------------------------------------------------
3.Data Structure & Algorithm Analysis in C (Second Edition)
Author:Mark Allen Weiss
Published:September 1996
Web site:http://www.cs.fiu.edu/~weiss/
Amazon Reviews: Amazon.com
Book Info: 本书曾被评为20世纪顶尖的30部计算机著作之一,作者Mark Allen Weiss在数据结构和算法
分析方面卓有建树.他的数据结构和算法分析的著作尤其畅销,并受到广泛好评.已被世界500余所大学用作教
材.
----------------------------------------------------------------
4.Concrete Mathematics A Foundation for Computer Science(Second Edition)
中文版
http://www.shubulo.com/thread-33994-1-1.html
Author:Donald.E.Knuth&Ronald L.Graham
Web site: http://www-cs-faculty.stanford.edu/~knuth/gkp.html
Amazon Reviews: Amazon.com
Book Info: 很令人兴奋的就是这本书的主要作者正是泰斗Donald.E.Knuth以及他的同事Ronald
L.Graham.书稿是他们在1970年的时候在计算机系教授研究生本门课程的基础上整理出来的教材.内容上是
Knuth的巨著TAOCP第一部的扩展,有些比TAOCP中谈及地又深入了许多.重点放在高级计算机程序设计话题以
及算法分析上,涉及了计算机科学领域内几乎所有可能遇到的数学知识.具体数学是离散数学和连续数学的综
合,书中这点做得极为出色,介绍的内容涉及到书中许多经典问题的解答比目前广泛流传的解法更易懂.对于
提高大家的计算数学修养有很大帮助.之所以TAOCP有的时候读者们读不懂就是因为计算数学基础不是十分扎
实,但以我个人经验,若能对本书中内容有一个比较好的理解,会给你阅读如TAOCP这样的旷世巨著带来很大的
方便.
----------------------------------------------------------------
5.Discrete Mathematics and Its Applications,Fourth Edition
习题
http://www.shubulo.com/viewthread.php?tid=33130
Author:Kenneth H.Rosen
Amazon Reviews: Amazon.com
Book Info: 本书的价值已经被全世界几百所大学所证实,作为离散数学领域的经典教材,全世界几乎所
有知名的院校都曾经使用本书作为教材.以我个人观点看来,这本书可以称之为离散数学百科.书中不但介绍
了离散数学的理论和方法,还有丰富的历史资料和相关学习网站资源.更为令人激动的便是这本书少有的将离
散数学理论与应用结合得如此的好.你可以看到离散数学理论在逻辑电路,程序设计,商业和互联网等诸多领
域的应用实例.本书的英文版(第五版)当中更增添了相当多的数学和计算机科学家的传记,是计算机科学历史
不可多得的参考资料.作为教材这本书配有相当数量的练习.每一章后面还有一组课题,把学生已经学到的计
算和离散数学的内容结合在一起进行训练.这本书也是我个人在学习离散数学时读的唯一的英文教材,实为一
本值得推荐的好书.
----------------------------------------------------------------
6.The C Programming Language 2nd Edition
英文版
http://www.shubulo.com/viewthread.php?tid=17067
习题及答案
http://www.shubulo.com/viewthread.php?tid=30825
Author:Brian W.Kernighan and Dennis M.Ritchie
Publisher: Prentice Hall
Published: 1988.
Amazon Reviews: Amazon.com
Book Info: Brian W.Kernighan和Dennis M.Ritchie的传世之作.千千万万程序员和编程爱好者的圣经,
每一页都是价值连城的秘诀.不管你从哪一页信手翻起,最终你都会发现自己已经深陷其中而不能自拔.
----------------------------------------------------------------
7.The C++ Programming Language Author:Bjarne Stroustrap
Amazon Reviews: Amazon.com
Book Info: 由C++之父亲手执笔的<>是每个程序员心目中不可动摇的
指南-----尽管官方标准还是ISO颁布的另一份文档,由ISO/IEC JTC1/SC22/WG21出版.TCPL是除了C++标准文
献之外最权威的C++参考手册.和大多数人的看法不大一样,我认为Bjarne的文字语言并不逊色于他所创建的
程序语言,至少我喜欢这种学院气息浓厚的作品.本书对C++语言的描述轮廓鲜明,直截了当.它从C++语言创建
者的角度来观察C++,这是任何别的作者和书籍做不到的----没有任何人比Bjarne自己更清楚该怎么来使用
C++.
这是一本严肃的著作,以中,高级C++开发人员为目标读者.如果你是一名有经验的C++程序员,需要了解更
加本质的C++知识,本书正是为你而写.它不是那种让你看了会不断窃喜的小书,需要用心体会,反复咀嚼.在阅
读过程中,请特别留心Bjarne先生强调了什么,又对什么一语带过.我个人比较喜欢这本书的第四部分"使用
C++做设计",这样的内容在类似的程序设计语言书籍中很难看到----我甚至认为Bjarne应该将这部分独立出
来单独写一本书.
----------------------------------------------------------------
8.The Design and Evolution of C++
Author: Bjarne Stroustrup
Amazon Reviews: Amazon.com
Book Info: D&E是一本关于C++语言设计原理,设计决策和设计哲学的专著.它清晰地回答了C++为什么会
成为今天这个样子而没有变成另外一种语言.作为C++语言的创建者,Bjarne淋漓尽致地展示了他独到而深刻
的见解.除了广受赞誉的语言特性外,Bjarne没有回避那些引起争议的甚至被拒绝的C++特性,他一一给出了逻
辑严密,令人信服的解释.内容涵盖C++的史前时代,带类的C,C++的设计规则,标准化,库,内存管理,多重继承,
模板等,对包括异常机制,运行时类型信息和名字空间在内的重要的新特性都分别进行了深入探讨.每一名C++
程序员都应该可以从Bjarne的阐释中加深对手中这门语言的认识.这本书知识浓缩,信息量极大,请不要错过
Bjarne每一句看似漫不经意的话.
----------------------------------------------------------------
9.Accelerated C++: Practical Programming by Example
Author: Andrew Koenig, Barbara E.Moo
Publisher: Addison-Wesley Professional
Published: January 15, 2000
Amazon Reviews: Amazon.com
Book Info: 和市面上大多数C++教程不同,本书不是从"C++中的C"开始讲解,而是始于地道的C++特性.从
一开始就使用标准库来写程序,随着讲述的逐渐深入,又一一解释这些标准库组件所依赖的基础概念.另外,和
其他C++教材不同的是,这本书以实例拉动语言和标准库的讲解,对后两者的讲解是为了给实例程序提供支持,
而不是像绝大多数C++教材那样,例子只是用作演示语言特性和标准库用法的辅助工具.
作者在C++领域的编程实践,教育培训以及技术写作方面都是世界一流水准.我喜欢这种大量使用标准库
和C++语言原生特性的清新的写作风格.在这本教材面前,几乎迄今为止的所有C++教材都黯然失色或显得过时
.尽管这本教材也许对于国内的高校教育来说有些前卫,不过我仍然极力向我的同行们推荐.顺带一提,在
Bjarne和我最近的一封通信里,他这样评价本书:对于有经验的程序员学习C++而言,这本书可能是世界上最好
的一本.
----------------------------------------------------------------
10.C++ Gotchas: Avoiding Common Problems in Coding and Design Author: Stephen C.Dewhurst
Publisher: Addison-Wesley Professional; 1st edition (November 26, 2002)
Amazon Reviews: Amazon.com
Book Info: Stephen的理论素养和实践经验注定这是一本值得一读的好书.Stephen曾经是贝尔实验室中
第一批C++使用者.他已经使用C++成功解决了包括编译器,证券交易,电子商务以及嵌入式系统等领域中的问
题.本书汇集了作者来自开发一线的99条编程真知灼见,洞悉它们,你可以避免几乎所有常见的C++设计和编程
问题.
我甚至认为,对于C++编程菜鸟而言,阅读这本书会比阅读Scott和Herb的书更能轻松而立竿见影地获得更
大的提高.我个人很喜欢这本书的写作风格----Stephen的许多观点看似极端却无可辩驳.当然了,这种自信(
以及冷幽默)来自于作者深厚的技术素养,而非自大的偏执.
11.C++ Primer 3rd
Author: Stanley B.Lippman
Amazon Reviews: Amazon.com
Book Info: 这本书的名字多少有点让人误解.尽管作者声称这本书是为C++新手而写,但无论是它的厚度
还是讲解的深度都暴露了似乎并非如此.也许说它是一本"从入门到精通"的C++教程会更合适一些.我个人认
为它并不适合完全不懂C++的初学者----在阅读这本书之前,你至少应该先有那么一点C或C++的背景知识,或
者至少要具有一些其他语言的编程经验.
尽管这本书省略了一些高级C++特性的讨论,但仍然可以称得上是迄今为止最全面的C++学习教程.事实上
,如果一名C++初学者能够扎扎实实地读完本书并对照<>完成全部习题的话,他的
水平肯定可以进入职业C++程序员的行列.我个人认为,即使你已经拥有了TCPL,这本书依然有拥有的价值,因
为在许多方面它比TCPL来得更详细,更易懂.
----------------------------------------------------------------
12.Essential C++
Author: Stanley B.Lippman
Amazon Reviews: Amazon.com
Book Info: 可以不太严格地认为这本书是<>的精简版.本书一一讲述了C++中最具代表性
的主题,包括过程式编程,泛型编程,基于对象编程,面向对象编程,模板编程以及异常处理等.Stanley将门槛
调低到"具有其他语言程序设计经验"的C++新手所能接受的最基本的层次,使他们能够迅速开始使用C++编程
而又免于阅读<>那样的大部头.它以实例引导学习,力图使读者在最短的时间内把握C++的精粹.
也许换一个人来概述C++编程范型(paradigm)的方方面面需要好几百页才能说清楚,但这本小书不可思议
地做到了这一点.我个人非常喜欢这种满是技术,简明扼要并且"有话好好说"的书.这本书同样具有一个明显
的风格:所有程序例子全部采用标准库组件,让人耳目一新.
----------------------------------------------------------------
13.Effective C++: 50 Specific Ways to Improve Your Programs and Design (2nd Edition)
More Effective C++: 35 New Ways to Improve Your Programs and Designs
Author: Scott Meyers
Publisher:Prentice Hall
Amazon Reviews: Amazon.com
Amazon.com
Book Info: 先养成良好的C++设计习惯,这是Scott Meyers的<>和< C++>>带给我们的无穷好处,这两本书是真正的经典,作者对C++的纯熟,使得语言的风格读起来简直是如饴甘
甜,就像他站在你对面讲课.如果你已经深刻地理解了<>和<>,那你可
以发现,你在众人中已经是鸡群之鹤.
如果说<>主要讨论C++中一些相对基础的概念和技巧的话,那么< C++>>则着重探讨了包括异常处理在内的一系列高级技术.与前者相比,后者具有两大主要区别:其一,它包含
很多时新的标准C++的内容;第二,它讨论的主题倾向于"战略化"而非"战术化",并且讨论得更深入,更彻底.尤
其是对虚析构函数,智能指针,引用计数以及代理类(proxy classe)等技术和模式论述的深入程度,让人很难
想象是出现于这样的一本小书之中.
----------------------------------------------------------------
14.Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions
More Exceptional C++: 40 New Engineering Puzzles, Programming Problems, and Solutions
Author: Herb Sutter
Book Info: 你自认为是一名C++语言专家吗?读一读ISO C++标准委员会秘书长的这两本书再回答.在这
两本书中,Herb采用了"问答"的方式指导你学习C++语言特性.对于每一个专题,Herb首先合理地设想出你的疑
问和困惑,接着又猜测出你十有八九是错误的解答,然后给你以指点并提出最佳解决方案,最后还归纳出解决
类似问题的普适性原则.
这两本书是典型的深究C++语言细节的著作,很薄,但内容密集,远远超过Scott的那两本书,读起来很费脑
筋----我个人认为它们要比Scott的书难懂得多.若要研习这薄薄的两本书所包含的知识,至少需要花费数月
的时间!(在Scott的荐序中,他坦陈不止一次陷入GotW问题的陷阱,你应该知道这意味着什么)对于语言细节的
深究有什么好处呢?尽管在大多数情况下,我们不必关心C++代码幕后的动作,然而当我们不得不关心时,这两
本书可以为我们提供很好的线索,因为它们揭示了C++语言中微妙而又至关重要的东西.
----------------------------------------------------------------
15.Modern C++ Design: Generic Programming and Design Patterns Applied
Author: Andrei Alexandrescu
Publisher: Prentice Hall
Amazon Reviews: Amazon.com
Book Info: 你自认为是C++模板编程高手吗?请看过这本书再回答.这是一本出自天才之手令人敬畏的杰
作.泛型模式,无限延伸你的视野,足以挑战任何一名C++程序员的思维极限.
这本书共分为两大部分,第一部分讨论了Loki程序库采用的基础技术以及一些高级语言特性,包括基于策
略的类设计,模板局部特化,编译期断言,Typelist以及小型对象分配技术等.第二部分则着重介绍了Loki中的
重要组件和泛型模式技术,包括泛化仿函数(Generalization Functor),单件(Singleton),智能指针,对象工
厂(Object Factory),抽象工厂(Abstract Factory),访问者(Visitor)以及多方法(Multimethods)等.每一种
技术都让人大开眼界,叹为观止.
----------------------------------------------------------------------------------
16.C++ Templates: The Complete Guide
Author: David Vandevoorde, Nicolai M.Josuttis
Amazon Reviews: Amazon.com
Book Info: 有一种老套的赞美一本书的手法,大致是"没有看过这本书,你就怎么怎么地",这里面往往夸
张的成分居多.不过,倘若说"没有看过<>,你就不可能精通C++模板编
程",那么这个论断对于世界上绝大多数C++程序员来说是成立的.这本书填补了C++模板书籍领域由来已久的
空白.此前,上有<>这样的专注于模板高级编程技术和泛型模式的著作,下有< Standard Library>>这样的针对特定模板框架和组件的使用指南.然而,假如对模板机制缺乏深入的理解,你
就很难"上下"自如.鉴于此,我向每一位渴望透彻理解C++模板技术的朋友推荐这本书.
----------------------------------------------------------------
17.The C++ Standard Library: A Tutorial and Reference
Author: Nicolai M. Josuttis
Publisher: Addison-Wesley Professional; 1st edition (August 12, 1999)
Amazon Reviews:
[http://www.amazon.com/exec/obidos/tg/detail/-/0201379260/002-5778374-2660009?v=glance]Amazon.
com[/URL]
Book Info: 这是一本百科全书式的C++标准库著作,是一本需要一再查阅的参考大全.它在完备性,细致
性以及精确性方面都是无与伦比的.本书详细介绍了每一标准库组件的规格和用法,内容涵盖包括流和本地化
在内的整个标准库而不仅仅是STL.正如本书副标题所示,它首先适合作为教程阅读,尔后又可用作参考手册.
浅显易懂的写作风格使得这本书非常易读.如果你希望学习标准库的用法并尽可能地发挥其潜能,那你必
须拥有这本书.正如网络上所言,这本书不仅仅应该摆在你的书橱中,更应该放到你的电脑桌上.我向每一位职
业C++程序员强烈推荐.
----------------------------------------------------------------
18.Effective C++: 50 Specific Ways to Improve Your Programs and Design (2nd Edition) Author: Scott Meyers
Publisher: Addison-Wesley Professional; 2 edition (September 2, 1997)
Amazon Reviews: Amazon.com
Book Info:
Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library
Author: Scott Meyers
Publisher: Addison-Wesley Professional; 1st edition (June 6, 2001)
Amazon Reviews: Amazon.com
Book Info: 读完Scott 的<>和<>的中译本之后,我一直期待这
本书的中文版.我从潘爱民先生的个人主页上了解到,他和他的合作伙伴似乎早已完成了这本书的翻译工作,
可惜至今市面上仍不得见.幸运的是,我们可以看到它的原版.
本书是使用STL的程序员必读之作.在这本书中,Scott向我们讲述STL容器和算法的工作机制以及如何以最佳
方式使用它们.和Scott的其他作品一样,这本书的写作风格清晰,精确,具有极佳的可读性.看过这本书以后,
我想你也许会和我以及其他C++程序员一样产生这样的想法:Scott什么时候会写出一本"More Effective
STL"?
----------------------------------------------------------------
19.Thinking in C++, Volume 1: Introduction to Standard C++ (2nd Edition) Author: Bruce Eckel
Publisher: Prentice Hall; 2nd edition (April 15, 2000)
Amazon Reviews: Amazon.com
Book Info: <>的第1版于1996年荣获"软件研发"杂志评选的图书震撼大奖.最新推出
的第2版对内容进行了大幅改写和调整,以反映C++标准化带来的影响以及近几年面向对象领域最新研究和实
践成果."输入输入流","多重继承","异常处理"和"运行时类型识别"等高级主题连同C++标准化以后增加的一
些内容则被放入第二卷中.Bruce是一名经验丰富的C++讲师和顾问,其培训和写作经验都是世界一流水准,他
的作品比那些"玩票"的技术人员写的东西更能吸引读者.事实上,在同类图书中,对于大多数读者而言,这本书
的可读性要超过TCPL和<>.
Thinking in C++, Volume 2: Practical Programming (Second Edition)
Author: Bruce Eckel
Publisher: Prentice Hall; 2nd edition (November 1, 2003)
Amazon Reviews: Amazon.com
Book Info:
----------------------------------------------------------------
20. Ruminations on C++: A Decade of Programming Insight and Experience
Author: Andrew Koenig, Barbara E. Moo, Barbara E. (Editor) Moo
Publisher: Addison-Wesley Professional; 1st edition (August 7, 1996)
Amazon Reviews: Amazon.com
Book Info: Andrew是世界上屈指可数的C++专家.这是一本关于C++编程思想和程序设计技术而非语言细
节的著作.如果你已经具有一定的基础,这本书将教你在进行C++编程时应该怎样思考,应该如何表达解决方案
.整本书技术表达透彻,文字通俗易懂.Bjarne这样评价这本书:本书遍布"C++是什么,C++能够做什么"的真知
灼见.
----------------------------------------------------------------
21.Design Patterns: Elements of Reusable Object-Oriented software Author: Erich Gamma
Publisher: Addison Wesley Longman; (1998
Amazon Reviews: Amazon.com
Book Info: 设计可复用的面向对象的软件,你需要掌握设计模式.本书并非专为C++程序员而写,但它采
用了C++(以及Smalltalk)作为主要示例语言,C++程序员尤其易于从中受益.四位作者都是国际公认的面向对
象软件领域专家,他们将面向对象软件的设计经验作为设计模式详细记录下来.这本书影响是如此深远,以至
于四位作者以及本书都被昵称为GoF(Gang of Four).本书学院气息浓厚,行文风格严谨简洁,虽然它不如某些
讲解模式的书籍易读,但真正要精准地理解设计模式,本书是终极权威.学习设计模式,这本书需要一而再,再
而三的咀嚼.顺带一句:请将设计模式化作开拓思维的钥匙,切莫成为封闭思维的枷锁.
----------------------------------------------------------------
22.Efficient C++: Performance Programming Techniques
Author: Dov Bulka, David Mayhew
Publisher: Prentice Hall
Amazon Reviews: Amazon.com
Book Info: 这本超薄小书聚焦于高性能C++应用程序开发.两位作者都是IBM软件专家,都工作于对性能
要求极高的系统构建领域,本书是他们的经验之谈.也有人不喜欢这本书,因为它花了不少的篇幅讲述和C++无
关的东西,我却恰恰因为这一点而对这本书产生好感,正是这些东西让我开阔了眼界.
----------------------------------------------------------------------------------
23.Inside the C++ Object Model
Author: Stanley B.Lippman
Publisher: Addison-Wesley Pub Co
Published: May 3, 1996
Amazon Reviews: Amazon.com
Book Info: 从编译器的角度观察C++可以使你知其然并知其所以然.本书探讨了大量的C++面向对象程序
设计的底层运作机制,包括构造函数,函数,临时对象,继承,虚拟,模板的实例化,异常处理,运行期类型识别等
,另外还介绍了一些在实现C++对象模型过程中做出的权衡折衷.喜欢刨根问底的C++程序员可以从中了解了无
数的编译器解释源代码的细节,以及记忆体分配的细节..24.The Art of Assembly Language
Author: Randall Hyde
Amazon Reviews: Amazon.com
Book Info: 本书以X86系列微机为背景,从简单的Hello程序开始,系统而详细地阐述了X86微机汇编语言
编程的各种基础知识和编程技巧,内容涉及到数据表示,存储器管理,各种数据类型,过程,与汇编语言相关的
体系结构,控制结构,文件,宏指令,位处理指令,字符串指令,MMX指令,类和对象,以及混合语言编程等,尤其是
在高级汇编语言(HLA)方面,该书给予了细致深入的讲解.对于有意学习X86汇编语言编程的程序员来说,这是
一本难得的好书.
本书的作者Randall Hyde在大学中教授汇编语言十多年,并且开发了好几个商用软件,具有丰富的汇编语
言开发经验.该书的英文电子版受到了成千上万的网站和高级程序员的高度评价,已经成为了高级汇编语言编
程方面的一本经典之作.虽然该书的出版时间不长,但在Amazon上为该书作出评价的人很多,而且几乎所有的
人都给予5星的评价,可见其内容之好.可以相信,随着时间的推移,它在程序员中的影响会越来越大.
----------------------------------------------------------------
25.The Design and Implementation of the 4.4BSD Operating System
Auther:
Marshall Kirk McKusick, Consultant
Keith Bostic, Berkeley Software Design, Inc.
Michael J.Karels, Berkeley Software Design, Inc.
John S.Quarterman, Texas Internet Consulting
Publisher: Addison-Wesley Publishing Company
Published: 04/30/1996
Book Info: 是第一本完整描述伯克利最新版本4.4BSD设计和实现的权威性著作.书中介绍了4.4BSD的内
部结构和实现4.4BSD的系统功能中所用的概念,数据结构和算法.书中着重对4.4BSD 和 AT&T System V UNIX
版本的不同处作了较详细的描述,并对其设计思想及背景作了清晰的阐述.该书对研究,开发和使用 UNIX 系
统,特别是4.4BSD UNIX 实现中的一些新技术,新特点.有很大的参考价值.
----------------------------------------------------------------
26.John Lions:Lions’Commentary on UNIX 6th Edition with Source Code
Author: John Lions
Amazon Reviews: Amazon.com
Book Info: 在20世纪70年代和80年代这一时期,莱昂的几册<<源代码分析>>,曾是人们争相传看的UNIX
系统的"地下出版物".我们今天来审视这一著作,尽管其中的代码已属过时,但其注释者所作的大部分注释,依
然完美如初.要想学习操作系统原理,就必须阅读和理解源代码.莱昂的工作,使我们中间的大多数人都能达到
这一步.
Book Reviews:
本书中的材料确定是有点过时了,其内容不包括图形,网络以及1975年后出现的新事物.即使在1979年的
编译中也不再使用的线性搜索,基本数据结构和C代码还保留在本书的源代码中,而该代码面向的计算机非常
简单,只比存储器稍稍多一些.从中你会发现有很多粗糙之处.但是在代码中你也可以观察到其基本结构,该结
构沿用了很长时间,而且能够包容在计算环境中发生的巨大变化.在莱昂的分析中,你可以觉察到新鲜的,经常
提出问题的立场,其中的很多词语和思想都很适宜于教育和学习.莱昂非常清楚地赞赏他阅读的UNIX源代码,
但又立即指出其不足之处.他帮助他的学生理解蕴含在源代码中的很多思想和主题,也坦率地说明他对该代码
某些部分感到的困惑之处.此处重印的文献已经教育了一代人,它是计算机界中复印数量最多的一本书稿.将
此公开记录在案是件大好事.
----丹尼斯.M .里奇
最后我还想提及的是:现在,得到最广泛传播的一份地下计算机科学文献已经可以自由地使用了.我对
1977年中的那一天仍然是记忆犹新,那时我接到邮寄来的此书的第一份草稿,开始时我对此书并无很多期望,
但是最后却是逐字逐句进行了仔细阅读.20年之后,此书依旧是对一个实际操作系统工作的最好分析说明.
----肯?汤姆森
(汤姆森和里奇因为开发和实现UNIX操作系统而共同获得1983年ACM美国计算机协会图灵奖).
----------------------------------------------------------------
27.Operating Systems: Design and Implementation (Second Edition)
Author: Andrew S.Tanenbaum, Albert S.Woodhull
Publisher: Prentice Hall; 2nd edition (January 15, 1997)
Amazon Reviews: Amazon.com
Book Info: 本书是一本理论结合实践的杰出教材.作者不仅介绍了所有基本原理,如:进程,进程间通信,
输入/输出,虚拟存储,文件系统及系统安全,也介绍了线程概念,同时又详尽地讨论了MINIX系统(一种UNIX兼
容系统),使学生不仅能学到原理,还能通过使用MINIX来了解如何将这些原理应用到真实的操作系统中.作者
更新了所有原理性材料以反映该领域的新进展.基于POSIX的MINIX系统经修订后可运行在基于奔腾(Pentium)
的计算机上.MINIX代码可用于Ethernet和TCP/IP联网环境.每本书均附光盘,内含MINIX全部源码和可运行各
种计算机上的两个模拟程序.每章后均附思考题.
----------------------------------------------------------------
28.Modern Operating Systems (2nd Edition)
Author: Andrew Tanenbaum
Publisher: Prentice Hall
Amazon Reviews: Amazon.com
Book Info: 对于软件开发专家以及计算机专业的学生来说,<<现代操作系统>>给出了操作系统设计一个
概念上的全面见解,包括Unix/Linux和Windows 2000的详细个案研究.本书共分两部分,第一部分详尽讲述了
传统操作系统知识,包括进程,存储器管理,文件系统,I/O设备管理,死锁等内容;第二部分主要介绍了分布式
操作系统,包括层次协议,远程过程调用,互斥操作,分布式文件系统等专题.为加深概念的理解,本书还详细介
绍了四个操作系统,包括两个传统的系统UNIX和MS-DOS;两个分布式系统Amoeba和Mach.此外还简要介绍了
NFS,AFS,ISIS等其他几个系统.本书体系完整,内容丰富,叙述清晰,是大学计算机及相关专业学生不可多得的
教科书,对于从事计算机管理,开发,系统分析等职业的专业人员也是优秀的参考书.
----------------------------------------------------------------
29.Operating System Concepts
Author: Abraham Silberschatz, Greg Gagne, Peter Baer Galvin
Amazon Reviews: Amazon.com
Book Info: 本书是计算机类专业操作系统课程的一本经典教材,自第一版问世以来,经历了近20年的锤
炼,被认为是该课程教材的一本"圣经".它对操作系统的概念和基本原理给出了清晰的阐述.本书所涉及的基
本概念和算法均基于当前商用操作系统,并在非特定操作系统的通用环境中展开讲解.书中介绍了大量与流行
操作系统相关的实现技术,包括Solaris2,Linux,Windows NT,Windows 2000,OS/2和Apple Macintosh操作系
统.此版包括了线程,Windows 2000的新章节,并新增了客户/服务器
模型和网络文件系统,嵌入式操作系统,实时操作系统,分布式操作系统等.
----------------------------------------------------------------
30.Running MS-DOS
Author: Van Wolverton
Published: 18 November 1993
Book Info: MS-DOS 上的清晰工作!
经过10年无数次竞争,<>仍是被其它 MS-DOS 奉为标准的书.Van Wolverton 的实际的
写作风格,上百张屏幕演示,使得<>成为任何时候的DOS指南畅销书.再没有哪个计算机书从
读者和评论家那里获得过这么多的赞扬.
这本新的,10 周年纪念版本,包括关于 MS-DOS 6.2 最新版本的重要的信息.如果您仅仅只是买了一台
PC 机,或者只是升级到了一个新版本,<>应当成为您的第一个信息源.<>
实际上是由3本书合成的,包括:
MS-DOS 介绍,以及如何同您的计算机硬件相协调
一个关于了解和使用 MS-DOS 的完整制导
一个命令手册,里面有定义,例子和表格,帮您快速寻找信息!
----------------------------------------------------------------
31.Advanced Programming in the UNIX? Environment
Author: Richard W.Stevens, Stephen A.Rago
Publisher: Addison-Wesley Professional
Amazon Reviews: Amazon.com
Book Info: 与大多数其他操作系统类似,Unix对运行其上的程序提供了大量服务,此外,本书与其他Unix
编程书籍不同的是,本书除了讲述Unix系统的编程接口----即系统调用接口和由标准C函数库提供的大量函数
之外,还通过许多例子和基本原理对Unix编程环境做了更深入的解释和剖析,如怎样创建数据库,页面描述语
言的打印机驱动程序,现代拨号程序以及代理进程,处理机间通信,伪终端程序等.本书作者是Unix研究领域的
专家,而本书更被誉为是该领域的圣经宝典,相信每一位读者都会在学习本书的过程中体会到它的价值所在.
----------------------------------------------------------------
32.Unix Network Programming
Unix Network Programming, Volume.1: The Sockets Networking API, Third Edition
Author: W.Richard Stevens, Bill Fenner, Andrew M.Rudoff, Richard W.Stevens
Publisher: Addison-Wesley Professional
Amazon Reviews: Amazon.com
Book Info: 这是一本利用应用编程接口(API)编写法对计算机网络进行通信的网络编程的教程.所用的
API有两类: 基于BerkeleyUNIX操作系统的"Berkeley"套接字和基于AT&T开发的X Open传输接口XTI.本书分
四大部分:Ⅰ.引论和TCP/IP;Ⅱ.基本套接字(Sockets);Ⅲ.高级套接字;Ⅳ.XTI X/Open传输接口.四个附录:
A.IPv4,IPv6,ICMPv4和ICMPv6;B.虚拟网络;C.调试技术;D.一些关键源代码.全书内容全面,实用性强,是一本
极好的参考书.
UNIX Network Programming, Volume 2: Interprocess Communications (2nd Edition)
Author: W.Richard Stevens
Publisher: Addison-Wesley Professional
Amazon Reviews: Amazon.com
Book Info: 一种良好的进程间通信(IPC)形式是复杂精致的UNIX程序性能之关键.本书全面深入地介绍
了各种进程间通信形式,包括消息传递,同步,共享内存及远程调用(RPC).作者从介绍IPC的基础及其所要解决
的问题开始,逐步引导读者学习如何使System V IPC和新的Posix标准两者都达到极至.书中Pthread的内容有
较大的扩充,所附的许多例子反映多个线程而不是多个进程.读者通过本书将能掌握各种现行的IPC技术,其中
有:管道和FIFO;Posix和System V消息队列;互斥锁和条件变量;读写锁;记录上锁;Posix和System V信号灯
;Posix和System V共享内存;Solaris门和Sun RPC;IPC技术的性能测量.本书内容详尽且具有权威性,几乎每
章都有精选的习题,是计算机和网络专业高年级本科生和研究生的首选教材,本书也可作为网络研究和开发人
员的自学教材和参考书.
----------------------------------------------------------------
33.TCP/IP Illustrated
Web site: http://www.kohala.com/start/
TCP/IP Illustrated,Volume 1:The Protocols
Author: W.Richard Stevens
Publisher: Addison-Wesley
Amazon Reviews: Amazon.com
Book Info: <>是一本完整而详细的TCP/IP协议指南.描述了属于每一层的各个
协议以及它们如何在不同操作系统中运行.作者用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作
系统和TCP/IP实现之间传输的不同分组.对tcpdump输出的研究可以帮助理解不同协议如何工作.本书适合作
为计算机专业学生学习网络的教材和教师参考书.也适用于研究网络的技术人员.
TCP/IP Illustrated,Volume 2:The Implementation
Author: Gary R.Wright, W.Richard Stevens
Publisher: Addison-Wesley
Amazon Reviews: Amazon.com
Book Info: 本书完整而详细地介绍了TCP/IP协议是如何实现的.书中给出了约500个图例,15,000行实际
操作的C代码,采用举例教学的方法帮助你掌握TCP/IP实现.本书不仅说明了插口API和协议族的关系以及主机
实现与路由器实现的差别.还介绍了4.4BSD-Lite版的新的特点,如多播,长肥管道支持,窗口缩放,时间戳选项
以及其他主题等等.读者阅读本书时,应当具备卷1中阐述的关于TCP/IP的基本知识.本书适用于希望理解
TCP/TP协议如何实现的人,包括编写网络应用程序的程序员以及利用TCP/IP维护计算机网络的系统管理员.
TCP/IP Illstrated,Volume 3:TCP for Transactions,HTTP,NNTP,and the UNIX Domain Protocols
Author: W.Richard Stevens
Publisher: Addison-Wesley
Amazon Reviews: Amazon.com
Book Info: 本书是<>的延续.主要内容包括:TCP事务协议,即T/TCP,这是对TCP的扩展
,使客户-服务器事务更快,更高效和更可靠;TCP/IP应用,主要是HTTP和NNTP;UNIX域协议,这些协议提供了进
程之间通信的一种手段.当客户与服务器进程在同一台主机上时,UNIX域协议通常要比TCP/IP快一倍.本书同
样采用了大量的实例和实现细节,并参考引用了卷2中的大量源程序.本书适用于希望理解TCP/IP如何工作的
人,包括编写网络应用程序的程序员以及利用TCP/IP维护计算机网络的系统管理员.
作者简介:
Gary R.Wright 研究TCP/IP多年.他是Connix公司的董事长,这个公司的基地在康涅狄格州,它提供
Internet接入和咨询服务.W.Richard Stevens(1951-1999)是一位非常受人尊敬的专家,除了<>
三卷本外,他还有其他两部最为畅销的作品;<>和<>(两卷本).
----------------------------------------------------------------
34.Routing TCP/IP
CCIE Professional Development:Routing TCP/IP Volume 1
Author: Jeff Doyle
Publisher: Cisco Press; 1st edition (July 1, 1998)
Amazon Reviews: Amazon.com
Book Info: 本书是第一本详细而又完整地介绍互联网络内部网关路由选择协议(IGRP)的专业书籍,堪称
有关IGRP方面不可多得的经典之作.本书共分三个部分.第一部分主要介绍了网络和路由选择的基本知识,对
TCP/IP和静态,动态路由选择技术作了一个整体的回顾.第二部分是本书的精华,这一部分详细深入地讲述了
各种常用的内部网关路由选择协议,如静态路由,RIP,RIPv2,IGRP,EIGRP,OSPF,ISIS等,每一章除了对该协议
的实现机制和参数详尽阐述,使读者对协议的实现原理有一个清晰的理解外,还通过在实际网络环境中的实例
,详细地论述了该协议在Cisco路由器上的配置和故障处理方法,使读者获取大量解决实际问题的专业技能.第
三部分介绍了如缺省路由,路由过滤等多种有效的路由控制工具,用来创建和管理多个IP路由选择协议的协调
工作.本书不仅适合那些需要准备通过CCIE考试的考生,而且也适合任何需要完整理解TCP/IP内部路由选择协
议的网络设计和工程人员阅读.本书中对协议细节的讲解和对网络实例的探讨相信会让读者获益匪浅.
CCIE Professional Development Routing TCP/IP Volume 2
Author: Jeff Doyle, Jennifer DeHaven Carroll
Publisher: Cisco Press; 1st edition (April 11, 2001)
Amazon Reviews: Amazon.com
Book Info: 本书深入系统地阐述了TCP/IP路由技术,内容包括几种重要的网络协议,如外部网关协议
(EGP),边界网关协议(BGP4),以及相应的高级IP路由技术与应用――网络地址转换,IP组播路由技术,IPv6技
术,路由器管理等.本书共分9个章节,首先介绍并讨论了主题内容的基本原理,接着是设计用来展示真实网络
环境中相关概念的一系列配置范例,最后提供给读者经实践验证过的故障排除方法以解决网络可能会出现的
问题.重点介绍了自治系统之间的路由选择策略以及诸如组播和IPv6等更具挑战性的路由选择和实施技术.
----------------------------------------------------------------
35.Data and Computer Communications,Seventh Edition
Author: William Stallings
Amazon Reviews: Amazon.com
Book Info: 本书是著名计算机专业作家 William Stallings 的经典著作之一,内容涉及最基本的数据
通信原理,各种类型的计算机网络及多种网络协议和应用.这一版对原有内容做了彻底的修订和重组,使新版
对通信各专题的阐述更全面,更清晰.同时,新版加强了无线通信和组网,吉比特以太网,区分服务,MPLS和
TCP/IP实现细节等内容.此外,本书还包括词汇表,参考文献,缩写词对照表.每章都附有习题和建议,以便读者
进一步阅读.
----------------------------------------------------------------
36.Programming Pearls, 2nd Edition
Author: Jon Bentley
Publisher: Addison-Wesley Professional; 2 edition (September 27, 1999)
Amazon Reviews: Amazon.com
Book Info: 如果让程序员们列出他们最喜欢的书籍,Jon Bentley的<<编程珠玑>>通常可以位于经典之
列.如同珍珠来自于曾经折磨牡蛎的沙粒,程序设计的珍珠也来自曾经折磨程序员的实际问题.Bentley的珍珠
建立在坚实的工程学基础上,在洞察力和创造力的王国中为那些恼人的问题提供了独特而巧妙的解决方案.通
过一些精心设计的有趣而且颇具指导意义的程序,本书对众多实用程序设计技巧及基本设计原则作了清晰而
机智的描述.因此,<<编程珠玑>>得到各个层次程序员的青睐并不让人感觉意外.
为了反映当今的程序设计方法和环境,Bentley在本书中彻底更新了第一版里的大多数素材.此外,他还新
增加了以下三个方面的内容:1.测试,调试和计时 2.集合表示 3.字符中问题
对原来的所有程序都重新进行了改写,并生成了等量的新代码.您可以从本书网站
([urwww.programmingpearls.com)[/url]获取所有程序的C或C++实现.
Book Reviews:
<<编程珠玑>>第一版是我职业生涯早期阅读过的最有影响力的书籍之一,第一次从该书中学到的许多观
点很久以后仍然使我受益匪浅.Jon在第二版中对素材进行了大量更新,这些新例子的新鲜程度给我留下了深
刻的印象.
----Steve McConnell <
----------------------------------------------------------------
37.The Mythical Man-Month: Essays on Software Engineering, 20th Anniversary Edition
Author: Frederick P, Brooks,Jr.
Publisher: Addison-Wesley Professional; 1st edition (August 2, 1995)
Amazon Reviews: Amazon.com
Book Info: IBM大型电脑之父 Fred Brooks 二十余年开发经验的汇集,远谋深虑,字字珠玑.技术之巧与
人文之美的完美结合.本书自第一版以来,畅销二十余年不衰,是软件领域绝无仅有的必读经典.
作者简介:
Frederick P 曾荣获美国计算机领域最具声望的图灵奖(A.M.Turing Award)桂冠.美国计算机协会(ACM)
称赞他"对计算机体系结构,操作系统和软件工程做出了里程碑式的贡献."
Brooks 博士是北卡罗莱纳大学 Kenan-Flagler 商学院的计算机科学教授.他被认为是"IBM 360系统之
父",曾担任了360系统的项目经理,以及360操作系统项目设计阶段的经理.凭借在上述项目中的杰出贡献
,Brooks博士以及Bob Evans和Erich Bloch在1985年荣获了美国国家技术奖(National Medal of
Technology).Brooks博士早期曾担任IBM 公司Stretch和Harvest计算机的体系结构设计师.
Brooks 博士创立了北卡罗莱纳大学的计算机科学系,并在1964~1984年期间担任系主任.他还曾任职于
美国国家科技局和国防科学技术委员会.他目前的教学和研究方向是计算机体系结构,分子模型绘图和虚拟环
境设计.
----------------------------------------------------------------
38.The Pragmatic Programmer
Author: Andrew Hunt,David Thomas
Publisher: Addison Wesley
Published: November 24, 1999
Amazon Reviews: Amazon.com
Book Info: 本书直击编程阵地,穿过了日益增长的现代软件开发的规范和学术,对核心过程进行了审视
----该过程采取了供需结合的工作方式和令人欣喜的可维护代码.本书包含的内容从个人责任和职业发展到
保持代码的灵活性,使之易于改编和重用.
本书由各个相对独立的章节组成,其间不乏好玩的轶事,详细的实例和有趣的对话,描述了软件开发各个
方面的最好实践和主要缺陷.无论你是一个新入门的编码者,一个有经验的程序员,还是负责软件项目的经理,
通过每日学习这些课程,都会在个人生产力,准确率和工作满意度上有快速的增长.你所学到的技巧和开发习
惯和态度将为你在职业生涯中取得长期成功奠定基础.你将成为又一Pragmatic Programmer.
----------------------------------------------------------------
39.The Art of UNIX programming
Author: Eric S. Raymond
Publisher: Addison Wesley
Published: October 2, 2003
Amazon Reviews: Amazon.com
Book Info: 荣获美国Software Development Productivity Award大奖作品!
本书是作者封笔30年后历时5年创作而成,是一部难得的软件工程方面的佳作.作者首次将哲学,设计模式
,工具,文化和传统结合在一起,使得UNIX成为世界上最好且最具创新意义的软件,并展示了如何将其拓展到
Linux和当今的开源(open-source)运动中:通过取自最主要的开源项目中的示例,作者向UNIX和Linux编程人
员展示了如何更巧妙地创建软件,使其更雅致,更灵巧,更具可重用性且具有更长的生命期
本书主要介绍了Unix系统领域中的设计和开发哲学,思想文化体系,原则与经验,由公认的Unix编程大师,
开源运动领袖人物之一Eric S.Raymond倾力多年写作而成.包括Unix设计者在内的多位领域专家也为本书贡
献了宝贵的内容.本书内容涉及社群文化,软件开发设计与实现,覆盖面广,内容深邃,完全展现了作者极其深
厚的经验积累和领域智慧.
----------------------------------------------------------------
40.Peopleware:Productive Projects and Teams
Author: Tom DeMarco, Timothy Lister
Publisher: Dorset House Publishing Co
Published: February 28, 1999
Amazon Reviews: Amazon.com
Book Info: Tom Demarco 和Tim Lister 的"Peopleware:Productive Projects and Teams"第一版于
1987 年出版,专门讨论了软件开发和维护的团队管理问题,向传统的管理方法提出了挑战,推崇人本管理思想
,给予软件工人自由和信任.和<<人月神话>>一样,该书现在已经成为软件团队管理的经典之作.1995 年
,Larry Constantine 出版了一部题为"Constantine 论人件"的论文集,扩大了"人件"概念,把那些使用软件
的人也包括进来.1999 年2 月,<<人件>>第二版出版,增补了8 章新内容.这些增补的内容视角更加宽广,对比
较大型的组织中的团队如何运作进行了探索.
----------------------------------------------------------------
41.Computer graphics C Version 2nd ed
Author: Donald Heam, M.Pauline Baker
Publisher: Pearson US Imports & PHIPEs
Published: May 24, 1996
Amazon Reviews: Amazon.com
Book Info: 这是计算机图形学领域的一部经典之作,作者Foley,van Dam等是国际图形学界的著名学者,
学术带头人,而且本书英文版自出版以来,一直是各国大学计算机图形学课程的主要教科书.本书是高等院校
计算机专业本科生,研究生计算机图形学课程的理想教材,是相关领域专业人员开展研究工作的优秀参考书.
----------------------------------------------------------------
42.Tricks of the 3D Game Programming Gurus-Advanced 3D Graphics and Rasterization
Author: Andre LaMothe
Amazon Reviews: Amazon.com
Book Info: 本书是著名游戏程序设计类书籍作者Andre LaMothe的畅销书.在书中随处可见许多有趣但
又有一定难度的源程序.作者循循善诱地从程序设计的角度介绍了在Windows环境下进行游戏开发所需的全部
知识,包括Win32编程以及DirectX中所有主要组件(包括DirectDraw,DirectSound,DirectInput和
DirectMusic).书中还用单独的章节详细讲授了2D图形学和光栅化技术,游戏算法,多线程编程,文本游戏和解
析,人工智能(包括模糊逻辑,神经网络和遗传算法),物理建模(完全碰撞反应,动量传递和正反向运动学)及实
时模拟等游戏程序开发中的关键技术.
----------------------------------------------------------------
43.Compilers Principles, Techniques, and Tools
Author: Alfred V. Aho, Ravi Seth, Jeffrey D. Ullman
Publisher: Addison Wesley (January 1, 1986)
Amazon Reviews: Amazon.com
Book Info: 本书另外一个响亮的名字就是龙书.原因是这本书的封面上有条红色的龙.里面讲解的核心
编译原理至今都没有变过,所以一直到今天,它的价值都非凡.这本书最大的特点就是一开始就通过一个实际
的小例子,把编译原理的大致内容罗列出来,让很多编译原理的初学者很快心里有了个底,也知道为什么会有
这些理论,怎么运用这些理论.而这一点是我感觉国内的教材缺乏的东西,所以国内的教材都不是写给愿意自
学的读者,总之让人看了半天,却不知道里面的东西有什么用.
----------------------------------------------------------------
44.Computer Systems A Programmer's Perspective
Author: Randal E. Bryant, David R. O'Hallaron
Publisher: Prentice Hall; 1st edition (August 13, 2002)
Amazon Reviews: Amazon.com
Book Info: AMAZON五星图书,最伟大计算机科学教材之一
卡耐基梅隆大学计算机学院院长,IEEE和ACM双院士倾力推出
超过80所美国和世界一流大学计算机专业选用本书为教材
本书英文版久负盛名,被众多专业人士称为"最伟大的计算机教材"之一,著名的美国卡内基梅隆大学计算
机科学系一直将本书作为教材使用,程序员眼中的透彻讲述计算机系统的扛鼎之作.作者Randal E. Bryant是
卡耐基梅隆大学的计算机科学系主任,ACM和IEEE双院士(Fellow),其研究成果多次获得ACM和IEEE颁发的大奖
.本书共分十三章,分别介绍了信息的表示和处理,程序的机器级表示,处理器体系结构,存储器层次结构,静态
和动态链接,虚拟存储器,系统级I/O,网络编程和并发编程等精彩内容.其目的是解释计算机系统的所有本质
概念,并向读者展示这些概念是如何实际地影响应用程序的正确性,性能和实用性.与其他主要针对系统构造
人员的系统类书籍不同,这本书是写给程序员的,是从程序员的角度来描述的.本书为软件和硬件之间搭起了
一个桥梁,它给出了一种帮助读者分别从硬件和软件的角度去理解一个程序及其行为的途径,这也填补了国内
计算机系统教学中的一个空白.本书的最大优点是帮助读者理解概念,让读者很清楚地在脑海中构造一个层次
型的计算机系统,从最低层数据在内存中的表示(如我们一直陌生的浮点数表示),到流水线指令的构成,到虚
拟存储器,到编译系统,到动态加载库,到最后的用户应用.本书提供了大量的例子和练习及部分答案.尤其值
得一提的是,对于每一个基本概念都有相应的笔头或程序试验,加深读者的理解.
Book Reviews:
我坚信从程序员的角度来看计算机系统对教会学生计算机的内部结构非常有帮助.
----Kostas Daniilidis,宾夕法尼亚大学
这本书讲述事物的方法与众不同,但是和我想要的课程进行方式类似.
----John Greiner,Rice大学
这是一项出色的工作,是这一领域教学方法的一次革命.
----Michael Scott,罗切斯特大学
Author: Donald.E.Knuth
Web site: http://www-cs-faculty.stanford.edu/~knuth/taocp.html
Book Info: 这部书被誉为20世纪最重要的20部著作之一,与Einstein的<<相对论>>并列,是计算机科学
领域的权威著作.全书共分7卷,目前已经出版了3卷,被誉为"计算机程序设计理论的荷马史诗","可与牛顿的
<<自然科学的数学原理>>媲美的巨著".作者数学方面的功底造就了本书严谨的风格,虽然本书不是用当今流
行的程序设计语言描述的,但这丝毫不损伤它"程序设计史诗"的地位.道理很简单,它内涵的设计思想是永远
不会过时的.The Art of Computer Programming 原计划要出七册,但目前只完成了三册.该书有日文,俄文,
西班牙文等许多国的版本.其中,中文版由国防大学出版社发行.
Book Reviews:
无数的读者都在谈论Knuth的书所带来的深远影响.科学家惊叹于分析逻辑之透彻严谨,而普通的编程人
员也已成功地将书中所列方案运用到他们的日常问题中.所有的人都非常赞赏Knuth在这套书中所表现的精确
与风趣,并为其明确性与涉及面之广而感到欣喜.
我无法向你表达这套书在学习和创造性方面所带给我的兴奋与激动,我已经将它们带入了我的生活,就像
我的汽车,饭馆,工作,家庭……无所不在.
----Charles Long
无论你的背景怎样,如果你正在进行复杂的计算机编程,你就应该阅读本套书中的每本书,来补充你的专
业知识.
当一个问题难以解决,而必须使用Knuth的这套书来解决时,总是一件令人愉快的事情.我发现在计算机方
面使用它们会有惊人的效果.
----Jonathan Laventhol
如果你认为你是一名真正优秀的程序员……读Knuth的<<计算机程序设计艺术>>,如果你能读懂整套书的
话,请给我发一份你的简历.
----Bill Gates
The Art of Computer Programming, Volume 1: Fundamental Algorithms (3rd Edition)
Author: Donald.E.Knuth
Publisher: Prentice Hall
Amazon Reviews: Amazon.com
Book Info: 卷1为基础运算法则,该书以基本的编程概念和技术为开始,然后讲述信息结构--计算机内信
息的表示法,数据元素间的结构关系以及处理它们的有效方法.主要应用于模拟,数字方法,符号计算,软件和
系统设计.许多简单和重要的运算法则和技术已添加到前一版本中,精确的初步计算部分已经修改,以适应当
前趋势.
The Art of Computer Programming, Volume 2: Seminumerical Algorithms (3rd Edition)
Author: Donald.E.Knuth
Publisher: Prentice Hall
Amazon Reviews: Amazon.com
Book Info: 第2卷对半数值算法领域做了全面介绍,分"随机数"和"算术"两章.本卷总结了主要算法范例
及这些算法的基本理论,广泛剖析了计算机程序设计与数值分析间的相互联系.第3版中特别值得注意的是
Knuth对随机数生成程序的重新处理和对形式幂级数计算的讨论.
The Art of Computer Programming, Volume 3: Sorting and Searching (2nd Edition)
Author: Donald E.Knuth
Publisher: Prentice Hall
Amazon Reviews: Amazon.com
Book Info: 卷3为分拣和搜索,这是本书的第1个修订版,它是对计算机分拣和搜索的一流技术的最全面
的研究,它扩展了卷1中数据结构的处理方法,将大小数据库以及内存和外部存储都包含在内.本书包括对计算
机方法仔细检查的选择方案,和其效率的大量分析.本书该版的独特之处在于优化了的分拣,以及对通用散列
法和排列法的新的理论论述.
作者简介:
Donald.E.Knuth(唐纳德.E.克努特,中文名高德纳)是算法和程序设计技术的先驱者,是计算机排版系统
TeX和METAFONT的发明者,他因这些成就和大量创造性的影响深远的著作(19部书和160篇论文)而誉满全球,在
计算机科学领域享有崇高的威望,是计算机科学界公认的大宗师.作为斯坦福大学计算机程序设计艺术的荣誉
退休教授,他当前正全神贯注于完成其关于计算机科学的史诗性的七卷集.这一伟大工程在1962年他还是加利
福尼亚理工学院的研究生时就开始了.Knuth教授获得了许多奖项和荣誉,包括美国计算机协会图灵奖(ACM
Turing Award),美国前总统卡特授予的科学金奖(Medal of Science),美国数学学会斯蒂尔奖(AMS Steele
Prize),以及1996年11月由于发明先进技术荣获的极受尊重的京都奖(KyotoPrize).现与其妻Jill生活于斯坦
福校园内.
Donald.E.Knuth人生最辉煌的时刻在斯坦福大学计算机系渡过,获得了美国计算机协会图灵奖,成为本领
域内当之无愧的泰斗.
英文原版下载
http://www.shubulo.com/redirect.php?tid=34754
----------------------------------------------------------------
2.Introduction to Algorithms
Author:Thomas H.Cormen ,Charles E.Leiserson ,Ronald L.Rivest ,Clifford Stein
Amazon Reviews: Amazon.com
Book Info: 简称为CLRS的<<算法导论>>,被称作"计算机算法的圣经".
本书的主要作者来自麻省理工大学计算机,作者之一Ronald L.Rivest 由于其在公开秘钥密码算法RSA上
的贡献获得了图灵奖,目前是算法的标准教材,美国许多名校的计算机系都使用它,国内有些院校也将本书作
为算法课程的教材.另外许多专业人员也经常引用它.由于TAOCP只出版了3卷,CLRS比较起前者来则显得内容
更为全面,基本包含了所有的经典算法.本书程序全部由伪代码实现,这更增添了本书的通用性,使得利用各种
程序设计语言的程序员都可以作为参考.语言方面通俗,很适合作为算法教材和自学算法之用.国内的很多作
品名为数据结构,从本书中断章取义,把数据结构与算法混为一谈,搞得作者自己都迷迷糊糊.这也是我不十分
愿意向大家推荐国内作品的原因.你会发现现在基本上所有的数据结构与算法书籍都会将本书作为参考文献
之一,更可以说明一个问题,本书是作为读者进行算法学习的最佳选择.作为本书的补充内容,我愿意向大家推
荐下面的学习资料:你可以通过这个地址找到本书的所有练习答案:http://www.itu.dk/people/beetle/ .为
了更好的学习本书中的内容,最好的指导当然是来自作者本身讲述本书的课程,读者们可以通过
http://18.89.1.101/sma/5503fall2001/index5503fall2001.html获得课程的录像.
中文版
http://www.shubulo.com/thread-31351-1-1.html
习题及答案
http://www.shubulo.com/thread-33989-1-1.html
----------------------------------------------------------------
3.Data Structure & Algorithm Analysis in C (Second Edition)
Author:Mark Allen Weiss
Published:September 1996
Web site:http://www.cs.fiu.edu/~weiss/
Amazon Reviews: Amazon.com
Book Info: 本书曾被评为20世纪顶尖的30部计算机著作之一,作者Mark Allen Weiss在数据结构和算法
分析方面卓有建树.他的数据结构和算法分析的著作尤其畅销,并受到广泛好评.已被世界500余所大学用作教
材.
----------------------------------------------------------------
4.Concrete Mathematics A Foundation for Computer Science(Second Edition)
中文版
http://www.shubulo.com/thread-33994-1-1.html
Author:Donald.E.Knuth&Ronald L.Graham
Web site: http://www-cs-faculty.stanford.edu/~knuth/gkp.html
Amazon Reviews: Amazon.com
Book Info: 很令人兴奋的就是这本书的主要作者正是泰斗Donald.E.Knuth以及他的同事Ronald
L.Graham.书稿是他们在1970年的时候在计算机系教授研究生本门课程的基础上整理出来的教材.内容上是
Knuth的巨著TAOCP第一部的扩展,有些比TAOCP中谈及地又深入了许多.重点放在高级计算机程序设计话题以
及算法分析上,涉及了计算机科学领域内几乎所有可能遇到的数学知识.具体数学是离散数学和连续数学的综
合,书中这点做得极为出色,介绍的内容涉及到书中许多经典问题的解答比目前广泛流传的解法更易懂.对于
提高大家的计算数学修养有很大帮助.之所以TAOCP有的时候读者们读不懂就是因为计算数学基础不是十分扎
实,但以我个人经验,若能对本书中内容有一个比较好的理解,会给你阅读如TAOCP这样的旷世巨著带来很大的
方便.
----------------------------------------------------------------
5.Discrete Mathematics and Its Applications,Fourth Edition
习题
http://www.shubulo.com/viewthread.php?tid=33130
Author:Kenneth H.Rosen
Amazon Reviews: Amazon.com
Book Info: 本书的价值已经被全世界几百所大学所证实,作为离散数学领域的经典教材,全世界几乎所
有知名的院校都曾经使用本书作为教材.以我个人观点看来,这本书可以称之为离散数学百科.书中不但介绍
了离散数学的理论和方法,还有丰富的历史资料和相关学习网站资源.更为令人激动的便是这本书少有的将离
散数学理论与应用结合得如此的好.你可以看到离散数学理论在逻辑电路,程序设计,商业和互联网等诸多领
域的应用实例.本书的英文版(第五版)当中更增添了相当多的数学和计算机科学家的传记,是计算机科学历史
不可多得的参考资料.作为教材这本书配有相当数量的练习.每一章后面还有一组课题,把学生已经学到的计
算和离散数学的内容结合在一起进行训练.这本书也是我个人在学习离散数学时读的唯一的英文教材,实为一
本值得推荐的好书.
----------------------------------------------------------------
6.The C Programming Language 2nd Edition
英文版
http://www.shubulo.com/viewthread.php?tid=17067
习题及答案
http://www.shubulo.com/viewthread.php?tid=30825
Author:Brian W.Kernighan and Dennis M.Ritchie
Publisher: Prentice Hall
Published: 1988.
Amazon Reviews: Amazon.com
Book Info: Brian W.Kernighan和Dennis M.Ritchie的传世之作.千千万万程序员和编程爱好者的圣经,
每一页都是价值连城的秘诀.不管你从哪一页信手翻起,最终你都会发现自己已经深陷其中而不能自拔.
----------------------------------------------------------------
7.The C++ Programming Language Author:Bjarne Stroustrap
Amazon Reviews: Amazon.com
Book Info: 由C++之父亲手执笔的<
指南-----尽管官方标准还是ISO颁布的另一份文档,由ISO/IEC JTC1/SC22/WG21出版.TCPL是除了C++标准文
献之外最权威的C++参考手册.和大多数人的看法不大一样,我认为Bjarne的文字语言并不逊色于他所创建的
程序语言,至少我喜欢这种学院气息浓厚的作品.本书对C++语言的描述轮廓鲜明,直截了当.它从C++语言创建
者的角度来观察C++,这是任何别的作者和书籍做不到的----没有任何人比Bjarne自己更清楚该怎么来使用
C++.
这是一本严肃的著作,以中,高级C++开发人员为目标读者.如果你是一名有经验的C++程序员,需要了解更
加本质的C++知识,本书正是为你而写.它不是那种让你看了会不断窃喜的小书,需要用心体会,反复咀嚼.在阅
读过程中,请特别留心Bjarne先生强调了什么,又对什么一语带过.我个人比较喜欢这本书的第四部分"使用
C++做设计",这样的内容在类似的程序设计语言书籍中很难看到----我甚至认为Bjarne应该将这部分独立出
来单独写一本书.
----------------------------------------------------------------
8.The Design and Evolution of C++
Author: Bjarne Stroustrup
Amazon Reviews: Amazon.com
Book Info: D&E是一本关于C++语言设计原理,设计决策和设计哲学的专著.它清晰地回答了C++为什么会
成为今天这个样子而没有变成另外一种语言.作为C++语言的创建者,Bjarne淋漓尽致地展示了他独到而深刻
的见解.除了广受赞誉的语言特性外,Bjarne没有回避那些引起争议的甚至被拒绝的C++特性,他一一给出了逻
辑严密,令人信服的解释.内容涵盖C++的史前时代,带类的C,C++的设计规则,标准化,库,内存管理,多重继承,
模板等,对包括异常机制,运行时类型信息和名字空间在内的重要的新特性都分别进行了深入探讨.每一名C++
程序员都应该可以从Bjarne的阐释中加深对手中这门语言的认识.这本书知识浓缩,信息量极大,请不要错过
Bjarne每一句看似漫不经意的话.
----------------------------------------------------------------
9.Accelerated C++: Practical Programming by Example
Author: Andrew Koenig, Barbara E.Moo
Publisher: Addison-Wesley Professional
Published: January 15, 2000
Amazon Reviews: Amazon.com
Book Info: 和市面上大多数C++教程不同,本书不是从"C++中的C"开始讲解,而是始于地道的C++特性.从
一开始就使用标准库来写程序,随着讲述的逐渐深入,又一一解释这些标准库组件所依赖的基础概念.另外,和
其他C++教材不同的是,这本书以实例拉动语言和标准库的讲解,对后两者的讲解是为了给实例程序提供支持,
而不是像绝大多数C++教材那样,例子只是用作演示语言特性和标准库用法的辅助工具.
作者在C++领域的编程实践,教育培训以及技术写作方面都是世界一流水准.我喜欢这种大量使用标准库
和C++语言原生特性的清新的写作风格.在这本教材面前,几乎迄今为止的所有C++教材都黯然失色或显得过时
.尽管这本教材也许对于国内的高校教育来说有些前卫,不过我仍然极力向我的同行们推荐.顺带一提,在
Bjarne和我最近的一封通信里,他这样评价本书:对于有经验的程序员学习C++而言,这本书可能是世界上最好
的一本.
----------------------------------------------------------------
10.C++ Gotchas: Avoiding Common Problems in Coding and Design Author: Stephen C.Dewhurst
Publisher: Addison-Wesley Professional; 1st edition (November 26, 2002)
Amazon Reviews: Amazon.com
Book Info: Stephen的理论素养和实践经验注定这是一本值得一读的好书.Stephen曾经是贝尔实验室中
第一批C++使用者.他已经使用C++成功解决了包括编译器,证券交易,电子商务以及嵌入式系统等领域中的问
题.本书汇集了作者来自开发一线的99条编程真知灼见,洞悉它们,你可以避免几乎所有常见的C++设计和编程
问题.
我甚至认为,对于C++编程菜鸟而言,阅读这本书会比阅读Scott和Herb的书更能轻松而立竿见影地获得更
大的提高.我个人很喜欢这本书的写作风格----Stephen的许多观点看似极端却无可辩驳.当然了,这种自信(
以及冷幽默)来自于作者深厚的技术素养,而非自大的偏执.
11.C++ Primer 3rd
Author: Stanley B.Lippman
Amazon Reviews: Amazon.com
Book Info: 这本书的名字多少有点让人误解.尽管作者声称这本书是为C++新手而写,但无论是它的厚度
还是讲解的深度都暴露了似乎并非如此.也许说它是一本"从入门到精通"的C++教程会更合适一些.我个人认
为它并不适合完全不懂C++的初学者----在阅读这本书之前,你至少应该先有那么一点C或C++的背景知识,或
者至少要具有一些其他语言的编程经验.
尽管这本书省略了一些高级C++特性的讨论,但仍然可以称得上是迄今为止最全面的C++学习教程.事实上
,如果一名C++初学者能够扎扎实实地读完本书并对照<
水平肯定可以进入职业C++程序员的行列.我个人认为,即使你已经拥有了TCPL,这本书依然有拥有的价值,因
为在许多方面它比TCPL来得更详细,更易懂.
----------------------------------------------------------------
12.Essential C++
Author: Stanley B.Lippman
Amazon Reviews: Amazon.com
Book Info: 可以不太严格地认为这本书是<
的主题,包括过程式编程,泛型编程,基于对象编程,面向对象编程,模板编程以及异常处理等.Stanley将门槛
调低到"具有其他语言程序设计经验"的C++新手所能接受的最基本的层次,使他们能够迅速开始使用C++编程
而又免于阅读<
也许换一个人来概述C++编程范型(paradigm)的方方面面需要好几百页才能说清楚,但这本小书不可思议
地做到了这一点.我个人非常喜欢这种满是技术,简明扼要并且"有话好好说"的书.这本书同样具有一个明显
的风格:所有程序例子全部采用标准库组件,让人耳目一新.
----------------------------------------------------------------
13.Effective C++: 50 Specific Ways to Improve Your Programs and Design (2nd Edition)
More Effective C++: 35 New Ways to Improve Your Programs and Designs
Author: Scott Meyers
Publisher:Prentice Hall
Amazon Reviews: Amazon.com
Amazon.com
Book Info: 先养成良好的C++设计习惯,这是Scott Meyers的<
甜,就像他站在你对面讲课.如果你已经深刻地理解了<
以发现,你在众人中已经是鸡群之鹤.
如果说<
很多时新的标准C++的内容;第二,它讨论的主题倾向于"战略化"而非"战术化",并且讨论得更深入,更彻底.尤
其是对虚析构函数,智能指针,引用计数以及代理类(proxy classe)等技术和模式论述的深入程度,让人很难
想象是出现于这样的一本小书之中.
----------------------------------------------------------------
14.Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions
More Exceptional C++: 40 New Engineering Puzzles, Programming Problems, and Solutions
Author: Herb Sutter
Book Info: 你自认为是一名C++语言专家吗?读一读ISO C++标准委员会秘书长的这两本书再回答.在这
两本书中,Herb采用了"问答"的方式指导你学习C++语言特性.对于每一个专题,Herb首先合理地设想出你的疑
问和困惑,接着又猜测出你十有八九是错误的解答,然后给你以指点并提出最佳解决方案,最后还归纳出解决
类似问题的普适性原则.
这两本书是典型的深究C++语言细节的著作,很薄,但内容密集,远远超过Scott的那两本书,读起来很费脑
筋----我个人认为它们要比Scott的书难懂得多.若要研习这薄薄的两本书所包含的知识,至少需要花费数月
的时间!(在Scott的荐序中,他坦陈不止一次陷入GotW问题的陷阱,你应该知道这意味着什么)对于语言细节的
深究有什么好处呢?尽管在大多数情况下,我们不必关心C++代码幕后的动作,然而当我们不得不关心时,这两
本书可以为我们提供很好的线索,因为它们揭示了C++语言中微妙而又至关重要的东西.
----------------------------------------------------------------
15.Modern C++ Design: Generic Programming and Design Patterns Applied
Author: Andrei Alexandrescu
Publisher: Prentice Hall
Amazon Reviews: Amazon.com
Book Info: 你自认为是C++模板编程高手吗?请看过这本书再回答.这是一本出自天才之手令人敬畏的杰
作.泛型模式,无限延伸你的视野,足以挑战任何一名C++程序员的思维极限.
这本书共分为两大部分,第一部分讨论了Loki程序库采用的基础技术以及一些高级语言特性,包括基于策
略的类设计,模板局部特化,编译期断言,Typelist以及小型对象分配技术等.第二部分则着重介绍了Loki中的
重要组件和泛型模式技术,包括泛化仿函数(Generalization Functor),单件(Singleton),智能指针,对象工
厂(Object Factory),抽象工厂(Abstract Factory),访问者(Visitor)以及多方法(Multimethods)等.每一种
技术都让人大开眼界,叹为观止.
----------------------------------------------------------------------------------
16.C++ Templates: The Complete Guide
Author: David Vandevoorde, Nicolai M.Josuttis
Amazon Reviews: Amazon.com
Book Info: 有一种老套的赞美一本书的手法,大致是"没有看过这本书,你就怎么怎么地",这里面往往夸
张的成分居多.不过,倘若说"没有看过<
程",那么这个论断对于世界上绝大多数C++程序员来说是成立的.这本书填补了C++模板书籍领域由来已久的
空白.此前,上有<
就很难"上下"自如.鉴于此,我向每一位渴望透彻理解C++模板技术的朋友推荐这本书.
----------------------------------------------------------------
17.The C++ Standard Library: A Tutorial and Reference
Author: Nicolai M. Josuttis
Publisher: Addison-Wesley Professional; 1st edition (August 12, 1999)
Amazon Reviews:
[http://www.amazon.com/exec/obidos/tg/detail/-/0201379260/002-5778374-2660009?v=glance]Amazon.
com[/URL]
Book Info: 这是一本百科全书式的C++标准库著作,是一本需要一再查阅的参考大全.它在完备性,细致
性以及精确性方面都是无与伦比的.本书详细介绍了每一标准库组件的规格和用法,内容涵盖包括流和本地化
在内的整个标准库而不仅仅是STL.正如本书副标题所示,它首先适合作为教程阅读,尔后又可用作参考手册.
浅显易懂的写作风格使得这本书非常易读.如果你希望学习标准库的用法并尽可能地发挥其潜能,那你必
须拥有这本书.正如网络上所言,这本书不仅仅应该摆在你的书橱中,更应该放到你的电脑桌上.我向每一位职
业C++程序员强烈推荐.
----------------------------------------------------------------
18.Effective C++: 50 Specific Ways to Improve Your Programs and Design (2nd Edition) Author: Scott Meyers
Publisher: Addison-Wesley Professional; 2 edition (September 2, 1997)
Amazon Reviews: Amazon.com
Book Info:
Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library
Author: Scott Meyers
Publisher: Addison-Wesley Professional; 1st edition (June 6, 2001)
Amazon Reviews: Amazon.com
Book Info: 读完Scott 的<
本书的中文版.我从潘爱民先生的个人主页上了解到,他和他的合作伙伴似乎早已完成了这本书的翻译工作,
可惜至今市面上仍不得见.幸运的是,我们可以看到它的原版.
本书是使用STL的程序员必读之作.在这本书中,Scott向我们讲述STL容器和算法的工作机制以及如何以最佳
方式使用它们.和Scott的其他作品一样,这本书的写作风格清晰,精确,具有极佳的可读性.看过这本书以后,
我想你也许会和我以及其他C++程序员一样产生这样的想法:Scott什么时候会写出一本"More Effective
STL"?
----------------------------------------------------------------
19.Thinking in C++, Volume 1: Introduction to Standard C++ (2nd Edition) Author: Bruce Eckel
Publisher: Prentice Hall; 2nd edition (April 15, 2000)
Amazon Reviews: Amazon.com
Book Info: <
的第2版对内容进行了大幅改写和调整,以反映C++标准化带来的影响以及近几年面向对象领域最新研究和实
践成果."输入输入流","多重继承","异常处理"和"运行时类型识别"等高级主题连同C++标准化以后增加的一
些内容则被放入第二卷中.Bruce是一名经验丰富的C++讲师和顾问,其培训和写作经验都是世界一流水准,他
的作品比那些"玩票"的技术人员写的东西更能吸引读者.事实上,在同类图书中,对于大多数读者而言,这本书
的可读性要超过TCPL和<
Thinking in C++, Volume 2: Practical Programming (Second Edition)
Author: Bruce Eckel
Publisher: Prentice Hall; 2nd edition (November 1, 2003)
Amazon Reviews: Amazon.com
Book Info:
----------------------------------------------------------------
20. Ruminations on C++: A Decade of Programming Insight and Experience
Author: Andrew Koenig, Barbara E. Moo, Barbara E. (Editor) Moo
Publisher: Addison-Wesley Professional; 1st edition (August 7, 1996)
Amazon Reviews: Amazon.com
Book Info: Andrew是世界上屈指可数的C++专家.这是一本关于C++编程思想和程序设计技术而非语言细
节的著作.如果你已经具有一定的基础,这本书将教你在进行C++编程时应该怎样思考,应该如何表达解决方案
.整本书技术表达透彻,文字通俗易懂.Bjarne这样评价这本书:本书遍布"C++是什么,C++能够做什么"的真知
灼见.
----------------------------------------------------------------
21.Design Patterns: Elements of Reusable Object-Oriented software Author: Erich Gamma
Publisher: Addison Wesley Longman; (1998
Amazon Reviews: Amazon.com
Book Info: 设计可复用的面向对象的软件,你需要掌握设计模式.本书并非专为C++程序员而写,但它采
用了C++(以及Smalltalk)作为主要示例语言,C++程序员尤其易于从中受益.四位作者都是国际公认的面向对
象软件领域专家,他们将面向对象软件的设计经验作为设计模式详细记录下来.这本书影响是如此深远,以至
于四位作者以及本书都被昵称为GoF(Gang of Four).本书学院气息浓厚,行文风格严谨简洁,虽然它不如某些
讲解模式的书籍易读,但真正要精准地理解设计模式,本书是终极权威.学习设计模式,这本书需要一而再,再
而三的咀嚼.顺带一句:请将设计模式化作开拓思维的钥匙,切莫成为封闭思维的枷锁.
----------------------------------------------------------------
22.Efficient C++: Performance Programming Techniques
Author: Dov Bulka, David Mayhew
Publisher: Prentice Hall
Amazon Reviews: Amazon.com
Book Info: 这本超薄小书聚焦于高性能C++应用程序开发.两位作者都是IBM软件专家,都工作于对性能
要求极高的系统构建领域,本书是他们的经验之谈.也有人不喜欢这本书,因为它花了不少的篇幅讲述和C++无
关的东西,我却恰恰因为这一点而对这本书产生好感,正是这些东西让我开阔了眼界.
----------------------------------------------------------------------------------
23.Inside the C++ Object Model
Author: Stanley B.Lippman
Publisher: Addison-Wesley Pub Co
Published: May 3, 1996
Amazon Reviews: Amazon.com
Book Info: 从编译器的角度观察C++可以使你知其然并知其所以然.本书探讨了大量的C++面向对象程序
设计的底层运作机制,包括构造函数,函数,临时对象,继承,虚拟,模板的实例化,异常处理,运行期类型识别等
,另外还介绍了一些在实现C++对象模型过程中做出的权衡折衷.喜欢刨根问底的C++程序员可以从中了解了无
数的编译器解释源代码的细节,以及记忆体分配的细节..24.The Art of Assembly Language
Author: Randall Hyde
Amazon Reviews: Amazon.com
Book Info: 本书以X86系列微机为背景,从简单的Hello程序开始,系统而详细地阐述了X86微机汇编语言
编程的各种基础知识和编程技巧,内容涉及到数据表示,存储器管理,各种数据类型,过程,与汇编语言相关的
体系结构,控制结构,文件,宏指令,位处理指令,字符串指令,MMX指令,类和对象,以及混合语言编程等,尤其是
在高级汇编语言(HLA)方面,该书给予了细致深入的讲解.对于有意学习X86汇编语言编程的程序员来说,这是
一本难得的好书.
本书的作者Randall Hyde在大学中教授汇编语言十多年,并且开发了好几个商用软件,具有丰富的汇编语
言开发经验.该书的英文电子版受到了成千上万的网站和高级程序员的高度评价,已经成为了高级汇编语言编
程方面的一本经典之作.虽然该书的出版时间不长,但在Amazon上为该书作出评价的人很多,而且几乎所有的
人都给予5星的评价,可见其内容之好.可以相信,随着时间的推移,它在程序员中的影响会越来越大.
----------------------------------------------------------------
25.The Design and Implementation of the 4.4BSD Operating System
Auther:
Marshall Kirk McKusick, Consultant
Keith Bostic, Berkeley Software Design, Inc.
Michael J.Karels, Berkeley Software Design, Inc.
John S.Quarterman, Texas Internet Consulting
Publisher: Addison-Wesley Publishing Company
Published: 04/30/1996
Book Info: 是第一本完整描述伯克利最新版本4.4BSD设计和实现的权威性著作.书中介绍了4.4BSD的内
部结构和实现4.4BSD的系统功能中所用的概念,数据结构和算法.书中着重对4.4BSD 和 AT&T System V UNIX
版本的不同处作了较详细的描述,并对其设计思想及背景作了清晰的阐述.该书对研究,开发和使用 UNIX 系
统,特别是4.4BSD UNIX 实现中的一些新技术,新特点.有很大的参考价值.
----------------------------------------------------------------
26.John Lions:Lions’Commentary on UNIX 6th Edition with Source Code
Author: John Lions
Amazon Reviews: Amazon.com
Book Info: 在20世纪70年代和80年代这一时期,莱昂的几册<<源代码分析>>,曾是人们争相传看的UNIX
系统的"地下出版物".我们今天来审视这一著作,尽管其中的代码已属过时,但其注释者所作的大部分注释,依
然完美如初.要想学习操作系统原理,就必须阅读和理解源代码.莱昂的工作,使我们中间的大多数人都能达到
这一步.
Book Reviews:
本书中的材料确定是有点过时了,其内容不包括图形,网络以及1975年后出现的新事物.即使在1979年的
编译中也不再使用的线性搜索,基本数据结构和C代码还保留在本书的源代码中,而该代码面向的计算机非常
简单,只比存储器稍稍多一些.从中你会发现有很多粗糙之处.但是在代码中你也可以观察到其基本结构,该结
构沿用了很长时间,而且能够包容在计算环境中发生的巨大变化.在莱昂的分析中,你可以觉察到新鲜的,经常
提出问题的立场,其中的很多词语和思想都很适宜于教育和学习.莱昂非常清楚地赞赏他阅读的UNIX源代码,
但又立即指出其不足之处.他帮助他的学生理解蕴含在源代码中的很多思想和主题,也坦率地说明他对该代码
某些部分感到的困惑之处.此处重印的文献已经教育了一代人,它是计算机界中复印数量最多的一本书稿.将
此公开记录在案是件大好事.
----丹尼斯.M .里奇
最后我还想提及的是:现在,得到最广泛传播的一份地下计算机科学文献已经可以自由地使用了.我对
1977年中的那一天仍然是记忆犹新,那时我接到邮寄来的此书的第一份草稿,开始时我对此书并无很多期望,
但是最后却是逐字逐句进行了仔细阅读.20年之后,此书依旧是对一个实际操作系统工作的最好分析说明.
----肯?汤姆森
(汤姆森和里奇因为开发和实现UNIX操作系统而共同获得1983年ACM美国计算机协会图灵奖).
----------------------------------------------------------------
27.Operating Systems: Design and Implementation (Second Edition)
Author: Andrew S.Tanenbaum, Albert S.Woodhull
Publisher: Prentice Hall; 2nd edition (January 15, 1997)
Amazon Reviews: Amazon.com
Book Info: 本书是一本理论结合实践的杰出教材.作者不仅介绍了所有基本原理,如:进程,进程间通信,
输入/输出,虚拟存储,文件系统及系统安全,也介绍了线程概念,同时又详尽地讨论了MINIX系统(一种UNIX兼
容系统),使学生不仅能学到原理,还能通过使用MINIX来了解如何将这些原理应用到真实的操作系统中.作者
更新了所有原理性材料以反映该领域的新进展.基于POSIX的MINIX系统经修订后可运行在基于奔腾(Pentium)
的计算机上.MINIX代码可用于Ethernet和TCP/IP联网环境.每本书均附光盘,内含MINIX全部源码和可运行各
种计算机上的两个模拟程序.每章后均附思考题.
----------------------------------------------------------------
28.Modern Operating Systems (2nd Edition)
Author: Andrew Tanenbaum
Publisher: Prentice Hall
Amazon Reviews: Amazon.com
Book Info: 对于软件开发专家以及计算机专业的学生来说,<<现代操作系统>>给出了操作系统设计一个
概念上的全面见解,包括Unix/Linux和Windows 2000的详细个案研究.本书共分两部分,第一部分详尽讲述了
传统操作系统知识,包括进程,存储器管理,文件系统,I/O设备管理,死锁等内容;第二部分主要介绍了分布式
操作系统,包括层次协议,远程过程调用,互斥操作,分布式文件系统等专题.为加深概念的理解,本书还详细介
绍了四个操作系统,包括两个传统的系统UNIX和MS-DOS;两个分布式系统Amoeba和Mach.此外还简要介绍了
NFS,AFS,ISIS等其他几个系统.本书体系完整,内容丰富,叙述清晰,是大学计算机及相关专业学生不可多得的
教科书,对于从事计算机管理,开发,系统分析等职业的专业人员也是优秀的参考书.
----------------------------------------------------------------
29.Operating System Concepts
Author: Abraham Silberschatz, Greg Gagne, Peter Baer Galvin
Amazon Reviews: Amazon.com
Book Info: 本书是计算机类专业操作系统课程的一本经典教材,自第一版问世以来,经历了近20年的锤
炼,被认为是该课程教材的一本"圣经".它对操作系统的概念和基本原理给出了清晰的阐述.本书所涉及的基
本概念和算法均基于当前商用操作系统,并在非特定操作系统的通用环境中展开讲解.书中介绍了大量与流行
操作系统相关的实现技术,包括Solaris2,Linux,Windows NT,Windows 2000,OS/2和Apple Macintosh操作系
统.此版包括了线程,Windows 2000的新章节,并新增了客户/服务器
模型和网络文件系统,嵌入式操作系统,实时操作系统,分布式操作系统等.
----------------------------------------------------------------
30.Running MS-DOS
Author: Van Wolverton
Published: 18 November 1993
Book Info: MS-DOS 上的清晰工作!
经过10年无数次竞争,<
写作风格,上百张屏幕演示,使得<
读者和评论家那里获得过这么多的赞扬.
这本新的,10 周年纪念版本,包括关于 MS-DOS 6.2 最新版本的重要的信息.如果您仅仅只是买了一台
PC 机,或者只是升级到了一个新版本,<
实际上是由3本书合成的,包括:
MS-DOS 介绍,以及如何同您的计算机硬件相协调
一个关于了解和使用 MS-DOS 的完整制导
一个命令手册,里面有定义,例子和表格,帮您快速寻找信息!
----------------------------------------------------------------
31.Advanced Programming in the UNIX? Environment
Author: Richard W.Stevens, Stephen A.Rago
Publisher: Addison-Wesley Professional
Amazon Reviews: Amazon.com
Book Info: 与大多数其他操作系统类似,Unix对运行其上的程序提供了大量服务,此外,本书与其他Unix
编程书籍不同的是,本书除了讲述Unix系统的编程接口----即系统调用接口和由标准C函数库提供的大量函数
之外,还通过许多例子和基本原理对Unix编程环境做了更深入的解释和剖析,如怎样创建数据库,页面描述语
言的打印机驱动程序,现代拨号程序以及代理进程,处理机间通信,伪终端程序等.本书作者是Unix研究领域的
专家,而本书更被誉为是该领域的圣经宝典,相信每一位读者都会在学习本书的过程中体会到它的价值所在.
----------------------------------------------------------------
32.Unix Network Programming
Unix Network Programming, Volume.1: The Sockets Networking API, Third Edition
Author: W.Richard Stevens, Bill Fenner, Andrew M.Rudoff, Richard W.Stevens
Publisher: Addison-Wesley Professional
Amazon Reviews: Amazon.com
Book Info: 这是一本利用应用编程接口(API)编写法对计算机网络进行通信的网络编程的教程.所用的
API有两类: 基于BerkeleyUNIX操作系统的"Berkeley"套接字和基于AT&T开发的X Open传输接口XTI.本书分
四大部分:Ⅰ.引论和TCP/IP;Ⅱ.基本套接字(Sockets);Ⅲ.高级套接字;Ⅳ.XTI X/Open传输接口.四个附录:
A.IPv4,IPv6,ICMPv4和ICMPv6;B.虚拟网络;C.调试技术;D.一些关键源代码.全书内容全面,实用性强,是一本
极好的参考书.
UNIX Network Programming, Volume 2: Interprocess Communications (2nd Edition)
Author: W.Richard Stevens
Publisher: Addison-Wesley Professional
Amazon Reviews: Amazon.com
Book Info: 一种良好的进程间通信(IPC)形式是复杂精致的UNIX程序性能之关键.本书全面深入地介绍
了各种进程间通信形式,包括消息传递,同步,共享内存及远程调用(RPC).作者从介绍IPC的基础及其所要解决
的问题开始,逐步引导读者学习如何使System V IPC和新的Posix标准两者都达到极至.书中Pthread的内容有
较大的扩充,所附的许多例子反映多个线程而不是多个进程.读者通过本书将能掌握各种现行的IPC技术,其中
有:管道和FIFO;Posix和System V消息队列;互斥锁和条件变量;读写锁;记录上锁;Posix和System V信号灯
;Posix和System V共享内存;Solaris门和Sun RPC;IPC技术的性能测量.本书内容详尽且具有权威性,几乎每
章都有精选的习题,是计算机和网络专业高年级本科生和研究生的首选教材,本书也可作为网络研究和开发人
员的自学教材和参考书.
----------------------------------------------------------------
33.TCP/IP Illustrated
Web site: http://www.kohala.com/start/
TCP/IP Illustrated,Volume 1:The Protocols
Author: W.Richard Stevens
Publisher: Addison-Wesley
Amazon Reviews: Amazon.com
Book Info: <
协议以及它们如何在不同操作系统中运行.作者用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作
系统和TCP/IP实现之间传输的不同分组.对tcpdump输出的研究可以帮助理解不同协议如何工作.本书适合作
为计算机专业学生学习网络的教材和教师参考书.也适用于研究网络的技术人员.
TCP/IP Illustrated,Volume 2:The Implementation
Author: Gary R.Wright, W.Richard Stevens
Publisher: Addison-Wesley
Amazon Reviews: Amazon.com
Book Info: 本书完整而详细地介绍了TCP/IP协议是如何实现的.书中给出了约500个图例,15,000行实际
操作的C代码,采用举例教学的方法帮助你掌握TCP/IP实现.本书不仅说明了插口API和协议族的关系以及主机
实现与路由器实现的差别.还介绍了4.4BSD-Lite版的新的特点,如多播,长肥管道支持,窗口缩放,时间戳选项
以及其他主题等等.读者阅读本书时,应当具备卷1中阐述的关于TCP/IP的基本知识.本书适用于希望理解
TCP/TP协议如何实现的人,包括编写网络应用程序的程序员以及利用TCP/IP维护计算机网络的系统管理员.
TCP/IP Illstrated,Volume 3:TCP for Transactions,HTTP,NNTP,and the UNIX Domain Protocols
Author: W.Richard Stevens
Publisher: Addison-Wesley
Amazon Reviews: Amazon.com
Book Info: 本书是<
,使客户-服务器事务更快,更高效和更可靠;TCP/IP应用,主要是HTTP和NNTP;UNIX域协议,这些协议提供了进
程之间通信的一种手段.当客户与服务器进程在同一台主机上时,UNIX域协议通常要比TCP/IP快一倍.本书同
样采用了大量的实例和实现细节,并参考引用了卷2中的大量源程序.本书适用于希望理解TCP/IP如何工作的
人,包括编写网络应用程序的程序员以及利用TCP/IP维护计算机网络的系统管理员.
作者简介:
Gary R.Wright 研究TCP/IP多年.他是Connix公司的董事长,这个公司的基地在康涅狄格州,它提供
Internet接入和咨询服务.W.Richard Stevens(1951-1999)是一位非常受人尊敬的专家,除了<
三卷本外,他还有其他两部最为畅销的作品;<
----------------------------------------------------------------
34.Routing TCP/IP
CCIE Professional Development:Routing TCP/IP Volume 1
Author: Jeff Doyle
Publisher: Cisco Press; 1st edition (July 1, 1998)
Amazon Reviews: Amazon.com
Book Info: 本书是第一本详细而又完整地介绍互联网络内部网关路由选择协议(IGRP)的专业书籍,堪称
有关IGRP方面不可多得的经典之作.本书共分三个部分.第一部分主要介绍了网络和路由选择的基本知识,对
TCP/IP和静态,动态路由选择技术作了一个整体的回顾.第二部分是本书的精华,这一部分详细深入地讲述了
各种常用的内部网关路由选择协议,如静态路由,RIP,RIPv2,IGRP,EIGRP,OSPF,ISIS等,每一章除了对该协议
的实现机制和参数详尽阐述,使读者对协议的实现原理有一个清晰的理解外,还通过在实际网络环境中的实例
,详细地论述了该协议在Cisco路由器上的配置和故障处理方法,使读者获取大量解决实际问题的专业技能.第
三部分介绍了如缺省路由,路由过滤等多种有效的路由控制工具,用来创建和管理多个IP路由选择协议的协调
工作.本书不仅适合那些需要准备通过CCIE考试的考生,而且也适合任何需要完整理解TCP/IP内部路由选择协
议的网络设计和工程人员阅读.本书中对协议细节的讲解和对网络实例的探讨相信会让读者获益匪浅.
CCIE Professional Development Routing TCP/IP Volume 2
Author: Jeff Doyle, Jennifer DeHaven Carroll
Publisher: Cisco Press; 1st edition (April 11, 2001)
Amazon Reviews: Amazon.com
Book Info: 本书深入系统地阐述了TCP/IP路由技术,内容包括几种重要的网络协议,如外部网关协议
(EGP),边界网关协议(BGP4),以及相应的高级IP路由技术与应用――网络地址转换,IP组播路由技术,IPv6技
术,路由器管理等.本书共分9个章节,首先介绍并讨论了主题内容的基本原理,接着是设计用来展示真实网络
环境中相关概念的一系列配置范例,最后提供给读者经实践验证过的故障排除方法以解决网络可能会出现的
问题.重点介绍了自治系统之间的路由选择策略以及诸如组播和IPv6等更具挑战性的路由选择和实施技术.
----------------------------------------------------------------
35.Data and Computer Communications,Seventh Edition
Author: William Stallings
Amazon Reviews: Amazon.com
Book Info: 本书是著名计算机专业作家 William Stallings 的经典著作之一,内容涉及最基本的数据
通信原理,各种类型的计算机网络及多种网络协议和应用.这一版对原有内容做了彻底的修订和重组,使新版
对通信各专题的阐述更全面,更清晰.同时,新版加强了无线通信和组网,吉比特以太网,区分服务,MPLS和
TCP/IP实现细节等内容.此外,本书还包括词汇表,参考文献,缩写词对照表.每章都附有习题和建议,以便读者
进一步阅读.
----------------------------------------------------------------
36.Programming Pearls, 2nd Edition
Author: Jon Bentley
Publisher: Addison-Wesley Professional; 2 edition (September 27, 1999)
Amazon Reviews: Amazon.com
Book Info: 如果让程序员们列出他们最喜欢的书籍,Jon Bentley的<<编程珠玑>>通常可以位于经典之
列.如同珍珠来自于曾经折磨牡蛎的沙粒,程序设计的珍珠也来自曾经折磨程序员的实际问题.Bentley的珍珠
建立在坚实的工程学基础上,在洞察力和创造力的王国中为那些恼人的问题提供了独特而巧妙的解决方案.通
过一些精心设计的有趣而且颇具指导意义的程序,本书对众多实用程序设计技巧及基本设计原则作了清晰而
机智的描述.因此,<<编程珠玑>>得到各个层次程序员的青睐并不让人感觉意外.
为了反映当今的程序设计方法和环境,Bentley在本书中彻底更新了第一版里的大多数素材.此外,他还新
增加了以下三个方面的内容:1.测试,调试和计时 2.集合表示 3.字符中问题
对原来的所有程序都重新进行了改写,并生成了等量的新代码.您可以从本书网站
([urwww.programmingpearls.com)[/url]获取所有程序的C或C++实现.
Book Reviews:
<<编程珠玑>>第一版是我职业生涯早期阅读过的最有影响力的书籍之一,第一次从该书中学到的许多观
点很久以后仍然使我受益匪浅.Jon在第二版中对素材进行了大量更新,这些新例子的新鲜程度给我留下了深
刻的印象.
----Steve McConnell <
Complete>>等多部畅销书作者----------------------------------------------------------------
37.The Mythical Man-Month: Essays on Software Engineering, 20th Anniversary Edition
Author: Frederick P, Brooks,Jr.
Publisher: Addison-Wesley Professional; 1st edition (August 2, 1995)
Amazon Reviews: Amazon.com
Book Info: IBM大型电脑之父 Fred Brooks 二十余年开发经验的汇集,远谋深虑,字字珠玑.技术之巧与
人文之美的完美结合.本书自第一版以来,畅销二十余年不衰,是软件领域绝无仅有的必读经典.
作者简介:
Frederick P 曾荣获美国计算机领域最具声望的图灵奖(A.M.Turing Award)桂冠.美国计算机协会(ACM)
称赞他"对计算机体系结构,操作系统和软件工程做出了里程碑式的贡献."
Brooks 博士是北卡罗莱纳大学 Kenan-Flagler 商学院的计算机科学教授.他被认为是"IBM 360系统之
父",曾担任了360系统的项目经理,以及360操作系统项目设计阶段的经理.凭借在上述项目中的杰出贡献
,Brooks博士以及Bob Evans和Erich Bloch在1985年荣获了美国国家技术奖(National Medal of
Technology).Brooks博士早期曾担任IBM 公司Stretch和Harvest计算机的体系结构设计师.
Brooks 博士创立了北卡罗莱纳大学的计算机科学系,并在1964~1984年期间担任系主任.他还曾任职于
美国国家科技局和国防科学技术委员会.他目前的教学和研究方向是计算机体系结构,分子模型绘图和虚拟环
境设计.
----------------------------------------------------------------
38.The Pragmatic Programmer
Author: Andrew Hunt,David Thomas
Publisher: Addison Wesley
Published: November 24, 1999
Amazon Reviews: Amazon.com
Book Info: 本书直击编程阵地,穿过了日益增长的现代软件开发的规范和学术,对核心过程进行了审视
----该过程采取了供需结合的工作方式和令人欣喜的可维护代码.本书包含的内容从个人责任和职业发展到
保持代码的灵活性,使之易于改编和重用.
本书由各个相对独立的章节组成,其间不乏好玩的轶事,详细的实例和有趣的对话,描述了软件开发各个
方面的最好实践和主要缺陷.无论你是一个新入门的编码者,一个有经验的程序员,还是负责软件项目的经理,
通过每日学习这些课程,都会在个人生产力,准确率和工作满意度上有快速的增长.你所学到的技巧和开发习
惯和态度将为你在职业生涯中取得长期成功奠定基础.你将成为又一Pragmatic Programmer.
----------------------------------------------------------------
39.The Art of UNIX programming
Author: Eric S. Raymond
Publisher: Addison Wesley
Published: October 2, 2003
Amazon Reviews: Amazon.com
Book Info: 荣获美国Software Development Productivity Award大奖作品!
本书是作者封笔30年后历时5年创作而成,是一部难得的软件工程方面的佳作.作者首次将哲学,设计模式
,工具,文化和传统结合在一起,使得UNIX成为世界上最好且最具创新意义的软件,并展示了如何将其拓展到
Linux和当今的开源(open-source)运动中:通过取自最主要的开源项目中的示例,作者向UNIX和Linux编程人
员展示了如何更巧妙地创建软件,使其更雅致,更灵巧,更具可重用性且具有更长的生命期
本书主要介绍了Unix系统领域中的设计和开发哲学,思想文化体系,原则与经验,由公认的Unix编程大师,
开源运动领袖人物之一Eric S.Raymond倾力多年写作而成.包括Unix设计者在内的多位领域专家也为本书贡
献了宝贵的内容.本书内容涉及社群文化,软件开发设计与实现,覆盖面广,内容深邃,完全展现了作者极其深
厚的经验积累和领域智慧.
----------------------------------------------------------------
40.Peopleware:Productive Projects and Teams
Author: Tom DeMarco, Timothy Lister
Publisher: Dorset House Publishing Co
Published: February 28, 1999
Amazon Reviews: Amazon.com
Book Info: Tom Demarco 和Tim Lister 的"Peopleware:Productive Projects and Teams"第一版于
1987 年出版,专门讨论了软件开发和维护的团队管理问题,向传统的管理方法提出了挑战,推崇人本管理思想
,给予软件工人自由和信任.和<<人月神话>>一样,该书现在已经成为软件团队管理的经典之作.1995 年
,Larry Constantine 出版了一部题为"Constantine 论人件"的论文集,扩大了"人件"概念,把那些使用软件
的人也包括进来.1999 年2 月,<<人件>>第二版出版,增补了8 章新内容.这些增补的内容视角更加宽广,对比
较大型的组织中的团队如何运作进行了探索.
----------------------------------------------------------------
41.Computer graphics C Version 2nd ed
Author: Donald Heam, M.Pauline Baker
Publisher: Pearson US Imports & PHIPEs
Published: May 24, 1996
Amazon Reviews: Amazon.com
Book Info: 这是计算机图形学领域的一部经典之作,作者Foley,van Dam等是国际图形学界的著名学者,
学术带头人,而且本书英文版自出版以来,一直是各国大学计算机图形学课程的主要教科书.本书是高等院校
计算机专业本科生,研究生计算机图形学课程的理想教材,是相关领域专业人员开展研究工作的优秀参考书.
----------------------------------------------------------------
42.Tricks of the 3D Game Programming Gurus-Advanced 3D Graphics and Rasterization
Author: Andre LaMothe
Amazon Reviews: Amazon.com
Book Info: 本书是著名游戏程序设计类书籍作者Andre LaMothe的畅销书.在书中随处可见许多有趣但
又有一定难度的源程序.作者循循善诱地从程序设计的角度介绍了在Windows环境下进行游戏开发所需的全部
知识,包括Win32编程以及DirectX中所有主要组件(包括DirectDraw,DirectSound,DirectInput和
DirectMusic).书中还用单独的章节详细讲授了2D图形学和光栅化技术,游戏算法,多线程编程,文本游戏和解
析,人工智能(包括模糊逻辑,神经网络和遗传算法),物理建模(完全碰撞反应,动量传递和正反向运动学)及实
时模拟等游戏程序开发中的关键技术.
----------------------------------------------------------------
43.Compilers Principles, Techniques, and Tools
Author: Alfred V. Aho, Ravi Seth, Jeffrey D. Ullman
Publisher: Addison Wesley (January 1, 1986)
Amazon Reviews: Amazon.com
Book Info: 本书另外一个响亮的名字就是龙书.原因是这本书的封面上有条红色的龙.里面讲解的核心
编译原理至今都没有变过,所以一直到今天,它的价值都非凡.这本书最大的特点就是一开始就通过一个实际
的小例子,把编译原理的大致内容罗列出来,让很多编译原理的初学者很快心里有了个底,也知道为什么会有
这些理论,怎么运用这些理论.而这一点是我感觉国内的教材缺乏的东西,所以国内的教材都不是写给愿意自
学的读者,总之让人看了半天,却不知道里面的东西有什么用.
----------------------------------------------------------------
44.Computer Systems A Programmer's Perspective
Author: Randal E. Bryant, David R. O'Hallaron
Publisher: Prentice Hall; 1st edition (August 13, 2002)
Amazon Reviews: Amazon.com
Book Info: AMAZON五星图书,最伟大计算机科学教材之一
卡耐基梅隆大学计算机学院院长,IEEE和ACM双院士倾力推出
超过80所美国和世界一流大学计算机专业选用本书为教材
本书英文版久负盛名,被众多专业人士称为"最伟大的计算机教材"之一,著名的美国卡内基梅隆大学计算
机科学系一直将本书作为教材使用,程序员眼中的透彻讲述计算机系统的扛鼎之作.作者Randal E. Bryant是
卡耐基梅隆大学的计算机科学系主任,ACM和IEEE双院士(Fellow),其研究成果多次获得ACM和IEEE颁发的大奖
.本书共分十三章,分别介绍了信息的表示和处理,程序的机器级表示,处理器体系结构,存储器层次结构,静态
和动态链接,虚拟存储器,系统级I/O,网络编程和并发编程等精彩内容.其目的是解释计算机系统的所有本质
概念,并向读者展示这些概念是如何实际地影响应用程序的正确性,性能和实用性.与其他主要针对系统构造
人员的系统类书籍不同,这本书是写给程序员的,是从程序员的角度来描述的.本书为软件和硬件之间搭起了
一个桥梁,它给出了一种帮助读者分别从硬件和软件的角度去理解一个程序及其行为的途径,这也填补了国内
计算机系统教学中的一个空白.本书的最大优点是帮助读者理解概念,让读者很清楚地在脑海中构造一个层次
型的计算机系统,从最低层数据在内存中的表示(如我们一直陌生的浮点数表示),到流水线指令的构成,到虚
拟存储器,到编译系统,到动态加载库,到最后的用户应用.本书提供了大量的例子和练习及部分答案.尤其值
得一提的是,对于每一个基本概念都有相应的笔头或程序试验,加深读者的理解.
Book Reviews:
我坚信从程序员的角度来看计算机系统对教会学生计算机的内部结构非常有帮助.
----Kostas Daniilidis,宾夕法尼亚大学
这本书讲述事物的方法与众不同,但是和我想要的课程进行方式类似.
----John Greiner,Rice大学
这是一项出色的工作,是这一领域教学方法的一次革命.
----Michael Scott,罗切斯特大学
2008年10月12日星期日
Linux内核 main.c中的初始化
head.s在最后部分调用main.c中的start_kernel()函数,从而把控制权交给了它。所以启动程序从start_kernel()函数继续执行。这个函数是main.c乃至整个操作系统初始化的最重要的函数,一旦它执行完了,整个操作系统的初始化也就完成了。
如前所述,计算机在执行start_kernel()前处已经进入了386的保护模式,设立了中断向量表并部分初始化了其中的几项,建立了段和页机制,设立了九个段,把线性空间中用于存放系统数据和代码的地址映射到了物理空间的头4MB,可以说我们已经使386处理器完全进入了全面执行操作系统代码的状态。但直到目前为止,我们所做的一切可以说都是针对386处理器所做的工作,也就是说几乎所有的多任务操作系统只要使用386处理器,都需要作这一切。而一旦start_kernel()开始执行,Linux内核的真实面目就一步步的展现在你的眼前了。start_kernel()执行后,你就可以以一个用户的身份登录和使用Linux了。
让我们来看看start_kernel到底做了些什么,这里,通过介绍start_kernel()所调用的函数,我们来讨论start_kernel()的流程和功能。
我们仿照C语言函数的形式来进行这种描述,不过请注意,真正的start_kernel()函数调用子函数并不象我们在下面所写的这样简单,毕竟这本书的目的是帮助你深入分析Linux。我们只能给你提供从哪儿入手和该怎么看的建议,真正深入分析Linux,还需要你自己来研究代码。start_kernel()这个函数是在/init/main.c中,这里也只是将main.c中较为重要的函数列举出来。
start_kernel() /*定义于init/main.c */
{
……
setup_arch();
}
它主要用于对处理器、内存等最基本的硬件相关部分的初始化,如初始化处理器的类型(是在386,486,还是586的状态下工作,这是有必要的,比如说,Pentium芯片支持4MB大小的页,而386就不支持),初始化RAM盘所占用的空间(如果你安装了RAM盘的话)等。其中,setup_arch()给系统分配了intel系列芯片统一使用的几个I/O端口的口地址。
paging_init(); /*该函数定义于arch/i386/mm/init.c */
它的具体作用是把线性地址中尚未映射到物理地址上的部分通过页机制进行映射。这一部分在本书第六章有详细的描述,在这里需要特别强调的是,当paging_init()函数调用完后,页的初始化就整个完成了。
trap_init(); /*该函数在arch/i386/kernel/traps.c中定义*/
这个初始化程序是对中断向量表进行初始化,详见第四章。它通过调用set_trap_gate(或set_system_gate等)宏对中断向量表的各个表项填写相应的中断响应程序的偏移地址。
事实上,Linux操作系统仅仅在运行trap_init()函数前使用BIOS的中断响应程序(我们这里先不考虑V86模式)。一旦真正进入了Linux操作系统,BIOS的中断向量将不再使用。对于软中断,Linux提供一套调用十分方便的中断响应程序,对于硬件设备,Linux要求设备驱动程序提供完善的中断响应程序,而调用使用多个参数的BIOS中断就被这些中断响应程序完全代替了。
另外,在trap_init()函数里,还要初始化第一个任务的Ldt和TSS,把它们填入Gdt相应的表项中。第一个任务就是init_task这个进程,填写完后,还要把init_task的TSS和LDT描述符分别读入系统的TSS和LDT寄存器。
init_IRQ() /* 在arch/i386/kernel/irq.c中定义*/
这个函数也是与中断有关的初始化函数。不过这个函数与硬件设备的中断关系更密切一些。
我们知道intel的80386系列采用两片8259作为它的中断控制器。这两片级连的芯片一共可以提供16个引脚,其中15个与外部设备相连,一个用于级连。可是,从操作系统的角度来看,怎么知道这些引脚是否已经使用;如果一个引脚已被使用,Linux操作系统又怎么知道这个引脚上连的是什么设备呢?在内核中,同样是一个数组(静态链表)来纪录这些信息的。这个数组的结构在irq.h中定义:
struct irqaction {
void (*handler)(int, void *, struct pt_regs *);
unsigned long flags;
unsigned long mask;
const char *name;
void *dev_id;
struct irqaction *next;}
具体内容请参见第四章。我们来看一个例子:
static void math_error_irq(int cpl, void *dev_id, struct pt_regs *regs)
{
outb(0,0xF0);
if (ignore_irq13 || !hard_math)
return;
math_error();
}
static struct irqaction irq13 = { math_error_irq, 0, 0, "math error", NULL, NULL };
该例子就是这个数组结构的一个应用,这个中断是用于协处理器的。在init_irq()这个函数中,除了协处理器所占用的引脚,只初始化另外一个引脚,即用于级连的2引脚。不过,这个函数并不仅仅做这些,它还为两片8259分配了I/O地址,对应于连接在管脚上的硬中断,它初始化了从0x20开始的中断向量表的15个表项(386中断门),不过,这时的中断响应程序由于中断控制器的引脚还未被占用,自然是空程序了。当我们确切地知道了一个引脚到底连接了什么设备,并知道了该设备的驱动程序后,使用setup_x86_irq这个函数填写该引脚对应的386的中断门时,中断响应程序的偏移地址才被填写进中断向量表。
sched_init() /*在/kernel/sched.c中定义*/
看到这个函数的名字可能令你精神一振,终于到了进程调度部分了,但在这里,你非但看不到进程调度程序的影子,甚至连进程都看不到一个,这个程序是名副其实的初始化程序:仅仅为进程调度程序的执行做准备。它所做的具体工作是调用init_bh函数(在kernel/softirq.c中)把timer,tqueue,immediate三个任务队列加入下半部分的数组。
time_init()/*在arch/i386/kernel/time.c中定义*/
时间在操作系统中是个非常重要的概念。特别是在Linux,Unix这种多任务的操作系统中它更是作为主线索贯穿始终,之所以这样说,是因为无论进程调度(特别是时间片轮转算法)还是各种守护进程(也可以称为系统线程,如页表刷新的守护进程)都是根据时间运作的。可以说,时间是他们运行的基准。那么,在进程和线程没有真正启动之前,设定系统的时间就是一件理所当然的事情了。
我们知道计算机中使用的时间一般情况下是与现实世界的时间一致的。当然,为了避开CIH,把时间跳过每月26号也是种明智的选择。不过如果你在银行或证交所工作,你恐怕就一定要让你计算机上的时钟与挂在墙上的钟表分秒不差了。还记得CMOS吗?计算机的时间标准也是存在那里面的。所以,我们首先通过get_cmos_time()函数设定Linux的时间,不幸的是,CMOS提供的时间的最小单位是秒,这完全不能满足需要,否则CPU的频率1赫兹就够了。Linux要求系统中的时间精确到纳秒级,所以,我们把当前时间的纳秒设置为0。
完成了当前时间的基准的设置,还要完成对8259的一号引脚上的8253(计时器)的中断响应程序的设置,即把它的偏移地址注册到中断向量表中去。
parse_options() /*在main.c中定义*/
这个函数把启动时得到的参数如debug,init等等从命令行的字符串中分离出来,并把这些参数赋给相应的变量。这其实是一个简单的词法分析程序。
console_init() /*在linux/drivers/char/tty_io.c中定义*/
这个函数用于对终端的初始化。在这里定义的终端并不是一个完整意义上的TTY设备,它只是一个用于打印各种系统信息和有可能发生的错误的出错信息的终端。真正的TTY设备以后还会进一步定义。
kmalloc_init() /*在linux/mm/kmalloc.c中定义*/
kmalloc代表的是kernel_malloc的意思,它是用于内核的内存分配函数。而这个针对kmalloc的初始化函数用来对内存中可用内存的大小进行检查,以确定kmalloc所能分配的内存的大小。所以,这种检查只是检测当前在系统段内可分配的内存块的大小,具体内容参见第六章内存分配与回收一节。
下面的几个函数是用来对Linux的文件系统进行初始化的,为了便于理解,这里需要把Linux的文件系统的机制稍做介绍。不过,这里是很笼统的描述,目的只在于使我们对初始化的解释工作能进行下去,详细内容参见第八章的虚拟文件系统。
虚拟文件系统是一个用于消灭不同种类的实际文件系统间(相对于VFS而言,如ext2,fat等实际文件系统存在于某个磁盘设备上)差别的接口层。在这里,您不妨把它理解为一个存放在内存中的文件系统。它具体的作用非常明显:Linux对文件系统的所有操作都是靠VFS实现的。它把系统支持的各种以不同形式存放于磁盘上或内存中(如proc文件系统)的数据以统一的形式调入内存,从而完成对其的读写操作。(Linux可以同时支持许多不同的实际文件系统,就是说,你可以让你的一个磁盘分区使用windows的FAT文件系统,一个分区使用Unix的SYS5文件系统,然后可以在这两个分区间拷贝文件)。为了完成以及加速这些操作,VFS采用了块缓存,目录缓存(name_cach),索引节点(inode)缓存等各种机制,以下的这些函数,就是对这些机制的初始化。
inode_init() /*在Linux/fs/inode.c中定义*/
这个函数是对VFS的索引节点管理机制进行初始化。这个函数非常简单:把用于索引节点查找的哈希表置入内存,再把指向第一个索引节点的全局变量置为空。
name_cache_init() /*在linux/fs/dcache.c中定义*/
这个函数用来对VFS的目录缓存机制进行初始化。先初始化LRU1链表,再初始化LRU2链表。
Buffer_init()/*在linux/fs/buffer.c中定义*/
这个函数用来对用于指示块缓存的buffer free list初始化。
mem_init() /* 在arch/i386/mm/init.c中定义*/
启动到了目前这种状态,只剩下运行/etc下的启动配置文件。这些文件一旦运行,启动的全过程就结束了,系统也终将进入我们所期待的用户态。现在,让我们回顾一下,到目前为止,我们到底做了哪些工作。
其实,启动的每一个过程都有相应的程序在屏幕上打印与这些过程相应的信息。我们回顾一下这些信息,整个启动的过程就一目了然了。
当然,你的计算机也许速度很快,你甚至来不及看清这些信息,系统就已经就绪,“Login:”就已经出现了,不要紧,登录以后,你只要打一条dmesg | more命令,所有这些信息就会再现在屏幕上。
【Loading ……】出自bootsect.S ,表明内核正被读入。
【uncompress ……】很多情况下,内核是以压缩过的形式存放在磁盘上的,这里是解压缩的过程。
下面这部分信息是在main.c的start_kernel函数被调用时显示的。
【 Linux version 2.2.6 (root@lance) (gcc version 2.7.2.3)】Linux的版本信息和编译该内核时所用的gcc的版本。
【 Detected 199908264 Hz processor】调用init_time()时打出的信息。
【Console:colour VGA+ 80x25,1 virtaul console(max 63)】调用 console_init()打出的信息 。初始化的终端屏幕使用彩色VGA模式,最大可以支持63个终端。
【 Memory: 63396k/65536k available (848k kernel code, 408k reserved, 856k data)】调用 init_mem()时打印的信息。内存共计65536K,其中空闲内存为63396K,已经使用的内存中,有848K用于存放内核代码,404K保留,856K用于内核数据。
【 VFS:Diskquotas version dquot_6.4.0 initialized】调用dquote_init()打出的信息 。quota是用来分配用户磁盘定额的程序。关于这个程序请参看第八章。
以下是对设备的初始化 :
【 PCI: PCI BIOS revision 2.10 entry at 0xfd8d1 |
PCI: Using configuration type 1 |
PCI: Probing PCI hardware 】调用pci_init()函数时显示的信息。
【 Linux NET4.0 for Linux 2.2
Based upon Swansea University Computer Society NET3.039
NET4: Unix domain sockets 1.0 for Linux NET4.0.
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP】调用socket_init()函数时打印的信息。使用Linux的4.0版本的网络包,采用sockets 1.0 和1.0版本的TCP/IP协议,TCP/IP协议中包含有ICMP,UDP,TCP三组协议。
【 Detected PS/2 Mouse Port。
Sound initialization started
Sound initialization complete
Floppy drive(s): fd0 is 1.44M
Floppy drive(s): fd0 is 1.44M
FDC 0 is a National Semiconductor PC87306 】调用device_setup()函数时打印的信息。包括对ps/2型鼠标,声卡和软驱的初始化。
看完上面这一部分代码和与之相应的信息,你应该发现,这些初始化程序并没有完成操作系统的各个部分的初始化,比如说,文件系统的初始化只是初始化了几个内存中的数据结构,而更关键的文件系统的安装还没有涉及,其实,这是在init进程建立后完成的。下面,就是start_kernel()的最后一部分内容。
如前所述,计算机在执行start_kernel()前处已经进入了386的保护模式,设立了中断向量表并部分初始化了其中的几项,建立了段和页机制,设立了九个段,把线性空间中用于存放系统数据和代码的地址映射到了物理空间的头4MB,可以说我们已经使386处理器完全进入了全面执行操作系统代码的状态。但直到目前为止,我们所做的一切可以说都是针对386处理器所做的工作,也就是说几乎所有的多任务操作系统只要使用386处理器,都需要作这一切。而一旦start_kernel()开始执行,Linux内核的真实面目就一步步的展现在你的眼前了。start_kernel()执行后,你就可以以一个用户的身份登录和使用Linux了。
让我们来看看start_kernel到底做了些什么,这里,通过介绍start_kernel()所调用的函数,我们来讨论start_kernel()的流程和功能。
我们仿照C语言函数的形式来进行这种描述,不过请注意,真正的start_kernel()函数调用子函数并不象我们在下面所写的这样简单,毕竟这本书的目的是帮助你深入分析Linux。我们只能给你提供从哪儿入手和该怎么看的建议,真正深入分析Linux,还需要你自己来研究代码。start_kernel()这个函数是在/init/main.c中,这里也只是将main.c中较为重要的函数列举出来。
start_kernel() /*定义于init/main.c */
{
……
setup_arch();
}
它主要用于对处理器、内存等最基本的硬件相关部分的初始化,如初始化处理器的类型(是在386,486,还是586的状态下工作,这是有必要的,比如说,Pentium芯片支持4MB大小的页,而386就不支持),初始化RAM盘所占用的空间(如果你安装了RAM盘的话)等。其中,setup_arch()给系统分配了intel系列芯片统一使用的几个I/O端口的口地址。
paging_init(); /*该函数定义于arch/i386/mm/init.c */
它的具体作用是把线性地址中尚未映射到物理地址上的部分通过页机制进行映射。这一部分在本书第六章有详细的描述,在这里需要特别强调的是,当paging_init()函数调用完后,页的初始化就整个完成了。
trap_init(); /*该函数在arch/i386/kernel/traps.c中定义*/
这个初始化程序是对中断向量表进行初始化,详见第四章。它通过调用set_trap_gate(或set_system_gate等)宏对中断向量表的各个表项填写相应的中断响应程序的偏移地址。
事实上,Linux操作系统仅仅在运行trap_init()函数前使用BIOS的中断响应程序(我们这里先不考虑V86模式)。一旦真正进入了Linux操作系统,BIOS的中断向量将不再使用。对于软中断,Linux提供一套调用十分方便的中断响应程序,对于硬件设备,Linux要求设备驱动程序提供完善的中断响应程序,而调用使用多个参数的BIOS中断就被这些中断响应程序完全代替了。
另外,在trap_init()函数里,还要初始化第一个任务的Ldt和TSS,把它们填入Gdt相应的表项中。第一个任务就是init_task这个进程,填写完后,还要把init_task的TSS和LDT描述符分别读入系统的TSS和LDT寄存器。
init_IRQ() /* 在arch/i386/kernel/irq.c中定义*/
这个函数也是与中断有关的初始化函数。不过这个函数与硬件设备的中断关系更密切一些。
我们知道intel的80386系列采用两片8259作为它的中断控制器。这两片级连的芯片一共可以提供16个引脚,其中15个与外部设备相连,一个用于级连。可是,从操作系统的角度来看,怎么知道这些引脚是否已经使用;如果一个引脚已被使用,Linux操作系统又怎么知道这个引脚上连的是什么设备呢?在内核中,同样是一个数组(静态链表)来纪录这些信息的。这个数组的结构在irq.h中定义:
struct irqaction {
void (*handler)(int, void *, struct pt_regs *);
unsigned long flags;
unsigned long mask;
const char *name;
void *dev_id;
struct irqaction *next;}
具体内容请参见第四章。我们来看一个例子:
static void math_error_irq(int cpl, void *dev_id, struct pt_regs *regs)
{
outb(0,0xF0);
if (ignore_irq13 || !hard_math)
return;
math_error();
}
static struct irqaction irq13 = { math_error_irq, 0, 0, "math error", NULL, NULL };
该例子就是这个数组结构的一个应用,这个中断是用于协处理器的。在init_irq()这个函数中,除了协处理器所占用的引脚,只初始化另外一个引脚,即用于级连的2引脚。不过,这个函数并不仅仅做这些,它还为两片8259分配了I/O地址,对应于连接在管脚上的硬中断,它初始化了从0x20开始的中断向量表的15个表项(386中断门),不过,这时的中断响应程序由于中断控制器的引脚还未被占用,自然是空程序了。当我们确切地知道了一个引脚到底连接了什么设备,并知道了该设备的驱动程序后,使用setup_x86_irq这个函数填写该引脚对应的386的中断门时,中断响应程序的偏移地址才被填写进中断向量表。
sched_init() /*在/kernel/sched.c中定义*/
看到这个函数的名字可能令你精神一振,终于到了进程调度部分了,但在这里,你非但看不到进程调度程序的影子,甚至连进程都看不到一个,这个程序是名副其实的初始化程序:仅仅为进程调度程序的执行做准备。它所做的具体工作是调用init_bh函数(在kernel/softirq.c中)把timer,tqueue,immediate三个任务队列加入下半部分的数组。
time_init()/*在arch/i386/kernel/time.c中定义*/
时间在操作系统中是个非常重要的概念。特别是在Linux,Unix这种多任务的操作系统中它更是作为主线索贯穿始终,之所以这样说,是因为无论进程调度(特别是时间片轮转算法)还是各种守护进程(也可以称为系统线程,如页表刷新的守护进程)都是根据时间运作的。可以说,时间是他们运行的基准。那么,在进程和线程没有真正启动之前,设定系统的时间就是一件理所当然的事情了。
我们知道计算机中使用的时间一般情况下是与现实世界的时间一致的。当然,为了避开CIH,把时间跳过每月26号也是种明智的选择。不过如果你在银行或证交所工作,你恐怕就一定要让你计算机上的时钟与挂在墙上的钟表分秒不差了。还记得CMOS吗?计算机的时间标准也是存在那里面的。所以,我们首先通过get_cmos_time()函数设定Linux的时间,不幸的是,CMOS提供的时间的最小单位是秒,这完全不能满足需要,否则CPU的频率1赫兹就够了。Linux要求系统中的时间精确到纳秒级,所以,我们把当前时间的纳秒设置为0。
完成了当前时间的基准的设置,还要完成对8259的一号引脚上的8253(计时器)的中断响应程序的设置,即把它的偏移地址注册到中断向量表中去。
parse_options() /*在main.c中定义*/
这个函数把启动时得到的参数如debug,init等等从命令行的字符串中分离出来,并把这些参数赋给相应的变量。这其实是一个简单的词法分析程序。
console_init() /*在linux/drivers/char/tty_io.c中定义*/
这个函数用于对终端的初始化。在这里定义的终端并不是一个完整意义上的TTY设备,它只是一个用于打印各种系统信息和有可能发生的错误的出错信息的终端。真正的TTY设备以后还会进一步定义。
kmalloc_init() /*在linux/mm/kmalloc.c中定义*/
kmalloc代表的是kernel_malloc的意思,它是用于内核的内存分配函数。而这个针对kmalloc的初始化函数用来对内存中可用内存的大小进行检查,以确定kmalloc所能分配的内存的大小。所以,这种检查只是检测当前在系统段内可分配的内存块的大小,具体内容参见第六章内存分配与回收一节。
下面的几个函数是用来对Linux的文件系统进行初始化的,为了便于理解,这里需要把Linux的文件系统的机制稍做介绍。不过,这里是很笼统的描述,目的只在于使我们对初始化的解释工作能进行下去,详细内容参见第八章的虚拟文件系统。
虚拟文件系统是一个用于消灭不同种类的实际文件系统间(相对于VFS而言,如ext2,fat等实际文件系统存在于某个磁盘设备上)差别的接口层。在这里,您不妨把它理解为一个存放在内存中的文件系统。它具体的作用非常明显:Linux对文件系统的所有操作都是靠VFS实现的。它把系统支持的各种以不同形式存放于磁盘上或内存中(如proc文件系统)的数据以统一的形式调入内存,从而完成对其的读写操作。(Linux可以同时支持许多不同的实际文件系统,就是说,你可以让你的一个磁盘分区使用windows的FAT文件系统,一个分区使用Unix的SYS5文件系统,然后可以在这两个分区间拷贝文件)。为了完成以及加速这些操作,VFS采用了块缓存,目录缓存(name_cach),索引节点(inode)缓存等各种机制,以下的这些函数,就是对这些机制的初始化。
inode_init() /*在Linux/fs/inode.c中定义*/
这个函数是对VFS的索引节点管理机制进行初始化。这个函数非常简单:把用于索引节点查找的哈希表置入内存,再把指向第一个索引节点的全局变量置为空。
name_cache_init() /*在linux/fs/dcache.c中定义*/
这个函数用来对VFS的目录缓存机制进行初始化。先初始化LRU1链表,再初始化LRU2链表。
Buffer_init()/*在linux/fs/buffer.c中定义*/
这个函数用来对用于指示块缓存的buffer free list初始化。
mem_init() /* 在arch/i386/mm/init.c中定义*/
启动到了目前这种状态,只剩下运行/etc下的启动配置文件。这些文件一旦运行,启动的全过程就结束了,系统也终将进入我们所期待的用户态。现在,让我们回顾一下,到目前为止,我们到底做了哪些工作。
其实,启动的每一个过程都有相应的程序在屏幕上打印与这些过程相应的信息。我们回顾一下这些信息,整个启动的过程就一目了然了。
当然,你的计算机也许速度很快,你甚至来不及看清这些信息,系统就已经就绪,“Login:”就已经出现了,不要紧,登录以后,你只要打一条dmesg | more命令,所有这些信息就会再现在屏幕上。
【Loading ……】出自bootsect.S ,表明内核正被读入。
【uncompress ……】很多情况下,内核是以压缩过的形式存放在磁盘上的,这里是解压缩的过程。
下面这部分信息是在main.c的start_kernel函数被调用时显示的。
【 Linux version 2.2.6 (root@lance) (gcc version 2.7.2.3)】Linux的版本信息和编译该内核时所用的gcc的版本。
【 Detected 199908264 Hz processor】调用init_time()时打出的信息。
【Console:colour VGA+ 80x25,1 virtaul console(max 63)】调用 console_init()打出的信息 。初始化的终端屏幕使用彩色VGA模式,最大可以支持63个终端。
【 Memory: 63396k/65536k available (848k kernel code, 408k reserved, 856k data)】调用 init_mem()时打印的信息。内存共计65536K,其中空闲内存为63396K,已经使用的内存中,有848K用于存放内核代码,404K保留,856K用于内核数据。
【 VFS:Diskquotas version dquot_6.4.0 initialized】调用dquote_init()打出的信息 。quota是用来分配用户磁盘定额的程序。关于这个程序请参看第八章。
以下是对设备的初始化 :
【 PCI: PCI BIOS revision 2.10 entry at 0xfd8d1 |
PCI: Using configuration type 1 |
PCI: Probing PCI hardware 】调用pci_init()函数时显示的信息。
【 Linux NET4.0 for Linux 2.2
Based upon Swansea University Computer Society NET3.039
NET4: Unix domain sockets 1.0 for Linux NET4.0.
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP】调用socket_init()函数时打印的信息。使用Linux的4.0版本的网络包,采用sockets 1.0 和1.0版本的TCP/IP协议,TCP/IP协议中包含有ICMP,UDP,TCP三组协议。
【 Detected PS/2 Mouse Port。
Sound initialization started
Sound initialization complete
Floppy drive(s): fd0 is 1.44M
Floppy drive(s): fd0 is 1.44M
FDC 0 is a National Semiconductor PC87306 】调用device_setup()函数时打印的信息。包括对ps/2型鼠标,声卡和软驱的初始化。
看完上面这一部分代码和与之相应的信息,你应该发现,这些初始化程序并没有完成操作系统的各个部分的初始化,比如说,文件系统的初始化只是初始化了几个内存中的数据结构,而更关键的文件系统的安装还没有涉及,其实,这是在init进程建立后完成的。下面,就是start_kernel()的最后一部分内容。
Plan ९ 的八卦
在 Windows 下喜欢用 FTP 的同学抱怨 Linux 下面没有如 LeapFTP 那样的方便的工具. 在苹果下面用惯了 Cyberduck 的同学可能也会抱怨 Linux 下面使用 FTP 和 SFTP 是一件麻烦的事情. 其实一点都不麻烦, 因为在 LINUX 系统上压根就不需要用 FTP. 为什么呢? 因为一行简单的配置之后, 你就可以像使用本机文件一样使用远程的任何文件. 无论是想编辑, 查看还是删除重命名, 都和本机文件一样的用. 这么神奇的功能到底如何使用呢, 待我一一道来.
首先, 如果你的内核版本是 2.6.14 或者更新(uname -r 可以查看你的内核版本), 你的机器上的已经有了这个支持了. 在这种情况下, 你可以使用:
sudo modprobe fuse
激活内核模块. 然后, 比如说, 你想SSH远程 remote.com 上的 /dir 目录, 作为本机的 ldir 目录, 你可以使用:
sshfs name@remote.com:/dir /ldir
然后, 您就可以完全在 ldir 目录下操作任何的远程机器上的文件了. 是不是很简单 :)
如果要使用 ftp, 我们要使用一个叫做 curlftpfs 的开源软件. 幸运的是, 你可以直接使用 apt-get install curlftpfs 直接得到他.
安装结束后, 我们依然使用
curlftpfs ftp://user:pass@ftp.remote.com/dir ldir/
就可以把远程的目录当成本地的目录一样使用的. 拷贝啊重命名啊都可以. (当远程的内容直接能被你访问的时候, 谁拷贝啊 :)
说到这里, 聪明的读者肯定要说: 靠, 远程的文件都能当成本机的用, 那太好了, 整个互联网就是我的磁盘嘛. 你还真说对了, 对于一个用户来说, 协议是不重要的, 重要的是数据. Gmail 不是有N个Gb的大小么, 让我们直接把 gmail 当磁盘好了. 于是有了 Gmail FS. 这样, 你可以给你的邮件标题做支持正则表达式的查找噢 :)
除此, 还有 wikipediaFS, 可以用自己喜欢的编辑器直接编辑维基百科的文章. 还有 flickrFS. 直接用自己喜欢的编辑器可以编辑图像元信息, 还能 chmod 754 让图像只能被朋友访问噢 :)
以上的这些酷实现, 都是 FUSE 这个内核模块作为基础支持的. 那么, 这个牛逼的网络也是文件的点子是哪个牛逼的人想出来的呢? 答案是 UNIX 的发源地, 贝尔实验室. 确切的说, 是在设计 UNIX 的继承者– Plan 9 的过程中提出来的. (小八卦: UTF-8, 就是世界上现在最通用的字符编码体系, 就是 Plan 9 操作系统的一个副产品).
一切都是文件这个点子倒不是什么新的点子, 在 The Unix Programming Environment 这本圣经里面就旗帜鲜明的打出 “UNIX下一切都是文件”的旗号. 但是毕竟旗号是旗号, 现实是现实. 关于文件的抽象在其后的发展中发现了这样那样的局限, 于是恶名远扬的 ioctl 函数被引进系统. 所以口号是口号, 实现是实现. 显然当初设计 UNIX 的几个哥们很不满意, 所以搞了一个 Plan 9 (搞 Plan 9 的人就是写 The Unix Programming Environment 的人). 在 Plan 9 系统中, 一切都是文件, 显卡是文件, 内存是文件, 进程是文件, 网络是文件…
等等, 熟悉 Linux 的用户要说了, 在 Linux 下面, 进程的确是文件啊. ls /proc 就能看到当前所有的进程, 不也是文件么. 是呀, Linux 这个就是和 Plan 9 学来的. 但是 Linux 学得不彻底, 因为这个文件系统的访问接口并不完整: 你不能通过 rm 一个文件杀死一个进程. 也不能通过 cp 拷贝出一个进程. 而在 Plan 9 上, 你不光能通过普通的文件操作命令去控制进程, 你还能 mv 一个进程. 我们刚才说了, 进程就是文件, 还能把其他机器上的文件当成本机一样用. 屏幕前聪明的你肯定一下子悟到了: 一定这居然是一个分布式的操作系统啊! 在这个系统里, 进程可以被其他计算机看到, 并且控制. 而管道可以横跨不同机器的不同进程, 这简直是把单机的概念都给抹杀了, 简直就是”网络就是计算机啊”.
熟悉互联网的读者都知道最近炒得很热的云计算啥的, 对用户无非就是互联网作为硬盘, 对公司无非就是分布式的操作系统协同工作, 在屏幕前的您肯定如我一样, 一拍大腿说: 靠, 贝尔实验室养得不是计算机科学家, 而是一大批未来学家啊. 30多年前人家搞互联网, 而今我们用互联网. 20年前人家用GUI, 如今我们用GUI. 10年前人家搞云计算, 而今我们炒概念闲扯淡. 差距啊.
首先, 如果你的内核版本是 2.6.14 或者更新(uname -r 可以查看你的内核版本), 你的机器上的已经有了这个支持了. 在这种情况下, 你可以使用:
sudo modprobe fuse
激活内核模块. 然后, 比如说, 你想SSH远程 remote.com 上的 /dir 目录, 作为本机的 ldir 目录, 你可以使用:
sshfs name@remote.com:/dir /ldir
然后, 您就可以完全在 ldir 目录下操作任何的远程机器上的文件了. 是不是很简单 :)
如果要使用 ftp, 我们要使用一个叫做 curlftpfs 的开源软件. 幸运的是, 你可以直接使用 apt-get install curlftpfs 直接得到他.
安装结束后, 我们依然使用
curlftpfs ftp://user:pass@ftp.remote.com/dir ldir/
就可以把远程的目录当成本地的目录一样使用的. 拷贝啊重命名啊都可以. (当远程的内容直接能被你访问的时候, 谁拷贝啊 :)
说到这里, 聪明的读者肯定要说: 靠, 远程的文件都能当成本机的用, 那太好了, 整个互联网就是我的磁盘嘛. 你还真说对了, 对于一个用户来说, 协议是不重要的, 重要的是数据. Gmail 不是有N个Gb的大小么, 让我们直接把 gmail 当磁盘好了. 于是有了 Gmail FS. 这样, 你可以给你的邮件标题做支持正则表达式的查找噢 :)
除此, 还有 wikipediaFS, 可以用自己喜欢的编辑器直接编辑维基百科的文章. 还有 flickrFS. 直接用自己喜欢的编辑器可以编辑图像元信息, 还能 chmod 754 让图像只能被朋友访问噢 :)
以上的这些酷实现, 都是 FUSE 这个内核模块作为基础支持的. 那么, 这个牛逼的网络也是文件的点子是哪个牛逼的人想出来的呢? 答案是 UNIX 的发源地, 贝尔实验室. 确切的说, 是在设计 UNIX 的继承者– Plan 9 的过程中提出来的. (小八卦: UTF-8, 就是世界上现在最通用的字符编码体系, 就是 Plan 9 操作系统的一个副产品).
一切都是文件这个点子倒不是什么新的点子, 在 The Unix Programming Environment 这本圣经里面就旗帜鲜明的打出 “UNIX下一切都是文件”的旗号. 但是毕竟旗号是旗号, 现实是现实. 关于文件的抽象在其后的发展中发现了这样那样的局限, 于是恶名远扬的 ioctl 函数被引进系统. 所以口号是口号, 实现是实现. 显然当初设计 UNIX 的几个哥们很不满意, 所以搞了一个 Plan 9 (搞 Plan 9 的人就是写 The Unix Programming Environment 的人). 在 Plan 9 系统中, 一切都是文件, 显卡是文件, 内存是文件, 进程是文件, 网络是文件…
等等, 熟悉 Linux 的用户要说了, 在 Linux 下面, 进程的确是文件啊. ls /proc 就能看到当前所有的进程, 不也是文件么. 是呀, Linux 这个就是和 Plan 9 学来的. 但是 Linux 学得不彻底, 因为这个文件系统的访问接口并不完整: 你不能通过 rm 一个文件杀死一个进程. 也不能通过 cp 拷贝出一个进程. 而在 Plan 9 上, 你不光能通过普通的文件操作命令去控制进程, 你还能 mv 一个进程. 我们刚才说了, 进程就是文件, 还能把其他机器上的文件当成本机一样用. 屏幕前聪明的你肯定一下子悟到了: 一定这居然是一个分布式的操作系统啊! 在这个系统里, 进程可以被其他计算机看到, 并且控制. 而管道可以横跨不同机器的不同进程, 这简直是把单机的概念都给抹杀了, 简直就是”网络就是计算机啊”.
熟悉互联网的读者都知道最近炒得很热的云计算啥的, 对用户无非就是互联网作为硬盘, 对公司无非就是分布式的操作系统协同工作, 在屏幕前的您肯定如我一样, 一拍大腿说: 靠, 贝尔实验室养得不是计算机科学家, 而是一大批未来学家啊. 30多年前人家搞互联网, 而今我们用互联网. 20年前人家用GUI, 如今我们用GUI. 10年前人家搞云计算, 而今我们炒概念闲扯淡. 差距啊.
2008年9月29日星期一
计算机编年史
一、机械计算机时代的拓荒者
在西欧,由中世纪进入文艺复兴时期的社会大变革,大大促进了自然科学技术的发展,人们长期被神权压抑的创造力得到空前释放。其中制造一台能帮助人进行计算的机器,就是最耀眼的思想火花之一。从那时起,一个又一个科学家为把这一思想火花变成引导人类进入自由王国的火炬而不懈努力。但限于当时的科技总体水平,大都失败了,这就是拓荒者的共同命运:往往见不到丰硕的果实。后人在享用这甜美的时候,应该能从中品出一些汗水与泪水的滋味……
1614: 苏格兰人John Napier (1550-1617)发表了一篇论文,其中提到他发明了一种可以计算四则运算和方根运算的精巧装置。
1623: Wilhelm Schickard (1592-1635)制作了一个能进行六位以内数加减法,并能通过铃声输出答案的"计算钟"。通过转动齿轮来进行操作。
1625: William Oughtred (1575-1660) 发明计算尺
1642: 法国数学家Pascal 在WILLIAM Oughtred计算尺的基础上将计算尺加以改进,能进行八位计算。并且还卖出了许多,成为一种时髦的商品。
在此插入〈PASCAL像〉
1668: 英国人Samuel Morl和 (1625-1695)制作了一个非十进制的加法装置,适宜计算钱币。
1671: 德国数学家Gottfried Leibniz设计了一架可以进行乘法,最终答案可以最大达到16位。
1775: 英国Charles制作成功了一台与 Leibniz's 的计算机类似的机器。但更先进一些。
1776: 德国人Mathieus Hahn成功的制作了一台乘法器。
1801: Joseph-Maire Jacuard 开发了一台能用穿孔卡片控制的自动织布机。
1820: 法国人Charles Xavier Thomas de Colmar (1785-1870),制作成功第一台成品计算机,非常的可靠,可以放在桌面上,在后来的90多年间一直在市场上出售。
1822: 英国人Charles Babbage (1792-1871)设计了差分机和分析机,其中设计的理论非常的超前,类似于百年后的电子计算机,特别是利用卡片输入程序和数据的设计被后人所采用。
1832: Babbage 和Joseph Clement 制成了一个差分机的成品,开始可以进行6位数的运算。后来发展到20位、30位,尺寸将近一个房子那么大。结果以穿孔的形式输出。但限于当时的制造技术,他们的设计难以制成。
1834: 斯德哥尔摩的George Scheutz用木头做了一台差分机。
1834: Babbage 设想制造一台通用的分析机,在只读存储器(穿孔卡片)中存储程序和数据,Babbage在以后的时间继续他的研究工作,并于1840年将操作数提高到了40位,并基本实现了控制中心(CPU)和存储程序的设想,而且程序可以根据条件进行跳转,能在几秒内作出一般的加法,几分钟内作出乘除法。
1842: Babbage的差分机项目因为研制费用昂贵,被政府取消。但他自己仍花费大量的时间和精力于他的分析机研究。
1843: Scheutz 和他的儿子Edvard Scheutz 制造了一台差分机,瑞典政府同意继续支持他们的研究工作。
1847: Babbage 花两年时间设计了一台较简易的、31位的差分机,但没有人感兴趣并支持他造出这台机器。但后来伦敦科学博物馆用现代技术复制出这台机器后发现,它确实能准确的工作。
1848: 英国数学家George Boole创立二进制代数学。提前差不多一个世纪为现代二进制计算机铺平了道路。
1853: 令Babbage感到高兴的是,Scheutzes制造成功了真正意义上的比例差分机,能进行15位数的运算。象Babbage所设想的那样输出结果。后来伦敦的Brian Donkin又造出了更可靠的第二台。
1858: 第一台制表机被Albany的Dudley天文台买走。第二台被英国政府买走。但天文台并没有将其充分利用,后来被送进了博物馆。而第二台却被幸运的使用了很长时间。
1871: Babbage 制造了分析机的部分部件和印表机。
1878: 纽约的西班牙人Ramon Verea,制造成功桌面计算器。比前面提到的都要快。但他对将其推向市场不感兴趣,只是想表明,西班牙人可以比美国人做的更好。
1879: 一个调查委员会开始研究分析机是否可行,最后他们的结论是:分析机根本不可能工作。此时Babbage 已经去世了。调查之后,人们将他的分析机彻底遗忘了。但Howard Aiken 例外。
1885: 这时期更多的计算机涌现出来。如美国、俄国、瑞典等。他们开始用有槽的圆柱代替易出故障的齿轮。
1886: 芝加哥的Dorr E. Felt (1862-1930), 制造成了他的计算机。这是第一台用按键操作的计算器,而且速度非常快,按键抬起,结果也就出来了。
1889: Felt推出桌面印表计算器。
1890: 1890美国人口普查。1880年的普查人工用了7年的时间进行统计。这意味着1890年的统计将会超过10年。美国人口普查部门希望能得到一台机器帮助提高普查的效率。Herman Hollerith,建立制表机公司的那个人,后来他的公司发展成了IBM公司。借鉴了Babbage的发明,用穿孔卡片存储数据,并设计了机器。结果仅仅用了6个周就得出了准确的数据(62622250人)。Herman Hollerith大发其财。
1892: 圣多美和普林西比的William S. Burroughs (1857-1898),制作成功了一台比Felt的功能更强的机器,真正开创了办公自动化工业。
1896: Herman Hollerith创办了IBM公司的前身。
--------------------------------------------------------------------------------
1900
1906: Henry Babbage, Charles Babbage 的儿子,在R. W. Munro的支持下,完成了父亲设计的分析机,但也仅能证明它能工作,而没有将其作为产品推出。
二、电子计算机最初的日子里
在这之前的计算机,都是基于机械运行方式,尽管有个别产品开始引入一些电学内容,却都是从属与机械的,还没有进入计算机的灵活:逻辑运算领域。而在这之后,随着电子技术的飞速发展,计算机就开始了由机械向电子时代的过渡,电子越来越成为计算机的主体,机械越来越成为从属,二者的地位发生了变化,计算机也开始了质的转变。下面就是这一过渡时期的主要事件:
1906: 美国的Lee De Forest发明了电子管。在这之前造出数字电子计算机是不可能的。这为电子计算机的发展奠定了基础。
回页首
--------------------------------------------------------------------------------
1910
1920
1924年2月:IBM,一个具有划时代意义的公司成立。
--------------------------------------------------------------------------------
1930
1935: IBM推出IBM 601机。 这是一台能在一秒钟算出乘法的穿孔卡片计算机。这台机器无论在自然科学还是在商业意义上都具有重要的地位。大约造了1500台。
1937: 英国剑桥大学的Alan M. Turing (1912-1954)出版了他的论文 ,并提出了被后人称之为"图灵机"的数学模型。
1937: BELL试验室的George Stibitz展示了用继电器表示二进制的装置。尽管仅仅是个展示品,但却是第一台二进制电子计算机。
1938: Claude E. Shannon 发表了用继电器进行逻辑表示的论文。
1938: 柏林的Konrad Zuse 和他的助手们完成了一个机械可编程二进制形式的计算机,其理论基础是Boolean代数。后来命名为Z1。它的功能比较强大,用类似电影胶片的东西作为存储介质。可以运算七位指数和16位小数。可以用一个键盘输入数字,用灯泡显示结果。
1939 1月1日: 加利福尼亚的David Hewlet和William Packard 在他们的车库里造出了Hewlett-Packard计算机。名字是两人用投硬币的方式决定的。包括两人名字的一部分。
1939年11月: 美国John V. Atanasoff和他的学生Clifford Berry 完成了一台16位的加法器,这是第一台真空管计算机。
1939: 二次世界大战的开始,军事需要大大促进了计算机技术的发展。
1939: Zuse和Schreyer 开始在他们的Z1计算机的基础上发展Z2计算机。并用继电器改进它的存储和计算单元。但这个项目因为Zuse服兵役被中断了一年。
1939/1940: Schreyer利用真空管完成了一个10位的加法器,并使用了氖灯做存储装置。
回页首
--------------------------------------------------------------------------------
1940
1940年1月: Bell实验室的Samuel Williams和Stibitz制造成功了一个能进行复杂运算的计算机。大量使用了继电器,并借鉴了一些电话技术, 采用了先进的编码技术。
1941夏季: Atanasoff和学生Berry完成了能解线性代数方程的计算机,取名叫"ABC"(Atanasoff-Berry Computer),用电容作存储器,用穿孔卡片作辅助存储器,那些孔实际上是"烧"上的。 时钟频率是60HZ,完成一次加法运算用时一秒。
1941年12月: 德国Zuse制作完成了Z3计算机的研制。这是第一台可编程的电子计算机。可处理7位指数、14位小数。使用了大量的真空管。每秒种能作3到4次加法运算。一次乘法需要3到5秒。
1943: 1943年到1959年时期的计算机通常被称作第一代计算机。使用真空管,所有的程序都是用机器码编写,使用穿孔卡片。典型的机器就是: UNIVAC。
1943年1月: Mark I,自动顺序控制计算机在美国研制成功。整个机器有51英尺长,重5吨,75万个零部件,使用了3304个继电器,60个开关作为机械只读存储器。程序存储在纸带上,数据可以来自纸带或卡片阅读器。被用来为美国海军计算弹道火力表。
1943年4月: Max Newman、Wynn-Williams和他们的研究小组研制成功"Heath Robinson",这是一台密码破译机,严格说不是一台计算机。但是其使用了一些逻辑部件和真空管,其光学装置每秒钟能读入2000个字符。同样具有划时代的意义。
1943年9月 : Williams和Stibitz完成了"Relay Interpolator",后来命名为"Model II Relay Calculator"。这是一台可编程计算机。同样使用纸带输入程序和数据。其运行更可靠,每个数用7个继电器表示,可进行浮点运算。
1943年12月: 最早的可编程计算机在英国推出,包括2400个真空管,目的是为了破译德国的密码,每秒能翻译大约5000个字符 ,但使用完后不久就遭到了毁坏。据说是因为在翻译俄语的时候出现了错误。
1946: ENIAC (Electronic Numerical Integrator 和 Computer): 第一台真正意义上的数字电子计算机。开始研制于1943年,完成于1946年。负责人是John W. Mauchly和J. Presper Eckert。重30吨,18000个电子管,功率25千瓦。主要用于计算弹道和氢弹的研制。
三、晶体管计算机的发展
真空管时代的计算机尽管已经步入了现代计算机的范畴,但其体积之大、能耗之高、故障之多、价格之贵大大制约了它的普及应用。直到晶体管被发明出来,电子计算机才找到了腾飞的起点,一发而不可收……
1947: Bell实验室的William B. Shockley、 John Bardeen和Walter H. Brattain.发明了晶体管,开辟了电子时代新纪元。
1949: EDSAC:剑桥大学的Wilkes和他的小组建成了一台存储程序的计算机。输入输出设备仍是纸带。
1949: EDVAC (electronic discrete variable computer):第一台使用磁带的计算机。这是一个突破,可以多次在其上存储程序。这台机器是John von Neumann提议建造的。
1949: "未来的计算机不会超过1.5吨。"这是当时科学杂志的大胆预测。
回页首
--------------------------------------------------------------------------------
1950
1950: 软磁盘由东京帝国大学的Yoshiro Nakamats发明。其销售权由IBM公司获得。开创存储时代新纪元。
1950: 英国数学家和计算机先驱Alan Turing说:计算机将会具有人的智慧,如果一个人和一台机器对话,对于提出和回答的问题,这个人不能区别到底对话的是机器还是人,那么这台机器就具有了人的智能。
在此插入〈阿兰图灵像〉
1951: Grace Murray Hopper完成了高级语言编译器。
1951: Whirlwind:美国空军的第一个计算机控制实时防御系统研制完成。
1951: UNIVAC-1:第一台商用计算机系统。设计者:J. Presper Eckert 和John Mauchly。被美国人口普查部门用于人口普查,标志着计算机的应用进入了一个新的、商业应用的时代。
1952: EDVAC (Electronic Discrete Variable Computer):由Von Neumann领导设计并完成。 取名:电子离散变量计算机。
1953: 此时世界上大约有100台计算机在运转。
1953: 磁芯存储器被开发出来。
在此插入〈磁芯存储器图〉
1954: IBM的John Backus和他的研究小组开始开发 FORTRAN (FORmula TRANslation),1957年完成。是一种适合科学研究使用的计算机高级语言。
1956: 第一次有关人工智能的会议在Dartmouth 学院召开。
1957: IBM开发成功第一台点阵打印机。
1957: FORTRAN 高级语言开发成功。
四、集成电路,现代计算机插上腾飞的翅膀
尽管晶体管的采用大大缩小了计算机的体积、降低了其价格,减少了故障。但离人们的要求仍差很远,而且各行业对计算机也产生了较大的需求,生产更能更强、更轻便、更便宜的机器成了当务之急,而集成电路的发明正如“及时雨”,当春乃发生。其高度的集成性,不仅仅使体积得以减小,更使速度加快,故障减少。人们开始制造革命性的微处理器。计算机技术经过多年的积累,终于驶上了用硅铺就的高速公路。
1958年9月12日: 在Robert Noyce(INTEL公司的创始人)的领导下,发明了集成电路。不久又推出了微处理器。但因为在发明微处理器时借鉴了日本公司的技术,所以日本对其专利不承认,因为日本没有得到应有的利益。过了30年,日本才承认,这样日本公司可以从中得到一部分利润了。但到2001年,这个专利也就失效了。
1959: 1959年到1964年间设计的计算机一般被称为第二代计算机。大量采用了晶体管和印刷电路。计算机体积不断缩小,功能不断增强,可以运行FORTRAN和COBOL ,接收英文字符命令。出现大量应用软件。
1959: Grace Murray Hopper开始开发COBOL (COmmon Business-Orientated Language)语言,完成于1961年。
回页首
--------------------------------------------------------------------------------
1960
1960: ALGOL:第一个结构化程序设计语言推出。
1961: IBM的Kennth Iverson推出APL编程语言。
1963: PDP-8:DEC公司推出第一台小型计算机。
1964: 1964年到1972年的计算机一般被称为第三代计算机。大量使用集成电路,典型的机型是IBM360系列。
1964: IBM发布PL/1编程语言。
1964: 发布IBM 360首套系列兼容机。
1964: DEC发布PDB-8 小型计算机。
1965: 摩尔定律发表,处理器的性能每年提高一倍。后来其内容又发生了改变。
在此插入〈摩尔像〉
1965: Lofti Zadeh创立模糊逻辑,用来处理近似值问题。
1965: Thomas E. Kurtz和John Kemeny完成BASIC(Beginners All Purpose Symbolic Instruction Code)语言的开发。特别适合计算机教育和初学者使用,得到了广泛的推广。
1965: Douglas Englebart 提出鼠标器的设想,但没有进一步的研究。直到1983年被苹果电脑公司大量采用。
1965: 第一台超级计算机CD6600开发成功。
1967: Niklaus Wirth开始开发PASCAL语言,1971年完成。
1968: Robert Noyce和他的几个朋友创办了INTEL公司。
1968: Seymour Paper和他的研究小组在MIT开发了LOGO语言。
1969: ARPANET计划开始启动,这是现代INTERNET的雏形。
1969 年4月7日: 第一个网络协议标准RFC推出。
1969: EIA (Electronic Industries Associa
回页首
--------------------------------------------------------------------------------
1970
1970: 第一块RAM芯片由INTEL推出,容量1K。
1970: Ken Thomson和Dennis Ritchie开始开发UNIX操作系统。
1970: Forth编程语言开发完成。
1970: Internet的雏形ARPAnet (Advanced Research Projects Agency network) 基本完成。开始向非军用部门开放,许多大学和商业部门开始接入。
1971年11月15日: Marcian E. Hoff在INTEL公司开发成功第一块微处理器4004,含2300个晶体管,是个4位系统,时钟频率108KHz ,每秒执行6万条指令。
在此插入〈4004图像〉
在后来的日子里,处理器发展主要指标一览。
处理器 主频 每秒百万条指令
4004 108 KHz 0.06
8080 2MHz 0.5
68000 8MHz 0.7
8086 8MHz 0.8
68000 16 MHz 1.3
68020 16 MHz 2.6
80286 12MHz 2.7
68030 16MHz 3.9
386 SX 20 MHz 6
68030 25 MHz 6.3
68030 40MHz 10
386 DX 33MHz 10
486 DX 25MHz 20
486 DX2-50 50MHz 35
486 DX4/100 100MHz 60
Pentium 66MHz 100
Pentium 133MHz 240
Pentium 233MHz MMX 435
Pentium Pro 200 MHz 440
Pentium II 233MHz 560
Pentium II 333MHz 770
1971: PASCAL语言开发完成。
1972: 1972年以后的计算机习惯上被称为第四代计算机。基于大规模集成电路,及后来的超大规模集成电路。计算机功能更强,体积更小。人们开始怀疑计算机能否继续缩小,特别是发热量问题能否解决?人们开始探讨第五代计算机的开发。
1972: C语言的开发完成。其主要设计者是UNIX系统的开发者之一 Dennis Ritche。这是一个非常强大的语言,开发系统软件,特别受人喜爱。
1972: Hewlett-Packard发明了第一个手持计算器。
1972年4月1日: INTEL推出8008微处理器。
1972: ARPANET开始走向世界,INTERNET革命拉开序幕。
1973: 街机游戏Pong发布,得到广泛的欢迎。发明者Nolan Bushnell ,后来Atari 的创立者。
1974: 第一个具有并行计算机体系结构的CLIP-4推出。
五、计算机技术渐入辉煌
在这之前,计算机技术主要集中在大型机和小型机领域发展,但随着超大规模集成电路和微处理器技术的进步,计算机进入寻常百姓家的技术障碍已层层突破。特别是从INTEL发布其面向个人机的微处理器8080之后,这一浪潮便汹涌澎湃起来,同时也涌现了一大批信息时代的弄潮儿,如乔布斯、比尔.盖茨等,至今他们对计算机产业的发展还起着举足轻重的作用。在此时段,互联网技术、多媒体技术也得到了空前的发展,计算机真正开始改变人们的生活。
1974年4月1日: INTEL发布其8位的微处理器芯片8080。
1974年12月: MITS发布Altair 8800,第一台商用个人计算机,价值397美元,内存有256个字节。
1975: Bill Gates和Paul Allen完成了第一个在MITS 的Altair计算机上运行的BASIC程序。
1975: IBM公司介绍了他的激光打印机技术。1988年向市场推出其彩色激光打印机。
1975: Bill Gates和Paul Allen创办MicorSoft公司。现在成为最大、最成功的软件公司。三年后就收入50万美元,增加到15个人。1992年达28亿美元,1万名雇员。其最大的突破性发展是在1981年为IBM 的PC机开发操作系统,从此后便开始了对计算机业的巨大影响。
1975: IBM 5100发布。
1976: Stephen Wozinak和Stephen Jobs创办苹果计算机公司。并推出其Apple I 计算机。
1976: Zilog推出Z80处理器。8位微处理器。 CP/M就是面向其开发的操作系统。许多着名的软件如:Wordstar 和dBase II基于此款处理器。
1976: 6502, 8 位微处理器发布,专为Apple II计算机使用。
1976: Cray 1,第一台商用超级计算机。集成了20万个晶体管,每秒进行1.5亿次浮点运算。
1977年5月: Apple II 型计算机发布。
1978: Commodore Pet发布:有 8K RAM,盒式磁带机,9英寸显示器。
1978年6月8日: INTEL发布其16位微处理器8086。但因其非常昂贵,又推出8位的8088满足市场对低价处理器的需要,并被IBM的第一代PC机所采用。其可用的时钟频率为4.77、8、10MHz。大约有300条指令,集成了29000更晶体管。
1979: 街机游戏"太空入侵者"发布,引起轰动。很快便使得类似的游戏机大规模流行起来,其收入超过了美国电影业。
1979: Jean Ichbiah 开发完成Ada计算机语言。
1979年6月1日: INTEL发布了8位的8088微处理器,纯粹为了迎合低价电脑的需要。
1979: Commodore PET 发布了采用1MHz的6502处理器,单色显示器、8K内存的计算机,并且可以根据需要购买更多的内存扩充。
1979: 发明了低密盘。
1979: Motorola公司发布68000微处理器。主要供应Apple公司的Macintosh ,后继产品68020用在Macintosh II机型上。
1979: IBM公司眼看着个人计算机市场被苹果等电脑公司占有,决定也开发自己的个人计算机,为了尽快的推出自己的产品,他们大量的工作是与第三方合作,其中微软公司就承担了其操作系统的开发工作。很快他们便在1981年8月12日推出了IBM-PC。但同时也为微软后来的崛起,施足了肥料。
1980~1990
1980:“只要有1兆内存就足够DOS尽情表演了”。微软公司开发DOS初期时说。今天来听这句话有何感想呢?
1980年10月: MS-DOS/PC-DOS开发工作开始了。但微软并没有自己独立的操作系统,他们买来别人的操作系统并加以改进。但IBM测试时竟发现有300个BUG。于是他们又继续改进,最初的DOS1.0有4000行汇编程序。
1981: Xerox开始致力于图形用户界面、图标、菜单和定位设备(如鼠标)的研制。结果研究成果为苹果所借鉴。而苹果电脑公司后来又指控微软剽窃了他们的设计,开发了WINDOWS系列软件。
1981: INTEL发布的80186/80188芯片,很少被人使用,因为其寄存器等与其他不兼容。但其采用了直接存储器访问技术和时间片分时技术。
1981年8月12日: IBM发布其个人计算机,售价2880美元。该机有64K内存、单色显示器、可选的盒式磁带驱动器、两个160KB单面软盘驱动器。这台机器取得了比预想的还要大的成功。
1981年8月12日: MDA (Mono Display Adapter, text only) 能够显示文本的单色显示器随IBM-PC机发布。
1981年8月12日: MS-DOS 1.0,PC-DOS1.0发布。Microsoft是受IBM委托开发DOS操作系统,他们从Tim Paterson那里购买了一个叫86-DOS 的程序并加以改进。从IBM卖出去的叫PC-DOS。从Microsoft卖出去的叫MS-DOS。Micorsoft与IBM的合作一直到1991年的DOS5.0为止。最初的DOS1.0非常的简陋,每张盘上只一个根目录,不支持子目录。直到1983年3月的2.0版才有所改观。MS-DOS在1995年以前一直是与IBM-PC兼容的操作系统,WINDOWS95推出并迅速占领市场之后,其最后一个版本命名为DOS7.0。现在微软的操作系统已经在世界大多数计算机上运行了。
1982: 基于TCP/IP协议的INTERNET初具规模。
1982: 基于6502微处理器的计算机大受欢迎,特别是在学校大量普及。
1982 年1月: Commodore 64计算机发布,价格:595美元。
1982 年2月: 80286发布。时钟频率提高到20MHz,并增加了保护模式,可访问16M内存。支持1GB以上的虚拟内存。每秒执行270万条指令,集成了134000个晶体管。
1982: Compaq公司发布了其IBM-PC兼容机。
1982: MIDI(Musical Instrument Digital Interface)标准制定。允许计算机连接标准的类似键盘数字乐器。
1982: Sony和Phillips公布了压缩音频的红皮书。很快得到欧美的认同。
1982年3月: MS-DOS 1.25PC-DOS 1.1
1982 年4月: Sinclair ZX Spectrum发布:基于Z80芯片,时钟频率3.5MHz。能显示8种颜色。
1982年5月: IBM推出双面320K的软盘驱动器。
1983 年1月: IBM PC在欧洲展示。
1983: Borland公司成立。
1983春季: IBM XT机发布,增加了10兆的硬盘,128K RAM,一个软驱、单色显示器、一台打印机、可以增加一个8087数字协处理器。价格5000美元。
1983年3月: MS-DOS 2.0、PC-DOS 2.0增加了类似UNIX分层目录的管理形式。
1983年10月: MS-DOS 2.25,包括支持其他字符设置,开辟东方市场。
1984: DNS (Domain Name Server) 域名服务器发布,互连网上有1000多台主机运行。
1984: Hewlett-Packard发布了优异的激光打印机,HP也在喷墨打印机上保持领先技术。
1984年1月: Apple 的Macintosh发布。基于Motorola 68000微处理器。可以寻址16M。
1984 年8月: MS-DOS 3.0、PC-DOS 3.0、IBM AT发布,采用ISA标准,支持大硬盘和1.2M高密软驱。
1984年9月: Apple 发布了有512Kb 内存的Macintosh,但其他方面没有什么提高。
1984 底: Compaq开始开发IDE接口,可以以更快的速度传输数据,并被许多同行采纳,后来更进一步的EIDE推出,可以支持到528MB的驱动器。数据传输也更快。
1985: Philips和Sony合作推出CD-ROM驱动器。
1985: EGA标准推出。
1985年3月: MS-DOS 3.1、PC-DOS 3.1。这是第一个提供部分网络功能支持DOS版本。
1985年10月17日: 80386 DX推出。时钟频率到达33MHz,可寻址1GB内存。比286更多的指令。每秒6百万条指令,集成275000个晶体管。
1985年11月: Microsoft Windows发布。但在其3.0版本之全面没有得到广泛的应用。需要DOS的支持,类似苹果机的操作界面,以致被苹果控告。诉讼到1997年8月才终止。
1985 年12月: MS-DOS 3.2、PC-DOS 3.2。这是第一个支持3.5英寸磁盘的系统。但也只是支持到720KB。到3.3版本时方可支持1.44兆。
1986 年1月: Apple 发布较高性能的Macintosh。有四兆内存,和SCSI适配器。
1986 年9月: Amstrad Announced发布便宜且功能强大的计算机Amstrad PC 1512。具有CGA图形适配器、512KB内存、8086处理器20兆硬盘驱动器。采用了鼠标器和图形用户界面,面向家庭设计。
1987: Connection Machine超级计算机发布。采用并行处理,每秒钟2亿次运算。
1987: Microsoft Windows 2.0发布,比第一版要成功,但并没有多大提高。.
1987: 英国数学家Michael F. Barnsley找到图形压缩的方法。
1987: Macintosh II发布,基于Motorola 68020处理器。时钟16MHz,每秒260万条指令。有一个SCSI适配器和一个彩色适配器。
1987年4月2日: IBM推出PS/2系统。最初基于8086处理器和老的XT总线。后来过渡到80386,开始使用3.5英寸1.44MB软盘驱动器。引进了微通道技术,这一系列机型取得了巨大成功。出货量达到200万台。
1987: IBM发布VGA技术。
1987: IBM发布自己设计的微处理器8514/A。
1987年4月: MS-DOS 3.3、PC-DOS 3.3。随IBM PS/2一起发布,支持1.44MB驱动器和硬盘分区。可为硬盘分出多个逻辑驱动器。
1987年4月: Microsoft和IBM发布S/2Warp操作系统。但并未取得多大成功。
1987年8月: AD-LIB声卡发布。一个加拿大公司的产品。
1987年10月: Compaq DOS (CPQ-DOS) v3.31发布。支持的硬盘分区大于32Mb。
1988: 光计算机投入开发,用光子代替电子,可以提高计算机的处理速度。
1988: XMS标准建立。
1988: EISA标准建立。
1988 6月6日: 80386 SX为了迎合低价电脑的需求而发布。
1988年7月到8月: PC-DOS 4.0、MS-DOS 4.0。支持EMS内存。但因为存在BUG,后来又陆续推出4.01a。
1988年9月: IBM PS/20 286发布,基于80286处理器,没有使用其微通道总线。但其他机器继续使用这一总线。
1988年10月: Macintosh Iix发布。基于Motorola 68030处理器。仍使用16 MHz主频、每秒390万条指令,支持128M RAM。
1988年11月: MS-DOS 4.01、PC-DOS 4.01发布。
1989: Tim Berners-Lee 创立World Wide Web雏形,他工作于欧洲物理粒子研究所。通过超文本链接,新手也可以轻松上网浏览。这大大促进了INTERNET的发展。
1989: Phillips和Sony发布CD-I标准。
1989年1月: Macintosh SE/30 发布。基于新型68030处理器。
1989年3月: E-IDE标准确立,可以支持超过528MB的硬盘容量。可达到 33.3 MB/s 的传输速度。并被许多CD-ROM所采用。
1989年4月10日: 80486 DX发布,集成120万个晶体管。其后继型号时钟频率达到100MHz。
1989年11月: Sound Blaster Card(声卡)发布。
1990~2000
1990: SVGA标准确立。
1990年3月 : Macintosh Iifx发布,基于68030CPU,主频40MHz,使用了更快的SCSI接口。
1990年5月22日: 微软发布Windows 3.0。兼容MS-DOS模式。
1990年10月: Macintosh Classic发布,有支持到256色的显示适配器。
1990年11月: 第一代MPC (多媒体个人电脑标准)发布。处理器至少80286/12MHz,后来增加到80386SX/16 MHz ,及一个光驱,至少150 KB/sec的传输率。
1991: 发布ISA标准。
1991年5月: Sound Blaster Pro发布。
1991年6月: MS-DOS 5.0、PC-DOS 5.0。为了促进OS/2的发展,Bill Gates说:DOS5.0是DOS终结者,今后将不再花精力于此。该版本突破了640KB的基本内存限制。这个版本也标志着微软与IBM在DOS上的合作的终结。
1992: Windows NT发布,可寻址2G RAM。
1992年4月: Windows 3.1发布。
1992年6月: Sound Blaster 16 ASP发布。
1993: INTERNET开始商业化运行。
1993: 经典游戏Doom发布。
1993: Novell并购Digital Research, DR-DOS成为Novell DOS。
1993年3月22: Pentium发布。集成了300多万个晶体管。初期工作在60-66MHz。每秒钟执行1亿条指令。
1993年5月: MPC标准2发布。CD-ROM传输率要求300KB/sec。在320*240的窗口中每秒播放15帧图像。
1993年12月: MS-DOS6.0发布,包括一个硬盘压缩程DoubleSpace,,但一家小公司声称,微软剽窃了其部分技术。于是在后来的DOS6.2中,微软将其改名为:DriveSpace。后来WIN95中的DOS成为DOS7.0,WIN95OSR2中称为DOS7.10.
1994年3月7日: Intel 发布90-100 MHz Pentium处理器。
1994年9月: PC-DOS 6.3发布。
1994年10月10日: Intel 发布75 MHz Pentium处理器。
1994: Doom II 发布。开辟了PC机游戏广阔市场。
1994: Netscape 1.0 浏览器发布。
1994: Comm&Conquer(命令与征服)发布。
1995年3月27日: Intel发布120 Mhz的Pentium处理器。
19956月1日: Intel发布133 Mhz的Pentium处理器。
1995年8月23日: Windows '95 发布。大大不同于其以前的版本。完全脱离MS-DOS,但照顾用户习惯还保留了DOS形式。纯32位的多任务操作系统。该版本取得了巨大的成功。
1995年11月1日: Pentium Pro发布。主频可达200 MHz ,每秒钟完成4.4亿条指令,集成了550万个晶体管。
1995年12月: Netscape发布其.JavaScript。
1996: Quake、Civilization 2、Command& Conquer - Red Alert等一系列的着名游戏发布。
1996年1月: Netscape Navigator 2.0发布,第一个支持JavaScript的浏览器。
1996年1月4日: Intel发布150-166MHz的Pentium处理器,集成了330万个晶体管。
1996: Windows '95 OSR2发布,修复了部分BUG,扩充了部分功能。
1997: Gr和 Theft Auto、Quake 2、Blade Runner等着名游戏发布,3D图形加速卡大行其道。
1997年1月8日: Intel发布Pentium MMX。对游戏和多媒体功能进行了增强。
1997年4月: IBM的深蓝(Deep Blue)计算机,战胜人类国际象棋世界冠军卡斯帕罗夫。
1997年5月7日: Intel发布Pentium II,增加了更多的指令和更多CACHE。
1997年6月2日: Intel 发布233 MHz Pentium MMX.
1997年16日: Apple遇到严重的财务危机,微软伸出援助之手,注资1.5亿美元。条件是Apple撤消其控诉:微软模仿其视窗界面的起诉,并指出Apple也是模仿了XEROX的设计。
1998年2月 : Intel发布333 MHz Pentium II处理器。采用0.25微米技术,提高速度,减少发热量。
1998年6月25日: Microsoft发布Windows '98,一些人企图肢解微软,微软回击说这会伤害美国的国家利益。
1999年1月25日: Linux Kernel 2.2.0发布。 人们对其寄予厚望。
1999年2月22日: AMD公司发布K6-III 400MHz。有测试说其性能超过Intel P-III 。集成2300万个晶体管、socket 7结构。
再往下就是今天了,与整个人类的发展历程相比、与传统科学技术相比,计算机的历史才刚刚开始书写,我们正置身其中,感受其日新月异的变化,被计算机大潮裹挟着丝毫不得停歇。
在西欧,由中世纪进入文艺复兴时期的社会大变革,大大促进了自然科学技术的发展,人们长期被神权压抑的创造力得到空前释放。其中制造一台能帮助人进行计算的机器,就是最耀眼的思想火花之一。从那时起,一个又一个科学家为把这一思想火花变成引导人类进入自由王国的火炬而不懈努力。但限于当时的科技总体水平,大都失败了,这就是拓荒者的共同命运:往往见不到丰硕的果实。后人在享用这甜美的时候,应该能从中品出一些汗水与泪水的滋味……
1614: 苏格兰人John Napier (1550-1617)发表了一篇论文,其中提到他发明了一种可以计算四则运算和方根运算的精巧装置。
1623: Wilhelm Schickard (1592-1635)制作了一个能进行六位以内数加减法,并能通过铃声输出答案的"计算钟"。通过转动齿轮来进行操作。
1625: William Oughtred (1575-1660) 发明计算尺
1642: 法国数学家Pascal 在WILLIAM Oughtred计算尺的基础上将计算尺加以改进,能进行八位计算。并且还卖出了许多,成为一种时髦的商品。
在此插入〈PASCAL像〉
1668: 英国人Samuel Morl和 (1625-1695)制作了一个非十进制的加法装置,适宜计算钱币。
1671: 德国数学家Gottfried Leibniz设计了一架可以进行乘法,最终答案可以最大达到16位。
1775: 英国Charles制作成功了一台与 Leibniz's 的计算机类似的机器。但更先进一些。
1776: 德国人Mathieus Hahn成功的制作了一台乘法器。
1801: Joseph-Maire Jacuard 开发了一台能用穿孔卡片控制的自动织布机。
1820: 法国人Charles Xavier Thomas de Colmar (1785-1870),制作成功第一台成品计算机,非常的可靠,可以放在桌面上,在后来的90多年间一直在市场上出售。
1822: 英国人Charles Babbage (1792-1871)设计了差分机和分析机,其中设计的理论非常的超前,类似于百年后的电子计算机,特别是利用卡片输入程序和数据的设计被后人所采用。
1832: Babbage 和Joseph Clement 制成了一个差分机的成品,开始可以进行6位数的运算。后来发展到20位、30位,尺寸将近一个房子那么大。结果以穿孔的形式输出。但限于当时的制造技术,他们的设计难以制成。
1834: 斯德哥尔摩的George Scheutz用木头做了一台差分机。
1834: Babbage 设想制造一台通用的分析机,在只读存储器(穿孔卡片)中存储程序和数据,Babbage在以后的时间继续他的研究工作,并于1840年将操作数提高到了40位,并基本实现了控制中心(CPU)和存储程序的设想,而且程序可以根据条件进行跳转,能在几秒内作出一般的加法,几分钟内作出乘除法。
1842: Babbage的差分机项目因为研制费用昂贵,被政府取消。但他自己仍花费大量的时间和精力于他的分析机研究。
1843: Scheutz 和他的儿子Edvard Scheutz 制造了一台差分机,瑞典政府同意继续支持他们的研究工作。
1847: Babbage 花两年时间设计了一台较简易的、31位的差分机,但没有人感兴趣并支持他造出这台机器。但后来伦敦科学博物馆用现代技术复制出这台机器后发现,它确实能准确的工作。
1848: 英国数学家George Boole创立二进制代数学。提前差不多一个世纪为现代二进制计算机铺平了道路。
1853: 令Babbage感到高兴的是,Scheutzes制造成功了真正意义上的比例差分机,能进行15位数的运算。象Babbage所设想的那样输出结果。后来伦敦的Brian Donkin又造出了更可靠的第二台。
1858: 第一台制表机被Albany的Dudley天文台买走。第二台被英国政府买走。但天文台并没有将其充分利用,后来被送进了博物馆。而第二台却被幸运的使用了很长时间。
1871: Babbage 制造了分析机的部分部件和印表机。
1878: 纽约的西班牙人Ramon Verea,制造成功桌面计算器。比前面提到的都要快。但他对将其推向市场不感兴趣,只是想表明,西班牙人可以比美国人做的更好。
1879: 一个调查委员会开始研究分析机是否可行,最后他们的结论是:分析机根本不可能工作。此时Babbage 已经去世了。调查之后,人们将他的分析机彻底遗忘了。但Howard Aiken 例外。
1885: 这时期更多的计算机涌现出来。如美国、俄国、瑞典等。他们开始用有槽的圆柱代替易出故障的齿轮。
1886: 芝加哥的Dorr E. Felt (1862-1930), 制造成了他的计算机。这是第一台用按键操作的计算器,而且速度非常快,按键抬起,结果也就出来了。
1889: Felt推出桌面印表计算器。
1890: 1890美国人口普查。1880年的普查人工用了7年的时间进行统计。这意味着1890年的统计将会超过10年。美国人口普查部门希望能得到一台机器帮助提高普查的效率。Herman Hollerith,建立制表机公司的那个人,后来他的公司发展成了IBM公司。借鉴了Babbage的发明,用穿孔卡片存储数据,并设计了机器。结果仅仅用了6个周就得出了准确的数据(62622250人)。Herman Hollerith大发其财。
1892: 圣多美和普林西比的William S. Burroughs (1857-1898),制作成功了一台比Felt的功能更强的机器,真正开创了办公自动化工业。
1896: Herman Hollerith创办了IBM公司的前身。
--------------------------------------------------------------------------------
1900
1906: Henry Babbage, Charles Babbage 的儿子,在R. W. Munro的支持下,完成了父亲设计的分析机,但也仅能证明它能工作,而没有将其作为产品推出。
二、电子计算机最初的日子里
在这之前的计算机,都是基于机械运行方式,尽管有个别产品开始引入一些电学内容,却都是从属与机械的,还没有进入计算机的灵活:逻辑运算领域。而在这之后,随着电子技术的飞速发展,计算机就开始了由机械向电子时代的过渡,电子越来越成为计算机的主体,机械越来越成为从属,二者的地位发生了变化,计算机也开始了质的转变。下面就是这一过渡时期的主要事件:
1906: 美国的Lee De Forest发明了电子管。在这之前造出数字电子计算机是不可能的。这为电子计算机的发展奠定了基础。
回页首
--------------------------------------------------------------------------------
1910
1920
1924年2月:IBM,一个具有划时代意义的公司成立。
--------------------------------------------------------------------------------
1930
1935: IBM推出IBM 601机。 这是一台能在一秒钟算出乘法的穿孔卡片计算机。这台机器无论在自然科学还是在商业意义上都具有重要的地位。大约造了1500台。
1937: 英国剑桥大学的Alan M. Turing (1912-1954)出版了他的论文 ,并提出了被后人称之为"图灵机"的数学模型。
1937: BELL试验室的George Stibitz展示了用继电器表示二进制的装置。尽管仅仅是个展示品,但却是第一台二进制电子计算机。
1938: Claude E. Shannon 发表了用继电器进行逻辑表示的论文。
1938: 柏林的Konrad Zuse 和他的助手们完成了一个机械可编程二进制形式的计算机,其理论基础是Boolean代数。后来命名为Z1。它的功能比较强大,用类似电影胶片的东西作为存储介质。可以运算七位指数和16位小数。可以用一个键盘输入数字,用灯泡显示结果。
1939 1月1日: 加利福尼亚的David Hewlet和William Packard 在他们的车库里造出了Hewlett-Packard计算机。名字是两人用投硬币的方式决定的。包括两人名字的一部分。
1939年11月: 美国John V. Atanasoff和他的学生Clifford Berry 完成了一台16位的加法器,这是第一台真空管计算机。
1939: 二次世界大战的开始,军事需要大大促进了计算机技术的发展。
1939: Zuse和Schreyer 开始在他们的Z1计算机的基础上发展Z2计算机。并用继电器改进它的存储和计算单元。但这个项目因为Zuse服兵役被中断了一年。
1939/1940: Schreyer利用真空管完成了一个10位的加法器,并使用了氖灯做存储装置。
回页首
--------------------------------------------------------------------------------
1940
1940年1月: Bell实验室的Samuel Williams和Stibitz制造成功了一个能进行复杂运算的计算机。大量使用了继电器,并借鉴了一些电话技术, 采用了先进的编码技术。
1941夏季: Atanasoff和学生Berry完成了能解线性代数方程的计算机,取名叫"ABC"(Atanasoff-Berry Computer),用电容作存储器,用穿孔卡片作辅助存储器,那些孔实际上是"烧"上的。 时钟频率是60HZ,完成一次加法运算用时一秒。
1941年12月: 德国Zuse制作完成了Z3计算机的研制。这是第一台可编程的电子计算机。可处理7位指数、14位小数。使用了大量的真空管。每秒种能作3到4次加法运算。一次乘法需要3到5秒。
1943: 1943年到1959年时期的计算机通常被称作第一代计算机。使用真空管,所有的程序都是用机器码编写,使用穿孔卡片。典型的机器就是: UNIVAC。
1943年1月: Mark I,自动顺序控制计算机在美国研制成功。整个机器有51英尺长,重5吨,75万个零部件,使用了3304个继电器,60个开关作为机械只读存储器。程序存储在纸带上,数据可以来自纸带或卡片阅读器。被用来为美国海军计算弹道火力表。
1943年4月: Max Newman、Wynn-Williams和他们的研究小组研制成功"Heath Robinson",这是一台密码破译机,严格说不是一台计算机。但是其使用了一些逻辑部件和真空管,其光学装置每秒钟能读入2000个字符。同样具有划时代的意义。
1943年9月 : Williams和Stibitz完成了"Relay Interpolator",后来命名为"Model II Relay Calculator"。这是一台可编程计算机。同样使用纸带输入程序和数据。其运行更可靠,每个数用7个继电器表示,可进行浮点运算。
1943年12月: 最早的可编程计算机在英国推出,包括2400个真空管,目的是为了破译德国的密码,每秒能翻译大约5000个字符 ,但使用完后不久就遭到了毁坏。据说是因为在翻译俄语的时候出现了错误。
1946: ENIAC (Electronic Numerical Integrator 和 Computer): 第一台真正意义上的数字电子计算机。开始研制于1943年,完成于1946年。负责人是John W. Mauchly和J. Presper Eckert。重30吨,18000个电子管,功率25千瓦。主要用于计算弹道和氢弹的研制。
三、晶体管计算机的发展
真空管时代的计算机尽管已经步入了现代计算机的范畴,但其体积之大、能耗之高、故障之多、价格之贵大大制约了它的普及应用。直到晶体管被发明出来,电子计算机才找到了腾飞的起点,一发而不可收……
1947: Bell实验室的William B. Shockley、 John Bardeen和Walter H. Brattain.发明了晶体管,开辟了电子时代新纪元。
1949: EDSAC:剑桥大学的Wilkes和他的小组建成了一台存储程序的计算机。输入输出设备仍是纸带。
1949: EDVAC (electronic discrete variable computer):第一台使用磁带的计算机。这是一个突破,可以多次在其上存储程序。这台机器是John von Neumann提议建造的。
1949: "未来的计算机不会超过1.5吨。"这是当时科学杂志的大胆预测。
回页首
--------------------------------------------------------------------------------
1950
1950: 软磁盘由东京帝国大学的Yoshiro Nakamats发明。其销售权由IBM公司获得。开创存储时代新纪元。
1950: 英国数学家和计算机先驱Alan Turing说:计算机将会具有人的智慧,如果一个人和一台机器对话,对于提出和回答的问题,这个人不能区别到底对话的是机器还是人,那么这台机器就具有了人的智能。
在此插入〈阿兰图灵像〉
1951: Grace Murray Hopper完成了高级语言编译器。
1951: Whirlwind:美国空军的第一个计算机控制实时防御系统研制完成。
1951: UNIVAC-1:第一台商用计算机系统。设计者:J. Presper Eckert 和John Mauchly。被美国人口普查部门用于人口普查,标志着计算机的应用进入了一个新的、商业应用的时代。
1952: EDVAC (Electronic Discrete Variable Computer):由Von Neumann领导设计并完成。 取名:电子离散变量计算机。
1953: 此时世界上大约有100台计算机在运转。
1953: 磁芯存储器被开发出来。
在此插入〈磁芯存储器图〉
1954: IBM的John Backus和他的研究小组开始开发 FORTRAN (FORmula TRANslation),1957年完成。是一种适合科学研究使用的计算机高级语言。
1956: 第一次有关人工智能的会议在Dartmouth 学院召开。
1957: IBM开发成功第一台点阵打印机。
1957: FORTRAN 高级语言开发成功。
四、集成电路,现代计算机插上腾飞的翅膀
尽管晶体管的采用大大缩小了计算机的体积、降低了其价格,减少了故障。但离人们的要求仍差很远,而且各行业对计算机也产生了较大的需求,生产更能更强、更轻便、更便宜的机器成了当务之急,而集成电路的发明正如“及时雨”,当春乃发生。其高度的集成性,不仅仅使体积得以减小,更使速度加快,故障减少。人们开始制造革命性的微处理器。计算机技术经过多年的积累,终于驶上了用硅铺就的高速公路。
1958年9月12日: 在Robert Noyce(INTEL公司的创始人)的领导下,发明了集成电路。不久又推出了微处理器。但因为在发明微处理器时借鉴了日本公司的技术,所以日本对其专利不承认,因为日本没有得到应有的利益。过了30年,日本才承认,这样日本公司可以从中得到一部分利润了。但到2001年,这个专利也就失效了。
1959: 1959年到1964年间设计的计算机一般被称为第二代计算机。大量采用了晶体管和印刷电路。计算机体积不断缩小,功能不断增强,可以运行FORTRAN和COBOL ,接收英文字符命令。出现大量应用软件。
1959: Grace Murray Hopper开始开发COBOL (COmmon Business-Orientated Language)语言,完成于1961年。
回页首
--------------------------------------------------------------------------------
1960
1960: ALGOL:第一个结构化程序设计语言推出。
1961: IBM的Kennth Iverson推出APL编程语言。
1963: PDP-8:DEC公司推出第一台小型计算机。
1964: 1964年到1972年的计算机一般被称为第三代计算机。大量使用集成电路,典型的机型是IBM360系列。
1964: IBM发布PL/1编程语言。
1964: 发布IBM 360首套系列兼容机。
1964: DEC发布PDB-8 小型计算机。
1965: 摩尔定律发表,处理器的性能每年提高一倍。后来其内容又发生了改变。
在此插入〈摩尔像〉
1965: Lofti Zadeh创立模糊逻辑,用来处理近似值问题。
1965: Thomas E. Kurtz和John Kemeny完成BASIC(Beginners All Purpose Symbolic Instruction Code)语言的开发。特别适合计算机教育和初学者使用,得到了广泛的推广。
1965: Douglas Englebart 提出鼠标器的设想,但没有进一步的研究。直到1983年被苹果电脑公司大量采用。
1965: 第一台超级计算机CD6600开发成功。
1967: Niklaus Wirth开始开发PASCAL语言,1971年完成。
1968: Robert Noyce和他的几个朋友创办了INTEL公司。
1968: Seymour Paper和他的研究小组在MIT开发了LOGO语言。
1969: ARPANET计划开始启动,这是现代INTERNET的雏形。
1969 年4月7日: 第一个网络协议标准RFC推出。
1969: EIA (Electronic Industries Associa
回页首
--------------------------------------------------------------------------------
1970
1970: 第一块RAM芯片由INTEL推出,容量1K。
1970: Ken Thomson和Dennis Ritchie开始开发UNIX操作系统。
1970: Forth编程语言开发完成。
1970: Internet的雏形ARPAnet (Advanced Research Projects Agency network) 基本完成。开始向非军用部门开放,许多大学和商业部门开始接入。
1971年11月15日: Marcian E. Hoff在INTEL公司开发成功第一块微处理器4004,含2300个晶体管,是个4位系统,时钟频率108KHz ,每秒执行6万条指令。
在此插入〈4004图像〉
在后来的日子里,处理器发展主要指标一览。
处理器 主频 每秒百万条指令
4004 108 KHz 0.06
8080 2MHz 0.5
68000 8MHz 0.7
8086 8MHz 0.8
68000 16 MHz 1.3
68020 16 MHz 2.6
80286 12MHz 2.7
68030 16MHz 3.9
386 SX 20 MHz 6
68030 25 MHz 6.3
68030 40MHz 10
386 DX 33MHz 10
486 DX 25MHz 20
486 DX2-50 50MHz 35
486 DX4/100 100MHz 60
Pentium 66MHz 100
Pentium 133MHz 240
Pentium 233MHz MMX 435
Pentium Pro 200 MHz 440
Pentium II 233MHz 560
Pentium II 333MHz 770
1971: PASCAL语言开发完成。
1972: 1972年以后的计算机习惯上被称为第四代计算机。基于大规模集成电路,及后来的超大规模集成电路。计算机功能更强,体积更小。人们开始怀疑计算机能否继续缩小,特别是发热量问题能否解决?人们开始探讨第五代计算机的开发。
1972: C语言的开发完成。其主要设计者是UNIX系统的开发者之一 Dennis Ritche。这是一个非常强大的语言,开发系统软件,特别受人喜爱。
1972: Hewlett-Packard发明了第一个手持计算器。
1972年4月1日: INTEL推出8008微处理器。
1972: ARPANET开始走向世界,INTERNET革命拉开序幕。
1973: 街机游戏Pong发布,得到广泛的欢迎。发明者Nolan Bushnell ,后来Atari 的创立者。
1974: 第一个具有并行计算机体系结构的CLIP-4推出。
五、计算机技术渐入辉煌
在这之前,计算机技术主要集中在大型机和小型机领域发展,但随着超大规模集成电路和微处理器技术的进步,计算机进入寻常百姓家的技术障碍已层层突破。特别是从INTEL发布其面向个人机的微处理器8080之后,这一浪潮便汹涌澎湃起来,同时也涌现了一大批信息时代的弄潮儿,如乔布斯、比尔.盖茨等,至今他们对计算机产业的发展还起着举足轻重的作用。在此时段,互联网技术、多媒体技术也得到了空前的发展,计算机真正开始改变人们的生活。
1974年4月1日: INTEL发布其8位的微处理器芯片8080。
1974年12月: MITS发布Altair 8800,第一台商用个人计算机,价值397美元,内存有256个字节。
1975: Bill Gates和Paul Allen完成了第一个在MITS 的Altair计算机上运行的BASIC程序。
1975: IBM公司介绍了他的激光打印机技术。1988年向市场推出其彩色激光打印机。
1975: Bill Gates和Paul Allen创办MicorSoft公司。现在成为最大、最成功的软件公司。三年后就收入50万美元,增加到15个人。1992年达28亿美元,1万名雇员。其最大的突破性发展是在1981年为IBM 的PC机开发操作系统,从此后便开始了对计算机业的巨大影响。
1975: IBM 5100发布。
1976: Stephen Wozinak和Stephen Jobs创办苹果计算机公司。并推出其Apple I 计算机。
1976: Zilog推出Z80处理器。8位微处理器。 CP/M就是面向其开发的操作系统。许多着名的软件如:Wordstar 和dBase II基于此款处理器。
1976: 6502, 8 位微处理器发布,专为Apple II计算机使用。
1976: Cray 1,第一台商用超级计算机。集成了20万个晶体管,每秒进行1.5亿次浮点运算。
1977年5月: Apple II 型计算机发布。
1978: Commodore Pet发布:有 8K RAM,盒式磁带机,9英寸显示器。
1978年6月8日: INTEL发布其16位微处理器8086。但因其非常昂贵,又推出8位的8088满足市场对低价处理器的需要,并被IBM的第一代PC机所采用。其可用的时钟频率为4.77、8、10MHz。大约有300条指令,集成了29000更晶体管。
1979: 街机游戏"太空入侵者"发布,引起轰动。很快便使得类似的游戏机大规模流行起来,其收入超过了美国电影业。
1979: Jean Ichbiah 开发完成Ada计算机语言。
1979年6月1日: INTEL发布了8位的8088微处理器,纯粹为了迎合低价电脑的需要。
1979: Commodore PET 发布了采用1MHz的6502处理器,单色显示器、8K内存的计算机,并且可以根据需要购买更多的内存扩充。
1979: 发明了低密盘。
1979: Motorola公司发布68000微处理器。主要供应Apple公司的Macintosh ,后继产品68020用在Macintosh II机型上。
1979: IBM公司眼看着个人计算机市场被苹果等电脑公司占有,决定也开发自己的个人计算机,为了尽快的推出自己的产品,他们大量的工作是与第三方合作,其中微软公司就承担了其操作系统的开发工作。很快他们便在1981年8月12日推出了IBM-PC。但同时也为微软后来的崛起,施足了肥料。
1980~1990
1980:“只要有1兆内存就足够DOS尽情表演了”。微软公司开发DOS初期时说。今天来听这句话有何感想呢?
1980年10月: MS-DOS/PC-DOS开发工作开始了。但微软并没有自己独立的操作系统,他们买来别人的操作系统并加以改进。但IBM测试时竟发现有300个BUG。于是他们又继续改进,最初的DOS1.0有4000行汇编程序。
1981: Xerox开始致力于图形用户界面、图标、菜单和定位设备(如鼠标)的研制。结果研究成果为苹果所借鉴。而苹果电脑公司后来又指控微软剽窃了他们的设计,开发了WINDOWS系列软件。
1981: INTEL发布的80186/80188芯片,很少被人使用,因为其寄存器等与其他不兼容。但其采用了直接存储器访问技术和时间片分时技术。
1981年8月12日: IBM发布其个人计算机,售价2880美元。该机有64K内存、单色显示器、可选的盒式磁带驱动器、两个160KB单面软盘驱动器。这台机器取得了比预想的还要大的成功。
1981年8月12日: MDA (Mono Display Adapter, text only) 能够显示文本的单色显示器随IBM-PC机发布。
1981年8月12日: MS-DOS 1.0,PC-DOS1.0发布。Microsoft是受IBM委托开发DOS操作系统,他们从Tim Paterson那里购买了一个叫86-DOS 的程序并加以改进。从IBM卖出去的叫PC-DOS。从Microsoft卖出去的叫MS-DOS。Micorsoft与IBM的合作一直到1991年的DOS5.0为止。最初的DOS1.0非常的简陋,每张盘上只一个根目录,不支持子目录。直到1983年3月的2.0版才有所改观。MS-DOS在1995年以前一直是与IBM-PC兼容的操作系统,WINDOWS95推出并迅速占领市场之后,其最后一个版本命名为DOS7.0。现在微软的操作系统已经在世界大多数计算机上运行了。
1982: 基于TCP/IP协议的INTERNET初具规模。
1982: 基于6502微处理器的计算机大受欢迎,特别是在学校大量普及。
1982 年1月: Commodore 64计算机发布,价格:595美元。
1982 年2月: 80286发布。时钟频率提高到20MHz,并增加了保护模式,可访问16M内存。支持1GB以上的虚拟内存。每秒执行270万条指令,集成了134000个晶体管。
1982: Compaq公司发布了其IBM-PC兼容机。
1982: MIDI(Musical Instrument Digital Interface)标准制定。允许计算机连接标准的类似键盘数字乐器。
1982: Sony和Phillips公布了压缩音频的红皮书。很快得到欧美的认同。
1982年3月: MS-DOS 1.25PC-DOS 1.1
1982 年4月: Sinclair ZX Spectrum发布:基于Z80芯片,时钟频率3.5MHz。能显示8种颜色。
1982年5月: IBM推出双面320K的软盘驱动器。
1983 年1月: IBM PC在欧洲展示。
1983: Borland公司成立。
1983春季: IBM XT机发布,增加了10兆的硬盘,128K RAM,一个软驱、单色显示器、一台打印机、可以增加一个8087数字协处理器。价格5000美元。
1983年3月: MS-DOS 2.0、PC-DOS 2.0增加了类似UNIX分层目录的管理形式。
1983年10月: MS-DOS 2.25,包括支持其他字符设置,开辟东方市场。
1984: DNS (Domain Name Server) 域名服务器发布,互连网上有1000多台主机运行。
1984: Hewlett-Packard发布了优异的激光打印机,HP也在喷墨打印机上保持领先技术。
1984年1月: Apple 的Macintosh发布。基于Motorola 68000微处理器。可以寻址16M。
1984 年8月: MS-DOS 3.0、PC-DOS 3.0、IBM AT发布,采用ISA标准,支持大硬盘和1.2M高密软驱。
1984年9月: Apple 发布了有512Kb 内存的Macintosh,但其他方面没有什么提高。
1984 底: Compaq开始开发IDE接口,可以以更快的速度传输数据,并被许多同行采纳,后来更进一步的EIDE推出,可以支持到528MB的驱动器。数据传输也更快。
1985: Philips和Sony合作推出CD-ROM驱动器。
1985: EGA标准推出。
1985年3月: MS-DOS 3.1、PC-DOS 3.1。这是第一个提供部分网络功能支持DOS版本。
1985年10月17日: 80386 DX推出。时钟频率到达33MHz,可寻址1GB内存。比286更多的指令。每秒6百万条指令,集成275000个晶体管。
1985年11月: Microsoft Windows发布。但在其3.0版本之全面没有得到广泛的应用。需要DOS的支持,类似苹果机的操作界面,以致被苹果控告。诉讼到1997年8月才终止。
1985 年12月: MS-DOS 3.2、PC-DOS 3.2。这是第一个支持3.5英寸磁盘的系统。但也只是支持到720KB。到3.3版本时方可支持1.44兆。
1986 年1月: Apple 发布较高性能的Macintosh。有四兆内存,和SCSI适配器。
1986 年9月: Amstrad Announced发布便宜且功能强大的计算机Amstrad PC 1512。具有CGA图形适配器、512KB内存、8086处理器20兆硬盘驱动器。采用了鼠标器和图形用户界面,面向家庭设计。
1987: Connection Machine超级计算机发布。采用并行处理,每秒钟2亿次运算。
1987: Microsoft Windows 2.0发布,比第一版要成功,但并没有多大提高。.
1987: 英国数学家Michael F. Barnsley找到图形压缩的方法。
1987: Macintosh II发布,基于Motorola 68020处理器。时钟16MHz,每秒260万条指令。有一个SCSI适配器和一个彩色适配器。
1987年4月2日: IBM推出PS/2系统。最初基于8086处理器和老的XT总线。后来过渡到80386,开始使用3.5英寸1.44MB软盘驱动器。引进了微通道技术,这一系列机型取得了巨大成功。出货量达到200万台。
1987: IBM发布VGA技术。
1987: IBM发布自己设计的微处理器8514/A。
1987年4月: MS-DOS 3.3、PC-DOS 3.3。随IBM PS/2一起发布,支持1.44MB驱动器和硬盘分区。可为硬盘分出多个逻辑驱动器。
1987年4月: Microsoft和IBM发布S/2Warp操作系统。但并未取得多大成功。
1987年8月: AD-LIB声卡发布。一个加拿大公司的产品。
1987年10月: Compaq DOS (CPQ-DOS) v3.31发布。支持的硬盘分区大于32Mb。
1988: 光计算机投入开发,用光子代替电子,可以提高计算机的处理速度。
1988: XMS标准建立。
1988: EISA标准建立。
1988 6月6日: 80386 SX为了迎合低价电脑的需求而发布。
1988年7月到8月: PC-DOS 4.0、MS-DOS 4.0。支持EMS内存。但因为存在BUG,后来又陆续推出4.01a。
1988年9月: IBM PS/20 286发布,基于80286处理器,没有使用其微通道总线。但其他机器继续使用这一总线。
1988年10月: Macintosh Iix发布。基于Motorola 68030处理器。仍使用16 MHz主频、每秒390万条指令,支持128M RAM。
1988年11月: MS-DOS 4.01、PC-DOS 4.01发布。
1989: Tim Berners-Lee 创立World Wide Web雏形,他工作于欧洲物理粒子研究所。通过超文本链接,新手也可以轻松上网浏览。这大大促进了INTERNET的发展。
1989: Phillips和Sony发布CD-I标准。
1989年1月: Macintosh SE/30 发布。基于新型68030处理器。
1989年3月: E-IDE标准确立,可以支持超过528MB的硬盘容量。可达到 33.3 MB/s 的传输速度。并被许多CD-ROM所采用。
1989年4月10日: 80486 DX发布,集成120万个晶体管。其后继型号时钟频率达到100MHz。
1989年11月: Sound Blaster Card(声卡)发布。
1990~2000
1990: SVGA标准确立。
1990年3月 : Macintosh Iifx发布,基于68030CPU,主频40MHz,使用了更快的SCSI接口。
1990年5月22日: 微软发布Windows 3.0。兼容MS-DOS模式。
1990年10月: Macintosh Classic发布,有支持到256色的显示适配器。
1990年11月: 第一代MPC (多媒体个人电脑标准)发布。处理器至少80286/12MHz,后来增加到80386SX/16 MHz ,及一个光驱,至少150 KB/sec的传输率。
1991: 发布ISA标准。
1991年5月: Sound Blaster Pro发布。
1991年6月: MS-DOS 5.0、PC-DOS 5.0。为了促进OS/2的发展,Bill Gates说:DOS5.0是DOS终结者,今后将不再花精力于此。该版本突破了640KB的基本内存限制。这个版本也标志着微软与IBM在DOS上的合作的终结。
1992: Windows NT发布,可寻址2G RAM。
1992年4月: Windows 3.1发布。
1992年6月: Sound Blaster 16 ASP发布。
1993: INTERNET开始商业化运行。
1993: 经典游戏Doom发布。
1993: Novell并购Digital Research, DR-DOS成为Novell DOS。
1993年3月22: Pentium发布。集成了300多万个晶体管。初期工作在60-66MHz。每秒钟执行1亿条指令。
1993年5月: MPC标准2发布。CD-ROM传输率要求300KB/sec。在320*240的窗口中每秒播放15帧图像。
1993年12月: MS-DOS6.0发布,包括一个硬盘压缩程DoubleSpace,,但一家小公司声称,微软剽窃了其部分技术。于是在后来的DOS6.2中,微软将其改名为:DriveSpace。后来WIN95中的DOS成为DOS7.0,WIN95OSR2中称为DOS7.10.
1994年3月7日: Intel 发布90-100 MHz Pentium处理器。
1994年9月: PC-DOS 6.3发布。
1994年10月10日: Intel 发布75 MHz Pentium处理器。
1994: Doom II 发布。开辟了PC机游戏广阔市场。
1994: Netscape 1.0 浏览器发布。
1994: Comm&Conquer(命令与征服)发布。
1995年3月27日: Intel发布120 Mhz的Pentium处理器。
19956月1日: Intel发布133 Mhz的Pentium处理器。
1995年8月23日: Windows '95 发布。大大不同于其以前的版本。完全脱离MS-DOS,但照顾用户习惯还保留了DOS形式。纯32位的多任务操作系统。该版本取得了巨大的成功。
1995年11月1日: Pentium Pro发布。主频可达200 MHz ,每秒钟完成4.4亿条指令,集成了550万个晶体管。
1995年12月: Netscape发布其.JavaScript。
1996: Quake、Civilization 2、Command& Conquer - Red Alert等一系列的着名游戏发布。
1996年1月: Netscape Navigator 2.0发布,第一个支持JavaScript的浏览器。
1996年1月4日: Intel发布150-166MHz的Pentium处理器,集成了330万个晶体管。
1996: Windows '95 OSR2发布,修复了部分BUG,扩充了部分功能。
1997: Gr和 Theft Auto、Quake 2、Blade Runner等着名游戏发布,3D图形加速卡大行其道。
1997年1月8日: Intel发布Pentium MMX。对游戏和多媒体功能进行了增强。
1997年4月: IBM的深蓝(Deep Blue)计算机,战胜人类国际象棋世界冠军卡斯帕罗夫。
1997年5月7日: Intel发布Pentium II,增加了更多的指令和更多CACHE。
1997年6月2日: Intel 发布233 MHz Pentium MMX.
1997年16日: Apple遇到严重的财务危机,微软伸出援助之手,注资1.5亿美元。条件是Apple撤消其控诉:微软模仿其视窗界面的起诉,并指出Apple也是模仿了XEROX的设计。
1998年2月 : Intel发布333 MHz Pentium II处理器。采用0.25微米技术,提高速度,减少发热量。
1998年6月25日: Microsoft发布Windows '98,一些人企图肢解微软,微软回击说这会伤害美国的国家利益。
1999年1月25日: Linux Kernel 2.2.0发布。 人们对其寄予厚望。
1999年2月22日: AMD公司发布K6-III 400MHz。有测试说其性能超过Intel P-III 。集成2300万个晶体管、socket 7结构。
再往下就是今天了,与整个人类的发展历程相比、与传统科学技术相比,计算机的历史才刚刚开始书写,我们正置身其中,感受其日新月异的变化,被计算机大潮裹挟着丝毫不得停歇。
2008年8月28日星期四
成为本地安全大师需要的五个重要步骤
成为本地安全专家实际上并不是什么困难的事情,只要你可以对网络资源进行加密操作,指出安全政策改革的来源,并象TechRepublic社区要求的那样撰写安全方面的文章。换句话说,只要用心去写了,没有语法和拼写错误就可以了。对我来说,这并不是什么困难的事情。你只要五个步骤就可以完成这样的工作。
1.从习惯的领域跳出来。使用你不熟悉的软件。了解新技术。我的意思并不是要你尝试不同的防病毒解决方案,而是你应该使用一些根本的不同软件。
如果你是一名微软认证系统工程师的话,就不应该管理活动目录域,而是利用Linux和FreeBSD操作系统建立家庭网络。如果你是一个操作系统发烧友,在家里有Linux、Windows和MacOS X等多台机器,甚至还有古老的BeOS或者Amiga操作系统的话,就应该建立一个备份服务器以及一个自动记录服务器,并且从零开始建立防火墙与路由器。
我已经做了大量这样的工作。作为学习一个新操作系统的挑战,我关注于Plan 9 分布式操作系统。正如我刚才说,如果你走出熟悉的地带,并且了解了不同的技术,就可以开始学习新的东西,已经使用了的新技术,并且会加深对系统的理解。
2.学习一些编程技术。即使只是一点点的编程技术也可以帮助你了解更多的关于如何在整个软件体系结构的系统安全中扮演重要角色。只要多一点点就会教你更多地了解它。
当你了解了如何为某一特定的操作系统编写驱动程序,就可以发现这个操作系统的安全缺陷。当你了解了如何编写文件系统的代码,就可以知道文件系统的设计和操作系统的特权分离事宜,这样的话,就可以拥有自己的观点。
3.大量地阅读。首先,加入邮件列表。合适的列表包括,开放源代码社区、编程技术社区以及信息安全研究社区提供的内容。
作为安全学习的原则。配合安全领域相关的提问,从世界上最有影响力的黑客电子邮件组BugTraq你可以获得安全方面的最新消息。此外,你也可以阅读象布鲁斯·施奈尔一类专家的安全报告。
经常保持阅读和安全有关的好书。安全类的书籍可以让你了解不少有关安全的原理,帮助你更快得成长。
4.经常检查你的设定。加密不等于安全,你不能一直确认防伪和加密会让系统变得更安全。我不是要你忽略知道的一切,而是应该仔细再三的检查,并对设定进行思考和分析。
5.最后,了解自身的实际情况。不要在别人告诉你应该如何进行安全操作的时间,就无条件相信。你应该仔细考虑,慢慢分析,如果存在多种可能性的话,确认它适合实际的情况。思考的时间,要注意,什么是在他告诉你的时间可能没提到的,它的来源是哪里。每个人都有自己的目标,你要考虑自己的目标和其他的有什么不同,避免可能存在的陷阱。
额外奉送一个建议,第六个步骤就是把我的blog加入你的列表。在不久的将来我将在TechRepublic社区信息安全的blog里提供更多的可以帮助你成为安全大师的资料。
1.从习惯的领域跳出来。使用你不熟悉的软件。了解新技术。我的意思并不是要你尝试不同的防病毒解决方案,而是你应该使用一些根本的不同软件。
如果你是一名微软认证系统工程师的话,就不应该管理活动目录域,而是利用Linux和FreeBSD操作系统建立家庭网络。如果你是一个操作系统发烧友,在家里有Linux、Windows和MacOS X等多台机器,甚至还有古老的BeOS或者Amiga操作系统的话,就应该建立一个备份服务器以及一个自动记录服务器,并且从零开始建立防火墙与路由器。
我已经做了大量这样的工作。作为学习一个新操作系统的挑战,我关注于Plan 9 分布式操作系统。正如我刚才说,如果你走出熟悉的地带,并且了解了不同的技术,就可以开始学习新的东西,已经使用了的新技术,并且会加深对系统的理解。
2.学习一些编程技术。即使只是一点点的编程技术也可以帮助你了解更多的关于如何在整个软件体系结构的系统安全中扮演重要角色。只要多一点点就会教你更多地了解它。
当你了解了如何为某一特定的操作系统编写驱动程序,就可以发现这个操作系统的安全缺陷。当你了解了如何编写文件系统的代码,就可以知道文件系统的设计和操作系统的特权分离事宜,这样的话,就可以拥有自己的观点。
3.大量地阅读。首先,加入邮件列表。合适的列表包括,开放源代码社区、编程技术社区以及信息安全研究社区提供的内容。
作为安全学习的原则。配合安全领域相关的提问,从世界上最有影响力的黑客电子邮件组BugTraq你可以获得安全方面的最新消息。此外,你也可以阅读象布鲁斯·施奈尔一类专家的安全报告。
经常保持阅读和安全有关的好书。安全类的书籍可以让你了解不少有关安全的原理,帮助你更快得成长。
4.经常检查你的设定。加密不等于安全,你不能一直确认防伪和加密会让系统变得更安全。我不是要你忽略知道的一切,而是应该仔细再三的检查,并对设定进行思考和分析。
5.最后,了解自身的实际情况。不要在别人告诉你应该如何进行安全操作的时间,就无条件相信。你应该仔细考虑,慢慢分析,如果存在多种可能性的话,确认它适合实际的情况。思考的时间,要注意,什么是在他告诉你的时间可能没提到的,它的来源是哪里。每个人都有自己的目标,你要考虑自己的目标和其他的有什么不同,避免可能存在的陷阱。
额外奉送一个建议,第六个步骤就是把我的blog加入你的列表。在不久的将来我将在TechRepublic社区信息安全的blog里提供更多的可以帮助你成为安全大师的资料。
订阅:
评论 (Atom)