字體:小 中 大 | |
|
|
2020/11/26 17:46:05瀏覽4098|回應0|推薦0 | |
第12章分散式系統 分散式作業系統(distributed operation system)入門 區域網路作業系統 分散式架構下的資訊傳遞 網路作業系統是一個電腦網路的靈魂,就如同作業系統主宰電腦的資源,網路作業系統主控網路上的資源。早期比較常見的網路作業系統(NOS ,Network Operating System)多半使用於區域網路中,像Novell Netware、Windows NT等,可以管理共用的檔案、印表機、建立使用者帳號等。廣域網路中的資源管理,目前並沒有一個完整的、類似區域網路作業系統的軟體,這是因為廣域網路中,資源的種類及共用方式,與區域網路不太相同。 可以把一個分散式系統(Distributed System)看成是一群獨立的電腦的組合,但對使用者來說,就像是只有一台電腦一樣 1. 就硬體層面來看:分散式系統中可能包含了很多電腦,這些電腦是獨立的,有各自作業的環境與功能,但在必要時也能透過網路溝通與合作。 2. 就軟體層面來看:一個分散式系統有其被賦予的任務,不管這些任務由多少子系統一起合作完成的,對於使用者來說,可單純地看成是一個完整而唯一的軟體系統所完成的。軟體和硬體可合起來看成是一個分散式 軟體和硬體可合起來看成是一個分散式系統。 分散式系統比較正式的名稱是分散式運算系統(Distributed computing system),可以看成是一群電腦程式的集合,這些程式在網路上的多台電腦中執行,透過訊息的交換來達成工作的目標。 基本上分散式系統主要還是屬於軟體系統,在多工的(Multi-tasking)電腦或是多處理器的電腦上,一樣能進行分散式的運算,所謂的「分散式」主要是指因多個程式分頭並行,必須以交換訊息來協調彼此的執行方式。 分散式系統的優點
分散式系統也有一些潛在的問題: 1. 軟體的複雜度:分散式系統的開發比較困難,因為必須考慮到分散性(Distribution)與異質性(Heterogeneity)。 2. 對於網路通訊的依賴:分散式系統有基本的通訊需求,對於網路通訊的穩定性及頻寬要求較高。 3. 安全性(Security):由於分散式系統的作業跨網路進行,比較可能產生一些資料安全上的問題。 多處理器電腦系統的分類
分散式軟體系統所在的電腦架構的特徵: 多處理器的MIMD可共用記憶體,處理器之間的關係密切。處理器之間的連結方式可用匯流排(bus),或是以交換的方式。多電腦的MIMD是目前常見的例子,以電腦網路連結的電腦的組合,就可以看成是一種多電腦的MIMD. 多電腦的連結方式同樣可分成匯流排(bus)與交換的兩種方式。不管是哪一種MIMD,我們所說的分散式軟體系統就是在這些電腦架構上執行的。 分散式作業系統的類型 從使用者的觀點來看,分散式系統只是一種軟體系統,執行時也會因系統的特性而產生不同的結果,常見的分類方式是依照軟體對硬體及使用者的限制情況來區分,假如在分散式系統下,使用者和運算資源基本上仍是獨立自主的,只是偶而交換資訊或共享資源,這樣的分散式系統具有鬆散結合(Loosely-coupled)的特性;假如分散式系統必須嚴格地控制運算資源及資訊交換的方式,則該系統具有緊密結合(Tightly-coupled)的特性。 各類分散式系統的比較
分散式系統中的通訊可看成是程序(Process)之間訊息的交換,如何決定訊息送往的位址(Address)是很重要的問題
阻絕式與非阻絕式的通訊
暫存與非暫存的通訊方式 訊息的發送(Send)與接收(Receive)是互相搭配的,欲接收訊息的程序通常會先等在那邊或已知會系統將收到訊息,但也有可能訊息發送的指令遠在接收指令執行前發生,則訊息到達目的地時,無任何程序準備接收該訊息,在這種情況下系統如何處置就決定於通訊的方式,若是採用非暫存(Unbuffered)的方式,則作業系統最多等一段時間之後,就會丟棄此訊息,若採用了暫存(Buffered)的方式,則可將訊息暫存起來,由未來接收訊息的程序能在此找到欲接收的訊息。 [可靠與非可靠的通訊方式] 網路通訊有時候會發生錯誤,造成訊息的流失,為了預防這些錯誤的發生,系統可以利用特定的回覆訊息來知會訊息發送端是否已收到訊息,如此一來,假如發送端未收到此類訊息,即可再度傳送訊息,這一類的機制可達到比較可靠(Reliable)的通訊結果。假如預期通訊網路相當穩定,不太可能發生錯誤或延誤,也可不做任何特別的處置,這種通訊方式則界定為非可靠(Unreliable)的通訊方式。 程式(Program)被執行之後會在作業系統中產生一個處理元,處理元擁有自己處理資料的位址空間(Address Space)與執行時的控制邏輯,很多分散式系統支援所謂「執行緒」(Thread)的觀念,一個處理元可能包含數個執行緒,執行緒和處理元很像,但是同一個處理元內的執行緒共享相同的位址空間。執行緒的使用是為了在發生阻絕式的系統呼叫(Blocking system call)時,讓系統仍能持續工作
執行緒省下了等候Disk I∕O的時間 分配執行緒開始執行後,會檢查是否有外來的請求,如果有,則交由閒置的工作執行緒處理,交接之後,分配執行緒停止執行,被交付任務的工作執行緒先檢查共用的快取記憶體上是否有外來請求所需要的資料,如果沒有,立即對作業系統發出資料的請求,進行Disk I∕O,該工作執行緒則再度閒置,下一個執行的執行緒由作業系統的排程器決定,可能是分配執行緒,或是已完成Disk I∕O可繼續進行處理的工作執行緒。 分散式系統對於處理元在處理器上的執行必須進行一些管理,包括處理器使用的方式、處理器分配給處理元的方式(也稱做Processor allocation)、處理元的排程(Process Scheduling)、容錯(Fault tolerance)、即時性需求(Real-time requirement)等,這些問題都比在傳統的作業系統中的情況為複雜, 分散式系統的處理元與處理器的管理是相當重要的問題,但在技術的層面上相當深入,比較不屬於一般應用系統開發時會遭遇到的問題,對於分散式的作業系統來說,執行緒、處理元與處理器的管理屬於作業系統本身的功能。系統的容錯機制與即時分散式系統的需求,也應該在分散式作業系統的領域中探討。 12.2區域網路作業系統 區域網路的範圍,大致上可以用企業或組織為上限,在這個上限之內,可能有一個或數個區域網路。而區域網路作業系統使用的環境,可能是企業整體、部門或作業編組等;因此,區域網路作業系統必須有適應各種企業或組織環境的彈性。區域網路作業系統的基本功能包括:網路資源的管理、網路使用者的管理、安全性的支援與服務、應用系統的支援等。 網路上的資源常見的有檔案、磁碟空間、印表機等,這些資源的分配與使用,必須做適度的管理,所以網路上的使用者要有帳號與密碼,才能使用網路資源。每個帳號有不同的權限,帳號內所屬的資源,可再由使用者分配給別的帳號使用。 目前大多數的區域網路作業系統是建立在現有的電腦作業系統之上的,兩者的關係是合作並存的,例如Novell Netware。另一種方式是使網路與電腦的作業系統結合在一起,例如Windows NT或是Windows Server。由於市場上的競爭激烈,很難預估未來何者會被多數人所接受;不過,不同的區域網路作業系統之間,互通相容的部分已越來越多,功能與價格也相近。網路作業系統可以依網路節點之間的關係分成兩大類:對等式(Peer-to-Peer)網路作業系統與主從式(Client-Server)網路作業系統。如圖12-5所示。 對等式網路中,任何工作站都可與其它的工作站交換資訊及共享資源。在主從式網路中,電腦有伺服器(Server)與工作站(Client Workstation)之分;伺服器也通稱為後端(back end),必須提供快速的運算速度與大量的檔案存取空間。工作站也通稱為前端(front end),支援使用者輸入、瀏覽結果及對伺服器送出資源的需求,工作站上的資源則無法直接提供給別人使用。 區域網路作業系統 區域網路的範圍,大致上可以用企業或組織為上限,在這個上限之內,區域網路作業系統使用的環境,可能是企業整體、部門或作業編組等;因此,區域網路作業系統必須有適應各種企業或組織環境的彈性。區域網路作業系統的基本功能包括:網路資源的管理、網路使用者的管理、安全性的支援與服務、應用系統的支援等。 網路上的資源常見的有檔案、磁碟空間、印表機等,這些資源的分配與使用,必須做適度的管理,所以網路上的使用者要有帳號與密碼,才能使用網路資源。每個帳號有不同的權限,帳號內所屬的資源,可再由使用者分配給別的帳號使用。 網路作業系統可以依網路節點之間的關係分成兩大類:對等式(Peer-to-Peer)網路作業系統與主從式(Client-Server)網路作業系統。
主從式與對等式的網路作業系統在某些情況下,也可以在同一個區域網路中並存。一般而言,主從式的作業系統比較適合用於較大型的區域網路,因為網路上的資源可以集中管理。對等式的網路作業系統,比較適用於中小型的區域網路中,尤其是在部門或作業編組的環境下,有利於部門內的合作或是組員間的密切交流。
以UNIX為基礎的網路作業環境 UNIX作業系統支援多人多工的作業環境,TCP/IP的網路協定內建於UNIX中,所以目前網際網路上的主機,有很多是執行UNIX作業系統的。UNIX的網路通訊功能,可以經由作業系統核心所提供的應用程式介面(API:Application Program Interface)來呼叫使用,例如下一章將要介紹的Socket介面。透過API所開發的各種UNIX上的網路應用程式與系統程式不勝枚舉,包括第三篇中介紹的Gopher、FTP等軟體,由於很多UNIX軟體都是以C語言撰寫的,而C在各種UNIX版本中的移植性很高,再加上大多數的UNIX軟體都免費提供給大眾使用,因而造成了網際網路的普及。 UNIX的網路檔案服務可以經由一個網路檔案管理系統來完成,例如NFS;網路印表機的共用,可以透過一個網路印表管理程式來完成;例如lpd。很多這樣的程式,是以背景執行的方式存在的,也就是由UNIX管理且沒有與使用者互動溝通的UNIX程序,一般也稱為daemon process。在其他網路作業系統上有的功能,幾乎都可以在UNIX中找到類似的程式。 中也提供了X視窗系統,有非常完整的視窗功能,而且有網路通訊的能力。和其他的網路作業系統比較起來,UNIX的功能強大,但是略為零散,由不同的開發者寫出來的程式,在缺乏整合的情況下,安全性的問題比較嚴重,程式的品質參差不一,使用者需要較深入的知識與技巧。 分散式架構下的資訊傳遞 要了解分散式架構下的資訊傳遞,可以從OSI模型的傳輸層(transport layer)開始,從傳輸層與其他層次之間的關係來觀察,會比較容易了解傳輸層所扮演的角色。傳輸層是整個網路協定架構的核心,主要的功能是提供通訊的兩個節點之間一種穩定又節省成本的資料傳輸服務,而且不管底下的實體網路是那一種,都能維持一樣的服務品質。傳輸層會用到網路層所提供的服務,然後提供服務給應用層的處理元(processes), 傳輸層中負責主要工作的軟硬體也稱為傳輸主體(transport entity),可能是作業系統核心(kernel)程式的一部分、一個使用者處理元(user process)、程式館的成員或是網路卡的功能。
傳輸層服務的基本作業 傳輸層會提供一些操作(operations)讓應用程式能使用傳輸服務,這些操作合起來就是所謂的傳輸服務介面(transport service interface)。主要的差異在於網路層的服務可能會因為封包(packet)的遺失而變得不穩定,傳輸層的服務則能保證穩定的(reliable)服務。 簡易傳輸服務的基本操作(primitives)
TPDU、packet與frame的相對關係 網路應用中有1個server與數個clients,server一開始執行LISTEN,通常這在實作上是一個程式館的呼叫(library call),讓server等待client的回應。
通訊槽(socket)的基本觀念 Java的通訊槽介面(Socket interface)也可以分成TCP (Transport ControlProtocol) 和UDP(User Datagram Protocol) 兩大類,TCP 是連線導向的協定,保證遞送,UDP 是非連線導向的,並不保證遞送。兩種協定雖然特徵有些差異,在很多情況下所得到的效果相差不遠。使用TCP或UDP寫出來的網路應用非常多,很多都具有所謂的主從架構(client-server architecture)或是對等式的架構(peer-to-peer architecture)。 TCP /IP的主從模型中,主端(server-side)經常是提供服務的那一方,掌握資源與控制權。Server程式常需要特別的系統權限,在功能上有些方面會與安全有關,例如驗證(authentication)、授權(authorization)、資料安全、保護與私密性(privacy)等。由於server可能還要處理大量的資料與複雜的運算,所以傳統上server的設計往往要比client要難一點。
Client的辨識: stateful server使用兩種方式來辨識client,端點(end points)或是handle 。所謂的end points可以用IP位址與port number來指定,但是端點會改變,例如網路發生錯誤以後,client會再另外建立連線,端點就不同了! 當client第1次傳送訊息給server時,server在state table中分配一筆記錄給client,同時產生一個辨識資訊,稱為handle,接著server把handle傳給client,後續的溝通就可以使用此handle來辨識client。Stateful server經常接受client的連線,每個連線產生的state資訊都會占用server的部分資源,所以client在結束時要通知server清除對應的state資訊。 角色的扮演: 有時候client與server的角色並沒有那麼清楚的分別。Server提供服務,但是有時候自己也需要其他應用的服務,因此在設計上也要防止因為循環依賴造成死結(deadlock)。 通訊軟體的設計與架構 實際進行client與server程式的設計時就會開始想到程式本身的演算法(algorithm),也就是程式執行的步驟。除了TCP/IP協定本身的功能以外,在程式設計上可能需要一些其他的語法來達到一些通訊軟體的需求。就以同時性(concurrency)為例,分時(timesharing)的作業系統就具有同時性,因為很多使用者的程式存在於作業系統中同時執行。 可能同時有很多client的請求到達,所以server必須同時處理這些請求。假如每一個請求的處理都需要冗長的運算與時間,那麼一旦server忙著處理一個client的請求時,其他的client都要等待。在演算法與程式碼上可以讓server避免這樣的問題。 早期UNIX系統中有fork()系統呼叫,讓一個執行中的處理元(process)產生子處理元,繼承原處理元的一些特性,然後進行不同的處理,這是支援server同時性的方法之一。fork()讓CPU的使用分配給子處理元,假如要同時進行所謂的asynchronous I/O,UNIX中還有一個select system call,可以讓程式詢問系統那個I/O設備可用。 協定的應用程式介面 通常TCP/IP協定的軟體存在於作業系統中,當應用程式需要用到TCP/IP進行通訊時,必須跟作業系統溝通,從程式設計者的角度來看,作業系統必須為應用程式與TCP/IP軟體之間提供一個應用程式介面(API, application program interface)。由於TCP/IP在設計上要考量到適用於多種不同的軟硬體與網路環境中,所以協定標準本身並沒有詳細指定API的細節。 作業系統常以系統呼叫(system calls)來讓應用程式取得作業系統的資源,應用程式可以呼叫執行system call,執行的控制轉移到作業系統中,由作業系統啟動內部的程序來完成應用程式的請求,完成以後,作業系統將控制透過原來的system call還給應用程式,讓應用程式繼續執行。
遠端程序呼叫(RPC,Remote Procedure Calls) 遠端程序呼叫(RPC,Remote Procedure Calls)也是開發網路應用程式常用的方法,主要是因為使用Socket介面撰寫網路應用程式時常須考慮各種通訊的細節,例如資料型式與結構的轉換、連線的管理等。假如我們能將這些細節簡化,則程式設計者可以把時間轉移到應用系統的需求上,這才是使用者最關心的。 遠端程序呼叫的基本原理是把網路的通訊看成是程式中的程序(procedure),當程式需要遠端程序提供某種服務或接受訊息時,直接呼叫一個程序,而這個程序有相對應的遠端程序,可以在呼叫後於遠端的電腦上被執行。
圖中程序甲的呼叫就是遠端程序呼叫,真正被執行的是程序乙,結果則透過程序參數傳回程序甲。雖然實際的資料傳輸還是經由RPC介面、作業系統與網路(即圖中的虛線部分)。 |
|
( 知識學習|隨堂筆記 ) |