Linux系統中的各種運算和處理可以分成兩大類,一種是硬件處理,還有一種是軟件處理,硬件處理和軟件處理的原理是類似的。但是肯定也是有所區別的。本文就來介紹一下Linux系統硬件處理和軟件處理的區別。
我們來看看各種計算機算法,它們在做什麼,以及是怎樣做的。很顯然,總結一句話就是:合理安排先做什麼,再做什麼的一個動作序列。這些序列是發生在一維時間的流逝裡面的,雖然目前有很多的並行算法,讓人看起來好像時間變成了一個平面,但是只要這些算法是CPU實施的,當它們不能在分解的時候,算法還是在先做什麼,再做什麼之間不斷做決策。二分查找,快速排序,這些不都是典范嗎?仔細分析一下冒泡排序,先做什麼,再做什麼,然後做什麼。。。最後得到了結果。一個動作直接就是問題的一部分。這完全符合我們人類的思維,因為我們在做任何事的時候,都是在不斷決策先做什麼,後做什麼。這就是數學上的統籌學。
硬件實現的高效等價方案以另一種完全不同的方式工作,它更加類似我們人類的大腦內部的神經網絡的工作原理。由於對這個大腦工作原理的解釋超出了我的能力范圍,即便我真的懂,也不能指望在一篇周末將要結束的短文中闡釋清楚,所以我還是直接說硬件吧。
硬件工作時更像是勢能的自發釋放,這種釋放的效果是事先確定的,完全自動進行。舉一個例子,洪水泛濫的時候,水流沿著溝壑沖刷大地,造成的效果取決於哪裡高,哪裡低,並且由於這種高高低低的不同,還會出現一些組合效果,比如一流分成兩流,在一個低窪處再次合並,這就會加倍水流的沖擊力,從而越過更高的地方。你可以將這看成萬眾一心的萬馬奔騰。在一個大型的灌溉系統中,事先接好管道,挖好溝渠,然後在水源處放水,一切都是自動完成的,完全無人值守。如果按照CPU的方式,必須事先准備好一些序列-注意不是挖好溝渠,然後依次執行這些序列,比如先澆灌A區,然後再澆灌B區,由於D區離B區更近,因此接下來澆灌D區而不是C區。。。當然在更低的層次,比如具體的澆灌過程,事情是按照硬件的方式執行的。
雖然CPU總是順序地執行一個序列的每一條指令,但是在CPU內部,執行每一條具體指令的方式卻是一個勢能釋放的過程,CPU設計者早就設計好了幾個通用的指令電路,所謂的RISC就是指CPU內部的電路僅僅實現了非常簡單非常基本的幾個指令,然後靠外部的不同組合形成不同的程序,完成不同的事情。這就是程序設計的本質。對於諸如DxR Pro++固化這樣的事情,事實上並不能按照程序設計的一般思路來進行,因為它是完全相反的一個過程,我要設計的是一個萬馬奔騰的勢能釋放的方案,我要做的是挖溝填壑,開山辟土,而不是思考一個如何在既有的康莊大道上到達目的地的方案。
硬件是死的,程序是活的。一旦溝壑確定,勢能釋放的效果就完全確定了,因此這塊電路就不能再做它用,但是程序卻是可以隨意更改的,因為CPU內部雖然也是遍布溝壑,也是死的,但是它們數量比較多,而且每一種達到的效果非常有限,可以通過不同的將它們組合的方式形成不同的效果。這種局面涉及到了一個很重要的話題,那就是成本!
挖溝填壑的成本非常之高,必須確定這種溝壑的勢能釋放效果是長期可用且有效的,否則就浪費了。而軟件卻是可以用非常低的成本重組序列的,如今程序員不是已經快成為廉價勞動力了麼?然而軟件的性能和硬件直接布線的性能是沒法比的,這也是一種代償博弈,犧牲了性能,帶來了靈活性。如今的程序員幾乎都是在CPU所框住的框架內尋求最佳的算法,因為直接用硬件布線來實現功能並不是他們可以決策的,因為這涉及到成本問題,也就是錢的問題,必須在程序員雇傭成本和投資成本之間做一個完美的權衡。
其實早就形成了一種所謂的“可編程硬件”,即內部的溝壑可以填平,然後重新挖溝,也就是硬件可以重新布線。這種東西的成本介於純布線硬件和軟件之間。
以上就是Linux系統硬件處理和軟件處理的區別了,不管是硬件處理還是軟件處理,二者都有其優勢,所以應該配合使用。