五千年(敝帚自珍)

主题:【原创】浏览器是怎么变成操作系统的 -- 美人他爹

共:💬233 🌺560
分页树展主题 · 全看首页 上页
/ 16
下页 末页
    • 家园 【原创】【1】非传统的Chrome OS

      【1】非传统的Chrome OS

      浏览器是操作系统吗?严格说来不是。

      传统意义上的操作系统,是指硬件与应用软件之间的隔离层,它的任务是,1. 提供给软件调用和控制硬件设备的标准命令集,这样软件就不用担心同一类型但是由不同厂商生产的硬件设备的命令集有什么不同,从而简化了软件开发的难度,2. 在多个软件同时调用和控制硬件设备时,协调这些软件占用硬件设备的时间长短以及谁先谁后的优先级,从而避免多个软件竞争使用硬件时,可能产生的冲突。

      从这个定义出发,浏览器是应用软件,而不是操作系统,甚至不是操作系统的一部份。但是为什么Google最近推出的Chrome OS,把浏览器Chrome作为操作系统的一部份呢?原因在于如何定义应用软件。

      很多应用软件都是遵循MVC范式,M=Model,指的是Data,V=View,指的是UI,C=Control,指的是业务处理逻辑。Data有三个来源,1. 电脑本地存储系统,应用软件程序可以通过文件系统的APIs,来读取这些数据,2. 网络服务器,通过给应用软件指定URL,来获取相应数据,3. 在使用应用软件时,用户输入的数据,或者在运行应用软件的过程中,应用软件生成的数据,作为中间结果,被应用程序重新调用。至于UI和Control,对于传统意义的应用软件开发来说,这两者都由软件开发者通过编写程序的方式来实现。

      大多数UI部分的程序开发,繁琐而且雷同。为了简化UI部分的程序开发,一个思路是把雷同的程序编写成函数库,应用开发者只需要调用函数库的APIs,而不需要重复实现这些函数库。譬如Java Swing就是这种思路的范例。

      另一个思路是浏览器,UI的开发者不写程序,而是写HTML和CSS。程序描绘的是过程,控制电脑先做什么后做什么,每一步怎么做。而HTML和CSS描绘的是结果,包括图片和文字的布局,以及字体颜色等等的渲染效果。至于先画什么,后画什么,调用哪个函数库去布局去渲染,这些工作交给浏览器去自动完成。

      对于Chrome OS来说,应用软件指的是,UI部分由HTML+CSS定义的非传统意义的软件。这样的软件,离不开浏览器去读解HTML+CSS,去自动规划如何实现目标的步骤,以及自动实施这些步骤。对于这样的非传统意义的软件来说,作为隔离硬件和软件的操作系统,自然应该包含浏览器。

      换而言之,Chrome OS不是传统意义上的操作系统。它与传统意义的操作系统的分水岭,表面上看在于是否把浏览器当作操作系统的一部份,但是实质问题是Chrome OS支持的应用软件,不是传统意义上的应用软件,至少Chrome OS提倡的应用软件的模范,不是传统意义上的应用软件。

      关键词(Tags): #关于ChromeOS的东拉西扯通宝推:渡泸,
      • 家园 送花送宝。

        载入中

        载入中...必要时请刷新页面

        谢谢:作者意外获得【通宝】一枚

        鲜花已经成功送出。

        此次送花为【有效送花赞扬,涨乐善、声望】

        [返回] [关闭]

      • 家园 请教,Chrome的特别指出在哪里?

        如果是翻译和解释HTML和CSS作为UI,那么任何浏览器都有这个功能,是否都被考虑为操作系统的一部分呢?

        曾经简略的看了一下Chrome介绍,好像是每一个Tag都是独立的进程。这样的设计是否有独到的好处呢?

        • 家园 独立的进程

          曾经简略的看了一下Chrome介绍,好像是每一个Tag都是独立的进程。这样的设计是否有独到的好处呢?

          主要是为了安全。每个tag都有一个专属进程,这样如果某一个tag崩溃了,不至于影响其它tags、

          不过这也不是绝对的。假如tags多了,chrome会考虑多个tags共享一个线程,这样不至于造成线程数量太多。

          • 家园 说每个tab一个进程不完全对

            实际上chrome有4种模式(Chromium Process Model):

            1. Process-per-site-instance 这个是默认的模式,每个进程支持一个站点实例。一个站点实例就是从同一个页面展开的同一个站点的所有页面的集合。

            2. Process-per-site 每个站点使用一个进程,而不管是不是从同一个页面展开的。

            3. Process-per-tab 这个就是前面说的那种情况,每个tab使用一个进程。

            4. Single process 单进程多线程,和IE7/8、Firefox一样。

            不过里面也有一些优化处理。比如资源充裕的时候使用Process-per-tab,当同一个站点的页面达到一定数量的时候在转成Process-per-site-instance。

            默认使用Process-per-site-instance或Process-per-site时,如果一个页面导致render进程崩溃,同一个进程支持的页面都会崩溃。呵呵,这个邓侃也说了。

            安全是Chrome使用进程而不是线程的一个原因。现代操作系统给进程间通信的安全性提供了很好的支持,不容易通过crack IPC访问到另一个进程的内存空间。

            Chrome使用sandbox来保护render进程。sandbox技术不太了解,好像就是从操作系统的层次限制render进程的操作,减小render进程崩溃时造成的损失。不过对于plugin进程,Chrome好像还没有使用sandbox,而且现在很多页面崩溃的情况都是plugin造成的(想起来泥砖给出的flash崩溃的解决办法:装一个flash blocker囧)plugin和extension终究还是浏览器的短板啊(IE满脸泪痕)

            使用进程还有一个好处就是可以利用操作系统来回收资源。IE的老毛病就是会有内存泄漏,主要都是DOM tree的操作造成的。在IE7/8上,漏了就漏了,等到整个浏览器关掉的时候一起交给Windows回收吧。Chrome稍微积极一点,当一个页面关闭或者跳转到另一个页面的时候,有机会通过关闭对应的render进程让操作系统把东东都收回去。这是个懒办法,用不着操心那么多线程管理和内存管理,但是不失为一个好办法,呵呵

            现代操作系统对进程的支持还是很强大滴。内存管理、IPC、安全都有比较成熟的方案。sandbox这样的东西windows从2k就开始支持啦,差点就被MS层出不穷的技术给埋没啦。Google拿着洛阳铲刨出来乐呵呵的拿回家自己用啦。MS沉默无语,回家翻箱倒柜折腾出一个Gazelle来,据说强大滴狠,就是不知道啥时候能有产品出来。还是要表扬一下MS滴,好多技术都是MS折腾出来的,可总是墙内开花墙外红。唉,MS开发的不是产品,是寂寞啊

            关键词(Tags): #Chrome#Sandbox#多进程
            • 家园 使用第三方的东西自然是有风险的

              plugin和extension终究还是浏览器的短板啊

              只要你的系统让别人扩展,就要承担这个风险。操作系统里面最大的麻烦,也是用第三方的驱动程序,可是不用人家的驱动怎么扩展呢,操作系统不就是一堆driver外面包层桌布么。我在这边读书的时候,一个牛人师兄就是研究怎么让第三方的驱动更安全的。浏览器需要别人的扩展,同样承担这个风险。

              苹果的办法是管起来,硬件就那么几种,驱动也就那么几个;java稍微好一点,直接扔进沙盒,怎么折腾,最后把沙盒用水一冲就干净了;微软一贯的风格是效率第一,安全是第二位的。

              • 家园 这方面Google还是有点创新的

                Chrome让plugin运行在独立的进程里面,至少不会因为plugin崩溃而全军覆没。这比Firefox有点小进步。但是没有在plugin进程上使用sandbox。

                Java的沙箱里还是留下了一个漏洞的:JNI。类比来看,只要是能让第三方扩展到相同的空间,就没有什么好办法解决安全问题。IE的activeX和extension,Mozilla和Chrome用的NPAPI plugin,还有操作系统里面的驱动,都是一样的道理。把plugin独立到单独的进程空间,看来Google还是发现了问题并做了点努力的。

                关键词(Tags): #Chrome#Plugin
            • 家园 Chrome Sandbox的点点滴滴

              sandbox(沙箱)是一个被当今软件界用滥的一个名词。凡是和安全挨边的产品,sandbox几乎就成了个形容词。

              比如,AJAX就称作使用了sandbox技术。它是这样描述自己的sandbox的:javascript仅可以操作当前页面的DOM TREE,javascript对网络的访问(XMLHttpRequest)仅限于当前页面的同一域名 --- 避免CSS攻击(或叫XSS攻击)。

              因此,sandbox的核心含义就是行为进行严格的约束并给这种行为划定清楚的界限。IE系列(不包括IE8)安全隐患的最大问题就是他的扩展技术ACTIVEX是个“全能冠军”,即没有它不能接触(处理)的东西,或者说没有沙箱化。

              CHROME的沙箱由下列进程限制构成(针对Windows):

              1.最低级别的RENDER进程。比如,该进程不可以创建子进程,不可以“调试”现有进程。

              2.除了线程,进程内存,IPC管道,进程共享内存,RENDER进程的文件,网络访问均通过父进程(BROWSER)代理。RENDER进程甚至没有通常意义上的WINDOW句柄。RENDER ENGINE就是拿着一块内存在那里画阿画阿,画完了之后通知老大(BROWSER 进程),然后老大就把这块内存的东西(就是一个BMP图像)拷贝到TAB中。

              3.RENDER进程使用独立的DESKTOP,因此windows API的调用受到了很多限制,钩子(Windows hook),clipboard这样的东西想都别想。

              4.插件可以用独立的进程运行,也可以在RENDER进程运行。但是自己访问网络,采用WINDOW句柄画图的插件还是在自己的进程里面玩吧。这也是CHROME起劲地鼓捣新HTML 5的原因之一,比如HTML 5 VIDEO。CHROME的一个思路就是插件也要按沙箱的思路重新设计。

              • 家园 嗯,学习啦

                flash是所有浏览器的尾大不掉啊,看来HTML5肯定要跟进啦,又是一片血雨腥风啊。

              • 家园 【原创】关于沙盒

                我读书的时候,一个年轻教授的总结很精辟:

                As long as you cannot name the resource, you cannot touch it.

                就是说,只要你把需要保护的资源放在另外一个命名空间,使得可疑的代码不能直接或者间接的name那些资源,那么这些资源就是安全的。

                这里name应该怎么翻译,我想应该是“指定”的意思。

                在计算机科学里面,任何代码需要访问资源,都需要指定这个资源。指定,或者说name,可以是地址,可以是句柄,可以是url。如果不能指定,就不能访问。

                虚拟内存是指定了一个地址空间,java也是指定了一个虚拟机,ajax的保护,是在url前面添加来源站点,也是限制在了命名空间里面。

                这又回到了UNIX和C语言的模型:一个现存的系统,和一个用来描述对系统进行使用的语言。安全模型,就是让语言只能访问某些资源,而语言不能直接或者间接指定的资源,就是安全的。

分页树展主题 · 全看首页 上页
/ 16
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河