西西河

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

共:💬233 🌺560
全看树展主题 · 分页首页 上页
/ 16
下页 末页
家园 独立的进程

曾经简略的看了一下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#多进程
家园 晕,sandbox是微软先搞出来的??

最早提出sandbox概念的,恐怕是Java刚出来时候,applet题出来的吧。把安全性都由sandbox来控制,让用户不用担心到处都有安全问题。

说新东西都是微软搞出来的恐怕不合适,微软擅长的是拿来主义。对这么个大公司来讲,等别人创新,然后把idea拿过来,做的更好或者干脆收购对手,实在是更省事高效的办法。

家园 我倒不是推崇MS

对sandbox在操作系统里面提供良好的支持,MS应该是实践先行者,这方面MS还是个好孩子的说。Chrome对Windows sandbox的评价是

The Windows sandbox is a user-mode only sandbox. There are no special kernel mode drivers, and the user does not need to be an administrator in order for the sandbox to operate correctly. The sandbox is designed for 32-bit processes and has been tested on Windows 2000, Windows XP 32 bits, and Windows Vista 32 and 64 bits.

我不了解Linux的情况,好像Chrome是在用Apparmor。Chrome的文档里面没有详细说这些,感觉没有Windows的好用。Chrome的代码里面说有关于sandbox的详细说明,但是好像在他们内部的网站,看不见的说

sandbox的概念和应用早就有了,Java也是先行者之一。对安全方面没有什么研究,可能是在瞎说,多多担待。

可能说的不太明白,新东西不都是MS搞出来的,但是MS确实搞出很多好东西(有钱人就喜欢瞎搞)我们不能因为MS经常出去抢劫就说他自己发明不出来东西,抢劫犯和发明家没有互斥关系,毕竟MS Research里面还是有一大票牛人在干活的。

关键词(Tags): #MS
家园 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的一个思路就是插件也要按沙箱的思路重新设计。

家园 使用第三方的东西自然是有风险的

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

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

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

家园 【原创】关于沙盒

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

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

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

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

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

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

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

家园 太守您帮我八卦一下马丁叔叔?
家园 name是必要条件,但不是充分条件
家园 这方面Google还是有点创新的

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

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

关键词(Tags): #Chrome#Plugin
家园 嗯,学习啦

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

家园 一点想法,不知道对不对

即使不能直接或者间接的访问资源或者另一个空间,并不意味就安全啦。

一种情况是我不能访问就不能有别人访问,或者把保护机制给累死。DDoS就是这样的情况。我虽然不能攻克你的网站,但是别人也不能接触到你,或者把你的护盾累死,有点像围点打援。不能访问的资源就是没有价值的资源,你失去了价值,安全不安全的就不是问题啦。

另一种情况是针对程序空间这样的主动资源。你再安全也需要和外界沟通才会产生价值。只要你出门,早晚有一天我们可以遇上的。在你要吃的东西里下点毒,在你要走的路上挖个坑(河里的老大们最擅长此道)。不需要访问你,只要我们在某时某刻在某一点上产生联系就够了。

关键词(Tags): #安全
家园 那充分条件是啥啊

太守不要只说半句话

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


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

Copyright © cchere 西西河