天天看點

硬體軟體架構設計亂侃

硬體軟體架構設計亂侃

Posted on

2009-08-28 08:23 

lzhdim 

閱讀(4059) 

評論(22) 

編輯 

收藏 

舉報

      這篇文是我在今天工作休息之餘寫下來的,亂侃侃,偷懶一下,呵呵。

首先,我的原本專業是電子資訊科學與技術,是以對一些晶片級硬體和軟體比較感興趣,但我現在的工作是軟體設計師,又對計算機軟體有較深入的了解。閑暇之餘,我喜歡看硬體相關的書籍,特别對計算機硬體比較癡迷。其實早在06年學習軟體架構設計的時候,我就常亂想設計軟體架構。這裡說說,一部分中國人的特點,就是從模仿開始。火車不會造,先買别國的火車,然後研究,接着自己造,比買的便宜,搞得人家都不敢賣先進的東西給國人了。軟體也一樣,架構方面,先學習前人的經驗,學習開源的架構特點,然後根據自己實際環境設計架構。(我這裡完全沒有貶低國人的意思,就是說說,自己有技術有一套做法,自己沒技術有另一套學習和實踐的做法)

先說說硬體,著名的Intel和AMD,還有IBM,都是計算機硬體的領跑者了。有時候他們會釋出自己的硬體架構設計圖,以及産品釋出路線圖等等。我就不自然的會多關注(老專業職業病吧),在看這些硬體架構圖的時候,我會去分析,哪個是核心,哪個是緩存,哪個晶片組處理顯示,哪個晶片組處理外存等,自己癡迷(沒辦法,我是硬體發燒友)。

再說說軟體,且不說微軟,也沒辦法,誰讓咱也是靠他們的系統平台吃飯呢,怪不得蓋茨在歐洲演講時曾經叫嚣如果沒有微軟那有多少人失業,呵呵。還有就是開源社群的蓬勃發展。軟體業的發展也算很迅猛了。目前基本上形成很多理論,包括軟體工程(我沒看過硬體工程的書籍,呵呵。),設計模式,架構設計等等,可謂是百花齊放了。

對比硬體和軟體的架構設計,我就常想,其實所有的設計,無論是硬體,或者建築學,還有制造業,還是軟體,室内設計等等,它們的架構設計原理應該是一樣的,應該是可以互相借鑒的,就象道理是相通的一樣。

但是,軟體業内一直沒有形成一套統一的架構。而硬體卻實作了統一架構,然後使用統一的外接獨立的硬體裝置來運作,即定義好了接口,所有外設都往上面靠攏。軟體隻形成了一套設計的理論,設計的模式,沒有形成一套統一的系統。然則,實際情況中,往往很多系統都是在做重複的工作,即不同的企業,不同的業務領域,一再的重複着相同的應用系統設計開發。為什麼軟體業不能形成一套固定的架構呢?對比起來,一個原因估計是軟體的需求是以業務為對象的,正是因為不同的業務産生了不同的各種各樣的軟體應用系統。

硬體有硬體的特點,軟體有軟體的好處。硬體離開軟體是沒有意義的,沒有存在的價值。不過,我還是想設計一套統一的軟體架構系統,雖然不少軟體都提供了插件的功能,但我還是不滿足,這個隻是統一架構的冰山一角罷了。

從硬體的角度出發,硬體的架構設計,其更多的是考慮元器件的特性,依賴于元器件的更新換代來發展,而且同樣依賴于組織定義的硬體接口規範。硬體的基礎是元器件工藝,焊接工藝。然後是接口間的連接配接,通信,接口的規範。再有運作速度的提高,通訊速度的提高,存儲容量的提高。硬體架構的設計,還要考慮熱功耗,成本,複雜度等等。還有重要的一點,硬體的架構掌握在少數企業中,比如Intel這些領跑者了,而接口的規範,卻掌握在一些臨時聯合起來的企業,比如惠普,索尼之流。

根據硬體的理論,隻要提高了依賴基礎對象,那麼就能提高、促進更快的發展。軟體的基礎,按照以前的說法,就是算法+資料結構,面向過程,面向資料的開發方法。現今已逐漸轉變為面向對象,面向方法,面向服務的程式設計模式了。從這點出發分析,限制軟體發展的不是程式設計語言,而是設計方法。不同的設計者,不同的水準,設計出來的系統就不同,架構也就不同。軟體架構的設計,也要考慮成本,複雜度,穩定性,可靠性,重用性等等。軟體的架構掌握在少數大型的軟體企業,比如微軟等,還有開源社群的辛勤的架構設計勞動者們。軟體的接口規範,往往依賴于實際應用中的系統業務。

硬體已經實作了統一架構。那麼,怎麼樣才能設計統一架構的軟體系統呢?這裡再說下,軟體之是以是軟體,因為它具有非常大的靈活性,如果象硬體那樣統一了架構,那麼可能就限制了它的發展。本文隻從軟體統一架構系統出發亂侃,暫且撇開這點限制。受限于目前的程式設計語言,設計模式,領域業務,這個想法能實作麼?軟體系統的根本,資料這個對象本身就是不一樣的了。不過,有一點可喜的成果是,内容管理系統(CMS)的出現是一大進步。但是它也僅能适應那些單一、相對簡單些的應用。比如建站系統,論壇等等,還是沒有實作軟體統一架構的思想。引擎這個概念的實作也是非常好的突破。根據理論相同的道理(我是這麼認為的),以硬體設計的思想出發,統一架構的軟體系統應該是一個渾身都是接口的産物。它需要一個運作引擎對象,需要資料總線接口對象,需要指令運作接口對象,需要一個存儲對象,需要一個顯示對象,需要多個資料互動接口對象,再有,就是這些對象之間通訊的處理對象等等了。這麼個系統能造出來麼?至少我目前的嘗試有一定的困難(有進度,但進展相對緩慢),呵呵。

限于時間問題,本文隻開個頭,投石問路,後續想到什麼再侃。大家對軟體的統一架構思想有什麼意見或建議,歡迎留言賜教,本人洗耳恭聽。

繼續閱讀