转来的
3.2.4 Windows NT
http://book.51cto.com 2008-09-05 08:42 (美)理曼德(Raymond,E.S.)姜宏/何源/蔡晓俊译 电子工业出版社 我要评论(0)
摘要:《UNIX编程艺术》第三章主要为大家介绍的是Unix哲学同其他哲学 , 本小节将为您介绍Windows NT。
标签:UNIX 编程 操作系统 Windows NT UNIX编程艺术
Oracle帮您准确洞察各个物流环节
3.2.4 Windows NT
Windows NT(New Technology)是微软为高端个人用户和服务器设计的操作系统;发行的版本实际上有好几个,我们为了讨论方便把它们视为一个系统。自从2000年公布的Windows ME终结后,目前所有的Window操作系统都以Window NT为基础;Windows 2000是NT 5,Windows XP(本书写作时是2003年)是NT 5.1。NT起源自VMS,很多重要特性与VMS相同。
NT是逐步堆积而成的,缺乏对应于Unix“一切皆文件”或MacOS桌面的统一性理念。由于它的核心技术没有扎根于一小群稳固的中枢观念中,[14]因此每过几年就会过时。每一代技术----DOS(1981),Windows 3.1(1992),Windows 95(1995),Windows NT 4(1996),Windows 2000(2000),Windows XP(2002)和 Windows Server 2003(2003)----随着旧方式被宣告过时而不再有良好支持,开发者必须以不同的方式从头学起。
alick 于 2009-09-10 12:19:19发表:
转来的
3.2.4 Windows NT
http://book.51cto.com 2008-09-05 08:42 (美)理曼德(Raymond,E.S.)姜宏/何源/蔡晓俊译 电子工业出版社 我要评论(0)
摘要:《UNIX编程艺术》第三章主要为大家介绍的是Unix哲学同其他哲学 , 本小节将为您介绍Windows NT。
标签:UNIX 编程 操作系统 Windows NT UNIX编程艺术
Oracle帮您准确洞察各个物流环节
3.2.4 Windows NT
Windows NT(New Technology)是微软为高端个人用户和服务器设计的操作系统;发行的版本实际上有好几个,我们为了讨论方便把它们视为一个系统。自从2000年公布的Windows ME终结后,目前所有的Window操作系统都以Window NT为基础;Windows 2000是NT 5,Windows XP(本书写作时是2003年)是NT 5.1。NT起源自VMS,很多重要特性与VMS相同。
NT是逐步堆积而成的,缺乏对应于Unix“一切皆文件”或MacOS桌面的统一性理念。由于它的核心技术没有扎根于一小群稳固的中枢观念中,[14]因此每过几年就会过时。每一代技术----DOS(1981),Windows 3.1(1992),Windows 95(1995),Windows NT 4(1996),Windows 2000(2000),Windows XP(2002)和 Windows Server 2003(2003)----随着旧方式被宣告过时而不再有良好支持,开发者必须以不同的方式从头学起。
下面是其它一些后果:
GUI功能与继承自DOS和VMS的残留命令行界面不能稳定共存。
套接字编程没有类似Unix那种“一切皆是文件句柄”的统一数据对象,因此在Unix中很简单的多道程序设计和网络应用到NT下则要牵涉更多基础性概念。
NT的一些文件系统类型也有文件属性,但仅限用于为实现某些文件系统的访问控制列表,因此对开发风格不会产生太大影响。NT也有文本和二进制这两种记录类型区别,时不时地讨人嫌(NT和OS/2都从DOS那里继承了这个不良特性)。
尽管支持抢先式多任务处理,但进程生成却很昂贵----虽然比不上VMS,但是(平均生成一个进程需要0.1秒左右)要比现在的Unix高出一个数量级。脚本功能薄弱,操作系统广泛使用二进制文件格式。除了此前我们总结过的,还有这些后果:
大多数程序都不能用脚本调用。程序间依赖复杂脆弱的远程过程调用(RPC)来通信,这是滋生bug的温床。
根本就不存在通用工具。没有专用软件就不可能读取或编辑文档和数据库。
随着时间的推移,CLI越来越被忽略了,原因是环境稀缺。薄弱CLI引起的问题不仅没有得到改善,反而越来越糟糕。(Windows Server 2003试图稍稍扭转这种趋势。)
Unix的系统配置和用户配置数据分散存放在众多的dotfiles(名字以“.”开头的文件)和系统数据文件中,而NT则集中存放在注册表中。以下后果贯穿于设计中:
注册表使得整个系统完全不具备正交性。应用程序的单点故障就会损毁注册表,经常使得整个操作系统无法使用、必须重装。
注册表蠕变( registry creep ) 现象:随着注册表的膨胀,越来越大的存取开销拖慢了所有程序的运行。
互联网上的NT系统因易受各种蠕虫、病毒、损毁程序以及破解(crack)的攻击而臭名昭著。原因很多,但有一些是根本性的,最根本的就是:NT的内部边界漏洞太多。
NT有访问控制列表,可用于实现用户权限组管理,但许多遗留代码对此视而不见,而操作系统为了不破坏向后兼容性又允许这种现象的存在。在各个GUI客户端之间的消息通讯机制也没有安全控制[15],如果加上的话,也会破坏向后兼容性。
虽然NT将要使用MMU,出于性能方面的考虑,NT 3.5后的版本将系统GUI和优先内核一起塞进了同一个地址空间。为了获得和Unix相近的速度,最新版本的NT甚至将Web服务器也塞进了内核空间。
由于这些内部边界漏洞产生的协合效应,要在NT上达到真正的安全实际上是不可能的[16]。如果入侵者随便作为什么用户把一段代码运行起来(例如,通过Outlook email宏功能),这段代码就可以通过窗口系统向其它任何运行的应用程序发送虚假信息。只要利用缓存溢出或GUI及Web服务器的缺口就可以控制整个系统。
因为Windows没有处理好程序库的版本控制问题,所以长期备受被称为“DLL地狱(DLL hell)”配置问题的折磨,在这个问题中,安装新程序可以任意升级(或降级)现有程序运行依赖的库文件。专用的应用程序库和厂商提供的系统库都存在这个问题:应用程序和特定版本的系统库一起发布非常普遍,一旦没有特定的系统库,应用程序就会无声无息地垮掉。[17]
从好的一面来看,NT提供了足够的特性来支持Cygwin。Cygwin是一个在实用工具和API两个层次上实现Unix的兼容层,而且只有极少的特性损失[18]。Cygwin允许C程序既可以使用Unix API又可以使用原生API,许多为形势所迫不得不使用Windows的Unix黑客在Windows系统上安装的第一个程序就是Cygwin。
NT操作系统的目标用户主要是非技术型最终用户,意味着对界面复杂度的容忍度非常低。NT既可作客户端又可作服务器。
在其历史早期,微软依靠第三方开发商提供应用软件。起初,微软还公布Windows API的完整文档,并保持其开发工具的低价格。但是,随着时间的推移、竞争者的相继倒下,微软转而青睐内部开发的战略,开始向外界隐藏API,开发工具也越来越昂贵。早在Windows 95时期,微软就要求将保密协议作为购买专业级开发工具的一个条件。
围绕DOS和Windows早期版本形成的玩家文化和轻松开发文化已经足够壮大,即使在微软日益加强的排挤(包括为了把业余开发者非法化而设立的各种认证计划)下也足以自我维系。共享软件从未消亡,而在2000年后,迫于开源操作系统和Java的市场压力,微软的策略也略有转变。但是,随着时间的推移,供“专业”编程使用的Windows接口越来越复杂,将轻松(或严肃!)编程的门槛越抬越高。
这段历史的后果就是业余NT和职业NT开发者的设计风格存在尖锐的分歧----两个群体之间几乎不通气。尽管小型工具和共享软件的玩家文化非常活跃,但职业NT项目却往往产出庞然大物,甚至比那些VMS一样的“精英”操作系统还要臃肿。
Windows下的Unix风格的shell功能、命令集和API函数库来自第三方,包括UWIN、Interix和开源Cygwin。
alick 于 2009-09-10 12:16:34发表:
3# ooopooo
哦,打漏字了,自windows 2000后,Windows都是NT内核。
xiazhouquan 于 2009-09-08 10:50:06发表:
微软的内核不清楚。
jasmine126 于 2009-09-08 00:03:11发表:
嵌入式的uC/OS-II
6000498 于 2009-08-26 10:43:28发表:
不懂
ooopooo 于 2009-08-22 09:14:08发表:
2# alick
PLEASE DEFINE"都是内核"
哈哈,具体是啥子嘛?
alick 于 2009-08-21 11:15:38发表:
windows新版本 都是内核
其它的都是unix的变种了把
或者linux,开源的