ION的设计之初就旨在解决DTN面临的一些约束。约束具体已在上篇博文中介绍:https://blog.csdn.net/hahachenchen789/article/details/83377056

设计原则:

1.共享存储(share memory)

由于ION-DTN必须在飞行处理器上运行,它必须被设计成在RTOS中成功运行。许多实时操作系统通过省略对类unix操作系统提供的保护内存模型的支持来改进处理速度:也就是说,所有任务(进程)都可直接访问系统内存的所有区域,实际上所有进程都在内核态运行,而不是在用户态。因此,在设计ION的时候,并没有考虑到对内存的保护。

但是,对所有内存的普遍共享访问不仅可以看作是一种危险,也可以看作是一种机会。将数据对象放在共享内存中是将数据从一个软件任务传递到另一个软件任务的一种非常有效的方法。

ION就是利用这种机会,来实现数据的高效传输。如下图所示:

发送任务接受互斥信号量(互斥量),以保护共享内存(DRAM或非易失性内存)中的链表,向链表追加数据项,释放互斥量,并给出与链表关联的“信号”信号量,以宣布链表现在不是空的。

接收任务已经挂在链表的相关信号量上,在信号量获取时恢复执行。它获取关联的互斥对象,从列表中提取下一个数据项,释放互斥对象,并继续从发送任务中操作数据项。

信号量操作通常非常快,就像在内存中存储和检索数据一样,因此这种任务间数据交换模型对于飞行软件来说是非常有效的。

2.零拷贝进程

考虑到ION对共享内存模型的定位,一个进一步提高处理效率的策略就应运而生了。

如果添加到链表中的数据项只是指向大型数据对象的指针,而不是拷贝出的副本,那么我们可以通过消除字节对字节复制大型对象的成本来进一步减少处理开销。

此外,如果多个软件元素需要同时访问同一个大对象,我们可以为每个这样的软件元素提供一个指向对象的指针,而不是它自己的副本(维护一个引用计数,以确保在所有元素放弃它们的指针之前对象不会被销毁)。这在一定程度上减少了ION操作所需的内存数量。

3.高度分布式处理

基于共享内存的任务间通信的高效率使得在多个相对简单的流水线任务之间分发ION处理变得很实用,而不是在单个稍微复杂一点的守护进程中本地化它。该机制有几个优点:

a.)每个任务的简单性降低了软件模块的大小,使它们更容易理解和维护,从而在一定程度上减少了错误的发生。

b.)通过生成或终止可配置软件元素的实例,可以在运行时增量地调整ION操作堆栈的范围,而无需增加单个任务的大小或复杂性,也无需在新的配置中停止并重新启动整个堆栈。

c.)任务之间清晰的接口简化了流控制措施的实现,以防止不受控制的资源消耗。

4.可移植性

基于这些原则的设计对于许多软件开发人员来说是陌生的,他们可能更适应受保护内存支持的开发环境。例如,在Linux环境中开发软件通常要比在VxWorks 5.4中容易得多。然而,Linux环境并不是ION软件最终必须运行的唯一环境。

因此,ION被设计成易于移植,POSIX接口标准被广泛应用。目前RTEMS可以运行在Linux(Redhat,FeFedora,Ubuntu),FreeBSD,Solaris,VxWorks,RTMES等。

ION-DTN设计原则相关推荐

  1. 7.12 其他面向对象设计原则3: 依赖倒置原则DIP

    其他面向对象设计原则3: 依赖倒置原则DIP  The Dependency Inversion Principle 7.1 依赖倒置原则DIP The Dependency Inversion P ...

  2. 设计模式---(设计原则)面向对象设计原则

    1 开闭原则 开闭原则:一个软件实体应当对扩展开放,对修改关闭. 在设计一个模块的时候,应当是这个模块可以再不被修改的前提下被扩展,换句话说就是,应当可以再不必修改源代码的情况下改变这个模块的行为. ...

  3. uml图中的各种箭头_设计模式学习笔记(二):UML与面向对象设计原则

    1 UML 1.1 UML UML(Unified Modeling Language)是统一建模语言,1997年11月UML1.1版本提交给OMG并正式通过,成为建模语言的个那个也标准.2003年6 ...

  4. 大型数据库设计原则与技巧

    大型数据库设计原则与技巧        一个好的数据库产品不等于就有一个好的应用系统,如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能 ...

  5. 设计一个矩形类rectangle_万字长文带你捋清六种设计模式的设计原则(建议收藏)...

    对于设计模式,自己很早之前就看了好多本设计模式书籍,其中一些还看了好几遍,也一直希望自己能在编码的时候把这些设计模式用上去.可是,在日常的打码中,用的最多的就是单例,其次是观察者和建造者模式 ( bu ...

  6. 面向对象设计原则_聊聊面向对象的6大设计原则

    程序员都知道编程有 3 大类:面向过程.面向对象.面向函数.面向对象是被讨论的最多的,个人认为,这是因为 Java 之类的编程语言有强大的用户基础,本质还是因为比较符合人的直觉. 说到面向对象,大家可 ...

  7. 从设计原则谈软件开发(二)

    最近一直在一个培训公司做着极为无聊的培训,所以一直都没有时间上网.今天突然发现这里可以上无线,嘿嘿,就上来继续把这个文章完成. 上次说到了设计原则中的单一职责原则,今天时间比较紧,我就继续往下写,也不 ...

  8. ui设计师要懂哪些B端设计原则?

    UI设计师是一个非常广泛的职位,它所接触的工作内容是非常多的,其中B端的设计内容就是一种,产品设计对于不同行业.不同公司.不同决策者都会有很大的差异,没有最好的设计原则,只有最适合你产品的原则.今天小 ...

  9. UI设计培训学习中必须掌握的设计原则

    不管是刚开始学习UI设计或者已经在学习UI设计同学中,UI设计的设计原则都是非常重要的,需要大家去重点关注的,下面小编就为大家详细的介绍一下UI设计培训学习中必须掌握的设计原则. UI设计培训学习中必 ...

最新文章

  1. 初等数论--同余方程--二元一次不定方程的通解形式
  2. dnf服务器未响应win7,win7dnf未响应怎么解决|分享win7系统dnf总是未响应的解决方法...
  3. (二)docker安装并持久化postgresql数据库
  4. 机器学习实战(六)——支持向量机
  5. js打印线程id_理解Python多线程:通过易懂的小例子展开第一篇
  6. Hexo NexT主题自定义背景图片
  7. 笔记本禁用键盘和触摸板
  8. 推荐几个在线编程学习的网站,程序员必备
  9. windows下安装you-get的简要记录
  10. oracle存储过程报ORA-20000的错误
  11. 修行等级对比 鸿蒙,普及下:修行等级,武道九境(简化了很多)
  12. 数字计算机模拟人脑,人造突触问世 计算机模拟人脑不是梦
  13. 在浏览器的标签页显示网站标志图标(或指定图标)的方法
  14. 耕作方式对微生物群落的影响
  15. Lua学习笔记--table
  16. 【汇编笔记】win10如何搭建汇编环境(dosbox)
  17. MinGW-w64简介
  18. android 展示大图,Android 加载超大图(原图)分析
  19. 达芬奇调色软件DaVinci Resolve15破解版
  20. 【阿里云流计算】- 电商订单和销量统计案例

热门文章

  1. nvm(node版本控制工具)
  2. html手风琴效果,轻松实现jquery手风琴效果
  3. I2C接口的EEPROM烧写软件介绍以及源码下载
  4. 微信小程序“婚礼邀请函”首页显示
  5. MySQL创建外键时报Can‘t create table xxx(errno: 150)错误解决办法
  6. 海外“水逆”还在持续,华为落选韩国电信5G设备供应商
  7. Notion 公开页面启用Dark mode
  8. mysql主从复制报错排查及解决--总结
  9. 英雄联盟显示服务器属于高限制,英雄联盟最高等级有限制吗?英雄联盟等级最高是谁?...
  10. javascript全文检索工具