文档章节

现代操作系统

MarvinGuo
 MarvinGuo
发布于 2015/06/05 11:26
字数 1553
阅读 96
收藏 0

以前的博客地址http://www.cnblogs.com/Chrome/archive/2012/01/06/2314688.html

现在发表在oschina上,2012年写的,找一些认同的人


  很少写原创博,今天一篇,算是对自己以往学习的总结。

 

现代操作系统的起源,我想毫无疑问是从UNIX开始的。而UNIX的开始,又是从C语言开始。UNIXC是天生的一对。C写了UNIX,当然会有少量汇编。而UNIXAPI导出,当然是C的方式。也就是说要去使用UNIX的功能,第一理想编写语言当然是CC的特点无需要多说,介绍的书太多了。这一切看似自然而然,其中确有一个深刻的根基。C是程序语言友好语言,不知道是否有人明白。

  C语言的友好性,在于,它是基于函数的。而其它任何语言,都是可以很方便导入C语言的函数的。例如, C# P/Invoke, C++, Visual Basic.而即使角本语言,如Ruby,虽然不能直接导入C的库,但确可以通过扩展,可以生成Ruby模块库。而编写模块库的语言,当然也是C

 操作系统还在进化。C的缺点,写代码或多或少知道。系统越来越复杂,而面向对象是公认的复杂性的解决办法。操作系统需要基于面向对象的组件化程序库。AT&TC++成为公认的面向对象语言。而离开的AppleSteve Jobs, 创办了一家叫Next的公司,这家公司当然,也生产操作系统,名叫NextStep。大约都到了1993年这个时候,业界开始了组件化平台尝试。

 Windows引入一个叫COM的组件化平台,它不是由特定计算机语言生成的库,而是一种规范。C++被赋予了编写COM组件的任务。而天生的基于COM思想的语言,就是Visual Basic。它既可以生产COM组件,也可以消费COM组件。COM规范不复杂,但确以难以理解而著称。关于COM,有相当的多的书可以看。微软也出了一系列工具去解决这个问题,但好像除了微软,其它组织很难编写出好的COM。他们都是从微软挖人才能完成COM的编写。

 而在这个相当的时间,NextStep推出了自己的组件化平台Cocoa。熟悉的人知道它是苹果的组件化平台,但它真实起源确实从NextStep开始的。与微软的不同,它是基于一个编程语言的:Objective-C。这一切开始的自然而然,因为UNIX的平台也是从一个语言开始的。一个问题出现了,为什么Windows没有采用业界公认的面向对象语言C++去编写这个组件平台,而是自定义这个叫COM的组件开台?

 我查资料,没有答案。或许就是没有答案?历史在这里开了一个玩笑。作为C的面向对象的接班人C++,居然没有被选择去接面向对象操作系统的班。那么那个叫Objective-C的呢?其实它也是C的面向对象的接班人,只是它出身不如,名气不如,所以似乎走向小众。而似乎NextStep也是小众,因为当时Windows操作系统正在统治世界。

 历史没有如果。计算机的世界也没有如果。

 我给出的答案是,Objective-CC一样,是一门编程语言友好语言。也就是其它语言可以使用其编写的库。即使这门语言不支持面向对象,例如C,也是可以使用Objective-C的库。而C++编写的库,除了C++自身,其它语言很少能使用它编写的库。

 我们能看到C++语言发明人,Objective-C语言发明人评价C的,但我确没有找到C语言发明人评价C++Objective-C的。毕竟在一个理性世界(计算机世界),还是要靠实力说话的。 

 微软意识到了COM的问题,而这时出现了一个叫Java的东西。它给了微软启发,这东西 可以降低COM的复杂。于是出现了.Net,而且一直研究发展。而忘掉了自己是做操作系统的。直到它意识到,.Net虽然好玩,但确不能作为操作系统的API。这开开什么玩笑。时间不等人,而时间也确实不等人。

 Apple收购了NextCocoa装进了Mac OS。当然这时的世界,Windows依然大幅的领先。但技术的领先与否,仁者见仁,智者见智。Windows依然采用CAPI的开发方式,而Mac OS,已经开始装配先进面向对象组件化平台。这东西,微软以前也装配过,但被自己放弃了。开发的效率确实不可同日而语了。Mac OS还在慢慢发展。直到移动设备的大量出现,iOS,这个被改装的操作系统一下子统治了世界。当然能看到这个趋势也有别人,Google也发展了Android

 微软急了?!以操作系统起家的微软,如今确拿不出对抗的系统了。.Net首先就被弃了。COM呢?再拿这个上个世纪的东西去吓唬人,岂不是太丢人。还好,这些年他们发展了一个叫C++/CLI的东西。于是Windows8就是在这样的背景下研发。Windows8还将装配Win32 API,因为Win32下的桌面系统还是占了大部分份额。对于触摸世界,借用Windows Phone 7Metro设计风格,设计叫WinRTAPI。当然,还和以前一样,这东西还不是基于语言的,基于类似于COM的一个规范。研究底层的人还是能发现COM的影子。

 诸位,故事结束了吗?

 Android, WebOS, BlackBerry的故事呢?  Android用的Java, WebOS用的JavaScipt, BlackBerry用的AdobeAIRAndroid留有后手,抛弃Java,换其它平台也就可能。

 

 总结: UNIX真是伟大。能够继承UNIX旗帜也是伟大。



© 著作权归作者所有

共有 人打赏支持
MarvinGuo
粉丝 2
博文 1
码字总数 1553
作品 0
朝阳
数据库 物理层 物理块在磁盘上的分配是操作系统管理的 还是数据库自己管的

n物理块在磁盘上的分配 l早期DBMS经由操作系统分配,逻辑上链接数据被分配在不同位置,DBMS自己不参与管理;需要操作系统碎片整理 l现代DBMS一次性申请; 4连续分配法:文件分配在连续空间,...

李东亮
2012/05/24
780
4
造就开放的网络硬件生态系统-ONIE

Open Network Install Environment (ONIE)是一个开源计划,为现代网络硬件定义了一个开放的安装环境。ONIE造就了一个开放的网络硬件生态系统,使得最终用户可以在不同的网络操作系统中进行选...

匿名
2017/11/29
37
0
OpenSolaris 2008.11 正式发布

OpenSolaris 2008.11 已于近日正式发布。它是 OpenSolaris 操作系统最新发行版本。(上一个发行版本是:OpenSolaris 2008.05,下一个发行版本将是:OpenSolaris 2009.04)对于用户、开发人员...

红薯
2008/12/03
132
0
面向对象的API--OpenStep

OpenStep是一组面向对象的API,大部分是由NeXT与Sun Microsystems开发。作为一种面向对象的操作系统的规范,有一些现代操作系统用它作为核心。对于OpenStep一个重要的认识是,它只是一组API...

匿名
2010/11/15
1K
0
nPth 0.9 发布, 非先占式多任务线程实现

新GNU Portable Threads Library nPth发布了0.9版。 nPth是一种非先占式多任务线程实现,它设计在现代操作系统中取代GNU Pth。相比之下,GNU Pth是基于操作系统标准的线程实现,因此nPth的库...

oschina
2012/05/09
579
0

没有更多内容

加载失败,请刷新页面

加载更多

原型模式

1、原型模式-定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 克隆(浅度克隆->拷贝值类型或者引用,深度克隆->创建新的对象,开辟新的内存) 例如客户端知道抽象Pro...

阿元
今天
32
0
awk命令扩展使用操作

awk 中使用外部shell变量 示例1 [root@centos01 t1022]# A=888[root@centos01 t1022]# echo "" | awk -v GET_A=$A '{print GET_A}'888[root@centos01 t1022]# echo "aaaaaaaaaaaaa" | aw......

野雪球
今天
28
0
深入解析MySQL视图VIEW

Q:什么是视图?视图是干什么用的? A:视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。   通过视图,可以展现基表的部分数据;...

IT--小哥
今天
37
0
虚拟机学习之二:垃圾收集器和内存分配策略

1.对象是否可回收 1.1引用计数算法 引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时候计数器值为0的对象就是不可能...

贾峰uk
今天
24
0
smart-doc功能使用介绍

smart-doc从8月份底开始开源发布到目前为止已经迭代了几个版本。在这里非常感谢那些敢于用smart-doc去做尝试并积极提出建议的社区用户。因此决定在本博客中重要说明下smart-doc的功能,包括使...

上官胡闹
昨天
37
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部