正在加载...
 
<<Designing Embedded Communications Software>>读书笔记(九)  

通讯系统设计要考虑的问题

1:系统架构(单主板,多主板,单cpu,多cpu)

2:操作系统:开源还是商业操作系统?单核还是微核的系统

3:支持端口的数量

4:协议栈与协议软件

5:管理接口(cli,snmp,corba,xml)

6:性能要求

7:EMI或电源要求(能耗)

8:符合哪些标准(硬件,软件,电源,EMI)

9:开发过程

10:可扩展性(软件和硬件都需要可扩展)

 

这是书上列出的条目,不知道指导价值有多高。我只记得我们在做系统时,拿来开源软件,测一测基本功能,看还缺什么,然后就改。最后,主要工作还是集中到配置管理上,给用户一个接口。不过整合好了,也是不错。当然不能什么都自己做。做系统,也不一定要看创造的能力,整合好了,也是一种创造。^_^

标签:读书 | 浏览数(1304) | 评论数(0) | 2006-03-30
<<Designing Embedded Communications Software>>读书笔记(八)  

第八章讲分布式系统的构建,从系统架构角度来看,通讯系统可以有一下几类:

1:单主板,单cpu。这是最原始的系统架构,cpu加上多块网卡,再加上操作系统就可以了。低端系统还有很多是这种方式构建。这种架构的缺点是cpu和总线会成为系统瓶颈。资源竞争导致有些任务的性能和实时性无法保证。

2:单主板,单cpu,还有若干加速芯片。这已经进化后的版本了。一般的加速芯片包括交换芯片,加密芯片或者规则匹配芯片等。这样可以释放一定的cpu资源。而且有些任务不需要cpu参与,可以发挥专用芯片的性能优势。这种使用特殊硬件的架构,其软件架构也要做适当的修改。

3:单主板,多cpu。常见的就是smp和近几年出现的多core或者hyperthread的架构。由于有多个cpu参与任务,可以把不同的任务分配到不同的cpu上去处理。而且有些多core的cpu还集成了一些专门的加速芯片,可以提升性能。在这种架构下,软件架构的变化就非常大,任务调度和编程模式就需要改变了。考虑问题的方式也要有所改变。

4:多主板,多cpu。这是真正的分布式系统。需要软件系统提供分布式编程和通讯的机制。全局数据结构可以集中存储,也可以分布到不同的cpu上。由于每个主板即是独立的系统,又要和其他系统交互。而且有些属性还是同一编址或者命名的,编程的难度会更大一些。

目前我只见过第一种,其他的也只是听说而已,所以没有更多想法可说了。

标签:读书 | 浏览数(1315) | 评论数(0) | 2006-03-30
<<Designing Embedded Communications Software>>读书笔记(七)  

第七章讲通讯系统里面的配置管理软件,配置管理是给用户的接口,用户可以通过本地的终端来管理,也可以通过远程登录,或者远程的图形界面来管理。

基本的管理方式有以下几种

1:CLI。也就是命令行,使用命令行可以通过本地终端,远程telnet或ssh来使用。

2:SNMP。这是通用的网络管理协议。当然,网络管理协议有很多种,最常见的是snmp。

3:HTTP或HTTPS。通过远程的web界面来管理。

还有一种没有说,就是通过标准的GUI界面来管理。但是这种方式在通讯系统里不太常见,一般用于集中管理。管理协议可以使用标准的管理协议,也可以使用定制的管理协议。

配置可以存储在文件里面,也可以存储在数据库中。配置管理是用户与协议组件之间的接口。系统实现的功能要通过配置管理界面来呈现给用户。虽然这不是系统的主要功能,但是好用的系统总是能更吸引用户,所以,这里面值得研究的东西也很多。

标签:读书 | 浏览数(1240) | 评论数(0) | 2006-03-30
<<Designing Embedded Communications Software>>读书笔记(六)  

第六章讲缓冲区管理和定时器管理。

缓冲区管理的基本任务是

1:分配和释放缓冲区

2:将多个缓冲区组成一个大的缓冲区(这个主要针对网络中收发的包,包的大小不一样,所以需要好的管理机制以提升性能)

3:管理缓冲区队列

4:将多个小的缓冲区合并成一个大的缓冲区

5:修改缓冲区指针。

书中举了两个例子。一个是bsd的mbuf,一个sysv的streams。它们对缓冲区的管理都大同小异。linux的skbuff也是一样。它们的操作函数也没什么太大差别。

缓冲区管理的要点是避免多次复制缓冲区。拷贝是系统里面比较耗时的操作,应该尽量避免。

定时器管理是为协议栈中一些需要定时操作的模块准备的。比如垃圾收集,定时探测,定时更新状态等。定时器里面要考虑的是定时器的精度和定时器的数量。如果系统里有很多定时器,那么每个定时器执行时,都会影响其他定时器的精度。所以如何减少定时器的数量,又能避免定时器函数耗时太长就是设计时要考虑的问题。

关于定时器的例子可以参考linux,它的定时器实现比较有意思。

标签:读书 | 浏览数(1371) | 评论数(0) | 2006-03-29
<<Designing Embedded Communications Software>>读书笔记(五)  

第五章讲表的设计,都是泛泛的讲,没有讲具体的内容。

在网络系统里面,有很多组件都会用到表。比如,路由表,socket表,二层的mac地址表等。linux里面的路由表,2.0以前用的是链表,2.2以后用的是trie(这是树的算法),用于提高匹配效率,不过在2.2以后的路由表里,还有一个哈希表做高速缓存,用于提高查找速度,而trie表也有另一个名字,叫做转发表(FIB)。

选择不同的数据结构,其目的就是提高系统的性能和处理效率。提高性能有三个途径:

1:选择正确的数据结构并优化

2:硬件加速

3:缓存(cache)

其中缓存指的是软件缓存,硬件缓存多半都是内建的(不过有时也需要软件配合才能发挥最大效用,比如提高命中率,把热点代码都放在缓存里面等)

使用硬件加速的数据结构设计和一般的数据结构设计会有一点区别,因为一般的硬件,其访问内存的方式很有限,一般就是访问连续的内存而不使用链表方式,所以,在数据结构设计时,要考虑这方面的问题。

表一般可以分配为数组,或者是链表。表的操作需要封装起来给其他模块使用,最好不要把整个表暴露给别人,这样会让访问控制变得很难。

设计这些操作函数时,或者数据结构时,还有考虑重入的问题。因为,可能有很多线程在执行同一段代码,比如在smp里面。所以分配多份内存,使用原子操作等基本原则,就需要常常放在心里。

标签:读书 | 浏览数(1329) | 评论数(0) | 2006-03-29

Powered by Haiwit