首页 > 其他分享 >关于 CAmkES

关于 CAmkES

时间:2023-05-04 19:33:14浏览次数:43  
标签:系统 接口 实例 关于 连接器 组件 CAmkES


本文译至:http://sel4.systems/CAmkES/About.pml

关于CAmkES

CAmkES是面向seL4的一个基于组件的软件平台。它提供了一个软件开发和运行时平台,允许开发人员设计基于seL4的系统作为交互组件的集合。 

动机

基于微内核的多服务器操作系统被设计成一个保护和分离服务的集合,服务之间通过进程间通信机制进行通信。由于这些服务是由内核和硬件保护的组合保护彼此,所得到的系统有可能是高度可靠和安全的。 
然而,随着服务的数量和它们的互连的复杂性的增加,这样的系统的设计变得越来越困难。当没有明确的规范规定服务间应该如何做相互操作时,它们变得特别难以构建和维护。通过使这些服务之间的交互更明确,基于组件的软件工程方法为开发者减少了复杂性,使基于微内核的系统的设计和实现变得可行。 

基于组件的软件工程

基于构件的软件工程(CBSE)是一种软件开发方法,它是基于将系统分解成一组相互关联的软件组件。 

定义的接口提供预定义的服务。软件组件类似于在面向对象的范式中的对象,它们封装它们的状态以便它是不可见的或不能直接从组件外部访问。然而,组件通常比对象粒度更粗,和抽象层次更高,并有关于它们的接口更严格的要求。特别是,除了定义它们所提供的接口之外,它们还定义了它们使用的接口,也就是,它们依赖的其他组件的接口。软件组件的一个重要特点是,它们是为了可重复使用,并应该被设计和实现为使得它们可以在许多不同的系统中使用。 

组件使用连接器相互连接,连接器是系统元件用于显式连接进行相应的通信组件接口。连接器实现了胶水代码来将组件连接在一起,并且它们是该系统的唯一需要显式使用底层系统机制(例如IPC,capabilities,等)的组件。组件的集合和它们之间的连接形成一个系统架构,它通常被称组件系统或组件架构。

组件,组件接口和组件架构如何指定的细节是由一个组件模型定义的。一个组件模型的特点决定了一个特定的基于CBSE的方法的灵活性和能力。 组件平台实现了一个组件模型,并根据该模型提供工具和支持软件用于构建组件和基于组件的系统。(请注意,术语各不相同,有一些重叠。尤其是我们所说的组伯平台有时被称为一个组件框架,组件体系架构或组件系统) 

CAmkES的关键属性

最小的核心模型

CAmkES模型的核心提供了构建静态组件化系统所需的最小功能。由核心模型提供的功能包括:RPC规范,事件和数据端口接口,组件规格,和连接器规格。 

静态

CAmkES是一个静态系统。这意味着,所有的组件实例以及它们之间的连接器必须在系统的体系结构规范中定义。此外,在启动时,所有的组件和连接器由系统初始化处理在该系统开始运行前创建。 

显式交互

在组件化的系统内使组件之间显示通信对提供可重用的组件来说是关键的。这意味着组件仅通过良好定义的接口和与系统的其余部分交互。因此所有的通讯(包括通过共享数据通信)在CAmkES系统架构是显式的。 

显式连接器

此外,在CAmkES我们已经确定了组件之间的通信是一个可靠和高性能系统的重要组成部分。其结果是,实现在我们的模型通信的连接器都是一类实体。这意味着,系统开发人员可以选择使用哪些连接器连接的软件组件,也可以定义和实现自己的连接器。另外连接器可以被定义,实现,以及由系统程序员复用就像组件一样。我们称这些为用户定义连接器。 

低负荷

CAmkES具有最小的,静态的核心,这就使我们有可能限制基于组件的设计引入的开销。由用户定义的连接器所提供的灵活性允许我们根据的具体要求进一步优化系统。 

可优化性

由于组件之间的所有通信是显示的,并且,系统开发者可以影响通信如何发生,CAmkES提供了很大的空间用于特定系统的优化。这种优化的范围可以从基于已知的最佳做法或模式对系统架构进行重组来提高性能,到连接器和关键组件的利用了系统的特定行为来优化性能热点的具体系统实现。这使得系统设计人员能够专注于构建结合良好的软件工程实践的高性能系统。 

CAmkES 组件模型

基于CAmkES的系统被设计成一个由连接器连接在一起的组件实例的集合。 CAmkES组件实例代表系统服务,并最终实现为独立的seL4地址空间。 CAmkES连接器表示通信的通道,并使用合适的seL4 IPC机制,包括同步IPC,异步通知,和共享内存段来实现。 

组件

组件是功能的封装(类似于面向对象编程的对象,但是,粒度更粗)。 组件显式地定义了它与其他组件的交互点。它指定了它提供给其他部分的接口,以及从其他部分使用接口。 

接口

可能的交互类型。 CAmkES提供三类接口: 

  • 过程调用(也称为远程过程调用,或RPC):一个过程调用接口表示一个组件实现,或者一个组件需要来调用另一个组件的的程序的集合。 
  • 事件:事件表示异步通知(不包含数据),可以接收或发送到一个组件。 
  • 数据端口:一个数据端口表示由两个或多个组件共享的内存区域。 

接口类型声明指定接口的一种特定类型及它具有的属性。一个过程接口类型声明指定的程序(或方法)和它们的参数和返回类型。一个过程的接口类型是在IDL(接口定义语言)里指定。事件接口类型声明指定一个事件类型。一个数据端口接口类型指定要共享的数据类型。数据端口接口类型在C中指定。 

接口实例

组件的定义指定了哪些接口是组件的实例提供给其他部分的,哪些接口是需要使用其他部分的。组件实例之间的相互作用是在它们的接口实例上执行的。每一个这样的接口实例都有一个单一的接口类型。接口实例通常具有与它相关联的方向。对于过程接口,其方向要么是使用,这意味着接口实例可以被用于访问由另一个组件所提供的实现,或者是提供,这意味着该接口的实例是由该组件执行。对一个事件而言,该方向可以是发送,这意味着该接口实例可以用于发送一个事件到另一个组件实例,或者是消费,这意味着该接口实例将接收事件。数据端口情况下不指定方向。 

连接器

连接器描述了如何组件实例是如何被连接在一起。 

连接器定义了如何组件之间的通信是如何发生的,用于实现该连接的底层机制是什么。连接器类型必须指定它将连接的接口类型。 

Assembly

assembly封装了组件系统的描述。一个assembly可以被认为是作为一个完整的系统的完整描述。在一个系统的上下文下,只能有一个assembly。 

Composition

并定义成构成系统的组件和连接器的实例。

组件实例

组件实例是组件类型的一个实例。它是在系统中存在的实际组件。可以有一个单一的组件类型的多个实例。组件实例通常(但不一定)是实现为一个独立的seL4地址空间的。组件实例通常也有几个与之相关的seL4线程。 

连接

被连接,因此,为了使组件实例能够相互通信,它们的接口的实例必须通过连接由连接。一个连接是使用适当的底层内核机制来实现。 

配置

配置是一个组件的另一部分,它描述了系统设置。设置被表示为分配值给属于特定组件或连接器实例的属性。 

实体实例化时被赋值,并且这个赋值被称为一个设置。属性通常用于特定或区分一个运行时组件。 

CAmkES 系统

CAmkES 平台提供:

ADL

一个架构描述语言用来定义组件和系统架构。 

IDL

一个接口定义语言用来定义组件接口。 CAmkES使用的IDL的灵感来自CORBA的OMG IDL。 

ADL 和 IDL 编译器

CAmkES的核心是一个从系统ADL和IDL描述生成所有必要的脚手架和胶水代码的工具。这个生成的代码处理seL4初始化,性能管理,资源管理,进程间通信的各个方面。 基于CAmkES系统的开发人员不需要和seL4的基本API直接交互。 

CAmkES编译器是基于模板的;生成的代码被定义为基于所构建系统的扩展模板。这意味着开发人员可以很容易地适应生成的代码来扩展或特定其功能。此外,CAmkES可通过其用户定义的连接器扩展,它允许开发者添加的系统特定功能,而不必修改核心的工具。 

模板

CAmkES提供所有用来生成seL4的系统代码所需要的必要模板。它也提供了一些模板替代的实现,这些模板利用特定的seL4功能,可能会导致更好的性能。我们也正在开发模板,让CAmkES针对非seL4的系统。 

seL4 构建系统集成

seL4内核和所需的库进行配置和构建。 

CAmkES的开发

在设计CAmkES系统时,开发人员首先决定于所需要的组件。这些既可以是预先存在的可复用的部件,或者是可能需要为所需系统而定制的。组件通常被设计成使得它们可在不同的系统里复用,可实现从可重用软件组件库的快速的系统开发。 

在设计和构建组件时,开发人员首先定义了组件提供的接口。该接口在接口定义语言(IDL)中定义。 
然后开发者通过指定由该组件提供和使用的接口来定义组件。这是使用体系结构描述语言(ADL)来定义的。该部件的实际功能是由C源代码提供。 

一旦所有的组件被选择和定义,开发者定义系统的体系结构,例如,如何将所有的部件将连接到一起。此架构是使用ADL描述,并指定所有使用的组件,它们之间的连接,并且用于连接的连接器。 

然后,开发人员调用编译系统,解析ADL的描述,生成相应的运行时和胶水代码,并将其和组件和连接器的代码一同编译和链接,以产生适当的seL4服务器映像。 
然后构建系统再进一步把这些映像和seL4内核和系统初始化服务器结合在一起来生成一个最终的可引导的系统映像。 
最后,映像可以在期望的硬件或仿真器中运行。

标签:系统,接口,实例,关于,连接器,组件,CAmkES
From: https://blog.51cto.com/u_16097040/6244256

相关文章

  • CAmkES
    本文译至:http://sel4.systems/CAmkES/CAmkESCAmkES提供了一个更简单的方法来开发以seL4为基础的软件和系统。它简化了多服务器系统的设计和让开发者不用必须使用底层的seL4系统API和相关的资源管理要求。 实现。这些软件组件具有明确的交互接口,并且明确地详细描述了组件之间连接......
  • 关于单片机控制电压检测的学习
    1.使用单片机内自带的ADC模块进行检测问题在于频率是否合适:在实验2的基础上得到结论,当两线圈距离在2cm左右时,工作频率将会超过1MHz。采样的最好结果是采集尽可能多的点,这样才能绘制出真正反映实际情况的曲线。目前想要完成的是实验3的demo,采用电阻分压和二极管整流,直接利用......
  • 关于落后十几年的说法
    经常在网上看到中国某项技术落后国外十几年甚至几十年的说法,这种其实没有任何的参考价值。判断的标准就是说目前国内的水平只是相当于国外2000年的水平云云,但是这完全不能做为一种依据就是说中国也需要花十几年的时间去赶上国外的水平,而这种说法常常会给人一种这样的误解。......
  • 关于vue2中使用unocss样式无法生效的问题
    前言在维护公司一个技术栈为vue2+ts+unocss的老项目时发现unocss在开发环境和正式环境都不能生效,最先以为是插件的版本问题,排查后发现是因为项目在使用unocss时的配置没有配置完全,根据vue-cli的版本按照unocss的官方仓库里的example配置vue.config.js这是v......
  • 关于OKD(OpenShift)中组件资源介绍和命令行操作的一些笔记
    写在前面参加考试,会陆续分享一些OpenShift的笔记博文内容为openshift常见API资源对象介绍,包括所特有的Route,IS,DC,BC等。学习环境为openshiftv3的版本,有些旧这里如果专门学习openshift,建议学习v4版本理解不足小伙伴帮忙指正傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心......
  • 博主观点--关于本博客的使用路线图
    本博客主要是用于个人的知识整理,常用网站的归纳,仅供个人记录学习成长笔记使用,不做商业用途。本博客文章以Linux操作系统,开源软件,个人喜爱的数码硬件产品等为主,间接穿插其他相关的技术内容。平时写作时间不多,所以博客内容在每篇文章的最下一行标明最后的更新时间。所以,发布日期早......
  • 关于租房(持续更新...)
    确定租房地点和预算在租房之前,我需要先了解所在城市的租房市场行情,比较不同地区的房价和租金水平,同时也得根据自己的经济状况和生活需求制定一个较为合理的预算。地段:提前看好交通方式和路线,沿着上班路线找,离工作近为主,工作稳定后再换又近又好的搜寻房源信息通过租房A......
  • 关于容斥原理 / P5505题解
    发现很多题解连容斥原理的“钦定”和“至少”的区别都讲不清楚,误导萌新,所以写一下这两个东西的区别“钦定”这个东西是会算重的,而“至少”不会。举个例子吧,比如\(1\2\3\)三个位置不合法,如果我说“钦定”两个位置不合法,那么这里计算方案的时候这个不合法的方案会被计算三次,分......
  • 【游戏设计随笔04】关于《桃源》的一些设计运营总结
    1:《桃源》有着非常明显的优势区间“美术”。用出众的美术风格为玩家制造记忆点,依旧是游戏获客的重要方式,尤其是对于那些缺乏用户积累的新IP、新团队来说。2:度过了初期的视觉冲击,就需要用玩法让玩家留下,《桃源》采用了一套简练的核心循环。仅从生产经营的资源循环来看,《桃源》有......
  • 【游戏设计随笔05】关于“模拟经营”的一些感悟笔记
    一些模拟经营大类的tips:1:模拟经营游戏的定义游戏可以视为一组,在好玩的心态下由玩家执行的规则下的选择。而模拟经营类型的游戏更加偏重于资源分配。如果有一个基本定义,就是完成游戏资源产出机制,到资源分配,再到升级机制,最后强化资源产出,完成闭环的一个结构。2:模拟经营游戏的核心......