gaga 发表于 2005-8-24 17:21

Zone(或者说container,不确定是否是一个东西)是的概念是sun自己独有的吗?感觉像插在kernel和应用程序之间的一层‘虚拟机’。kernel管理这些‘虚拟机’,如果某个有问题就重新初始化它。问题是如果kernel本身有问题的话还不是一样整个系统崩溃。sun的这样做大概是意图简化它的‘kernel’的功能和复杂度,从而提高稳定性。但是对于用户来说,那个包含关键的应用的zone如果崩溃了,和整个系统崩溃的差别并不大。就像很多人说X的windows manager不稳定不代表unix不稳定。可是用户的应用程序都是在xwindow里面,X完蛋了我的工作也都完蛋了。就算你能全身而退回到console也没有太多意义。

FSS的概念和线程的优先级别似乎是一样的。另外,我记得process是有自己的独立空间,thread只能和别的thread共享父process的空间。或者solaris重新定义了这些名词?

xiaobailong 发表于 2005-8-24 19:10

原帖由 gaga 于 2005-8-24 18:21 发表
Zone(或者说container,不确定是否是一个东西)是的概念是sun自己独有的吗?感觉像插在kernel和应用程序之间的一层‘虚拟机’。

Container包含zone和Resource Management两部分。这个概念是sun自己独有的,但是其它的操作系统也有一些类似的概念。大家主要都是在用不同的方法实现应用程序的“隔离(isolation)”。

把应用程序装在一个个独立的servers上面是最彻底的隔离,但是需要的资源就比较多,管理起来化的功夫也比较大。好处当然有,就是每台机器上的资源都是由自己的应用程序独享的。一个机器硬件出问题的话,不会影响其它的机器。

Containers是实现隔离所需资源最小,管理最简单的一种解决方法。可以实现纯软件级别的高度隔离,和一定程度的硬件资源隔离,但是如果机器硬件整个出问题的话,就不行了。

介于二者之间的还有前面提到的Domain, Partitions, 以及VMware等等。大家各自的隔离度不同,需要化在管理上的功夫也不同,为实现同样的应用所需的资源也不同。


kernel管理这些‘虚拟机’,如果某个有问题就重新初始化它。

这个不太正确。一个container看上去就像一个独立的操作系统一样,因为有自己的资源,包括 IP addresses, hostname, root user, non-root users, file system, devices, 甚至是专用的CPU set,etc. (另外还有RPC domain, nameing services, 这两个是什么,我还没搞清楚呢。)

虽然看上去像多个操作系统,但是事实上这些Containers公用一个kernel。 这样对性能的影响就非常小,几乎可以忽略不计。kernel管理这些“虚拟操作系统”,但是如果某个contianer有问题的话,5555555555, 需要管理员才能重新初始化它,而不只是kernel.


问题是如果kernel 本身有问题的话还不是一样整个系统崩溃。

Solaris的kernel已经优化了20多年了,稳定性非常好,不会那么容易出问题崩溃的。这也正式它相对于Windows和Linux的优势。:lol:



sun的这样做大概是意图简化它的‘kernel’的功能和复杂度,从而提高稳定性。
错了,那些container的管理功能是新加进kernel里去的。原来的kernel倒是没有任何简化。

Sun这样做的意图,就是为了实现应用程序,资源,和故障的隔离,从而提高安全性和稳定性。而不是靠简化提高稳定性。以前所有的一切应用程序都放在一起,相当于都放在一个不分房间的房子里,经常会互相影响的,而如果一个应用需要重新启动系统,就会影响所有的程序。而用了contianer, 等于分开放在不同的房间里了。那么当然增加了安全性,方便性,降低了互相干扰。


但是对于用户来说,那个包含关键的应用的zone如果崩溃了,和整个系统崩溃的差别并不大。就像很多人说X的windows manager不稳定不代表unix不稳定。可是用户的应用程序都是在xwindow里面,X完蛋了我的工作也都完蛋了。就算你能全身而退回到 console也没有太多意义。

可是照这种说法,就算是把各个应用程序放在单独的server上,如果包含关键应用的server崩溃了,还不是和整个系统崩溃一样吗?对于这种关键应用,"隔离(isolation)"就不是问题的关键了,而高可靠性(High Availability)才是问题的关键。这个可以通过多台机器组成的cluster来实现,那才是正确的解决方案。

这么说吧,Containers和Cluster,一个是纵向分割,一个是横向联系。两个结构不同,实现的功能也不同,适用的情况也不同,可以作为互相补充吧。


FSS的概念和线程的优先级别似乎是一样的。
不知道是不是一样的,但也许Solaris里面另外有进程的优先级,优先级的事情我还没研究过。。。。但是FSS不光针对进程,还可以针对由进程组成的tasks, 由tasks组成的projects, 以及包含process, tasks, projects的Zones.这是一个扩展过的两级结构。可以防止某个(某些)程序过渡消耗资源而导致其它程序无法运行的情况。


另外,我记得process是有自己的独立空间,thread只能和别的thread共享父process的空间。或者solaris重新定义了这些名词?
Solaris里面就是这样的定义啊。所以process是划分的最小单位,因为资源共享的原因,不可能一个process的某几个threads在一个zone里,另几个threads在另一个zone里。

可是我怎么觉得linux的thread是和 Solaris的不一样的呢?也许是错觉?谁给说说,linux里面process和thread是怎么定义的?

$辛苦$$支持$

[ 本帖最后由 xiaobailong 于 2005-8-25 11:55 编辑 ]

gaga 发表于 2005-8-24 19:44

因为记得你的帖子里提到solaris的process相当于linux的thread(或者反过来?),有些纳闷。不过现在找不到你的帖子了,也许我看错了。

zone的出现的确可以隔离有故障的程序。至少让故障不会影响其他应用程序的运行。(前提是zone可以阻绝一切应用程序对kernel的破坏性操作)。

我说的‘虚拟机’是觉得它和SUN自己的java有些类似之处。都是将用户屏蔽出原系统,提供一个完全的运行环境。不过zone还做不到仿真出一堆硬件吧?我想它应该介于cygwin一类的API仿真和vmware一类的硬件仿真的中间。不提供独立的硬件却提供独立的进程和内存管理。

所有的想法都是基于你的帖子的介绍,呵呵,也许有曲解。没时间去翻solaris文档了。

xiaobailong 发表于 2005-8-24 20:11

原帖由 gaga 于 2005-8-24 20:44 发表
因为记得你的帖子里提到solaris的process相当于linux的thread(或者反过来?),有些纳闷。不过现在找不到你的帖子了,也许我看错了。

你没看错,我是这么写过的呢。我怎么觉得linux里没有process, 只有thread一样啊?或者我弄错了?


zone的出现的确可以隔离有故障的程序。至少让故障不会影响其他应用程序的运行。(前提是zone可以阻绝一切应用程序对kernel的破坏性操作)。

我说的‘虚拟机’是觉得它和SUN自己的java有些类似之处。都是将用户屏蔽出原系统,提供一个完全的运行环境。不过zone还做不到仿真出一堆硬件吧?我想它应该介于cygwin一类的API仿真和vmware一类的硬件仿真的中间。不提供独立的硬件却提供独立的进程和内存管理。

所有的想法都是基于你的帖子的介绍,呵呵,也许有曲解。没时间去翻solaris文档了。

你说的没错啊,绝大多数都是正确的。 sun自己也把zone和jvm相提并论呢。

zone据说可以把硬件虚拟化,就是说在zone里面可以感觉不到你是在什么样的硬件上的。但是肯定仿真不出不存在的硬件。具体我还没怎么研究呢。等知道了再来写。。。

vmware我知道一些,就是一个Linux的应用程序,实现一层虚拟平台,上面可以同时运行Linux, Windows和Solaris等多个操作系统的多个不同的instances.也是在一台机器上是实现隔离的方法。不过vmware是单独的产品,我们公司有人用的,可是我没有license, 不能用。。。而上面如果运行多个操作系统的话,需要有各自的license的。我都不知道vmware是否开源?

zone就不存在这个问题,因为是内嵌在Solaris里面的了。不需要另外的任何其它费用,就可以得到多个相对独立的“操作系统”。而且是开源的。

vmware的好处是可以在一台机器上同时运行多个不同的操作系统,而zone就只有Solaris 10采用,相当于所有的"操作系统"都是Solaris 10.

那么cygwin又是怎么回事呢?

gaga 发表于 2005-8-24 20:40

相信大部分root登录到unix系统最常干的一件事就是 ps ,查一下process status ;)

cygwin是win32平台下的类unix api环境。在上面可以重编译运行绝大部分开源的GNU软件。给很多不愿意脱离windows的人(比如我;))一个‘unix shell’。另外一个很有价值的是免费的win32平台上的X server实现(xorg)。我的感觉是cygwin在win32上留住了至少一半想投入linux桌面怀抱的人。

xiaobailong 发表于 2005-8-24 21:07

原帖由 gaga 于 2005-8-24 21:40 发表
相信大部分root登录到unix系统最常干的一件事就是 ps ,查一下process status

那就是说都叫process和thread. 一样的了。


cygwin是win32平台下的类unix api环境。在上面可以重编译运行绝大部分开源的GNU软件。给很多不愿意脱离windows的人(比如我)一个‘unix shell’。另外一个很有价值的是免费的win32平台上的X server实现(xorg)。我的感觉是cygwin在win32上留住了至少一半想投入linux桌面怀抱的人。


那就是wine的相对应的东东了。。。 Solaris上也有个类似cygwin的东东.$不错$

[ 本帖最后由 xiaobailong 于 2005-8-24 22:13 编辑 ]

gaga 发表于 2005-8-24 21:40

原帖由 xiaobailong 于 2005-8-24 22:07 发表


那就是说都叫process和thread. 一样的了。



那就是wine的相对应的东东了。。。 Solaris上也有个类似cygwin的东东.$不错$

thread是最基本的执行单元,每个process(mach里好像是task)必须至少包含一个thread。至少posix,win32是这么定义和进行库实现的。内核thread,用户thread和轻量thread运行在不同的层级。不过记得SUN的东西在细分thread的定义上有些区别。

wine可以直接运行win32的二进制代码,提供一个更低级的运行环境。换句话说,实现了对windows的二进制兼容。相比之下cygwin应该称为源码级的api仿真。GNU软件必须重新编译成本地的win32代码才可以在cygwin里执行。(而不是直接把UNIX的elf或者coff文件拿来执行)而所有的cygwin程序都依旧是纯粹的win32进程,和其他windows程序一起统一归windows内核管理。

greenflute 发表于 2005-8-24 22:17

Thread和process在不同的系统里和使用不同的线程库时是不一样的。
比如Solaris应该是真Thread,而早期Linux则是用process模拟thread,值得一提的是,windows是真thread,呵呵
但是记得新版本的linux或者是使用pthread线程库的时候,是真线程(记不太清了,惭愧)

greenflute 发表于 2005-8-24 22:30

原帖由 xiaobailong 于 2005-8-24 03:21 发表
greenflute和tecehux提的问题还都是挺到位的啊。

惭愧惭愧,俺只记得domain的license好贵哦,而且只有大型机上才有domain一说。据说3500也可以分domain,具体情况没研究过。
如果能在工作站级别的机器上划分zones,应该是sun做出了很大的牺牲/或者战略决策。总之感觉硬件门槛应该不会太低,商业宣传和技术实现还是有一定距离的。


solaris的知识还望多多推介,哈哈

gaga 发表于 2005-8-24 23:33

原帖由 greenflute 于 2005-8-24 23:17 发表
Thread和process在不同的系统里和使用不同的线程库时是不一样的。
比如Solaris应该是真Thread,而早期Linux则是用process模拟thread,值得一提的是,windows是真thread,呵呵
但是记得新版本的linux或者是使用p ...


现在linux的是posix thread(pthread)。solaris有它自己的threading实现。其他的还有mach,irix,win32等,不过概念上都和process区分开了的。不清楚早起linux的具体实现,如果是process来模拟的话只能说是伪threading
页: 1 2 [3] 4
查看完整版本: 开个Solaris Containers专题, 大家来讨论啊