A. 點線面緩沖區的區別
點線面緩沖區的區別在於形狀上不一樣。
常用的點緩沖區有圓形、三角形、矩形和環形等;線緩沖區有雙側對稱、雙側不對稱或單側緩沖區等形狀;面緩沖區有內側和外側緩沖區。
不同形式的緩沖區都是有著不同的特點的,其中最特別的緩沖區就在於面緩沖區。
B. linux內核物理內存管理有哪些常用演算法 lru slab
採用夥伴演算法分配內存時,每次至少分配一個頁面。但當請求分配的內存大小為幾十個位元組或幾百個位元組時應該如何處理?如何在一個頁面中分配小的內存區,小內存區的分配所產生的內碎片又如何解決?
Linux2.0採用的解決辦法是建立了13個空閑區鏈表,它們的大小從32位元組到132056位元組。從Linux2.2開始,MM的開發者採用了一種叫做slab的分配模式,該模式早在1994年就被開發出來,用於Sun Microsystem Solaris 2.4操作系統中。Slab的提出主要是基於以下考慮:
· 內核對內存區的分配取決於所存放數據的類型。例如,當給用戶態進程分配頁面時,內核調用get_free_page()函數,並用0填充這個頁面。 而給內核的數據結構分配頁面時,事情沒有這么簡單,例如,要對數據結構所在的內存進行初始化、在不用時要收回它們所佔用的內存。因此,Slab中引入了對象這個概念,所謂對象就是存放一組數據結構的內存區,其方法就是構造或析構函數,構造函數用於初始化數據結構所在的內存區,而析構函數收回相應的內存區。但為了便於理解,你也可以把對象直接看作內核的數據結構。為了避免重復初始化對象,Slab分配模式並不丟棄已分配的對象,而是釋放但把它們依然保留在內存中。當以後又要請求分配同一對象時,就可以從內存獲取而不用進行初始化,這是在Solaris 中引入Slab的基本思想。
實際上,Linux中對Slab分配模式有所改進,它對內存區的處理並不需要進行初始化或回收。出於效率的考慮,Linux並不調用對象的構造或析構函數,而是把指向這兩個函數的指針都置為空。Linux中引入Slab的主要目的是為了減少對夥伴演算法的調用次數。
· 實際上,內核經常反復使用某一內存區。例如,只要內核創建一個新的進程,就要為該進程相關的數據結構(task_struct、打開文件對象等)分配內存區。當進程結束時,收回這些內存區。因為進程的創建和撤銷非常頻繁,因此,Linux的早期版本把大量的時間花費在反復分配或回收這些內存區上。從Linux2.2開始,把那些頻繁使用的頁面保存在高速緩存中並重新使用。
· 可以根據對內存區的使用頻率來對它分類。對於預期頻繁使用的內存區,可以創建一組特定大小的專用緩沖區進行處理,以避免內碎片的產生。對於較少使用的內存區,可以創建一組通用緩沖區(如Linux2.0中所使用的2的冪次方)來處理,即使這種處理模式產生碎片,也對整個系統的性能影響不大。
· 硬體高速緩存的使用,又為盡量減少對夥伴演算法的調用提供了另一個理由,因為對夥伴演算法的每次調用都會「弄臟」硬體高速緩存,因此,這就增加了對內存的平均訪問次數。
Slab分配模式把對象分組放進緩沖區(盡管英文中使用了Cache這個詞,但實際上指的是內存中的區域,而不是指硬體高速緩存)。因為緩沖區的組織和管理與硬體高速緩存的命中率密切相關,因此,Slab緩沖區並非由各個對象直接構成,而是由一連串的「大塊(Slab)」構成,而每個大塊中則包含了若干個同種類型的對象,這些對象或已被分配,或空閑,如圖6.12所示。一般而言,對象分兩種,一種是大對象,一種是小對象。所謂小對象,是指在一個頁面中可以容納下好幾個對象的那種。例如,一個inode結構大約佔300多個位元組,因此,一個頁面中可以容納8個以上的inode結構,因此,inode結構就為小對象。Linux內核中把小於512位元組的對象叫做小對象。
C. 緩沖區溢出的防範方法
緩沖區溢出攻擊佔了遠程網路攻擊的絕大多數,這種攻擊可以使得一個匿名的Internet用戶有機會獲得一台主機的部分或全部的控制權。如果能有效地消除緩沖區溢出的漏洞,則很大一部分的安全威脅可以得到緩解。
目前有四種基本的方法保護緩沖區免受緩沖區溢出的攻擊和影響。 這個方法使得緩沖區溢出不可能出現,從而完全消除了緩沖區溢出的威脅,但是相對而言代價比較大。
完整性檢查
在程序指針失效前進行完整性檢查。雖然這種方法不能使得所有的緩沖區溢出失效,但它能阻止絕大多數的緩沖區溢出攻擊。
非執行的緩沖區
通過使被攻擊程序的數據段地址空間不可執行,從而使得攻擊者不可能執行被植入被攻擊程序輸入緩沖區的代碼,這種技術被稱為非執行的緩沖區技術。在早期的Unix系統設計中,只允許程序代碼在代碼段中執行。但是Unix和MS Windows系統由於要實現更好的性能和功能,往往在數據段中動態地放入可執行的代碼,這也是緩沖區溢出的根源。為了保持程序的兼容性,不可能使得所有程序的數據段不可執行。
但是可以設定堆棧數據段不可執行,這樣就可以保證程序的兼容性。Linux和Solaris都發布了有關這方面的內核補丁。因為幾乎沒有任何合法的程序會在堆棧中存放代碼,這種做法幾乎不產生任何兼容性問題,除了在Linux中的兩個特例,這時可執行的代碼必須被放入堆棧中:
信號傳遞
Linux通過向進程堆棧釋放代碼然後引發中斷來執行在堆棧中的代碼來實現向進程發送Unix信號。非執行緩沖區的補丁在發送信號的時候是允許緩沖區可執行的。
GCC的在線重用
研究發現gcc在堆棧區里放置了可執行的代碼作為在線重用之用。然而,關閉這個功能並不產生任何問題,只有部分功能似乎不能使用。
非執行堆棧的保護可以有效地對付把代碼植入自動變數的緩沖區溢出攻擊,而對於其它形式的攻擊則沒有效果。通過引用一個駐留的程序的指針,就可以跳過這種保護措施。其它的攻擊可以採用把代碼植入堆或者靜態數據段中來跳過保護。 編寫正確的代碼是一件非常有意義的工作,特別象編寫C語言那種風格自由而容易出錯的程序,這種風格是由於追求性能而忽視正確性的傳統引起的。盡管花了很長的時間使得人們知道了如何編寫安全的程序,具有安全漏洞的程序依舊出現。因此人們開發了一些工具和技術來幫助經驗不足的程序員編寫安全正確的程序。
最簡單的方法就是用grep來搜索源代碼中容易產生漏洞的庫的調用,比如對strcpy和sprintf的調用,這兩個函數都沒有檢查輸入參數的長度。事實上,各個版本C的標准庫均有這樣的問題存在。
此外,人們還開發了一些高級的查錯工具,如fault injection等。這些工具的目的在於通過人為隨機地產生一些緩沖區溢出來尋找代碼的安全漏洞。還有一些靜態分析工具用於偵測緩沖區溢出的存在。
雖然這些工具幫助程序員開發更安全的程序,但是由於C語言的特點,這些工具不可能找出所有的緩沖區溢出漏洞。所以,偵錯技術只能用來減少緩沖區溢出的可能,並不能完全地消除它的存在。
D. arcengine有哪些生成緩沖區的方法
1、ITopologicalOperator .Buffer
2、對於大量的圖形或者整個圖層用GP工具【buffer】
3、展示時候或者選擇時需要緩沖的 用DisplayBuffer Selectionbuffer類
E. 什麼是緩沖區
緩沖區溢出好比是將十磅的糖放進一個只能裝五磅的容器里……
堆棧溢出(又稱緩沖區溢出)攻擊是最常用的黑客技術之一。我們知道,UNIX本身以及其上的許多應用程序都是用C語言編寫的,C語言不檢查緩沖區的邊界。在某些情況下,如果用戶輸入的數據長度超過應用程序給定的緩沖區,就會覆蓋其他數據區。這稱作「堆棧溢出或緩沖溢出」。
一般情況下,覆蓋其他數據區的數據是沒有意義的,最多造成應用程序錯誤。但是,如果輸入的數據是經過「黑客」精心設計的,覆蓋堆棧的數據恰恰是黑客的入侵程序代碼,黑客就獲取了程序的控制權。如果該程序恰好是以root運行的,黑客就獲得了root許可權,然後他就可以編譯黑客程序、留下入侵後門等,實施進一步地攻擊。按照這種原理進行的黑客入侵就叫做「堆棧溢出攻擊」。
為了便於理解,我們不妨打個比方。緩沖區溢出好比是將十磅的糖放進一個只能裝五磅的容器里。一旦該容器放滿了,餘下的部分就溢出在櫃台和地板上,弄得一團糟。由於計算機程序的編寫者寫了一些編碼,但是這些編碼沒有對目的區域或緩沖區——五磅的容器——做適當的檢查,看它們是否夠大,能否完全裝入新的內容——十磅的糖,結果可能造成緩沖區溢出的產生。如果打算被放進新地方的數據不適合,溢得到處都是,該數據也會製造很多麻煩。但是,如果緩沖區僅僅溢出,這只是一個問題。到此時為止,它還沒有破壞性。當糖溢出時,櫃台被蓋住。可以把糖擦掉或用吸塵器吸走,還櫃台本來面貌。與之相對的是,當緩沖區溢出時,過剩的信息覆蓋的是計算機內存中以前的內容。除非這些被覆蓋的內容被保存或能夠恢復,否則就會永遠丟失。
在丟失的信息里有能夠被程序調用的子程序的列表信息,直到緩沖區溢出發生。另外,給那些子程序的信息——參數——也丟失了。這意味著程序不能得到足夠的信息從子程序返回,以完成它的任務。就像一個人步行穿過沙漠。如果他依賴於他的足跡走回頭路,當沙暴來襲抹去了這些痕跡時,他將迷失在沙漠中。這個問題比程序僅僅迷失方向嚴重多了。入侵者用精心編寫的入侵代碼(一種惡意程序)使緩沖區溢出,然後告訴程序依據預設的方法處理緩沖區,並且執行。此時的程序已經完全被入侵者操縱了。
入侵者經常改編現有的應用程序運行不同的程序。例如,一個入侵者能啟動一個新的程序,發送秘密文件(支票本記錄,口令文件,或財產清單)給入侵者的電子郵件。這就好像不僅僅是沙暴吹了腳印,而且後來者也會踩出新的腳印,將我們的迷路者領向不同的地方,他自己一無所知的地方。
緩沖區溢出的處理
你屋子裡的門和窗戶越少,入侵者進入的方式就越少……
由於緩沖區溢出是一個編程問題,所以只能通過修復被破壞的程序的代碼而解決問題。如果你沒有源代碼,從上面「堆棧溢出攻擊」的原理可以看出,要防止此類攻擊,我們可以:
1、開放程序時仔細檢查溢出情況,不允許數據溢出緩沖區。由於編程和編程語言的原因,這非常困難,而且不適合大量已經在使用的程序;
2、使用檢查堆棧溢出的編譯器或者在程序中加入某些記號,以便程序運行時確認禁止黑客有意造成的溢出。問題是無法針對已有程序,對新程序來講,需要修改編譯器;
3、經常檢查你的操作系統和應用程序提供商的站點,一旦發現他們提供的補丁程序,就馬上下載並且應用在系統上,這是最好的方法。但是系統管理員總要比攻擊者慢一步,如果這個有問題的軟體是可選的,甚至是臨時的,把它從你的系統中刪除。舉另外一個例子,你屋子裡的門和窗戶越少,入侵者進入的方式就越少。
F. 網路安全-----緩沖區溢出的保護方法有哪些
目前有四種基本的方法保護緩沖區免受緩沖區溢出的攻擊和影響。
編寫正確的代碼 非執行的緩沖區 數組邊界檢查 程序指針完整性檢查
一、編寫正確的代碼 Top
編寫正確的代碼是一件非常有意義但耗時的工作,特別像編寫C語言那種具有容易出錯傾向的程序(如:字元串的零結尾),這種風格是由於追求性能而忽視正確性的傳統引起的。盡管花了很長的時間使得人們知道了如何編寫安全的程序組具有安全漏洞的程序依舊出現。因此人們開發了一些工具和技術來幫助經驗不足的程序員編寫安全正確的程序。
最簡單的方法就是用grep來搜索源代碼中容易產生漏洞的庫的調用,比如對strcpy和sprintf的調用,這兩個函數都沒有檢查輸入參數的長度。事實上,各個版本C的標准庫均有這樣的問題存在。為了尋找一些常見的諸如緩沖區溢出和操作系統競爭條件等漏洞,一些代碼檢查小組檢查了很多的代碼。然而依然有漏網之魚存在。盡管採用了strcpy和sprintf這些替代函數來防止緩沖區溢出的發生,但是由於編寫代碼的問題,仍舊會有這種情況發生。比如lprm程序就是最好的例子,雖然它通過了代碼的安全檢查,但仍然有緩沖區溢出的問題存在。
為了對付這些問題,人們開發了一些高級的查錯工具,如faultinjection等。這些工具的目的在於通過人為隨機地產生一些緩沖區溢出來尋找代碼的安全漏洞。還有一些靜態分析工具用於偵測緩沖區溢出的存在。雖然這些工具可以幫助程序員開發更安全的程序,但是由於C語言的特點,這些工具不可能找出所有的緩沖區溢出漏洞。所以,偵錯技術只能用來減少緩沖區溢出的可能,並不能完全地消除它的存在,除非程序員能保證他的程序萬元一失。
二、非執行的緩沖區 Top
通過使被攻擊程序的數據段地址空間不可執行,從而使得攻擊者不可能執行被植入被攻擊程序輸入緩沖區的代碼,這種技術被稱為非執行的緩沖區技術。事實上,很多老的Unix系統都是這樣設計的,但是近來的Unix和MS Windows系統為實現更好的性能和功能,往往在數據段中動態地放人可執行的代碼。所以為了保持程序的兼容性不可能使得所有程序的數據段不可執行。但是我們可以設定堆棧數據段不可執行,這樣就可以最大限度地保證了程序的兼容性。Linux和Solaris都發布了有關這方面的內核補丁。因為幾乎沒有任何合的
程序會在堆棧中存放代碼,這種做法幾乎不產生任何兼容性問題,除了在Linux中的兩個特例,這時可執行的代碼必須被放入堆棧中:
1.信號傳遞
Linux通過向進程堆棧釋放代碼然後引發中斷來執行在堆棧中的代碼進而實現向進程發送Unix信號.非執行緩沖區的補丁在發送信號的時候是允許緩沖區可執行的.
2.GCC的在線重用
研究發現gcc在堆棧區里放置了可執行的代碼以便在線重用。然而,關閉這個功能並不產生任何問題.只有部分功能似乎不能使用。非執行堆棧的保護可以有效地對付把代碼植入自動變數的緩沖區溢出攻擊,而對於其他形式的攻擊則沒有效果。通過引用一個駐留
的程序的指針,就可以跳過這種保護措施。其他的攻擊可以採用把代碼植入堆或者靜態數據段中來跳過保護。
三、數組邊界檢查 Top
植入代碼引起緩沖區溢出是一個方面,擾亂程序的執行流程是另一個方面。不像非執行緩沖區保護,數組邊界檢查完全沒有了緩沖區溢出的產生和攻擊。這樣,只要數組不能被溢出,溢出攻擊也就無從談起。為了實現數組邊界檢查,則所有的對數組的讀寫操作都應當被檢查以確保對數組的操作在正確的范圍內。最直接的方法是檢查所有的數組操作,但是通常可以來用一些優化的技術來減少檢查的次數。目前有以下的幾種檢查方法:
1、Compaq C編譯器
Compaq公司為Alpha CPU開發的C編譯器支持有限度的邊界檢查(使用—check_bounds參數)。這些限制是:只有顯示的數組引用才被檢查,比如「a[3]」會被檢查,而「*(a
+3)"則不會。由於所有的C數組在傳送的時候是指針傳遞的,所以傳遞給函數的的數組不會被檢查。帶有危險性的庫函數如strcpy不會在編譯的時候進行邊界檢查,即便是指定了邊界檢查。在C語言中利用指針進行數組操作和傳遞是非常頻繁的,因此這種局限性是非常嚴重的。通常這種邊界檢查用來程序的查錯,而且不能保證不發生緩沖區溢出的漏洞。
2、Jones&Kelly:C的數組邊界檢查
Richard Jones和Paul Kelly開發了一個gcc的補丁,用來實現對C程序完全的數組邊界檢查。由於沒有改變指針的含義,所以被編譯的程序和其他的gcc模塊具有很好的兼容性。更進一步的是,他們由此從沒有指針的表達式中導出了一個「基」指針,然後通過檢查這個基指針來偵測表達式的結果是否在容許的范圍之內。當然,這樣付出的性能上的代價是巨大的:對於一個頻繁使用指針的程序,如向量乘法,將由於指針的頻繁使用而使速度慢30倍。這個編譯器目前還很不成熟,一些復雜的程序(如elm)還不能在這個上面編譯、執行通過。然而在它的一個更新版本之下,它至少能編譯執行ssh軟體的加密軟體包,但其實現的性能要下降12倍。
3、Purify:存儲器存取檢查
Purify是C程序調試時查看存儲器使用的工具而不是專用的安全工具。Purify使用"目標代碼插入"技術來檢查所有的存儲器存取。通過用Purify連接工具連接,可執行代碼在執行的時候帶來的性能的損失要下降3—5倍。
4、類型——安全語言
所有的緩沖區溢出漏洞都源於C語言的類型安全。如果只有類型—安全的操作才可以被允許執行,這樣就不可能出現對變數的強制操作。如果作為新手,可以推薦使用具有類型—安全的語言如JAVA和ML。
但是作為Java執行平台的Java虛擬機是C程序.因此攻擊JVM的一條途徑是使JVM的緩沖區溢出。因此在系統中採用緩沖區溢出防衛技術來使用強制類型—安全的語言可以收到預想不到的效果。
四、程序指針完整性檢查 Top
程序指針完整性檢查和邊界檢查有略微的不同。與防止程序指針被改變不同,程序指針完整性檢查在程序指針被引用之前檢測到它的改變。因此,即便一個攻擊者成功地改變程序的指針,由於系統事先檢測到了指針的改變,因此這個指針將不會被使用。與數組邊界檢查相比,這種方法不能解決所有的緩沖區溢出問題;採用其他的緩沖區溢出方法就可以避免這種檢測。但是這種方法在性能上有很大的優勢,而且兼容性也很好。
l、手寫的堆棧監測
Snarskii為FreeBSD開發丁一套定製的能通過監測cpu堆棧來確定緩沖區溢出的libc。這個應用完全用手工匯編寫的,而且只保護libc中的當前有效紀錄函數.這個應用達到了設計要求,對於基於libc庫函數的攻擊具有很好的防衛,但是不能防衛其它方式的攻擊.
2、堆棧保護
堆棧保護是一種提供程序指針完整性檢查的編譯器技術.通過檢查函數活動紀錄中的返回地址來實現。堆棧保護作為gcc的一個小的補丁,在每個函數中,加入了函數建立和銷毀的代碼。加入的函數建立代碼實際上在堆棧中函數返回地址後面加了一些附加的位元組。而在函數返回時,首先檢查這個附加的位元組是否被改動過,如果發生過緩沖區溢出的攻擊,那麼這種攻擊很容易在函數返回前被檢測到。但是,如果攻擊者預見到這些附加位元組的存在,並且能在溢出過程中同樣地製造他們.那麼它就能成功地跳過堆棧保護的檢測。通常.我們有如下兩種方案對付這種欺騙:
1.終止符號
利用在C語言中的終止符號如o(null,CR,LF,—1(Eof)等這些符號不能在常用的字元串函數中使用,因為這些函數一旦遇到這些終止符號,就結束函數過程了。
2.隨機符號
利用一個在函數調用時產生的一個32位的隨機數來實現保密,使得攻擊者不可能猜測到附加位元組的內容.而且,每次調用附加位元組的內容都在改變,也無法預測。通過檢查堆棧的完整性的堆棧保護法是從Synthetix方法演變來的。Synthetix方法通過使用准不變數來確保特定變數的正確性。這些特定的變數的改變是程序實現能預知的,而且只能在滿足一定的條件才能可以改變。這種變數我們稱為准不變數。Synthetix開發了一些工具用來保護這些變數。攻擊者通過緩沖區溢出而產生的改變可以被系統當做非法的動作。在某些極端的情況下,這些准不變數有可能被非法改變,這時需要堆棧保護來提供更完善的保護了。實驗的數據表明,堆棧保護對於各種系統的緩沖區溢出攻擊都有很好的保護作用.並能保持較好的兼容性和系統性能。分析表明,堆棧保護能有效抵禦現在的和將來的基於堆棧的攻擊。堆棧保護版本的Red Hat Linux 5.1已經在各種系統上運行了多年,包括個人的筆記本電腦和工作組文件伺服器。
3、指針保護
在堆棧保護設計的時候,沖擊堆棧構成了緩沖區溢出攻擊的常見的一種形式。有人推測存在一種模板來構成這些攻擊(在1996年的時候)。從此,很多簡單的漏洞被發現,實施和補丁後,很多攻擊者開始用更一般的方法實施緩沖區溢出攻擊。指針保護是堆錢保護針對這種情況的一個推廣。通過在所有的代碼指針之後放置附加位元組來檢驗指針在被調用之前的合法性,如果檢驗失敗,會發出報警信號和退出程序的執行,就如同在堆棧保護中的行為一樣。這種方案有兩點需要注意:
(1)附加位元組的定位
附加位元組的空間是在被保護的變數被分配的時候分配的,同時在被保護位元組初始化過程中被初始化。這樣就帶來了問題:為了保持兼容性,我們不想改變被保護變數的大小,因此我們不能簡單地在變數的結構定義中加入附加字。還有,對各種類型也有不同附加位元組數目。
(2)查附加位元組
每次程序指針被引用的時候都要檢查附加位元組的完整性。這個也存在問題因為「從存取器讀」在編譯器中沒有語義,編譯器更關心指針的使用,而各種優化演算法傾向於從存儲器中讀人變數.還有隨著變數類型的不同,讀入的方法也各自不同。到目前為止,只有很少—部分使用非指針變數的攻擊能逃脫指針保護的檢測。但是,可以通過在編譯器上強制對某一變數加入附加位元組來實現檢測,這時需要程序員自己手工加入相應的保護了。
G. 圖像在資料庫中的存儲方法有哪些 如果將圖像先存入緩沖區,再存入資料庫,緩沖區如何實現為什麼要用
兩種,
1、一種是將圖片轉化成二進制數據流存入資料庫中;
2、一種是保存圖片的路徑,然後前台讀取路徑去調用圖片;
特點:
相關的代碼網路一下應該會有,第二種方法實現上比較簡單,就是存儲路徑,然後根據路徑讀取對應的圖片顯示出來。第一種就比較麻煩,要先把圖片轉化成二進制數據,讀取時就是從資料庫讀取對應數據再轉化成圖片顯示出來。
圖片存儲緩存的話需要通過圖片轉化為數據流進行存放在資料庫裡面,調用的時候按照數據流找到圖片存放路徑轉化出來就可以。
H. 請教高手!!!
操作系統簡述
--------------------------------------------------------------------------------
2004-05-19
一、計算機軟體與操作系統
功能強大的計算機自從走進了人類的生活就發揮著越來越重要的作用,隨著時代的發展,計算機已與人們的日常生活息息相關。不能不說計算機軟體日新月異的發展在此起著關鍵作用。可以這么說,離開了軟體,計算機就成了廢銅爛鐵。
計算機機軟體大致可以分為兩類:系統軟體和應用軟體。
系統軟體用於管理計算機資源,並為應用軟體提供一個統一的平台。
應用軟體則在系統軟體的基礎上實現用戶所需要的功能。
而操作系統(Operation System)則是最基本的系統軟體,它控制計算機的所有資源關提供應用程序開發的基礎。
二、操作系統誕生的原因
計算機是由CPU、內存、磁碟、顯卡、音效卡等許許多多設備組成的,而且這些設備的廠商眾多,品種繁多,而且不同廠商生產的同種設備雖然完成同種功能,但是具體細節卻存在千差萬別。
為了正確地管理和使用這些設備來實現具體的應用,這樣程序員就得了解和掌握各種設備的工作原理。而且對於同種設備,由於不同的硬體廠商在實現細節上的差異使得程序員再次陷入了復雜的硬體控制的深淵!
必須找到一種方法使得程序員從苦海中脫離出來!多年的研究與發展終於使得這個願望成為現實。這個解決方法就是在硬體的基礎上載入一層軟體來管理整個系統。這個軟體通過設備驅動程序來與計算機硬體打交道,通過一系列的功能模塊將整個計算機硬體系統抽象成為一個公共、統一、開放的介面—虛擬機,從而使得程序員不必再陷入各種硬體系統的具體細節!
這一層軟體就是操作系統。
三、什麼是操作系統
操作系統是一個大型的軟體系統,其功能復雜,體系龐大。從不同的角度看的結果也不同,正是「橫看成嶺側成峰」,下面我們通過最典型的兩個角度來分析一下。
1.從程序員的角度看
正如前面所說的,如果沒有操作系統,程序員在開發軟體的時候就必須陷入復雜的硬體實現細節。程序員並不想涉足這個可怕的領域,而且大量的精力花費在這個重復的、沒有創造性的工作上也使得程序員無法集中精力放在更具有創造性的程序設計工作中去。程序員需要的是一種簡單的,高度抽象的可以與之打交道的設備。
將硬體細節與程序員隔離開來,這當然就是操作系統。
從這個角度看,操作系統的作用是為用戶提供一台等價的擴展機器,也稱虛擬機,它比底層硬體更容易編程。
2.從使用者的角度看
從使用者的角度來看,操作系統則用來管理一個復雜系統的各個部分。
操作系統負責在相互競爭的程序之間有序地控制對CPU、內存及其它I/O介面設備的分配。
比如說,假設在一台計算機上運行的三個程序試圖同時在同一台列印機上輸出計算結果。那麼頭幾行可能是程序1的輸出,下幾行是程序2的輸出,然後又是程序3的輸出等等。最終結果將是一團糟。這時,操作系統採用將列印輸出送到磁碟上的緩沖區的方法就可以避免這種混亂。在一個程序結束後,操作系統可以將暫存在磁碟上的文件送到列印機輸出。
從這種角度來看,操作系統則是系統的資源管理者。
四、操作系統發展歷史
下面我們結合計算機的發展歷史來回顧一下操作系統的發展歷程。
1.第一代計算機(1945-1955):真空管和插件板
40年代中期,美國哈佛大學、普林斯頓高等研究院、賓夕法尼亞大學的一些人使用數萬個真空管,構建了世界上第一台電子計算機。開啟計算機發展的歷史。這個時期的機器需要一個小組專門設計、製造、編程、操作、維護每台機器。程序設計使用機器語言,通過插板上的硬連線來控制其基本功能。
這個時候處於計算機發展的最初階段,連程序設計語言都還沒有出現,操作系統更是聞所未聞!
2.第二代計算機(1955-1965):晶體管和批處理系統
這個時期計算機越來越可靠,已從研究院中走出來,走進了商業應用。但這個時期的計算機主要完成各種科學計算,需要專門的操作人員維護,並且需要針對每次的計算任務進行編程。
第二代計算機主要用於科學與工程計算。使用FORTRAN與匯編語言編寫程序。在後期出現了操作系統的雛形:FMS(FORTRAN監控系統)和IBMSYS(IBM為7094機配備的操作系統)
3.第三代計算機(1965-1980):集成電路晶元和多道程序
60年代初,計算機廠商根據不同的應用分成了兩個計算機系列,一個針對科學計算,一個針對商業應用。
隨著計算機應用的深入,對統一兩種應用的計算機需求出現了。這時IBM公司試圖通過引入System/360來解決這個問題。
與這個計劃配套,IBM公司組織了OS/360操作系統的開發,然後復雜的需求,以及當時軟體工程水平低下使得OS/360的開發工作陷入了歷史以來最可怕的「軟體開發泥潭」,誕生了最著名的失敗論著----《神秘的人月》。
雖然這個開發計劃失敗了,但是這個願望卻成為了計算機廠商的目標。
此時,MIT、Bell Lab(貝爾實驗室)和通用電氣公司決定開發一種「公用計算機服務系統」----MULTICS,希望其能同時支持數百名分時用戶的一種機器。結果這個計劃的研製難度超出了所有人的預料,最後這個系統也以失敗結束。不過,MULTICS的思想卻為後來的操作系統很多提示。
60年代未,一位貝爾實驗室曾參加過MULTICS研製工作的計算機科學家Ken Thompson,在一台無人使用的PDP-7機器上開發出了一套簡化的、單用戶版的MULTICS。後來導致了UNIX操作系統的誕生。
目前UNIX操作系統主導了小型機、工作站以及其他市場。也是至今最有影響力的操作系統之一,而Linux也是UNIX系統的一種衍生,下一講我們將專門介紹一下UNIX的發展歷史。
4.第四代計算機(1980-今):個人計算機
隨著計算機技術的不斷更新與發展,計算機神奇般地闖入了人們的生活,現在以低廉的價格就可以獲得強大計算能力的計算機。
價格不再是阻攔計算機普及的門檻時,降低計算機的易用性就顯得十分重要!由於UNIX系統的本身特點,使得其不太適合於在運行在個人計算機上,這時就需要一種新的操作系統。
在這一歷史關鍵時候,IBM公司由於低估了PC機的市場,並未使用最大的力量角逐這一市場,這時Intel公司趁機進入,成為了當今微處理器的老大。同時善於抓住時機的微軟公司的總裁比爾·蓋茨適時地進入了這一領域,用購買來的CP/M搖身一變成為MS-DOS,並憑借其成為個人計算機操作系統領域的霸主。
雖然是蘋果公司在GUI方面先拔頭籌,但由於蘋果公司的不兼容、不開放的市場策略,未能擴大戰果,這時微軟又適時地進入了GUI方面,憑借WINDOWS系統再次稱雄!
五、操作系統構成
一般來說,操作系統由以下幾個部分組成:
1)進程調度子系統:
進程調度子系統決定哪個進程使用CPU,對進程進行調度、管理。
2)進程間通信子系統:
負責各個進程之間的通信。
3)內存管理子系統:
負責管理計算機內存。
4)設備管理子系統:
負責管理各種計算機外設,主要由設備驅動程序構成。
5)文件子系統:
負責管理磁碟上的各種文件、目錄!
6)網路子系統:
負責處理各種與網路有關的東西。
六、操作系統結構設計
操作系統有多種實現方法與設計思路,下面僅選取最有代表性的三種做一簡單的敘述。
1.整體式系統結構設計
這是最常用的一種組織方式,它常被譽為「大雜燴」,也可說,整體式系統結構就是「無結構」。
這種結構方式下,開發人員為了構造最終的目標操作系統程序,首先將一些獨立的過程,或包含過程的文件進行編譯,然後用鏈接程序將它們鏈接成為一個單獨的目標程序。
Linux操作系統就是採用整體式的系統結構設計。但其在此基礎上增加了一些形如動態模塊載入等方法來提高整體的靈活性,彌補整體式系統結構設計的不足。
2.層次式系統結構設計
這種方式則是對系統進行嚴格的分層,使得整個系統層次分明,等級森嚴!這種系統學術味道較濃!實際完全按照這種結構進行設計的操作系統不多,也沒有廣泛的應用。
可以這么說,現在的操作系統設計是在整體式系統結構與層次式系統結構設計中尋求平衡。
3.微內核系統結構設計
而微內核系統結構設計則是近幾年來出現的一種新的設計理念,最有代表性的操作系統有Mach和QNX。
微內核系統,顧名思義就是系統內核很小!比如說QNX的微內核只負責:
¨ 進程間的通信
¨ 低層的網路通信
¨ 進程調度
¨ 第一級中斷處理
七、操作系統橫向比較
計算機歷史中出現了許許多多的操作系統,然後大浪淘沙,無情地淘汰了許多,只留下一些經歷過市場考驗的:
1.桌面操作系統:
1)MSDOS:Intel x86系列的PC機上的最早的操作系統,微軟公司產品,曾經統治了這個領域,現在已逐漸被自家兄弟WINDOWS 9x系列所代替,現在除了一些低檔機外已不多見。
2)Windows 9x:微軟公司產品,從Windows 3.x發展而來,現在是基於Intel x86系列的PC機上的主要操作系統,也是現然個人電腦中裝機量最大的操作系統。面向桌面、面向個人用戶。
3)Mac OS:蘋果公司所有,界面友好,性能優異,但由於只能運行在蘋果公司自己的電腦上而發展有限。但由於蘋果電腦獨特的市場定位,現在仍存活良好。
2.伺服器操作系統:
1)UNIX系列:UNIX可以說是源遠流長,是一個真正穩健、實用、強大的操作系統,但是由於眾多廠商在其基礎上開發了有自己特色的UNIX版本,所以影響了整體。在國外,UNIX系統可謂獨樹一幟,廣泛應用於科研、學校、金融等關鍵領域。但由於中國的計算機發展較為落後,UNIX系統的應用水平與國外相比有一定的滯後。
2)Windows NT系列:微軟公司產品,其利用Windows的友好的用戶界面的優勢打進伺服器操作系統市場。但其在整體性能、效率、穩定性上都與UNIX有一定差距,所以現在主要應用於中小企業市場。
3)Novell Netware系列:Novell公司產品,其以極適合於中小網路而著稱,在中國的證券行業市場佔有率極高,而且其產品特點鮮明,仍然是伺服器系統軟體中的長青樹。
I. 計算機操作系統什麼是緩沖區管理
緩沖區溢出好比是將十磅的糖放進一個只能裝五磅的容器里…… 堆棧溢出(又稱緩沖區溢出)攻擊是最常用的黑客技術之一。我們知道,UNIX本身以及其上的許多應用程序都是用C語言編寫的,C語言不檢查緩沖區的邊界。在某些情況下,如果用戶輸入的數據長...
J. arcgis中緩沖區分析的三種方法的區別
摘要 您好,arcgis中緩沖區分析的三種方法的區別: