您的位置:首页 > 其它

操作系统历史回顾

2009-10-10 15:24 253 查看
转帖自:http://code.google.com/p/msys-cn/wiki/ChapterOne 版权信息 Copyright (C) 2009, 唐华欣 本内容供读者随意转载,请保留本信息即可 http://code.google.com/p/msys-cn/wiki/ChapterOne 介绍 在 2003年的时候,本人开始学习的编程,不过由于我第一个接触的编程不是PC机上的,而是由于偶然购买了一块PIC单片机的开发板,从学习PIC的汇编开始学习的编程。在后来几经转折又跳到了PC上的C和C++语言的学习,由于对与硬件的熟悉和研究PC的渴望下,在04年开始了研究操作系统开发技术的旅程。 操作系统开发是一项过时了的技术,但又是一项至今为止仍然保持在前沿领域的技术,目前为止完整掌握了该项技术的国家只有美国,并且在其中仍然有许多技术处于保密和研发阶段。本人通过几年的努力和参与多项开源操作系统、内核开发的经历,整理出了一整套的开发思路与具体的实现方法,让操作系统能够在现有的免费工具,同时在Win32或者Linux平台上实现新操作系统的开发。我打算把这些年OS开发的经验写成系列文章,让现在那我当年一样充满畅想的朋友能够直接获得所需要的技术从而开始开发操作系统的旅程,特别是国内的软件业和嵌入式行业同仁。 这是这一系列文章的第一篇,在今后不断推出的文章中,我将介绍一个完整的类UNIX内核、库还有一部分编译器的开发方法、工具使用和相关理论,只需要读者熟悉操作Windows或者Linux操作系统,并且拥有简单的C语言知识即可。不过我在这里提前声明,如果您是一位很认真对待OS开发的朋友,期待通过阅读、学习本系列文章从而重新开发一个取代现有系统的新OS,那么我推荐您就不需要再继续看下去了,那样只会浪费您的生命,程序界还有太多值得探索的领域。目前为止我们基于商业的选择Windows和免费的选择Linux能够顺利的完成我们日常的工作,所以尽量去完善这些现有系统,而千万不要只是为了取代别人而去重新发明车轮(Re-inventing the wheel)。当然,即使您是认真的开发者,如果您继续阅读我的文章我也会很高兴,并且很愿意与你们探讨相关的有用技术或者提供帮助。 在本系列文章中,我将尽量避免过多的使用未说明的术语,以便让读者能够从简单、深入浅出的方法追随整个开发旅程。其实这里涉及到一个哲学问题,那就是我们是在学习时更有幻想和创造力,还是在学会以后更有创造力。这是一个很难回答的问题,因为以我个人为例,当我学习一个全新的知识领域的时候,我会在阅读前人所攥写的精美篇章时,突然迸发出许多相关领域的知识片段,出现在眼前,甚至想出了许多比作者所描述的传统思路更加好的解决方案,虽然由于缺乏全面的理论基础而不知道自己创想的方案是否能够真正实现,但是逻辑上清晰的知道,自己想到的其实更简单、方便一些。然而对于过去传统教育中学过的知识,我却很少充满创想,往往只会追随前人所固有的思维模式去重复解决各个问题,不能开创出独特的解决方法。 所以我还是很推荐初学者去尽可能的在阅读这些文章时发挥想象,如果有什么好的主意,哪怕仔细想一想又很幼稚或者思考片面,但是写出来跟大家一起来交流,说不定你的想法就是下一个时代所通用的方法,我鼓励大家多多交流。如下是笔者的电子邮件地址,欢迎大家与我进行邮件通讯进行技术交流: codemastor AT gmail DOT com 请将AT转换为“@”,将DOT转换为“.“;同时,请垃圾邮件散播者不要给我写信,谢谢。 在下一节中,我们将从UNIX这个史上最成功的操作系统的发展历史开始我们操作系统开发的旅程。 UNIX 发展史 在介绍 UNIX 之前,我想先写一下整个操作系统技术的发展旅程。 真正操作系统概念和相关技术的产生和大规模开发的年代要起源于20世纪50年代,当时由于电子技术的不断前进,已经走到了一个处理器足够复杂到需要一个上层的软件体系进行硬件资源的分配、管理的程度,因此在那个年代无数的OS开发论文、理论不断涌出,直到今天我们许多OS的关键技术仍然是那个年代的思想。在 OS开发史上有2个操作系统值得一题,这二者都为后来的成功者UNIX做了铺垫并且提供了技术基础: OS/360 和 Multics。 OS/360 是面向当时IBM提出的大型计算机而开发的,其在20世纪60年代初开始开发,到1964年正式发布,作为了第三代计算机技术的见证。记得曾经读过《人月神话》中,作为 OS/360 项目的开发主持者之一的 Frederic P. Brooks Jr. 说到,当时 OS/360 项目曾经红极一时,在最高峰时曾经有一万人同时在写代码。作为一个庞大的软件项目的同时,其背后是一个更加庞大而复杂的管理项目,因此我推荐读者有兴趣的可以去读一读《人月神话》,这本书也成为了后来许多软件工程学的思想的主要来源。OS/360后来虽然并不成功,也没有延续至今,但其为后来的许许多多由商业公司组办的OS开发项目提供了充分的技术基础,这些受到启发的商业OS项目中就包含Multics和UNIX操作系统。 Multics 全称多路信息与计算服务系统(Multiplexed Information and Computing Service),它最早也是为大型计算机而设计的用于研发用途的操作系统,在1964年由贝尔实验室、麻省理工学院和通用电气公司所共同开发,其中最早提出了多用户、多进程的概念,在后来被UNIX所沿用。在1969年时,由于计划不顺,工作进度过于缓慢,遭到了项目撤除,同时,贝尔实验室退出了其开发计划。 贝尔实验室曾经参与Multics开发的两名技术人员 Thompson 和 Ritchie 在不经意中,由于想运行一个著名的叫做"Star Trek"的游戏而开始编在DEC的PDP计算机上利用Multics的一些概念和设计开发一个小型的操作系统,最开始是全部用汇编语言编写的。后来由于这个操作系统概念简单、使用方便,获得了大量应用,两名作者为了更有效的管理和移植代码,发明了一种基于脚本的自动汇编代码生成工具,最后演变成了C语言编译器。由于C语言的简单、功能强大和UNIX的简单、功能丰富的设计,最后UNIX获得了大量成功,并且最后在贝尔实验室完成了 UNIX V6 和 UNIX V7 版本。基于V7版本,最后发展出了当今的各种商业 UNIX,UNIX V6、V7 的代码以及注释可以在这里下载到,对于OS开发学习者是一笔不小的财富: http://download.csdn.net/source/346718 那么为什么 UNIX 没有成功的发展成为当今最成功的操作系统,而一个完全没有基于 UNIX 的 Windows 产品却成为了主流电脑(或者说大多数计算机)所使用的操作系统呢?这就与1980年代的UNIX大战有关了。 在最初的时候,许多大学、研究机构都可以自由的获得UNIX以及其全部的源代码,当然当时附加代码发布的主要原因是让大家更容易的获得学习C语言的素材和了解UNXI内部的工作机制,因此每一个 UNIX 的 /usr/sys 和 /usr/src 目录中都是包含内核与所有工具(包含C语言编译器)的源代码的。由于UNIX的大量应用于工业、科研以及教学部门,人们开始意识到了 UNIX 的潜在价值,是否可以利用UNIX来赚钱呢? 由于当时许多公司发布了基于UNIX的产品,而由于相互之间独立开发的许多功能与扩展并不兼容,因此为了保存自己所有的市场,开发商们开始加快开发自己的独立扩展,导致当时UNIX各个版本之间相互竞争更加激烈,并且相互不兼容,现在被称为 UNIX 大战(The UNIX Wars)。 后来人们意识到了不同的扩展和不兼容导致了UNIX的发展陷入了不良的事态,而当时电信大亨、贝尔实验室的所有者AT&T公司仍然手持UNIX的版权,因此AT&T提出了开放UNIX的概念,将各种实现进行标准化以统一UNIX的发展,于是形成了时代性的产品SYSTEM V,这个版本最后成为了如今的BSD系列(全称Berkeley Software Distribution,是美国加州大学伯克利分校研究、独立扩展、发布的UNIX版本,包含FreeBSD、NetBSD、OpenBSD)、SUN 的Solaris(如今也开源了OpenSolaris版本)、SCO公司的SCO UNIX、IBM的AIX操作系统等等众多的版本,但是需要注意的一点是,尽管实现、使用上非常像UNIX,但是如今的Linux不属于UNIX的分支。 相关链接: UNIX官方历史描述:www.unix.org/what_is_unix/history_timeline.html
OpenSolaris下载 :www.opensolaris.org
FreeBSD官方网站 :www.freebsd.org
总结UNIX发展历史,UNIX提出了以下的概念: 一个完整的操作系统应当包含一个内核、编译器、高级语言编译器、标准库、驱动程序(服务)、应用程序;
每一个应用程序应当享有相互独立的内存区域,称为进程,在相同的内存中,应当可以创建子程序,并且各个子进程可以并发同时的运行,分享同一个处理器(线程);
操作系统应当提出用户的概念,用户分享一系列基础的程序、数据、配置,同时每一个用户需要享有自己独立受保护的程序、数据以及配置;
一切都是文件,无论是硬盘区域、数据、设备、内核设施(如管道、消息)、甚至是远程的ftp、http目录,并且一切都可以通过文件的标准接口进行操作(open、close、lseek、fcntl、read、write等);
对于磁盘数据应当以树形数据结构进行管理,提出节点(文件、目录、特殊文件)的概念;
设备内部的存储控件应当可以挂载到当前的磁盘某节点上(比如将ISO文件装到loopback设备中,然后将loopback挂载到磁盘上,然后就可以像访问本地磁盘一样的访问ISO光盘镜像上的文件);
作为以字符界面为主要控制界面的操作系统, UNIX 发挥到了极致,几乎通过控制台的命令无所不能,甚至超越了图形界面的能力;然而,一个面向非计算机领域的人的计算机系统应当是不需要计算机知识基础就能使用的(或称,所见即所得( WYSISYG, What You See Is What You Get 的缩写),因此只有真正实现了强大的图形界面的操作系统才能实现计算机系统在非计算机领域内的普及,而世界上大多数专业与非专业领域的人都是不明白计算机的。 Microsoft 公司自从1985年成立以后,就 从Windows 3.1 系统开始花大量资金注重GUI(Graphical User Interface)图形用户界面操作系统的开发,后来延续发展出了 Windows 95、Windows 98、Windows ME、Windows NT、Windows 2000 一直到最成功的 Windows XP 操作系统。我们先不评价相比UNIX操作系统,它在技术上有多么欠缺、实现上的过于复杂或者不易使用,但是它简单易用、所见即所得的图形界面最终让比尔盖茨实现了他当年的理想”每个人都拥有一台电脑“,同时让计算机技术如今得到了大量的普及。作为一个受惠者,没有微软的Windows操作系统就没有今天我们人人都有的个人电脑和由于产业规模所实现的如此低廉的造价,我们需要向微软致敬,向比尔盖茨致敬。 而 UNIX虽然最早于1983年就拥有了X Windows图形系统,但是一直以来只是字符控制界面的辅助工具,除了数据显示以外并没有得到大规模的应用,直到1992年Linus Tovalds通过自己和互联网上人们的无私奉献,创造出了Linux操作系统,后来1996年人们才基于Linux操作系统开始为了追求简单、易用性而开始了KDE项目。KDE、GNOME等图形项目的发展是与Linux的诞生密不可分的,但是时间已经太晚,Windows先入为主、同时商业规模化运营而成为了成功者。 在以后的篇章中,我们所开始开发的OS的许多概念将继承自UNIX而不是Windows,为什么?当然理由有很多,UNIX是最古老、同时最成功的OS设计,但是最主要的是UNIX有着最完美的架构,其核心设计哲学”一切都是文件“是操作系统的真正设计精华,同时我们将在后面的开发中应证这一点,无论是开发者还是用户,这都是最核心、最充满智慧的设计哲学。 转帖自:http://code.google.com/p/msys-cn/wiki/ChapterOne
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: