520 likes | 745 Views
Linux 安裝入門與基本管理 課程目標: 學習 Linux 平台下的安裝設定 與 建置一個基本的 Linux 伺服器 國家高速電腦中心 -- 林尚毅 http://www.lsi.idv.tw/~lsi/ lsigiga@giga.net.tw. Lession 8 Linux 進階服務的建置與設定. Samba.
E N D
Linux 安裝入門與基本管理 課程目標: 學習Linux平台下的安裝設定 與 建置一個基本的Linux伺服器 國家高速電腦中心 -- 林尚毅 http://www.lsi.idv.tw/~lsi/ lsigiga@giga.net.tw
Lession 8 Linux 進階服務的建置與設定
<<介紹>>SMB protocol 被使用在 Microsoft Windows 3.11, NT 和 95 用來分享磁碟及印機. 使用 Andrew Tridgell 所做的 Samba 工具套件, UNIX (包含 Linux) 機器能分享磁碟與印表機給 Windows 主機. 使用 Samba 有四樣東西可以做: 1. 分享 linux 磁碟給 Windows 機器. 2. 分享 Windows 磁碟給 linux 機器. 3. 分享 linux 印表機給 Windows 機器. 4. 分享 Windows 印表機給 linux 機器.
<<安裝>>最新 Samba 的原始程式可以取得自: ftp://nimbus.anu.edu.au/pub/tridge/samba/然而,如果已安裝 linux 的 Redhat 版本,你可以使用軟體套件{package} 來安裝它.有些其他版本也包含 Samba 的binaries{二元檔程式}. 以下兩個 daemon{管理精靈} 對 Samba 軟體套件 是必要的. 它們一般是被安裝在 /usr/sbin ,而可在開機時,從系統起動的 scripts或inetd來執行.smbd (The SMB daemon) nmbd (提供 NetBIOS nameserver 的支援給 clients)
一般而言,以下的 Samba 的 binaries 被安裝在 /usr/bin, 雖然說它的位置是可選擇性. smbclient (一種供給 UNIX 機器用的 SMB client{程式}) smbmount (一種供給 UNIX 機器用的 SMB mount{程式}) smbprint (一種 script 用在列印於 SMB 主機{host}上的列表機) smbprint.sysv (同上, 但是提供給 SVR4 UNIX 機器用的) smbstatus (列出對當地主機之目前 SMB 連結情況) smbrun (一種 'glue' script 用來簡易地執行應用程式於 SMB 主機)
<<一般組態設定 (/etc/smb.conf)>>在 linux (或其他 UNIX機器)上的 Samba 組態設定是被單一檔案, /etc/smb.conf ,所控制. 這個檔決定你想要哪個系統資源分享給外面世界以及你想對他們做什麼限制. 因為以下章節將會處理分享 linux 磁碟與印表機給 Windows 機器, 本小節所展示的 smb.conf 檔儘量是你所能取得較簡單的, 它只是以介紹性為目的. 目前還不要擔心細節部分. 後面的章節將會介紹主要的概念. 在檔案中的每的段落{section}會有個段落標頭開始, 其標頭像是 [global], [homes], [printers] 等等. [global] 段落定義一些變數, 而 Samba 將用來定義於所有資源之分享.
[homes] 段落允許遠端使用者來存取在當地(linux)機器上之他們的(且只有他們的) home directories{家目錄}. 也就是, 如果一個 Windows 使用者從他們的 Windows 機器要設法連接到這個分享, 他們將是連接到他們自己個人的 home directiory. 要做這樣事情,所要注意的是,他們必須在linux box上有個帳號. 以下的 smb.conf 檔案樣本允許遠端使用者來用當地機器上他們的 home directories 而且寫到一個暫存的目錄. 對一個 Windows 使用者,要想看到這些分享, linux box 必須是在區域網路{local network}內. 然後,使用者簡單地從 Windows File Manager 或 Windows Explorer 連接到網路磁碟. 在以下段落要注意的是, 對這個檔之額外項目將會用來允許更多資源被分享. 其他範例 : http://gis.nchc.gov.tw/lsi/Linux_Basic/album/2002_05_23/Samba/samba.conf.tar.gz
; /etc/smb.conf ; ; Make sure and restart the server after making changes to this file, ex: ; /etc/rc.d/init.d/smb stop ; /etc/rc.d/init.d/smb start [global] ; Uncomment this if you want a guest account ; guest account = nobody log file = /var/log/samba-log.%m lock directory = /var/lock/samba share modes = yes [homes] comment = Home Directories browseable = no read only = no create mode = 0750 [tmp] comment = Temporary file space path = /tmp read only = no public = yes
1. 分享 linux 磁碟給 Windows 機器. 以上所展示的 smb.conf 樣本檔, 分享 linux 磁碟給 Windows 使用者是很容易的. 然而, 像 Samba 其他的東西, 你可以控制到很大的程度. 以下有些例子 : 為了分享目錄給大家使用, 就建立個類似上述 [tmp] 段落, 亦即加入像這個的東西到 smb.conf: [public] comment = Public Stuff path = /home/public public = yes writable = yes printable = yes
為了使以上目錄供大眾可讀取,但只有群組成員{group staff}可寫入,請修改其項目像這樣: [public] comment = Public Stuff path = /home/public public = yes writable = yes printable = no write list = @staff 其他玩磁碟分享的技巧,請看 Samba 文件或 man pages.
2. 分享 Windows 磁碟給 linux 機器. 一種給 UNIX 機器用的 SMB client 程式被包含在 Samba 發行套件之中.它提供一種在命令列下的像ftp的介面. 想要看在給定的主機上有哪些分享可取得, 執行: /usr/sbin/smbclient -L host 這裏的 ‘host’是你想要瀏覽的機器名子. 這將會回應一串 ‘service’的名稱 - 也就是, 它所分享給你的磁碟或印表機的名稱. 除非 SMB 伺服器沒有安全上的設定, 否則它將要求你輸入密碼. 給它 ‘guest’帳號的密碼或是你個人在那台機器上帳號的密碼. 舉個例子: smbclient -L zimmerman
這個指令的輸出應該看起來像是這樣: 這個 browse list 列出其他有資源分享給網路的 SMB 伺服器.
要使用此 client, 請執行: /usr/sbin/smbclient service <password> 這裏的 ‘service’ 是一台機器和分享名稱. 舉例而言,如果你設法連到一台叫做 zimmerman 的機器上之以 ‘public’ 為分享名稱的目錄 ,此 service 要叫做 \\zimmerman\public. 然而,因為 shell 限制, 你會需要脫離 backslashes, 所以你要像這樣的結束: /usr/sbin/smbclient \\\\zimmerman\\public mypasswd 這裏的 ‘mypasswd’ 是你的密碼之文字串{literal string}. 你將會有 smbclient 的提示符號{prompt}出現: Server time is Sat Aug 10 15:58:44 1996 Timezone is UTC+10.0 Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager 3.51] smb: \>
鍵入 'h' 取得關於使用 smbclient 的 help: 如果你能使用ftp,你應該不需要查詢 smbclient 的 man pages.
3. 分享 linux 印表機給 Windows 機器. 為了分享 Linux 印表機給 Windows 機器, 你必須確定你的印表機已經裝設好. 如果你能從 linux 上列印,設定 SMB 的印表機分享將會很直接. 請見 Printing HOWTO 來設定當地的列印. 確認印表機的路徑(本例子中是在[ljet]下)要與 /etc/printcap中的 spool 目錄相符合! 注意: 使用 Samba 來分享 UNIX boxes 上的印表機給 Windows NT 機器有一些問題. 其中一個問題是使 NT 適當地看到分享的印表機. 想要修正這個問題, 請看 Samba 發行套件上的說明, 即 docs/WinNT.txt 檔案.其他是處理密碼的問題. 對於這擾人問題的了解與不能成功的修正,請看相同文件上的說明. 加入列印設定到你的 smb.conf:
4. 分享 Windows 印表機給 linux 機器. 為了分享 Windows 機器上的印表機, 你必須做以下步驟: a) 你必須在 /etc/printcap 內有適當的記錄,而且他們必須與當地目錄結構 (像 spool 目錄等) 相符合. b) 你必須有 script 檔 /usr/bin/smbprint. 這會隨附在 Samba source, 但不是隨附於所有 Samba binary 發行套件. c) 如果你想要轉換 ASCII 檔到 Postscript,你必須有netscript,或與其等效的. netscipt 是一種 Postscript 轉換器而且一般是安裝在 /usr/bin. d) 你可以希望藉由有易於使用的 frond end 來使 Samba 列印更容易. 一種用於處理 ASCII, Postscript 或建立 Postscript 的簡單 perl script 在下面給定.
以下 /etc/printcap 項目用在 Windows NT 主機上 HP 5MP 印表機. 這些項目如下: cm - comment {說明} lp - device name to open for output {為了輸出,而要開啟的設備名稱} sd - the printer‘s spool directory (on the local machine) {印表機的 spool 目錄 (在當地的機器上)} af - the accounting file {帳號檔案} mx - the maximum file size (zero is unlimited) {最大檔案大小 (零表示沒限制)} if - name of the input filter (script) {輸入過濾之名稱 (script)} 要取得更多資訊,請看 Printing HOWTO 或者關於 printcap 的 man page.
## This printcap is being created with printtool v.3.41# Any changes made here manually will be lost if printtool# is run later on.# The presence of this header means that no printcap# existed when printtool was run.###PRINTTOOL3## SMBlj404:\ :sd=/var/spool/lpd/lj404:\ :mx#0:\ :sh:\ :af=/var/spool/lpd/lj404/acct:\ :lp=/dev/null:\ :if=/usr/lib/rhs/rhs-printfilters//smbprint:##PRINTTOOL3## SMBlex2:\ :sd=/var/spool/lpd/lex2:\ :mx#0:\ :sh:\ :af=/var/spool/lpd/lex2/acct:\ :lp=/dev/null:\ :if=/usr/lib/rhs/rhs-printfilters//smbprint:
<<介紹>>所謂Berkeley r-commands,指的是以hostname (Defined in /etc/hosts)為基礎,利用『 相互信任』的關係定義,Bypass密碼檢查,快速在網路主機間進行遠端檔案複製(remote Copy)、遠端簽入(remote login)及遠端指令執行(remote shell)的一組UNIX系統指令。An Example of /etc/hosts140.120.2.17 dragon1.nchu.edu.tw dragon1140.120.2.19 dragonBerkeley r-command 包含『 rsh』、『rlogin 』、及『 rcp』等
[A]. /etc/hosts.equiv Define Trusted Host in System Level , Only root can modify this file定義在host "A" /etc/host.equiv中的網路主機,可以Bypass "A"中的密碼檢查,直接以r-command作remote copy、remote login等動作。Trust的關係屬於單向關係,也就是說A信任B,不代表B一定也信任A,雙向的信任必須於雙方主機中同時定義方可達成。假設Host "B"被"A"所Trust (B in /etc/host.equiv of A),當user 以"john"的身分login B,這個user將可以相同身分對A執行r-command,而無須密碼的檢查。但先決條件是user "john"也存在於A中。An Example of /etc/hosts.equiv in host nmc:dragon1
[B]. $HOME/.rhosts Define Trusted Host & User in User Level,Every User can Define his own trust user in some hosts每一個User均可在他的家目錄(Home Directory)的.rhosts中定義Trust Host( & Trusted User)。host "A"中的帳號"john"定義的被信任的User,可以Bypass "A"中的密碼檢查,直接用john的身分,以r-command作remote copy、remote login等動作。$HOME/.rhosts中若只定義hostname,則代表信任該host中,與自己使用者名稱相同的user。An Example of .rhosts in host nmc under home directory of user "woody"dragon1 woody1dranew上例中代表nmc中的user "woody"信任host "dragon1" 中的user "woody1",及host "dranew" 中user "woody"。
[C]. rcp - remote copy format :rcp file1 file2file1 & file2 Could Be a full path name or relative path name related to the current directory in "A" host : $ rcp B:user.id user.idCopy file "user.id in B to A$ rcp user.id B:user.idCopy file "user.id in A to B
[D]. rlogin - Remote login command format: rlogin [-l username] hostif username is omitted, the current login name is assumed. Example1 - A Successful(Trusted) One : [woody@dragon1 woody]$ hostnamedragon1.nchu.edu.tw[woody@dragon1 woody]$ whoamiwoody[woody@dragon1 woody]$ rsh nmcLast login: Mon Mar 13 17:13:02 2000 on ttyp1 from dragon1.No mail.Hacking's just another word for nothing left to kludge.Good Afterron woody......--> Host "nmc" Trust Host "dragon1", No Passwd Needed !nmc:~> hostnamenmcnmc:~> whoamiwoody
Example2 - A fail(UnTrusted) One :[woody@dragon1 woody]$ rsh dranewPassword:Login incorrect--> Host "dranew" doesn't trust host "dragon1"
[E]. rsh - Remote shell command format: rsh [-l username] host [command]To execute a command in remote host . When "command" is not specified,rsh works just like "rlogin" Example:[woody@dragon1 woody]$ rsh nmc whowoody ttyp0 Mar 13 15:36 (woody.nchu.edu.t)net003 ttyp1 Mar 13 17:55 (woody.nchu.edu.t)net010 ttyp2 Mar 13 17:55 (localhost)--> rsh submitted in dragon1, and command "who" is executed in nmc
Berkeley r-command是為了方便同時長空多台主機所設計,其本身隱含了安全上的問題,使用時當謹慎行事,"信任關係"訂定應特別小心。
<<介紹>>SSH是一個用來替代TELNET、FTP以及R命令的工具包,主要是想解決口令在網上明文傳輸的問題。為了系統安全和用戶自身的權益,推廣SSH是必要的。SSH有兩個版本,我們現在介紹的是版本2。和SSH有關的程序都放置在/usr/local/bin下,包括ssh,sftp,sshd2,ssh-keygen等。<<介紹>>SSH是一個用來替代TELNET、FTP以及R命令的工具包,主要是想解決口令在網上明文傳輸的問題。為了系統安全和用戶自身的權益,推廣SSH是必要的。SSH有兩個版本,我們現在介紹的是版本2。和SSH有關的程序都放置在/usr/local/bin下,包括ssh,sftp,sshd2,ssh-keygen等。
<<配置>>SSH的配置文件在/etc/ssh2下,其中包括sshd2的主機公鑰和私鑰:hostkey和hostkey.pub。這兩個文件通常是在安裝SSH時自動生成的。你可以通過下面的命令重新來生成它們:# rm /etc/ssh2/hostkey*# ssh-keygen2 -f /etc/ssh2/hostkey而ssh2_config 文件一般情形下無需修改。
用tcp_wrappers控制SSH 安裝SSH的站點可以用tcp_wrappers來限制哪些IP地址可以通過ssh來訪問自己。比如,在/etc/hosts.allow中加入 sshd,sshd2: 10.0.0.1 那么只有10.0.0.1可以通過ssh來訪問該主機。 以上都是系統管理員完成的工作。下面我們說說普通用戶如何使用SSH。
<<基本應用>>每個用戶在使用SSH之前,都要完成以下步驟:1. 在本地主機(比如,local.pku.edu.cn)上生成自己的ssh公鑰和私鑰。命令如下: local# ssh-keygenGenerating 1024-bit dsa key pair1 oOo.oOo.oKey generated.1024-bit dsa, teng@ns, Fri Oct 20 2000 17:27:05Passphrase :************ /*在此輸入你的口令,以后訪問這台主機時要用。Again :************ /*Private key saved to /home1/teng/.ssh2/id_dsa_1024_aPublic key saved to /home1/teng/.ssh2/id_dsa_1024_a.pub生成的私鑰和公鑰(id_dsa_1024_a和id_dsa_1024_a.pub)存放在你家目錄的~/.ssh2目錄下。和用戶相關的SSH配置文件都在~/.ssh2下。私鑰由用戶保存在本地主機上,而公鑰需傳送到遠地主機的你自己的帳號的~/.ssh2下,如果你要用ssh2訪問本地主機的話。
2. 在~/.ssh2下創建“identification”文件用來說明進行身份認証的私鑰。命令如下: local:~/.ssh2# echo “IdKey id_dsa_1024_a” > identification3. 同樣地,在遠地主機(比如,remote.pku.edu.cn)上完成上面步驟。4. 將本地(local.pku.edu.cn)下你自己(這里是“teng”)的公鑰(id_dsa_1024_a.pub)拷貝到遠地主機(remote.pku.edu.cn)上你自己家目錄下的.ssh2目錄下,可命名為“local.pub”,一般用ftp上傳即可。5. 在遠地主機上,你自己家目錄的.ssh2目錄下,創建“authorization”文件,其中指定用來進行身份認証的公鑰文件。命令如下:remote:~/.ssh2# echo “Key local.pub” > authorization6. 現在你可以從本地用ssh2登錄到遠地系統了。命令如下: local# ssh remote.pku.edu.cnPassphrase for key "/home1/teng/.ssh2/id_dsa_1024_a" with comment "1024-bit dsa,teng@ns, Fri Oct 20 2000 17:27:05":***********這時會要你輸入你的ssh口令(Passphrase)。驗証通過后,即登錄到remote主機上。
<<PVM Overview>>PVM 起源於 1989 年在美國 Oak Ridge 實驗室一個偶然的實驗性計劃。 後來因為時機成熟,並且也因為推廣得宜,已經超越其它研究群同時間發展 的分散式系統軟體,1 成為分散式計算軟體的主流之一。PVM 目前主要的研 發組織,為原來的 Oak Ridge 國家實驗室,主要成員包括,J.Dongarra 是 Project Manager, PVM 原創者 Vaidy Sunderam 負責 Parallel I/O, Al Geist 負責 Technical Manager 和 PVM Support, 原 J.Dongarra 的學生 Robert Manchek 負責實際的 Implementation。加上其它各種新觀念的試驗 者 2 共有 11 人。截至目前為止,PVM 版本已發展至 3.3 patch7。 (1995 年 1 月 ) PVM 版本曾經在 PVM2 和 PVM3 改版之間, 對 Users ? Interface 做了很大的變動。對於 PVM3 和 PVM4 將做何種修正?研究群表 示, 雖然他們有很大的衝動要將整個 PVM 翻修,唯目前此版尚有很多工作 要做,研究人員對此還未做詳細的考慮。
<<PVM目前的狀況>>至目前為止 (1994 年間 ), PVM 有幾項值的一提的事, 包括:. 1994 年 R&D 100 大獎 (R&D 100 Magazine) 當選本年最具技術意義的產品.繼 續推出新的版本 3.3 (自 1989 第一版開始).從 NETLIB 已取走超過 20 萬份的 PVM Copies。(尚未包含其 Mirror Sites ).超過 150 家美國商 業公司對 PVM 表示高度興趣-包括 RCA, Ryder, Cryler, Medical Foundation of Buffalo,National Park Service,SRI …等等.獲得多家 電腦公司的支援-推出 PVM 的商業產品。 包括 CRAY Research、 IBM、 Convex、DEC、HP、SGI、TMC、Meiko 和 BBN 等等
<<PVM進行中的計劃及未來發展>>PVM主要研究群目前正針對幾個新觀念進行實驗。主題包括: .Context-MPI標準制定的新觀念,針對Parallel Libraries設計 .支援高速網路,如ATM Interface .Static Group-增加此類選項以強化通訊速度 . MPI Port -未來的 PVM 可能直接架在 Vendor 的 MPI Implementation 上。 使用者可不用改寫原來的 PVM Code . Buffered Tracing -供 XPVM 使用 . Parallel I/O -目前已有實驗產品: PIOUS .新的 XPVM 特性 . PVM Based on lightweight threads -適應新的多處理器工作站 . Faster Heterogeneous encodings . Network multicast -提升網路效能的重要子題,用以取代目前的 pvm_mcast 實作
此外 PVM 研究小組還有一個跨單位的研究計劃- CPE 計劃 (Concurrent Processing Environment)[2], 包括 OGI(Oregon Graduate Institute of Science & Technology) 的 Steve W. Otto,CMU 的 Adam Beguelin,ORNL 的 Al Geist 和 UTK 的 J. Dongarra 等人。這項計劃共四個單位參與,為 期三年。 ( 1994 年 4 月- 1997 年 4 月)計劃的目地,在以 PVM 為核 心技術, 以現有的 Public Domain 軟體, 如 DQS, Condor(Queueing Systems), 效能分析軟體 (Performance Analysis),再加上自己發展的其 它分散式工具軟體, 如分散式偵錯軟體 (Parallel Debuger),效能分析用 資料庫 (Performance Dat ase) 等等。 企圖整合所有必須的分散式工具軟 體,使分散式工作站的環境完全等同單一的大型 MPP 機器。 這項計劃將會 修改各個系統軟體的原有介面,使之完全整合在一起。 並且強化 PVM 原有 的功能,如加入 Process Migration,傳送 Multimedia 資料等功能。下圖 是 CPE 計劃完成後的示意圖:
<<MPI Overview>>由於 PVM 這類 Message-Passing System 的成功, 使的研究分散式計算 的人, 認為有必要凝聚共識來達成標準,一方面可以經由討論,使 MPI 實 踐的觀點不會侷限於一家一藝, 它方面也可避免如當年 Basic 的困境,使 應用程式更有效能和移植性,同時也可加速分散式計算領域的人口和技術。 MPI 會議最早是在 1992 年四月, 由 Center for Research on Parallel Computer 舉行-浠 orkshop on Standards for Message Passing in a Distributed Memory Environment 荂 A 後來由 J.Dongarra 等人整理成 MPI1 Draft ( 1992 年 11 月)放到 Internet 上供全世界的人參與討論 ,借由 E-Mail 達成大部份的共識。實際參與會議制定標準的,包括 40 個 組織, 60 人左右為代表組成一個 Message Passing Interface Forum(MPIF)。會議成員主要是美國和歐洲國家實驗室以及一些電腦廠商。3 為了加速 MPI 的推動,MPI1 並沒有把目前認為分散式計算所有必要的功能 都加入。並且希望在標準制定後的半年內,立刻能有實際的產品供大家使用 。 所以 MPI1 主要討論是集中在 Point to Point Communication Interface 上, 因此 MPI1 有關這方面的介面, 特別豐富。 4 但是對於 Dynamic Process Control 這類頗富有爭議性的議題,就懸而不論。此外, MPI1 也只制定 Message Passing Interface 這層 Layer, 對 Process Management 則之字未提。 當然 MPI1 為求迅速,借用了很多現有 Message Passing Systems 上已有的觀念,如 Intel NX/2,Express,nCUBE Vertex ,P4,PARMACS。其它如 PVM,Zipcode,Chimp,Chameleon,和 PICL 也有 所貢獻。 此外如 IBM T.J. Watson Research Center 提供的 Collective Communication 觀念更是使 MPI 成為“高階”的 Message Passing 語言。 5 MPI1 目前已在 1994 年 5 月完成最後的定稿 , 稍後在 6 月時做了 一些小錯誤的修正。
<<MPI的現況>>由於各電腦廠家自己最佳化的 MPI 系統都還未上市,因此使用 MPI 的人 口, 目前仍侷限於分散式計算領域原有的專業人士,尚無法像 PVM 這樣普 及。 各廠家承諾會有 MPI 產品推出的包括有:IBM,Convex, Cray,HP, Intel,NEC,以及 SUN 等公司。各國家實驗室與大學正在研發 MPI 系統的 有 : .Argonne國家實驗室 與 Mississippi State University 合作,並有 IBM 參與諮詢, 已有產 品:MPICH (Public Domain) .Edinburgh Parallel Computing Center 已有產品 CHIMP (Public Domain),並與 Cray Research 公司合作, 發 展在 CRAY T3D 上最佳化的 MPI 產品 .Ohio Supercomputing Center LAM (Public Domain) - MPI 全集, 由 Transputer 上的分散式系統衍 生而來,可與 PVM 並用 .Mississippi State Univerity UNIFY (Public Domain)-簡單,但是效率高,MPI子集,且可與PVM並用 .U.C. Berkeley .Univerity of Illinois .Sandia國家實驗室
<<MPI的未來>>由於 MPI1 尚未形成氣候, 所以在 Supercomputing ? 4 的會議上決定 暫緩 MPI2 標準的制定。原在 1994 年 2 月 MPI1 最後一次會議決定 MPI2 應該有的議題為: .I/O .Active Message .Process Startup .Dynamic Process Control .Remote store/access .Fortran 90 and C++ language bindings .Graphics .Real-Time Support .Other Enhancements? 此外上述已經完成的 MPI 系統,或多或少都針對 MPI2 的議題, 做了一 部份的實作。以驗證研究群自身的概念。不過正式的 MPI I/O 部份的 延展 (Extension) 議題正由 NASA Ames 和 IBM Research 草擬當中,目前 已有浢 PI-IO: A ParallelFile I/O Interface for MPI ? Version 0.2 Draft 出版。
<<MPI1與PVM3>>MPI1 Interface 雖然較 PVM3 豐富, 效能也較佳,可是在人氣上遠不及 PVM3。 新進入這個領域的應用科學家應當選擇那種呢? 在此做 MPI Overview 的結尾時, 有必要對此做一個簡單的比較。 總計 MPI1 較 PVM3 豐富的地方有: .Synchronous/Ready Send Mode PVM3只有MPI1四種Send Mode的其中一種:Buffer Mode,效率較低,並且PVM3 對Buffer沒有管制,使用者必須自行注意,以免應用程式當掉。 .Persistent Communcation PVM3目前採取Dynamic Group的觀念,以後可能加入此項功能選項 .Dervied DataTypes 使用者自定傳輸用的DataTypes,可以增加Performance,PVM3無 .Context 方便Parallel Libraries製作者,PVM3無 .Pack/Unpack選項 與PVM3同 .New Collection Operations 群組運算介面遠較PVM3豐富 .Group Communication 提供安全,正確的Group Communcation(因有Context) .Topologies PVM3無
當然MPI1也有令人覺的不方便的地方: .普遍缺乏電腦廠商自己的產品,沒有眾多的使用者分享經驗 .缺乏Task Management MPI1 的寫作方式是 SPMD, 無法在主應用程式產生 (spawn) 或消滅 (kill) 子程式。 因為是 Static 的啟動方式,所以在應用程式執行時,頗 缺乏彈性。因各廠家技術不同,在此有了爭議,固 MPI1 對此議題,懸而不 論。 . 缺乏Master/Slave Programs的概念 由於上述爭議,無法寫作MPMD的程式,也因此無真正的Master/Slave模式。 .缺乏Cooperative I/O 有待MPI-IO Draft加強.缺乏群組運算功能:multicast,如pvm_mcast。 結論是 MPI1 與 PVM3 各有所長。不過,對於自行研發應用程式的應用科學家而言,PVM3 將可以在 MPI 的平台上使用的這個事實,似乎值的注意 。
<<建立資料庫>>1. 開一個資料庫 phbook :/usr/bin/mysqladmin -u root -p create phbook2. 進入 mysql 建立相關存取權限 : /usr/bin/mysql -u root -p mysqlmysql> GRANT ALL PRIVILEGES ON phbook.* TO Jeffrey@localhost IDENTIFIED BY '123456' ;3. 為 phbook 資料庫建立 table : mysql> use phbook;mysql> create table phonebook ( username CHAR(10), tel varCHAR(20) ) ;
<<輸入資料>>1. 建立一個 Web 介面的輸入表單 “input.html” :<form action="input.php" method="POST">姓名 : <input type="Text" name="username" maxlength="10"><br>電話 : <input type="Text" name="tel" maxlength="20"><br><input type="Submit" value="輸入"></form>2. Server 端處理 MySQL 的 PHP 程式碼 “input.php” :<?if ($username != "") { $link = mysql_pconnect("localhost" , "Jeffrey" , "123456") ;mysql_select_db("phbook" , $link) ;$str = "insert into phonebook values('$username' , '$tel')" ;mysql_query($str , $link) ; echo "'$username' 的資料輸入成功 !!" ;} ?>
<<輸出資料>>1. 建立一個 Web 介面的查詢表單 “search.html” :<form action="search1.php" method="POST">輸入姓名 : <input type="Text" name="username" maxlength="10"><br><input type="Submit" value="查詢"></form>2. Server 端處理 MySQL 的 PHP 程式碼 “search1.php” :<?$link = mysql_pconnect("localhost" , "Jeffrey" , "123456") ;mysql_select_db("phbook" , $link) ;$str = "select tel from phonebook where username='$username'" ;$result = mysql_query($str , $link) ;list($tel) = mysql_fetch_row($result) ;echo $tel ;?>