編程架構思考

    架構,作爲程序員是必須的,好的架構提供代碼重用的可能性(因爲模塊化/對象化,而且模塊/對象間鬆散耦合),提供靈活的擴展性(方便加入其他模塊和功能),代碼維護性和可讀性好 。
    人類的認識總是連續性上升的,不會飛躍,所以隨着時間推移,架構技術也在更新,所以你需要關心一些新的架構技術、新的通信技術、新的框架。例如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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章