自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 ROS源码学习 十四、Concurrent(1)j

2021SC@SDUSC一、简介 从本节开始,我们将分析Concurrent包,该包为ROS执行各种并发逻辑所依赖的各种类的集合.其中包括线程安全的数据结构、ROS自定义的循环执行线程和ROS封装的Java线程池.二、CancellableLoop CancellableLoop为ROS自定义的一个线程模型,该线程允许被中断,且能够在被中断时执行一系列的自定义逻辑.public abstract class CancellableLoop...

2021-12-26 21:38:06 552

原创 ROS源码学习 十三、消息队列

2021SC@SDUSC一、写在前面 本篇源码学习重点在分析ROS的消息队列机制,消息队列作为一个中间件,能够起到应用解耦、消息异步传送和流量削峰的作用,ROS中的消息队列也是基于这种思想,为了优化一些数据传递过程而产生的.二、LazyMessagepublic class LazyMessage<T> { private final ChannelBuffer buffer; private final MessageDeserializer<T...

2021-12-19 16:19:23 595

原创 ROS源码学习 十二、Servicej

一、写在前面 通过对ROSJava文件结构的分析,我发现名为Service的包其实有两个,一个包的路径为rosjava.src.main.java.org.ros.node.service,另一个包的路径为rosjava.src.main.java.org.ros.internal.node.service,而且这两个包内的代码并不相同. 之前我们提到过,控制ROS作为一个操作系统运行的是其Master节点,而其它的功能以外围节点的形式接入以提供服务.而为了使得逻辑统一,...

2021-12-12 10:32:18 845

原创 ROS源码学习 十一 、Node

2021SC@SDUSC一、写在前面 上一篇分析中我们学习了Node的命名空间相关源码,本节将简单介绍Node相关代码.二、Node 在ROS中,Master是位于中心负责调度与维护全局参数的实体,而Node则是位于边缘提供各种服务的实体.ROS之所以功能强大,原因之一就是其良好的可扩展性.除了Master的功能外,其他功能大多都是以Node的形式出现的.因此Node可以看作一个编程模型,规定了如何向外界提供自己的调用接口,三、Node源码分析...

2021-12-04 22:11:55 339

原创 山东大学操作系统课程设计源码分析 filesys(3)

一、写在前面 本节分析为文件系统相关源码的最后一篇分析,本次分析的重点在于介绍目录与逻辑文件系统系统相关源码,学习文件系统的高层逻辑与宏观结构.二、源码分析 1、文件目录:Directory 正如上一节所讲到的,想要找到文件的内容,只需要找到该文件的header,但header的扇区信息却没有办法获得.文件目录Directory就是用于提供文件名称到文件头扇区号转换这一功能的. Directory是文...

2021-11-30 16:55:24 535

原创 山东大学操作系统课程设计源码分析 filesys(2)

一、写在前面 上一节我们分析了nachos文件系统底层的裸磁盘对象Disk和线程安全磁盘对象SynchDisk,在本节我们沿着文件系统的结构继续向上进行分析,介绍FileHeader、OpenFile与BitMap相关文件.二、源码分析1、位图对象:BitMap 磁盘的最小读写单元为扇区,而BitMap就是用于表示磁盘扇区空闲状况的.BitMap本身也是一个文件,位置在0号扇区.class BitMap { public: Bi...

2021-11-29 17:06:53 580

原创 山东大学操作系统课程设计源码分析 filesys(1)

一、写在前面 在写完了内核线程的代码分析后,我们从本节开始对文件系统的源码分析.本轮代码分析将会涉及nachos文件系统的绝大部分源码文件(除了nachos通用代码部分外如Interrupt等).我们将要分析的文件具体名称如下:BitMap(位于userprog目录下)、Disk(位于machine目录下)、synchdick、filehdr、openfile、directory、filesys.除了两个特别说明的文件,其余文件均位于filesys目录下. 本轮分析采用自...

2021-11-27 15:02:13 917

原创 ROS源码学习 十、NameResolver

2021SC@SDUSC目录一、写在前面二、NameResolver三、NodeNameResolver三、总结一、写在前面 上篇分析讲解了ROS节点的命名格式与一些对于名称的操作,本节紧接上篇分析对NameResolver进行学习.上一节中的GraphName仅仅代表了一个节点的命名对象,但没有搜索特定名称对象的能力,这样的功能在本节将要分析的NameResolver类与NodeNameResolver类中.二、NameResolver...

2021-11-25 19:14:20 373

原创 ROS源码学习 九、GraphName

一、写在前面 上一节我们分析了ROS节点间进行通信的数据格式以及解析方式,但正如在源码分析开始时我们所说,ROS是一个分布式的系统,因此节点之间通讯不仅需要恰当的数据格式,而且需要一个命名系统使消息能够路由至正确的位置.在本节我们将分析namespace包下有关节点命名与解析的代码.二、ROS中节点的名称类型 ROS中有三种类型的类型的节点名称:全局名称、相对名称和私有名称.下面我们将类比Linux下的文件系统来解释ROS的命名策略与命名格式.全局...

2021-11-25 16:08:25 1292

原创 山东大学操作系统课程设计源码分析 Thread(3)

一、写在前面 上一节我们分析了线程调度器Scheduler类和线程切换函数SWITCH与线程生命周期逻辑函数ThreadRoot函数,了解了线程从创建到销毁的过程与线程的寄存器信息是如何保存与恢复的.在本节我们将分析该包下最后的两个类.二、源码分析1、信号量:Semaphoreclass Semaphore { public: Semaphore(const char* debugName, int initialValue); // set i...

2021-11-24 21:29:43 382

原创 山东大学操作系统课程设计源码分析 Thread(2)

一、写在前面 在上一节中我们分析了List、ListElement和Thread三个类的数据成员和函数的执行过程,本节将继续分析thread包下的代码,重点在于理解scheduler和switch两个类的代码.二、源码分析 1、调度器:Schedulerclass Scheduler { public: Scheduler(); // Initialize list of ready threads ~Scheduler(); ...

2021-11-24 11:01:49 411

原创 山东大学操作系统课程设计源码分析 Thread(1)

目录一、写在前面二、源码分析 1、调度列表:List 2、线程:Thread三、总结一、写在前面 本期分析的代码为threads文件夹下的源代码文件,threads中包含了描述内核线程的类、线程的调度器、线程上下文切换的实现以及进程同步的各种工具,在第一节主要分析list.h/cc与thread.h/cc 通过本节的分析,我们能够进一步了解nachos的内在运行逻辑,也能体会到在操作系统这门课程中学到的理论概念在编程实践...

2021-11-23 21:21:08 606

原创 ROS源码学习 八、Response

2021SC@SDUSC目录一、写在前面二、StatusCode三、Response四、ResultFactory一、写在前面 在前面的文章中,我们主要分析了服务器端的各种逻辑.在进行客户端部分代码的分析之前,将会有本章与接下来的两到三章作为为承前启后的部分,重点在与分析服务器与客户端用户通信的各种桥梁与协议,在对这些部分有了清晰的认识后,我们在将来面对客户端部分代码时将会对通信的机制与策略有更加清晰的认识.二、StatusCode ROS搭建...

2021-11-20 20:36:51 330

原创 ROS源码学习 七、MasterServer:Topic&Service

2021SC@SDUSC目录一、写在前面二、MasterServer与MasterServerRegisterationImpl的关系三、MasterServer四、关于syncronized五、总结一、写在前面 在上一篇博客中,我们学写了MasterServer的组成部分Node、Topic与Service的层次结构并分析了三者相关信息类的源码.本篇博客将重点分析Topic与Service的注册注销服务与MasterServer在高层次进行注册注销的逻辑....

2021-11-11 21:35:58 360

原创 ROS源码学习 六、MasterServer:Node、Topic&Service

2021SC@SDUSC目录一、写在前面二、MasterServer简介 1、MasterServer 2、Node、Topic、Service三、Service、Topic、Node相关源码分析四、总结一、写在前面 在之前的博客中,我们首先从RosCore开始分析,学习了ROS线程池的运行逻辑,并从MasterServer的基类XmlRpcServer中的WebServer入手分析了ROS实现不同节点功能协作的基础XML-RP...

2021-11-05 16:47:27 818

原创 ROS源码学习 五、连接处理

2021SC@SDUSC目录一、写在前面二、设计模式-抽象工厂三、ConnectionServer继承层次四、ConnectionServer及其祖父类关键源码一、写在前面 在上一篇博客中我们了解了在ServerSocket监听到客户端socket连接后将socket句柄送至何处,即建立了一个作业,在这个作业中由Connection负责接收与解析报文,ConnectionServer负责执行过程调用.我们已经了解了Connection接收与解析报文的过程,接下来我们...

2021-10-31 21:20:41 168

原创 ROS源码学习 四、连接处理

2021SC@SDUSC目录1.写在前面2.Connection与ConnectionServer3.源码分析4.总结1.写在前面 在上一篇博客中,我们介绍了ROS中用于协调node功能的XML-RPC服务的实现原理,并分析了位于高层管理连接与作业的WebServer类的成员以及方法. 综合前几次的源代码分析,我们对XML-RPC机制的实现在宏观上也有了一个整体的印象,即XML-RPC服务首先需要请求WebServer建立socket连接,WebS...

2021-10-21 22:03:54 149

原创 ROS源码学习 三、连接服务

2021SC@SDUSC目录1.写在前面2. XML-RPC简介3、ROS RPC实现简介4.WebServer源码分析5.总结1.写在前面在上一篇博客中,我们分析了ROS实现多线程处理请求所依赖的线程池的实现方式.从本篇开始,我们将在服务器类的继承层次上自顶向下地分析其处理服务功能的内在实现.2. XML-RPC简介 在本系列的综述中已经提到过,ROS功能组件称为node,不同的node以ros-core为中介来实现功能上的相互沟通...

2021-10-14 21:58:53 336

原创 ROS源码学习 二、线程池

2021SC@SDUSC目录1.写在前面2.ROS线程池概述3.ROS线程池模型4.ROS线程池源码详解5.总结1.写在前面ROS作为一个操作系统,其职责是协调具有不同功能的node之间的通讯与合作.要想实现这个目标,最重要的方面之一就是在合理利用资源的条件下实现较高的并发性.在ROS的内核ros-core中,负责通讯的服务器正是通过将监听到的socket连接经过封装后调用线程池的相关方法来实现并发通讯的.2.ROS线程池概述 ...

2021-10-08 17:55:50 509 1

原创 ROS源代码学习 一、综述

2021SC@SDUSCROS简介 Robot Operating System(ROS),中文名为机器人操作系统,是目前主流的智能机器人开发框架,底层驱动由C++编写,业务逻辑可由各种语言(比如Python)实现,并有面向安卓端提供控制智能机器人的手机APP开发的Java版本。ROS目前分为ROS1与ROS2两代,ROS1主要的运行平台为Linux Ubuntu,通讯系统为基于TCPROS/UDPROS的星型拓扑(Master-Node)结构,编译系统为基于CMake的Cat...

2021-09-30 15:36:33 858

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除