当前位置: 首页 > 操作系统 > 正文

ParalleX OS 设计与实现 Parallex 操作系统设计方向讨论

Parallex 操作系统设计方向讨论

西安邮电大学  张明瑞

                                                 概要

ParalleX OS 是一个具有可动态配置的操作系统,与传统宏内核操作系统不同的是,它是基于消息传递的一款分布式操作系统。进一步将低了操作系统多模块之间的耦合。模块分离更加清晰。

本文主要描述ParalleX 的设计来讨论怎么设计这款系统。首先,我们讨论两种具有分布式性质操作系统的结构分别是“集中式的一致性内存访问多核系统”与“分布式的非一致性内存访问多节点系统”。

接着,我们主要考察其中关键抽象部分的设计,他们分别是“进线程”,“地址空间”,“文件”,他们是现代操作系统的重要抽象。

最后,我们尝试描述我们的ParalleX 设计趋势,希望能得到清晰设计方向。

 

1.两个系统方向

对于具有可动态配置,任务并行,支持任务迁移等性质的系统,我们叫它分布式系统,分布式系统是一个宏观而广泛的概念,现在分布式原理已经应用到了很多方面,例如分布式数据库,分布式文件系统,分布式计算,深度学习等很多领域,当然在操作系统领域上也由应用,本节我们来考察两个基本的分布式操作结构。

1.1  集中式的一致性内存访问的多核系统

集中式的一致性内存访问的多核操作,这种系统的分布式性质体现在进程模块,调度模块,存储模块,内存管理模块之间的消息传递上,它很适合运行在大型服务器上,这些大型机核心众多,却可以共享内存,就是一致性的内存访问,那么我们就可以发现地址空间事实上在这里是一致性的,对于所有处理器是可见的,那么进程原理可以在做到在多个核上迁移,暂时不考虑迁移的消耗,对于一个任务,我们也可以做出相关调度算法,使得进程动态合理的在多核上迁移。在实现这样的系统时,我们的设计重点应该在消息的传递,进程资源的动态配置。这个结构仅仅是基于消息传递的微内核系统,没有体现出分布式的性质。整个系统还是运行在一台大型机器上,对于任务而言,我们或许可以做到分布式性质,使运行时透明化。但是无法使系统级故障透明。

结构如下图所示:

 

图1.1多核处理器拥有各自的缓存,并且可以访问一致性内存

对于这种系统,我们可以将各个模块分离,将一个原子性操作例如划分到每一次函数处理,例如一个进程创建,我们可以将获取内存,拷贝镜像,申请调度做成一个个的模块方法调用,所有的关键部分操作都会变成一条消息发送到消息队列。等待调度模块以我们规定的策略调度消息。

我们现在来考察一个fork()创建一个进程的过程。

Fork(){

Send_want_mem();   /*产生一条请求内存消息*/

Send_exec_img();    /*产生一条请求复制镜像到内存消息*/

Send_req_sche();    /*产生一条请求调度的消息*/

}

 

此时,在消息队列中就会出现三条消息,暂时不讨论如何调度。当这三条消息都被处理后,这个进程就以就绪态出现在PCB 中。

1.2  分布式的非一致性内存访问多节点系统

分布式的非一致性内存访问多节点系统,这个系统算是一个典型的分布式系统,它的复杂型也非常的大。首先,这个系统是通过高速覆盖网络互连的一个系统,它形成了一个类似服务器的行为。所有用户并不直接和它交互而是通过客户端来和这个系统交互。在讨论一些细节问题前,我们先来宏观的看看这个系统的概况。

它是以客户-服务器模型来运作,完全屏蔽了用户的“视线”,对于用户来说这个系统完全透明,资源透明,位置透明,故障透明,多用户之间透明。用户只需要请求自己的应用,服务器便在整个分布式系统中选择节点来执行这个应用,这个系统的重点在于“代码迁移”当一个进程崩溃时,整个系统需要能迁移整个应用的能力,这自然包括进程上下文,运行时资源,甚至是运行库。以一种异构恢复的方式迁移进程到另一个节点上。已达到完全透明的实现。一旦到了这一步其实这个服务器就变成了P2P结构,并且是非集中识。如下图是其基本结构。

 

图1.2 分布式的一致性内存访问的多节点系统

我们现在来考察在这样的一个进程。

这里每个节点相对独立,不论fork具体实现,对于这个系统而言,进程应该是其最小控制单元,因为这里的分布式性质体现在应用上,而不是底层上,在2.2节还会具体讨论进程的细节。

1.3两个系统的对比

 

  集中式的一致性内存访问多核系统 分布式的非一致性内存访问多节点系统
任务概念

 

一个进程等与消息的集合,函数级别 传统进程定义,应用级别
消息传递

 

系统内的模块传递 节点之间的高速覆盖网络
内存访问

 

一致性共享内存访问 节点私有内存访问
持久化资源

 

系统内的文件系统 专有的文件系统节点

 

不难看出,似乎两个系统组合是一个不错的选择。

2.设计关键问题

这个部分我们主要阐述在设计一个系统,尤其是计算机操作系统的一些设计上关键问题。包括子系统设计抽象方法讨论,计算机关键的几个抽象信息,进程,地址空间,文件资源。

     2.1    什么样的子系统才能被分离

在设计思考的过程中,我一直有一个问题,什么样的子系统才值等被抽象,被分离出来。在最早的计算机上,内存其实和磁盘是一体的,就是存在与纸带这个载体上,后来计算机发展到了冯,诺伊曼结构后,因为需要程序可存储,所以将内存和磁盘分离开来。也就是后来的经典计算机模型。事实上,后来并不是经典结构不可超越,这个结构其实是在当下科技水平的前提下符和人类思维的产物。所以,它对于现阶段的我们来说结构很合理,似乎无懈可击。

但是我们还能在将经典计算机优化?答案我相信是可以的,经典计算机的模块化程度很高,因为它榨干了模块之间所有的内聚性。经典计算机的模块划分大体是基于数据传递代价划分的。当我们不能接受数据在某一个传递阶段的慢速时,我们就会将这个“传递区间”截断,从而将系统分成两个模块,有点像一句谚语“一座桥的程度取决于最薄弱的环节”。现在,我们不能忍受磁盘的速度,所以就有了分布式的文件系统,数据库。因为不能忍受内存的速度,所以有了南北桥芯片。但是现阶段还不能将 处理单元和运行时存储单元分离。

所以,我个人觉得一个系统是否可以分离成为一个单独的模块,取决与在这个系统关键指标上的贡献值。例如,对于计算机来说,速度,稳定,智能等都是关键指标,所以凡是拉低指标的部分都必须被分离成模块,硬件或者软件上的分离与抽象。

 

2.2    进/线程

设计一款操作系统,进程是我们第一个需要考虑的核心概念,进程物理上是对CPU的抽象,概念上对于任务的泛化。进程静态上对一簇资源的描述,动态上是对一个具体任务的刻画。在面向过程上,进程是一簇资源。面向对象上是资源与方法的集合。面向函数上,是资源集合和调用过程。

对于基于消息传递的系统来说,进程是消息与消息所指向的资源集合,粒度非常小,对于多节点系统来说,进程就是代码,资源每个节点都有的,只需要复制迁移代码就可以了。

2.3    地址空间/命名空间

如果说进程是对CPU 的抽象,那么地址空间/命名空间就是对进程载体-内存的抽象。对于现代操作系统都是支持多任务的设计来说,地址空间和命名空间就是分离任务的必须条件。是隔离各个任务的必要机制。

对于内存访问上,现代操作的设计没有太大区别。

2.4    文件

文件,文件是对系统可调用持久化资源的一种描述。也是变种应用最多的一种子系统。数据库其实是对文件系统进一步抽象,更加细致化的管理,由于磁盘的物理特性,文件系统已经和计算机系统分离,而且分布式文件系统已经被广泛应用,由其是Linux的虚拟文件系统,更是文件系设计的高端之作。

3.ParalleX  的选择

综上,我们讨论了两种系统结构,几个抽象概念和抽象的方法。我个人觉得先设计实现集中式一致性内存访问系统,这个系统其实还有很多值的讨论的点的,时间有限,这点字写了一早上。

本文固定链接: http://zmrlinux.com/2016/08/04/parallex-os-%e8%ae%be%e8%ae%a1%e4%b8%8e%e5%ae%9e%e7%8e%b0-parallex-%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e8%ae%be%e8%ae%a1%e6%96%b9%e5%90%91%e8%ae%a8%e8%ae%ba/ | Kernel & Me

该日志由 root 于2016年08月04日发表在 操作系统 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: ParalleX OS 设计与实现 Parallex 操作系统设计方向讨论 | Kernel & Me