馮·諾伊曼結構(英語:Von Neumann architecture),也稱馮·諾伊曼模型(Von Neumann model)或普林斯頓結構(Princeton architecture),是一種將程序指令存儲器和數據存儲器合併在一塊兒的計算機設計概念結構。本詞描述的是一種實現通用圖靈機的計算設備,以及一種相對於並行計算的序列式結構參考模型(referential model)。sql
本結構隱約指導了將存儲設備與中央處理器分開的概念,所以依本結構設計出的計算機又稱存儲程序計算機。
馮.諾依曼體系結構是現代計算機的基礎,如今大多計算機還是馮.諾依曼計算機的組織結構,只是做了一些改進而已,並無從根本上突破馮體系結構的束縛。馮.諾依曼也所以被人們稱爲「計算機之父」。數據庫
存儲程序計算機在體系結構上主要特色有:編程
程序內存和數據內存之間的共享總線致使了馮諾依曼瓶頸,即中央處理器(CPU)和內存之間的有限吞吐量(數據傳輸速率)與內存的數量相比。由於單個總線一次只能訪問兩類內存中的一種,因此吞吐量低於CPU的工做速率。當CPU須要對大量數據執行最小的處理時,這嚴重限制了有效的處理速度。CPU不斷地被迫等待所需的數據被傳輸到或從內存中。因爲CPU速度和內存大小的增加速度比它們之間的吞吐量增加速度快得多,瓶頸已經成爲一個更大的問題,這個問題的嚴重性隨着新一代CPU的出現而增長。安全
一張經典的圖靈機構成圖:
圖靈的基本思想是用機器來模擬人們用紙筆進行數學運算的過程,他把這樣的過程看做下列兩種簡單的動做:服務器
在某些模型中,紙帶移動,而未用到的紙帶真正是「空白」的。要進行的指令(q4)展現在掃描到方格之上。xss
在某些模型中,讀寫頭沿着固定的紙帶移動。要進行的指令(q1)展現在讀寫頭內。在這種模型中「空白」的紙帶是所有爲0的。有陰影的方格,包括讀寫頭掃描到的空白,標記了1,1,B的那些方格,和讀寫頭符號,構成了系統狀態。編碼
爲了模擬人的這種運算過程,圖靈構造出一臺假想的機器,該機器由如下幾個部分組成:設計
首先什麼是圖靈機和馮諾依曼計算機體系。圖靈機是一個計算機的理論模型,本質上是狀態機;馮諾依曼體系是圖靈機的實現,包括運算、控制、存儲、輸入、輸出五個部分。諾依曼體系相對以前的計算機最大的創新在於程序和數據的存儲,以此實現機器內部編程。blog
圖靈機的紙帶應對應諾依曼計算機體系中的存儲,讀寫頭對應輸入和輸出,規則(讀了一個符號後下一步作什麼)對應運算,紙帶怎麼移動對應控制。內存
參考:https://www.zhihu.com/question/25004267/answer/86444056
無論多麼複雜的軟件程序,到了彙編層面(最接近硬件的層面), 都成了簡單的指令流。這些指令流雖然簡單,可是已經包含了全部必須的計算指令。每一行彙編代碼都有固定的格式,都是一條指令,而寄存器爲數據提供了一種存儲的方式,操做寄存器能夠對寄存器中的數據進行操做。
程序 = 指令 + 數據是對程序的一種直觀、本質的解釋方式。
這些安全問題的共同點是都進行了越界訪問,訪問了他們本不應訪問到的內存空間,從而執行了本不應被執行的代碼。
對於緩衝區溢出攻擊來講,這種說法很是好理解,就是緩衝區溢出字面的意思。
對於XSS攻擊,XSS攻擊被認爲是「新型的緩衝區溢出攻擊」,其本質也是利用緩衝區溢出實現。
對於SQL注入攻擊該如何理解呢?SQL注入是一種針對數據庫的攻擊方式,攻擊者在輸入的字符串之中注入SQL指令,在設計不良的程序當中忽略了字符檢查,那麼這些注入進去的惡意指令就會被數據庫服務器誤認爲是正常的SQL指令而運行,所以遭到破壞或是入侵。在設計的意圖中,接受這些惡意的sql指令的地方本不該該執行該種類型的代碼,也就是說原本應該沒有權限進行該種類型的操做,查詢就應該只是查詢,並且只能是在該針對用戶的查詢或者說是針對數據庫中某個表的某一項的查詢,用戶的輸入原本只能是參數而非指令,而當用戶的輸入變成指令後,訪問的內存就不是原來指令所在的內存了。
要提出統一的防範措施,我認爲很難對全部攻擊作到有效的防護,或者說不能比單獨針對這三種攻擊的防範措施加起來作的更好。由於這三種攻擊畢竟是針對三種不一樣的應用。若是說有一種統一的防範措施的話,那我以爲是嚴格的內存邊界檢查,對每一條指令的訪問內存範圍都進行檢查,但這會大大拖慢程序的運行效率。