什么是操作系统?兼谈WebOS
前面写了篇《Google收购Writely,WebOS即将成型》, 200来字的小文章。但是因为提到了WebOS这个词语,遭到了很多人的质疑,人名太多我就不详细的列了。WebOS这个词汇产生于上世纪90年代,还很新,很多人不了解不认同可以理解,但是这些质疑者,却恶语相向,什么“看看大学本科操作系统教材好吗?!莫名其妙。”什么“忽悠也不是你这么这个忽悠法,凭概念吃饭的时代已经过去了。”的,我本来不想多说,插科打诨,息事宁人,原因是没精力和他们纠缠,也没有义务跟他们上课。但是人家又说我不敢正面应对,或者太小气,不肯传道授业解惑于他人。那好,写这么一篇东西出来,好也好,坏也罢,说我无知的可以继续,说我小气的可以歇着了。
[跳过第一页,直接了解WebOS]
醒客老哥,回应我的文章谈了些想法《Google的操作系统重要吗 》,他的想法跟我的不尽相同,但是遭到了跟我一样的待遇。看来我们遇到了硬茬子,说好也不对,说坏也不对,提到WebOS就一律是忽悠,哈哈。他有写了篇《再说Google OS 》,原本是解释,没想到遭到了更多的砖头的袭击,看来我也难逃此运了,哈哈。
什么是操作系统
操作系统在维基百科中文版中的定义如下:
操作系统(Operating System,简称OS) , 是电子计算机系统中负责支撑应用程序运行环境以及用户操作环境的系统软件,同时也是计算机系统的核心与基石。它的职责常包括对硬件的直接监管、对各种计算资源(如内存、处理器时间等)的管理、以及提供诸如作业管理之类的面向应用程序的服务等等。
操作系统在维基百科英文版的定义 如下:
An operating system is a special computer program that manages the relationship between application software, the wide variety of hardware that makes up a computer system, and the user of the system.
大家可以很清晰的看到这两个定义并没有本质的区别。操作系统的定义很简单,就是提供应用程序的运行环境,提供用户操作环境的软件。
操作系统的简要历史
在早期的计算机系统里面是没有操作系统的,最早的ENIAC (Electronic Numerical Integrator and Computer)没有键盘显示器等等的,所有的输入操作都是通过对开关的通断来实现的,输出是通过灯泡的亮灭显示的,改变计算公式甚至需要对线路进行重新的布置,那个年代是没有操作系统的。
两位女士正在操作ENIACENIAC里面并没有内存,只有寄存器,而且控制系统是通过硬接线实现的,想改变公式就需要对线路重新布置。这样操作其实非常的不方便。所以,著名的"计算机之父"冯·诺依曼加入这个计划之后,提出了改进意见EDVAC (Electronic Discrete Variable AutomaticComputer)计划。EDVAC实际上就是最早的冯诺依曼结构的雏形,现在我们使用的通用计算机结构仍旧属于冯诺依曼结构。
之后为了方便无人值守的批量任务执行,产生了单任务的批处理操作系统,批处理操作系统的任务很简单,按照实现设定好的顺序把任务装入执行。为了充分利用大型机等昂贵设备的资源,产生了多任务操作系统(分时操作系统),为了让一般的学生和科学工作者也可以分享大型机的计算能力,出现了大型机+分时操作系统+ 哑终端的模式。之后,慢慢出现了为普通人服务的微型机,也就是个人电脑。然而最早的个人电脑也是没有操作系统的,最早的个人电脑是阿尔塔(牛郎星电脑)没有键盘,显示器,只有开关和灯泡(像不像微型版的ENIAC)。微软第一个成功的商业产品其实就是给牛郎星写的BASIC解释器,因为很多人免费使用(也就是盗版)这个BASIC解释器,比尔盖茨写了封“给爱好者们的公开信”,成为商业软件产业诞生的标志。实际上我们知道的著名的Apple I上面也并没有安装操作系统,只有一个ROM BASIC和引导程序。
谈这些历史,是想让大家知道,在没有操作系统的年代,裸机也是可以使用的。而操作系统的产生是为了给应用程序提供一个运行环境。
操作系统必须直接驱动硬件么?
我们见到的大部分操作系统都是直接驱动硬件的,这就给人一个错觉,所有的操作系统都是必须驱动硬件的。win31推出的时候,虽然有内存管理,进程管理(那时候win系统没有线程概念),有图形界面,但是仍旧被人质疑是否是操作系统。原因是win31的文件系统是dos支持的,引导程序是 dos,换言之,win31不能直接运行在硬件上。这是一种误解,现代的操作系统大多分层,为了移植和系统的结构化,一般来说操作系统都会分为硬件相关层,硬件无关层。硬件相关层一般就是io处理和做驱动程序管理。而内存管理,进程管理,图形界面等等一般都是硬件无关层处理的。
对Cpu来说,一段普通内存地址和一块硬件端口映射出来的内存地址并没有任何区别。这是因为从计算逻辑上看,任何功能用硬件实现和用软件实现并没有任何的区别。正因为此,我们才能在一台win操作系统的机器上面VMWare上面安装一个linux,或者反之。操作系统就是应用程序的运行环境,也就是一个硬件和软件之间的层。早期的操作系统比如dos,比如unix之前的那些专用的大型机操作系统等等,它们根硬件的结合都比较紧密,难以分开,提供的硬件以外的功能也很少。然而unix本身就是为了解决在多种不同类型大型机之间移植而设计,从概念上就已经跟硬件分离了。windows也很类似, winnt4.0可以用于x86芯片,也可以用于alpha芯片的机器就是因为这个原因。
分布式操作系统更是传统操作系统思想的变革,分布式操作系统是安装在整个分布系统里面的,其中任何一台也可以安装有自己的本地操作系统.