cyber RT概括

cyber RT概括

用户通过调用CreateNode函数创造一个节点,该函数是在节点类Node的友元函数。

Nodel类的成员变量·node_channel_impl(NodeChannellmpl)负责创建Reader和Writer。

Writer类中包含transmitter_ , change_conn_, channel_manager_,及JoinTheTopology函数。

Writer类在初始化过程中会调用函数transport::Transport::Instance()->CreateTransmitter<MessageT>(role_attr_)为transmitter_,默认情况下是OptionalMode::HYBRID混合通信,但本次分析主要以OptionalMode::SHM进程间通信为主。

在生成一个SHM形式的Transmitter后,会调用transmitter->Enable(),初始化这个Transmitter。Transmitter类主要含有成员变量segment_和 notifier_ ,Transmitter使能的过程就是为segment_和 notifier_赋值的过程,Segment类负责管理共享内存。notifier_最终会指向一个ConditionNotifier或MulticastNotifier。

对于ConditionNotifier,它包含一个Indicator结构体,Indicator包含ReadableInfo数组和一个条件变量,Indicator会在另一块共享内存中。写进程通过Indicator中的条件变量通知读进程有数据到达。读进程得到通知后会读取Indicator中的某个ReadableInfo,然后根据此ReadableInfo信息从Segment管理的内存中获取数据。

channel_manager_会被赋值channel_manager_ = service_discovery::TopologyManager::Instance()->channel_manager()负责管理channel,每创建一个Writer或Reader都会生成一个channel。

在函数JoinTheTopology中负责拓扑网络的管理

Shmdispatcher类中有一个单独进程ThreadFunc()负责监听消息,OnMessage会触发DatatDispatcher从公共内存中读取消息并放置于DataVisitor,每个DataVisitor都对应一个CRoutine,而明每个CRoutine都会封装一个用户回调函数。

Processor中的Run()函数会循环执行,每次选择一个CRoutine进行执行。

协程之间的切换主要之上下文切换,ctx_swap函数实现上下文的切换,主要做两点工作:保存当前寄存器信息、替换函数返回地址。实际上当返回地址改变时,当函数返回时,接下来执行的指令也就转移了。

上一篇:LTE - Reporting of Channel Quality Indicator (CQI)


下一篇:Ubuntu18.04中touchpad-indicator无法卸载