GB | BIG5
|
| 首頁 > 應用技術 > 其它 > 正文 |
 |
| X Window 系統使用指南 -- 第2章 從基本系統模式概觀X |
| 本文出自: 作者:cuteyu 整理 (2001-10-06 13:05:00) |
在本章和下一章我們將描述X的基本架構,並介紹許多基礎的觀念,其目
的在於對你稍後使用系統時能有一個了解,你將會洞悉系統程式做些什麼和如
何做,如此你將更快和更有效率的使用系統,我們也會指出系統外在的利益,
以及使用系統對你的影響。
本章描述系統的基本元素,以及它們彼此之間如何交談(interact),下一
章描述系統其它的面貌,特別是使用者介面。此章包含了許多新觀念,你不妨
先很快的瀏覽這兩章後,開始實際地使用它,當你對系統比較有感覺之後,再
回頭來復習,這樣比較容易了解。
2.1 X的基本元素
X不像早期的視窗系統,把一堆同類軟體集中在一起,而是由三個相關的
部份組合起來。
1. 一個"server"(供應者):是控制實際顯示器和輸入裝置的程式。
2. "Client" (顧客) 程式:需藉server在指定的視窗中完成特定的
操作。
3. 一個 "通訊通道(communication channel)":client和server用來作
為彼此交談之用。
基本的"server","client"和 "通訊通道" 的關系圖如圖2-1 。
┌┐
│ p16 fig 2.1 │
│ │
│ 圖 2-1 X的基礎成員 │
└┘
底下我們描述一下這三個部份。
2.1.1 Server
Server是控制實際顯示器和它的輸入裝置 (鍵盤和滑鼠或其它指示裝置)
的軟體,server可以建立視窗、在視窗中畫圖形影像和文字、回應client程式
的 "需求" (requests),它不會自己動作,只有在client程式提出需求後才完
成動作。
每一個顯示器只有一個唯一的server。server一般由系統的供應廠商提供
,通常無法被使用者修改。針對作業系統而言,server只是一個普通的使用者
程式而已,因此很容易換一個新的版本,或許甚至是由第三集團提供的原始程
式 (注1) 。
注1:這是Unix系統上的情況,有些供應廠商會選擇將server的部份或全部放
在作業系統核心(kernel)。
2.1.2 Client
Client是使用系統視窗功能的一些應用程式。把X下的應用程式稱作
"client",原因是因為它是server的 "顧客" :它要求server應它的需求
完成特定的動作。
Client無法直接影響視窗或顯示,它們只能送一個 "需求" (request) 給
server,讓server來完成它們的需求。典型的 "需求" 通常是: "在 XYZ視窗
中寫一列 'Hello, world' 的字串" ,或 "在 CDE視窗中用這種顏色從 A點到
B點畫一條直線" 。
當然,對視窗操作提 "需求" 只是client程式的一部份,其它的部份是那
些讓使用者執行的程式部份。例如:編輯文字、畫一個系統的工程圖、執行計
算表的計算等等。一般來說,client程式的這個部份和視窗是獨立的,對於視
窗幾乎不需要知道什麼,通常 (特別是指大型的標準繪圖套裝軟體,統計套裝
軟體等) 應用程式對許多的輸出裝置具有輸出的能力。在X視窗上的顯示只是
client程式許多輸出格式中的一種,所以,client程式中和X相關的部份在整
個程式中,只佔了非常小的一部份。
使用者可由不同的來源來使用client程式:一些是由系統提供的 (例如時
鐘) ,一些來自於第三集團,一些是使用者為了特殊應用而撰寫他自己的client
程式。
2.1.3 通訊通道
X的第三個元素為通訊通道,client藉它送 "需求" 給server,而server
藉它回送狀態 (status) 及一些其它的資訊 (information)。
只要 client 和 server 都知道如何使用通道,通道的本身並不是很重要
,在系統或網路上支援通訊型態的需求是內建於系統基本的X視窗函數館(library)
,所有和通訊型態有關的事都從函數館獨立出來,client和server之間的通訊
只要藉使用這函數館(在標準X版為xlib)即可,如圖2-2 。
┌┐
│ p17 fig 2.2 │
│ │
│ 圖 2-2 xlib函數館的功能│
└┘
總結來說,只要client程式利用函數館,自然有能力用到所有可用的通訊
方法。
Client和Server通訊大略分為兩類,相對應於二種基本X系統的操作模式:
1. server和client在同一部電腦執行,則它們彼此均可使用機器上任何
可用的方法做交互處理通訊(inter-process communication
(簡稱IPC)), 見圖2-3
,在這種模式下,X可以像許多傳統的視窗系統一樣有效率
的操作。
┌┐
│ p18 fig 2.3 │
│ │
│ 圖 2-3 在相同機器上的 │
│ client和server │
└┘
2. client在一部機器上執行,顯示器和server則在另一部機器上,則
client和server的通訊必需透過網路利用彼此同意的協定(protocol)
方可。目前,最常見的協定為TCP/IP和DECnet,但其它任何被提供的
可信賴地協定亦可使用。圖2-4 顯示一個典型的Ethernet網路的通訊。
┌┐
│ p18 fig 2.4 │
│ │
│ 圖 2-4 在不同機器上的 │
│ client和server │
└┘
這種透過網路,使得應用程式的操作,如同在本地機器一樣的能力稱
為網路透通性(network transparence),幾乎是X獨一無二的特性
(注1)。這種特性使得它非常適合建立在有彈性地多目標混合機器
網路上。
注1:有幾種例如Sun Microsystems 的NEWS的視窗系統有使用到網路結構,
但沒有一種被廣泛地使用,而有超過一家以上的制造廠商使用它們。
因為client和server完全獨立,一種名之為X-terminal 的新型態顯示器
被發展出來。簡單的說,X-terminal 是一種除了能直接在上面執行X server
程式外,什麼也沒有的工作站,它有鍵盤,滑鼠和螢幕,以及一些和網路互相
通訊的方法(所以在其它主機上的client可在它上面顯示),但並沒有檔案系
統,也不提供一般目的 (general purpose)的程式,一般目的的程式需要在網
路上執行。
2.2 Server和Client如何交談
本節描述client和server互相通訊時,雙方各傳輸些什麼。基本上,一個
client要求server去執行輸出,輸入則藉 "事件" (event) 的通知由server
來掌握( "事件" :如按下鍵盤的鍵或滑鼠的按鈕等等)。
2.2.1 Client送達server的東西;Output Handing (輸出交予)
當一個client要求server做一個動作,例如在一個指定的螢幕上建立一個特
殊特徵的視窗,或者在一個視窗中寫一列文字串。這時client是藉送 "需求"
(requests)到server上來達成。一個 "需求" 是一個被封裝(package) 的簡單
區塊(block) ,區塊包含一個 "操作碼"(opcode) 來指示要執行何種操作,伴
隨一些引數(arguments) 提供更多的需求細節。例如:清除一個視窗內的一
個長方形區域,client會送一個16位元組(byte)的需求區塊,來指定是哪一個
視窗,欲清除區域的左上角座標及區域的高和寬。
這個格式有幾個重要的特徵:
. 需求區塊的內容,和client與server在何種型態上的機器上執行完全無
關。一個client可以輸出需求給在任何型式顯示器上的任何X視窗server。需
求和語言、機器及作業系統均無關。
. 每一個需求包含了視窗的細節和其它被使用的資源,對一個client送至
特定server的需求超過一種以上的連接方法,所以在網路架構上提供的視窗數
目沒有限制。
. 需求區塊通常大小為20位元組左右,算是相當的小,因為需求是設定為
相當高階的,(例如畫一條線是指定兩個端點而非記錄一串螢幕上的點)通常
螢幕上被影響到的像素的數目往往是區塊本身大小的十到一百倍,如此不會使
網路的負荷太重,網路的使用效率會非常的好(一般認為X的server和client
之間的傳輸是位元影像 (bitmaps)的觀念是錯誤的)。
2.2.2 Server送達Client的東西;Input Handling (輸入交予)
Server也會利用通訊通道送資訊回client,這些資訊包括回應client需求
是否成功和告訴client有興趣的特殊 "事件" ,這些 "事件" 包含的訊息類似
”視窗XYZ 的滑鼠左按鈕被碰觸”或”視窗ABC 已被重定大小等”。
就像從client來的需求一般,server的回應也是一些和語言、機器、作業
系統無關的簡單區塊。
"事件" 是X的基本功能,所有的鍵盤輸入,滑鼠按鈕輸入和滑鼠移動都
是由 "事件" 來控制,尤有進者,client完全依賴 "事件" 才能獲得那些一定
在系統發生的而它必需知道的資訊。我們將從一些普通的輸入和移動功能手
,實際了解 "事件" 是如何工作的:
鍵盤輸入
當你從鍵盤按下一個鍵,這個動作會被server查覺到,Server便送出一個
<Key Press> 的 "事件" 通知那些登記對這種情況有興趣的應用程式。這種通
知有一些限制:不是通知目前被滑鼠指標指到的視窗,便是通知目前被指定接
受所有鍵盤輸入的視窗。這種限制稱之為設定鍵盤焦點(focus) 。
當鍵被鬆開時(通常幾乎是立刻),另外一個<Key Release> 的 "事件"
產生了,一般除了那些修飾鍵(例如SHIFT 或 CONTROL),很少的應用程式會
對鬆開鍵這個 "事件" 有興趣。
送到client的訊息區塊告訴client它們是鍵盤 "事件" 內容的只是”編號
第幾的鍵已被按下(或鬆開)”,不包含是不是ASCII 或EBCDIC字元及如何解
釋等內容,而把這些留給client程式去處理,這種做法使得client程式看起來
似乎復雜,但是標準的xlib函數館,有非常簡單的副程式可供控制解釋鍵盤 "
事件",而且通常預設成你所希望的鍵盤型式,換個角度來看,這種”軟體”
的鍵盤字元相關方式允許了很大的彈性:在server這方面,對不同型式的鍵盤
均可以完全重新對應,在client這方面,每一個單獨的鍵都”可程式化”,例
如按一個鍵即可以輸入一串使用者特定的字串,或者完成一個特殊的功能等。
稍後我們會再詳細討論,不過直到目前,這些將不會影響你使用系統,事
實上,對於X系統如何處理你按下一個”A ”鍵,並將它轉換成一個ASCII 的
”A ”字元送到你的應用程式的這類事情,你不需要太關心。
關於指標位置的 "事件"
client可以要求當螢幕上的指標進入或離開它所控制的視窗時被通知,這
種 "事件" ("<EnterWindow>" 和"<LeaveWindow>") 告訴client程式是進入或
離開視窗以及是哪一個視窗。
當指標進入視窗時通常用類似”高亮度”視窗這一類的方式表式,有些應
用程式是改變視窗的邊框(例如從灰到黑),有些則會改變顏色,用以強調你目
前正在處理這個應用程式(視窗)。
當一個視窗未被覆蓋時 -- Exposure (曝光 "事件")
X和大多數其它的視窗系統有一個很大的不同點,那就是client必需負責
保持它的視窗最近的內容,server只是維持視窗在任何時刻均在螢幕上顯示,
但它不負責保持視窗的內容。
當原先被其它的視窗遮住的視窗(或視窗的一部份)變成可見時,server
並不知道應該顯示這個視窗的哪個部份。server送一個exposure(曝光)"事件"
給擁有這個視窗的client,告訴它視窗的哪一個部份剛剛已變成可見,client便
會決定該怎麼作,在大多數的情況(一般為簡單的應用程式或小視窗),client
只是重畫整個視窗,因為只畫視窗未被遮蓋的部份往往要多花額外計算,並不
值得,在更復雜的應用程式,client才會只重畫視窗必需要出現的部份,這是
由應用程式的撰寫者決定,他必需在效率(視窗更新的速度)和只重畫部份視
窗程式碼的復雜程度間作取舍。
依賴client來重畫視窗內容的方式對效率特別重視,尤其是下拉式選單,
你總不希望選下選單之後,選單過了老半天才消失而讓下面的視窗顯示出來吧
,為了克服這點,有些X的產品包含了被稱為save-under(存下層)的便利程
式:
你可以告訴server如果可能的話,盡量在一個視窗被遮蓋前將其被遮蓋的內容
存下,當遮蓋的視窗被移走時便可立即重現而不需要送曝光 "事件" 給client。
一個類似而更常用,被稱為backing store 的方式也被發展出來,你可以
告訴server盡可能在一個視窗被遮蓋前將其全部內容存下,同樣的,這種方式
可以改進client重畫視窗的效率,backing store 和save-under兩者的不同處
是前者儲存整個視窗的內容,而後者只存被遮蓋的部份。
雖然有了save-under和back store這兩種產品,但此種結構不被擔保,
client仍然隨時保持準備接受曝光 "事件" ,即使server真的維護(maintain)
了一段時間的視窗內容,也可能因為記憶體不足而被迫停止,轉而開始重新送
出曝光 "事件"。
2.3 X的網路風貌
我們曾經提過,client和server只需透過網路便可在不同的機器上執行,
下面幾節我們將看看如何利用這種便利、為什麼有用、和它如何因整合了計
算資源而增進了網路的成長。
2.3.1 你如何實際使用X網路
當server在一個連接了顯示器的機器上執行,而client在另一部機器上執
行時,滑鼠和鍵盤的輸入由server所在的機器搜集,可是client卻可以在別的
地方使用到這些輸入,這是如何辦到的?我們以下面的例子解釋。
你在使用一個由Xserver控制顯示器的工作站,如果它是獨立的,很明顯
地,client也在此工作站上執行,即使連接了網路,大部份的時候你還是在你
自己的工作站執行client,可是因為有一些特殊的便利程式,你的機器上並沒
有,而你卻希望在你的機器上顯示程式的輸出,這時你便需要網路上的機器了
。利用你的作業系統提供的一些普通的網路設備程式,你便可以讓client程式
在遠方的機器上執行,而指定輸出顯示在你自己工作站的顯示器上,如圖2-5.
┌┐
│ p23 fig 2.5 (???) │
│ │
│ 圖 2-5 使用X網路典型 │
│ 的面貌 │
└┘
就如同圖上顯示的機器名稱,假設client程式的名稱為xgraph,在Unix系統上
,你所下的命令類似下面:
rsh neptune xgraph -display venus:0
則xgraph程式在遠方名為neptune 的機器上執行,且xgraph的輸出會送到你自
己名為venus 的機器上的 0號顯示器上,從現在起,我們將參照這種遠方顯示
(remote display)的模式操作,當client在一部機器上執行時,server在另一
部機器上執行。
現在總結一下:你使用遠方顯示的設備程式使得client程式在遠方的機器
上被執行,而且告訴它將輸出顯示在執行Xserver的本地機器上。
2.3.2 X的網路設備有何用途?
在一部機器上執行client而把輸出顯示到另一部機器有何用途?這些用途
和便利是極常見的,以下是一小部份的用途:
. 遠方的機器速度比你的快很多(可能是因為加了浮點運算器或它根本就
是一部超級電腦。)。
. 在你的區域網路上,遠方的機器是一部檔案服務器(file server) 提供
了大量磁碟資源,為了降低網路的負擔,你可以把一些類似大量的搜尋
操作,需要用到大量磁碟動作的程式放在遠方機器上執行,如此一來,
只有執行結果而不是大量操作磁碟的動作會透過網路傳送。
. 遠方機器有特殊的結構適合特別的工作,可能是專門的資料庫機器,或
者是為一個單獨的應用特別設計的特殊目的機器。
. 遠方的機器有只能在其上執行的特殊軟體,在現代的工作站,在網路上
有些軟體執照只有少數的機器擁有已是癒來癒多的趨勢,因為軟體執照
只發給那些有付費的工作站CPU 。在這種情況下,可以實際地在遠方的
機器上執行這些有執照的軟體,而將顯示傳回你自己機器上,是相當地
便利。
. 你需要同時存取好幾部機器,通常系統的管理者有此需求。
. 你需要同時輸出到數部顯示器。(下面有一個□例)
一個特別的□例 -- 一個應用程式使用數個顯示器
大部份的情況,數個client應用程式共享一個顯示器是常見的,例如一個
螢幕上同時有時鐘client和編輯器client,但是一個client也可以連接到數個
server,而且同時輸出到server所在的螢幕上。
這種情形用於教學特別有效率,如果一個班上的學生們有X視窗工作站連
接在網路上,則老師就可以把螢幕當成動態的黑板,同時輸出給學生,再發展
下去,學生也可以有一個client程式把顯示輸出給老師,達成雙向的溝通,只
要網路許可,所有的工作站並不需要在同一個房間,因此老師和學生可以分散
在各處。
2.3.3 X網路結構產生的簡易性
就像前面所提過的,所有從client對server發出的 "需求" ,由於它們的
格式和內容是和設備無關的(device-independent),而所有和設備相關的事完
全集中在server,對於任何顯示器的硬體,只有對應於此種顯示器的server才
需要去關心,只要針對一個顯示器的server一旦被提供,所有可執行X client
程式的其它機器立即可使用這個顯示器,不需要重新編譯或重新連結,甚至連
顯示器是什麼型式都不需知道。
這種把設備的相關性獨立出來給server的方式,對許多工作站網路的販賣
商變得可行且輕鬆,這種彈性在兩方面特別有用:
. 當一部執行X client 的新機器加入網路,它立即可以使用任何執行X
的顯示器。圖2-6 是一個強力的CPU 如何在網路上被當成一個計算服務
器(compute server)的示意圖.
┌┐
│ p25 fig 2.6 (???) │
│ │
│ 圖 2-6 已存在的顯示器 │
│ 可使用在新的CPU │
│ 上的client │
└┘
. 相反的,當一個新的顯示器加入,它立即可被任何機器上現存的所有
X client 應用程式使用,見圖2-7 ,這裡有兩個極端的例子:
-- 增加一個高效率的顯示器:它的高品值和(或)速度可被用來加強
任何現存的X應用程式。
-- 增加一個非常低等(low end) 的顯示器(例如X顯示器),至少這
是一個使用現在所有軟體,並提供圖形和視窗的最便宜的方法。
┌┐
│ p26 fig 2.7 (???) │
│ │
│ 圖 2-7 被已存在的client│
│ 程式使用的新顯 │
│ 示器 │
└┘
2.3.4 在網路上使用非X的應用程式 -- 終端機模擬器
如果在遠方機器上的程式並不是X client 或甚至連X是什麼都不知道,
你仍然可以像遠方的機器一樣使用它們,這就需要用到X視窗”終端機模擬器”
(terminal emulator) ,一個假裝它是終端機的程式。如此一來,你便可以讓
任何程式在這個假的終端機執行。這個終端機模擬器利用X顯示輸出(和得到
鍵盤輸入),當然輸出也可以送到本地或遠方的顯示器。一個這種型式的□例:
利用xterm 終端機顯示器去執行信件程式,見圖2-8 ,(xterm是MIT 標準版X
的所提供的一部份) ,這種方式對擴展網路的用途是可想像的,但是注意到一
點,它並非萬靈丹,一個不是X的應用程式當然還是無法用到X的特性,終端
機顯示器並沒有什麼魔法讓假的終端機可以使用滑鼠輸入或圖形操作等。
┌┐
│ p27 fig 2.8 (???) │
│ │
│ 圖 2-8 執行遠方的一個 │
│ 非X的信件程式 │
└┘
2.4 摘要
本章你可以看到包含在X中的基本構成要素:控制顯示器的server,要求
server幫它完成輸入輸出的client應用程式和介於兩者之間的通訊通道,你可
以看到它們彼此間如何交談,如何實地應用,以及它們對你的好處(不管你是
使用者或系統建立者)。
下一章,我們繼續概觀系統,但是在稍高一點的層次,焦點集中在使用者
介面上。
=====
(http://www.fanqiang.com)
進入【UNIX論壇】
|
|
| 相關文章 |
在Unix下用C編寫類Windows菜單 (2002-01-29 20:13:50) Linux 和 Windows 共享交換區 (2002-01-18 08:10:00) X Window 系統使用指南 -- 附錄G 需要從你的系統管理者得到的資訊 (2001-10-11 08:00:00) X Window 系統使用指南 -- 附錄E 如何取得X (2001-10-11 07:00:01) X Window 系統使用指南 -- 附錄D 本發行版的內容 -- 使用者貢獻的版本 (2001-10-10 15:00:00) X Window 系統使用指南 -- 附錄C 本發行版的內容 -- MIT Core Distribution (2001-10-10 12:00:01) X Window 系統使用指南 -- 附錄B 安裝X (2001-10-10 10:00:04) X Window 系統使用指南 -- 附錄A 文件指引 (2001-10-10 09:00:01) X Window 系統使用指南 -- 第20章 全部放在一起 -- xdm (2001-10-10 08:00:00) X Window 系統使用指南 -- 第19章 進一步介紹 uwm 和如何定制它 (2001-10-10 07:00:00)
|
===更多相關=== |
|
|
 |
★ 樊強制作 歡迎分享 ★ |