编程架构思考

    架构,作为程序员是必须的,好的架构提供代码重用的可能性(因为模块化/对象化,而且模块/对象间松散耦合),提供灵活的扩展性(方便加入其他模块和功能),代码维护性和可读性好 。
    人类的认识总是连续性上升的,不会飞跃,所以随着时间推移,架构技术也在更新,所以你需要关心一些新的架构技术、新的通信技术、新的框架。例如ROS机器人系统第一代使用master方式,ROS2使用新的DDS技术方式。
    其实很多技术的相似的,思想是相似的,你需要自己提炼一下,理解好,实际操作实践一下,从而提高自己水平。
    《设计模式》是你必须学习的,设计模式其实不单单可以应用于某个程序编程,还可以应用于通信协议等等方方面面的思想上。取决于你如何提取各种事物的共性,如何思考他们的差异。永远记住:任何代码架构的问题都可以通过加入中间层解决。即模块化、对象化、去耦合。归根结底,各种设计模式就是研究把各种可能变化的设计点封装起来,以适应这种变化,从而实现代码可扩展和重用。
    代码可以找参考的,算法可以找到参考例子,架构也可以找参考的。天下代码一大抄,并没有不妥。
    正如写驱动,需要首先确定下层硬件接口使用的什么总线,从而确定对下使用什么总线API,然后确定要对上实现的功能,是网卡、sensor还是什么,也就可以确定对上层应用暴露的接口, 从而选择子系统,例如iio、input子系统等。也就是你得知道驱动作为架构中的一个中间层而已。同理你设计架构时得懂得分层的概念。驱动的架构相对固定,你需要思考的内容也相对固定,无非就是代码执行的上下文、函数的重入性、如何支持管理下层多设备、如何支持多个上层client等,就像神经网络的M:N网状链接关系,基本涉及《linux设备驱动模型》和《如何编写linux设备驱动》提及的那些内容。各种代码执行上下文包括中断、软中断、tasklet (基于软中断实现)、hrtimer (软中断或硬中断环境下执行)、timer (基于软中断实现)、kernel thread、普通线程内核态;代码执行过local_irq_disable、local_bh_disable、preempt_disable后的上下文。具体参考我的视频课程《linux设备驱动模型》和《如何编写linux设备驱动》。
    linux的内存管理架构,其实就是围绕如何高效管理虚拟地址空间、物理内存。所谓高效就是随时代变迁利用各种技术做到安全、快速分配和释放、减少碎片提高分配大内存的可能性、各种方式节省物理内存(包括先文件映射后面用时才分配、写时复制等技术、ELF文件的section合并segment、linux VMA映射技术等)。具体参考我的课程《深入linux内核》和《elf file linker and loader与linux结合》

1、架构的通用性思考,《设计模式》等的松耦合,主要考虑的是通用性和可扩展性。越是通用,往往性能会有损耗,这需要权衡。
2、架构性能的思考,
(1)各种对慢设备访问的缓冲技术,cpu的cache、页表的TLB缓冲、目录项的缓冲、磁盘文件读写的内存页高速缓存、DMA访问方式;各种减少重复查找的技术和各种减少反复分配释放的技术,dlmalloc的dv记录、jemalloc的Tcache线程缓冲、kmem_cache的slab/slub/slob缓存、bitmap方式整体判断的f标记位的记录方式。
(2)各种减少拷贝技术,例如skbuff指针移动技术、写时复制技术、共享内存技术。
(3)更加高效的数据结构和算法,例如红黑树,具体参见《算法导论》
3、架构的安全性的思考,面向数据的数据安全的各种锁保护机制、数据完整性的检查、数据纠错的各种checksum方法、数据访问权限的各种保护(包括SeLinux的措施等)。
4、各种思想, 面向过程、面向对象、面向服务、面向数据,等等思想。都是你应该理解和思考的。
5、考虑到系统调用会有一定的性能损失,所以要区分进程间通信、进程内通信、机器内同一个SOC的各中子模块之间通信、不同机器(PC)间通信的不同。
(1)进程内,直接用函数直接调用、函数指针callback回调方式、queue队列传递、链表、树、hash表、全局变量等即可;没必要用socket通信、sharememory等涉及系统调用的相对低性能的方式交换数据和信息。
(2)进程间可以使用sharememory、socket等各种进程间通信方式。 同一个SOC的各个子模块,例如高通的Application arm cpu和modem dsp核模块之间,采用sharememory共享物理内存方式、总线通信方式、socket网络通信方式。
(3)不同PC机器之间采用socket网络通信方式、各种通信总线方式。

某些内容具体参考我的视频课程:
https://edu.51cto.com/lecturer/8896847.html
https://edu.51cto.com/topic/2385.html

猜你喜欢

转载自blog.51cto.com/8906847/2440589