coLinux 与 openMosix 的联合

图 1 向我们展示了 openMosix 的工作方式。


图 1. openMosix 的工作方式

openMosix 在 Linux 内核内部运行。它有若干个可以通过 /proc 接口进行控制的参数。为了简化实际的操作,创建了一些用户空间应用程序。openMosix 以分散的decentralized)方式工作,所以在此拓扑中没有主节点或从节点。这一分散式策略被应用于负载信息交换,并且应用于进程迁移期间。

如果负载均衡算法认为另一个节点的工作负载较小,而且适于迁移进程,那么 openMosix 会透明地将进程迁移到目标节点。进程不能或者不应该迁移的原因是多种多样的使用 pthreads、进行大量磁盘操作、运行期非常短)。从用户空间的角度来看,不需要修改应用程序代码。所有工作都在内核空间透明地完成。

现在,让我们来研究 coLinux 如何工作下面的图引用自 coLinux.org)。


图 2. coLinux 内部结构的总体描述获得了Dan Aloni 的授权,他是 coLinux 首席开发人员和文档编写者)

Dan Aloni 将 coLinux 描述为一个协作的cooperative) 且半虚拟的paravirtualized) Linux 虚拟机。协作指的是它将控制权自主地交还给宿主 OS。半虚拟指的是:除了 CPU 和内存以外, coLinux 内核不需接触任何实际的硬件。这与 VMWare 不同,后者截取访问硬件设备的 I/O 并模拟它。coLinux 感觉像是一个独立的 Linux 机器 —— 客户内核的内部结构与宿主内核的内部结构是分开的。

注意,coLinux 由两部分构成:

在宿主内核空间运行的 coLinux 内核驱动程序。

若干个用户空间后台进程。

coLinux 内核驱动程序的主要工作是:

在启动时加载 Linux 客户内核。您可以认为这个功能类似于引导加载器比如 LILO 或 GRUB)。

根据 colinux-daemon 进程的要求执行 ioctl() 请求。这个 ioctl() 调用负责进行客户 OS 与宿主 OS 之间的上下文切换。

为来自某些虚拟驱动器cobd块设备)、conet网络)、cocon控制台))的中断和请求进行代理转发。

在用户空间中,最重要的是部分是 colinux-daemon-process。除了负责触发上下文切换之外,它还要作为 colinux-console-nt 和 colinux-net-daemon 等一些其他后台进程的“管理者”。例如,通过 colinux-console,用户可以查看 Linux 客户的活动控制台的当前显示。当用户在此 colinux-console 的 shell 中输入或者执行命令时,colinux-daemon 将会 “包装”它并将其转发给 colinux-driver。要完全理解 coLinux 的内部机制,请访问 coLinux.org。

openMosix 与 coLinux 融合时,没有显著的变化。由于 openMosix 完全位于内核空间,而 coLinux 只是与通常一样引导客户内核映像,并如前所述那样工作。当 openMosix 必须与其他节点通信时,客户内核会去调用一些系统调用。coLinux 截取这些调用,并将数据传递到 coLinux-net-daemon,由它来通过 Windows API 最终将数据发送出去。

下面是对 coLinux 网络层次和网络传输数据流的描述:

源应用程序Source Application)

Linux 内核

coLinux 内核驱动程序

coLinux 网络驱动程序

Windows NIC 驱动程序

现在我们来看如何让 coLinux 和 openMosix 进行结合。


相关内容

    暂无相关文章