西西河

主题:【原创】进程的反击 -- zllwy

共:💬48 🌺136 新:
分页树展主题 · 全看 下页
  • 家园 【原创】进程的反击

    借用一下Star War里面“帝国的反击”的题目,来聊一下最近进程(process)重新回到系统设计的前台的情况。操作系统的并发计算技术(concurrent computing,不是并行计算 parallel computing。Concurrent computing是个更广的概念,parallel computing是指有可以并行处理的硬件)从multiprogramming,multitasking/multiprocessing到multi-threading,并发的单元从job,task到process,再到thread。最近十几年,multi-threading是最时髦的并发编程技术。进程(process)作为一个并发计算的单元,已经逐渐隐入后台,很少为程序员接触了。还在直接用fork()和IPC编程的可能不多见了。进程和线程的最大区别就在于进程有独立的地址空间,线程则在一个进程内共享地址空间。从系统资源的角度来说,进程比较重,粒度更大,耗用的资源多。随着并发计算越来越重要,尤其是并行的硬件支持越来越丰富,轻量级的线程自然成了时髦的选择。

    不过,最近一些新的计算平台的出现,又把进程带到了前台。这里说两个例子。一个是Chrome浏览器,一个是Android操作系统。Chrome改变了以往浏览器用线程运行并发的任务(比如显示一个网页),增加了进程来隔离不同网页的显示。最大的好处自然是提高了浏览器的安全性和可靠性。一个网页进程的崩溃不会导致整个浏览器的崩溃。最多只要把出现故障的页面关掉就可以了。在实际的使用体验中我们也确实感受到了可靠性的提高。另外,一个网页的进程无法访问另外一个网页的进程,使得浏览器的安全漏洞减少了。无独有偶,在Android系统中也使用了进程来隔离不同的应用。每个应用在缺省的情况下单独在一个虚拟机的实例中运行。这样如果一个应用发生问题不会影响到其他的应用。这点我体会也很深。以前我的java me的dumb phone,时不时会死机然后需要重启。Android的手机我到目前为止还没有死机过。最多是某个单独的应用死了,把它杀掉也就是了。从安全性角度来说也一样,不同应用之间无法访问对方的地址,这就大大减少了被攻击的可能。

    进程之所以能重新杀到前台来,我觉得跟硬件的进步有很大的关系。硬件资源(尤其是内存)已经可以支持比较多的进程。另外,软件设计上对可靠性和安全性的重视也是使得进程重新受宠的一个重要原因。

    通宝推:铁手,
    • 家园 新的技术带来新的平衡

      使用线程还有一个很重要的理由就是可以在多个线程中快速的传递数据,由于同一个进程下的线程共享同一个地址空间,所以线程间的数据通信通常要比不同地址空间的进程间通信快一个量级。

      实际上进程和线程是互补的两个技术手段,虽然进程开销在目前的硬件环境下越来越小,进程的边界确是无法消除的(否则就没有线程和进程的区别了)。Chrome和Andriod的例子只不过是用效率换取稳定性,而且相对的这些转换为进程的应用都不需要和其他的进程频繁通信,因此这个平衡做得很不错。

    • 家园 猜想以后(操作系统)会慢慢进驻cpu中

      而另外一部分将变成硬件driver register manager和标准化远程进程间通信协议。

      过去的操作系统包揽一切。cpu本身像是dummy。

      现在的cpu本身,一方面是多重缓存,本身就有进行内存调度功能,另一方面多核,在16个或32个核之间的进程调度,已经需要和过去的操作系统一样复杂。

      尤其广域网的分布计算,资源可能是在全分布的。一个数千个内核组成的超级计算机,和互联网几千个PC,之间没有本质不同,除了联接速度。但互联网几千台PC还是很难智能地形成超级计算模式。因为现在的操作系统还是面向单机资源的。

      慢慢地cpu集成越来越多的核,还有GPU,缓存。这样cpu内部就形成了一个过去的电脑主机,过去的操作系统核心将进驻cpu内,由硬件完成或是可编程微代码完成。

      intel收购了防病毒软件,新的intel已经在硬件中内置了高清视频的版权验证。那么不同计算机之间远程的进程安全验证也可以内置。那么将来防病毒软件的部分功能将内置在cpu中,尤其是多个电脑之家进行进程调用可以由cpu进行信任验证。每个cpu可以内置独一无二无法改变的识别码,像网卡MAC或IP6。进程是否含有病毒或非法操作也由cpu自己验证。这种进程调度可以直接由cpu完成控制,甚至由cpu进行远程的跨互联网的进程调度安全认证。那么跨互联网的电脑可以以进程调度为方式轻松形成超级计算。

      现在的google等主导的html5软件沙箱是以牺牲代码执行效率为代价的。远不如cpu内建硬件沙箱,本地进程和远地进程由cpu自动分配不同的权限,由于是硬件内置的,任何病毒都无法更改。而且可以直接远程调用机器码执行,而不是任何script

      这个变化很可能intel会主导。intel收购防病毒公司肯定不是指望卖软件的,而是打算cpu内部集成某种进程安全验证功能。

      • 家园 架空的话,我的理想,系统总线IP化

        IPV6作为要作为计算机系统基础结构的一部分,所有的硬件,比如cpu啊GPU啊,内存啊,显存啊啥之类的,统统有一个IPV6地址,反正够用。 然后也不分local/remote了,反正ipv6管够。

        这样的话,可以大大简化开发人员的编程模型,然后系统有可能能把所有的计算资源一并统一管理。

      • 家园 OS不会到CPU中去的

        当然CPU会接过一些现在OS干的活,比如增加指令对多线程和虚拟机的特别支持。但OS到CPU在去,那是不现实的。软件实现不比硬件实现慢多少的,而且硬件实现的代价太大了。读读CPU指令集就知道,每条指令都超简单的,呵呵,可没有web service这样的东西。即使这样,硬件工程师也累死了。

        而且,硬件做出来就不能改了。你就满足从不升级你的OS了?

      • 家园 个人觉得,后面会是分布式OS大发展

        有点像minix这样的OS,核心很小,重要的系统功能以服务的形式跑在用户态。可能内存管理在cpu某个核上,进程调度在cpu另一个核上;也可能内存管理在某个cpu上,进程调度在另一个cpu上;这些cpu可能在一个设备中,也可能通过互联,在多个设备中。与此同时,编译器也会根据这些分布式特点而进化,在并行、并发方面应该有新的模型出现。

        • 家园 microkernel的春天什么时候会来呢

          mach,minix等等,好像都不太成功。可能硬件还不够强大。你的描述很像plan 9,跟我要说的Go有很大关系。哈哈。

          • 家园 mach已经很成功了吧

            借水果神教御用内核之名,卖遍全球了的说

          • 家园 期待大作

            硬件是否强大是一方面,但理论的缺失(或者说没有实用化的技术)可能是更大的原因。cpu没有为os提供并行、并发的模型和指令接口;os没有内建的支持并行、并发的机制;编译器虽然有很多模型,效果好门槛低的还不多。所以这个生态系统要完善估计得三五十年吧,mach/minix/L4这些microkernel的春天还得再等等。:-)

            函数式语言,go、scala等新兴语言在这今后的十几年内可能会更受关注。但未来c或者改造后的c依然会作为“汇编语言”发挥他的基础作用。

            另外有空多讲些网络服务端的一些技术啊,什么成熟的框架、新兴的技术、经验感悟都要,哈哈

            • 家园 并行计算的春天已经来了,秋天三、五十年吧
            • 家园 其实我也半瓶子水

              不过发现把感受写下来有助于整理自己的思路,另外,和大家讨论也对自己是个帮助。边学边写吧。也希望更多的人一起写。

分页树展主题 · 全看 下页


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

Copyright © cchere 西西河