Nucleus PLUS系统架构和组件
(一个)方法论和软件组件
1。软件组件(Software Component)定义
从一般意义上来说。组件(Component)是系统中能够明白辨识的组成部分,一个不透明的功能实现体。软件开发中,组件是对数据和方法的简单封装,它具有约定式规范的接口。组件具有面向对象的特征,具有功能独立性、高度的可重用性、与语言和平台无关性等特点。
软件组件是软件系统中具有一定意义的、相对独立的构成部分,是一个通过规定的接口提供一组服务代码的运行单元,这个运行单元的特点是高内聚、低偶合。
组件的接口和组件的实现相分离,调用者仅仅须要知道接口并訪问接口就能够使用组件。
接口相对固定,组件功能和实现的变化不应该引起接口的变化。软件组件是软件复用的关键技术。
2,软件组件方法学:
组件技术是90年代初出现的一种软件开发技术,它是在结构化设计和面向对象技术的基础上发展起的,是面向对象技术之后的软件开发的标准方法系。是面向对象的开发技术的延伸。软件组件开发主要是开发与维护系统构造过程中用到的组件。
将软件组件作为一个单独的过程,目的是将组件作为构造软件的“零部件”。
有了组件的概念和组件技术。软件开发就能够借鉴建筑学和现代制造业中成功的实例,先构造出软件的整体架构。然后依据组件重用技术,在架构上依据须要组装上所需功能的组件,最后形成应用程序。
版本号更新仅仅须用新的组件替换旧组件就可以实现。而无须修改整个程序,也不须要对整个程序进行又一次编译。
(二)Nucleus PLUS系统架构
Nucleus PLUS系统採用软件组件的形式构成以添加系统的代码清晰性、可靠性和可重用性,使系统模块化、易于维护。Nucleus PLUS由多个软件组件构成,每一个组件都有唯一的用途和特定的外部接口。每一个组件的使用通过这些接口的调用实现。而组件内部的数据结构绝大多数情况下都不能够被其它组件直接訪问。这样的组件架构使得Nucleus PLUS的每一个软件组件能够被轻松的替换和重用。
每一个软件组件都由两个头文件和若干个源文件组成,当中源文件大多用C语言写成,少数用汇编语言写成。
头文件里一个用于数据类型定义和常量声明,另外一个用于声明组件的外部接口。
下表是每一个组件文件的概述,组件不一定还包括表中全部的文件,当中XX标示组件名缩写。
在支持用户模式和管理模式的处理器架构上。Nucleus PLUS 内核和全部应用任务都执行在管理模式。
这样的做法实现简单、任务系统调用开销小,可是每一个任务都能訪问不论什么资源。
全部须要调用Nucleus PLUS系统服务或者使用Nucleus数据类型的用户代码源文件里都要包括头文件“NUCLEUS.h”。该文件包括数据类型、常量定义以及Nucleus PLUS服务的全部函数声明。其实。“NUCLEUS.h”中全部以“NU_”开头的函数实质上在Nucleus各组件源码中是不存在的。绝大多数Nucleus函数都有一个真正运行操作的函数(各组件中定义)和一个调用真正运行函数前对用户调用进行错误检查的“壳”函数。错误检查功能是能够停用的,不定义宏标示“NU_NO_ERROR_CHECKING”就可以。NU_NO_ERROR_CHECKING的定义与否决定”NU_“函数真正映射的组件函数。
(三)Nucleus PLUS的组件
Nucleus Plus 系统共16个组件,分别讨论例如以下(主要描写叙述组件的功能):
1,通用服务组件Common Service Component(CS)
全部的Nucleus PLUS组件控制的控制数据结构採用的都是链表,CS即负责提供链接结构和链表操作函数,包含加入、删除节点。
2。初始化组件Initialization Component(IN)
负责初始化和启动Nucleus Plus 系统。初始化和启动过程包括两部分:详细硬件目标板依赖部分(处理器相关和板级初始化)先初始化,然后是Nucleus PLUS各组件和用户程序的初始化。
INT_Initialize 子程序在Nucleus PLUS 系统中是最先执行的。负责全部与目标硬件板相关的初始化。INT_Initialize 完毕后将控制权转移到高级Nucleus PLUS 初始化子程序INC_Initialize上并不再返回。INC_Initialize调用全部的Nucleus plus组件初始化函数、调用Application_Initialize创建用户任务等对象,最后将控制权交给调度函数TCT_schedule,系统启动完毕。初始化详细过程參见博文”Nucleus
PLUS的启动、执行线程和中断处理“。
3。线程调度组件Tread Control Component(TC)
负责Nucleus Plus的抢占式实时任务和HISR的调度管理。
每一个用户应用由多个任务组成,一个任务就是具有特定目的的半独立程序片段,任务处于五种状态之中的一个--执行、就绪、挂起、终止、完毕。任务具有不同的优先级。高优先级任务可以抢占低优先级任务,同优先级任务依照进入”就绪状态“的顺序调度,优先级从0-255递减。
Nucleus PLUS每个任务都有一个控制结构体称为线程控制块Thread Control Block(TCB)-TC_TCB,任务支持动态的创建和删除,TC通过一个双向链表TCD_Created_Tasks_List管理全部的任务,全局变量TCD_Total_Tasks表示已创建的总任务数。
TCD_Priority_List是一个大小为256的TCB指针数组(数组大小与Nucleus PLUS优先级数同样),每一个数组指针是一个表的头部(某元素为空则表示没有该优先级的任务)。该表的元素是具有同样优先级的进入就绪状态的任务的TCB指针。即Nucleus PLUS维护一个指针数组来调度不同优先级的任务链表。
任务调度过程见博文”Nucleus PLUS任务调度“。
HISR是中断处理例程的下半部分,可以訪问绝大多数Nucleus PLUS任务(不可自己主动挂起)。HISR也是抢占式的。其优先级0-2递减。HISR由LISR激活。因此必须事先创建并注冊。
HISR的管理和任务的管理是类似的。每一个HISR都有一个控制结构TC_HCB和独占的堆栈。TCD_Created_HISRs_List是一个存储已创建HISR例程的双向链表的表头,TCD_Total_HISRs表示已创建的HISR总数。另外TC会维护两个已激活的HISR表,表项各自是三个优先级已激活的HISR双向链表的头和尾。TC还通过链表维护LISR例程,包含中断向量注冊和LISR入口函数。
TC组件提供了HISR的创建、删除、激活等函数。
4,时钟组件Timer Component(TM)
负责管理全部的Nucleus Plus 定时器设备。
Nucleus Plus 的基本定时单元为一个Tick。它相当于一次硬件定时器中断。系统层面上,定时器用于任务管理-定时睡眠和唤醒等;用户应用程序层面,定时器用于那些须要有超时处理机制的地方。
定时器支持动态创建/删除,每一个定时器都有一个控制结构TM_TCB、TMD_HISR或TM_APP_TCB,分别用于系统任务定时器、HISR定时器和应用程序专用计时器。TM通过链表维护已创建的、已激活的定时器列表。
TM提供一个系统定时器TMD_System_Clock。
定时器函数包含创建、開始、停止、重置、删除、超时处理等。
5,邮箱组件Mailbox Component(MB)
负责管理Nucleus Plus 全部的邮箱服务。提供一种低开销的进程间通信机制。每一个邮箱包括一个长度为4个32-bit字的消息。
邮箱能够由用户动态创建/删除。支持任务的挂起和恢复。
每一个邮箱都有一个控制块Mailbox Control Block (MCB) MB_MCB,MB通过双向链表维护已创建的邮箱。
邮箱的任务挂起/唤醒支持FIFO顺序和任务优先级顺序进行。也是通过维护一个双向链表进行。每有一个任务挂起在邮箱上就会创建一个控制块MB_SUSPEND结构体。
MB提供了邮箱的创建、删除、消息发送/获取、重置、清空、广播等函数。
6 队列组件Queue Component(QM)和7管道组件Pipe Component(PI)
分别负责管理全部的Nucleus Plus 队列服务。管理全部的Nucleus Plus 管道服务。两部件的管理与MB是类似的,差别在于:队列的消息是一个或者多个32-bit字,管道的消息是一个或者多个8-bit字节。
8。信号量组件Semaphore Component(SM)
负责管理全部的Nucleus Plus 信号量服务,用于多个任务间的同步。
信号量支持动态创建/删除,SM可提供的信号量计数范围是0-4,294,967,294。其管理与MB类似。
9,事件组件Event Flag Component(EV)
负责管理全部的Nucleus Plus 事件组服务,每一个事件组包括32个事件标示(event flag)。即32位无符号整型数的每一个位即是一个event flag(为1表示事件发生。0表示未发生)。
其管理与MB类似。
10,存储分配组件Partition Memory Component(PM)
负责管理全部的Nucleus Plus 分区内存,分区内存的内存池指的是由用户指定的内存总数目固定、每一个分区(partition)的字节数也确定的内存。分区内存支持动态创建和任务的挂起/唤醒(FIFO或者任务优先级顺序)。
每一个分区内存都须要一个控制块Partition Memory Control Block (PCB)-PM_PCB(额外占领内存。不包括在分区内存内)。PM通过双向链表维护全部创建的分区内存。
每一个分区内存的可用分区由一个null结尾的单链表控制,每一个可用分区由头结构体PM_HEADER開始。
11,动态内存组件Dynamic Memory Component(DM)
负责管理全部的Nucleus Plus 动态内存服务。动态内存池的起始位置和长度由用户指定,支持动态创建/删除和任务挂起/唤醒。动态内存的分配依照first fit算法分配,没有固定字节数的分区。DM的管理与PM类似。
12。I/O驱动组件Iinput/Output Driver Component(I/O)
负责管理全部的Nucleus Plus 输入/输出设备的驱动服务。提供了一种通用的、相似的s驱动服务接口,包含初始化、分配、释放、输入/输出、设备状态获取和服务申请终止等服务。
13。错误处理组件Error Component(ER)
负责管理全部的Nucleus Plus 系统错误。
14。历史组件History Component(HI)
负责Nucleus Plus的历史设备管理。
15,许可证组件License Component (LI)
负责Nucleus Plus的许可证管理。
16,版本号控制组件Release Component(RL)
负责Nucleus Plus 版本号管理。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
Nucleus PLUS系统架构和组件的更多相关文章
- Android零基础入门第2节:Android 系统架构和应用组件那些事
原文:Android零基础入门第2节:Android 系统架构和应用组件那些事 继上一期浅谈了Android的前世今生,这一期一起来大致回顾一下Android 系统架构和应用组件. 一.Android ...
- (系统架构)标准Web系统的架构分层
标准Web系统的架构分层 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求的不同,不一定每一层 ...
- 千万pv大型web系统架构,学习从点滴开始
架构,刚开始的解释是我从知乎上看到的.什么是架构?有人讲, 说架构并不是一 个很 悬 乎的 东西 , 实际 上就是一个架子 , 放一些 业务 和算法,跟我们的生活中的晾衣架很像.更抽象一点,说架构其 ...
- 异构(兼容dubbo)SOA系统架构(.net)优化升级
前面一片文章已经提到我司的异构(兼容dubbo)SOA系统架构,解决了不少技术痛点,也还算比较完善,也顺利推广开来. 但作为项目的开发者,自己产品的问题心里是清楚的,离自己满意还是有不小的距离. 在推 ...
- 国内经典BI系统架构分析
谈起商业智能BI,也许大家并不陌生,但你是否了解国内的各类BI系统架构? 自国内商业智能发展以来,就系统结构方面已经历了多次优化性的变革.目前国内商业智能BI系统的经典架构的模式包括数据层.业务层和应 ...
- Android入门(二):Android的系统架构
android的系统架构和其操作系统一样,采用了分层的架构.从架构图看,android分为四个层,从高层到低层分别是应用程序层.应用程序框架层.系统运行库层和linux核心层. 从技术方面看,An ...
- 向架构师进军--->系统架构设计基础知识
如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 在讲解系统架构设计之前,有必要补充一下架构相关的概念,因此本博文主要讲述架构.架构师 ...
- PHP高并发高负载系统架构
PHP高并发高负载系统架构 1.为什么要进行高并发和高负载的研究 1.1.产品发展的需要 1.2.公司发展的需要 1.3.当前形式决定的 2.高并发和高负载的约束条件 2.1.硬件 2.2.部署 2. ...
- 系统架构:Web应用架构的新趋势---前端和后端分离的一点想法
最近研究servlet,看书时候书里讲到了c/s架构到b/s架构的演变,讲servlet的书都很老了,现在的b/s架构已经不是几年前的b/s架构,其实b/s架构就是web应用开发,对于这样的架构我们现 ...
随机推荐
- 【26.8%】【CF 46D】Parking Lot
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
- 跟我学AngularJs:Service、Factory、Provider依赖注入使用与差别
林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka 本教程使用AngularJs版本号:1.5.3 AngularJ ...
- [tmux] Handle history in tmux sessions
In this lesson, we'll look at how to manage your history between tmux sessions, and ensure that your ...
- Multi-Tenancy模式,基础服务大规模扩张的时候,是应该推进了。
这不是技术介绍.这是我要推进的工作,记在这里.服务的对象太多,必须隔离为不同租户了.
- jquery-2 jQuery原理和核心方法(多看学习视频)
jquery-2 jQuery原理和核心方法(多看学习视频) 一.总结 一句话总结:jQuery就是普通的js对象,只不过方法比较多而已,属性就length一个. 1.jquery的链式操作的底层原 ...
- 【37%】【poj1436】Horizontally Visible Segments
Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5200 Accepted: 1903 Description There ...
- iOS 通讯录基础
iOS 6 之后应用訪问通讯录须要获得用户授权,而且仅仅授权一次,即使卸载了之后再安装.也不用再次授权. 开发通讯录应用须要两个框架: 1.ABAddressBook 主要用于提供訪问通讯录中 ...
- python 多进程与多线程配合拷贝文件目录
版本一:使用shutil进行拷贝 # -*- coding: utf-8 -*- # @author: Tele # @Time : 2019/04/02 下午 3:09 # 待改进: # 1.拷贝逻 ...
- easyexcel 读写测试
<dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId> ...
- List<Map<String, String>> 开启 Map<String, List<String>>
将List变成Map结构体,下面的文字是没有水平! 写作方法传送前土壤很长一段时间.我不知道有没有好的解决办法.我们也希望提供! Map<String, String> map1 = ne ...