《Linux操作系統(tǒng)原理與應(yīng)用》課件第8章_第1頁
《Linux操作系統(tǒng)原理與應(yīng)用》課件第8章_第2頁
《Linux操作系統(tǒng)原理與應(yīng)用》課件第8章_第3頁
《Linux操作系統(tǒng)原理與應(yīng)用》課件第8章_第4頁
《Linux操作系統(tǒng)原理與應(yīng)用》課件第8章_第5頁
已閱讀5頁,還剩113頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第8章操作系統(tǒng)接口

8.1操作系統(tǒng)接口概述8.2Shell命令接口8.3X圖形窗口接口8.4系統(tǒng)調(diào)用接口習(xí)題

8.1操作系統(tǒng)接口概述

8.1.1作業(yè)與作業(yè)調(diào)度

按操作系統(tǒng)的術(shù)語,用戶是以提交“作業(yè)”的形式來使用系統(tǒng)的。因此,操作系統(tǒng)的接口可以看作是用戶提交作業(yè)的接口。

1.作業(yè)的概念

作業(yè)(job)是用戶向計(jì)算機(jī)系統(tǒng)提交的一項(xiàng)工作。例如,用鼠標(biāo)點(diǎn)擊啟動(dòng)一個(gè)應(yīng)用程序,或在Shell中輸入一個(gè)命令行,都是在向系統(tǒng)提交一個(gè)作業(yè)。一個(gè)作業(yè)應(yīng)當(dāng)包括要執(zhí)行的程序、要處理的數(shù)據(jù)以及執(zhí)行的方式。例如,命令行l(wèi)s-l/etc>abc這個(gè)作業(yè)告訴系統(tǒng),執(zhí)行l(wèi)s程序,要處理的數(shù)據(jù)是/etc目錄,執(zhí)行方式是產(chǎn)生詳細(xì)列表,存入abc文件中。作業(yè)與進(jìn)程的概念密切相關(guān),但也有區(qū)別。用戶提交一個(gè)作業(yè)后,系統(tǒng)會(huì)建立進(jìn)程來執(zhí)行這個(gè)作業(yè)。通常一個(gè)作業(yè)對應(yīng)一個(gè)進(jìn)程,此時(shí)進(jìn)程與作業(yè)可以看作是同一個(gè)事物。但有時(shí)一個(gè)作業(yè)可能對應(yīng)多個(gè)進(jìn)程,例如“l(fā)s-s|sort-nr|more”這個(gè)作業(yè)就同時(shí)啟動(dòng)了3個(gè)進(jìn)程,分別執(zhí)行l(wèi)s、sort和more程序,它們協(xié)作完成作業(yè)規(guī)定的任務(wù)。此時(shí)的作業(yè)與進(jìn)程就是不同的事物了,作業(yè)對應(yīng)的是這些進(jìn)程的整體??傊?,作業(yè)是用戶的觀點(diǎn),是用戶向系統(tǒng)提交工作的實(shí)體單位。而進(jìn)程是系統(tǒng)的觀點(diǎn),是系統(tǒng)完成工作時(shí)執(zhí)行的實(shí)體單位。作業(yè)描述用戶和操作系統(tǒng)之間的工作委托關(guān)系,而進(jìn)程描述操作系統(tǒng)執(zhí)行任務(wù)的過程。

2.作業(yè)調(diào)度

對于批處理系統(tǒng)來說,對CPU的調(diào)度分為兩級(jí),即作業(yè)調(diào)度和進(jìn)程調(diào)度。作業(yè)調(diào)度是對CPU的宏觀調(diào)度,即按照某種策略,選取合適的作業(yè)進(jìn)入系統(tǒng)運(yùn)行。進(jìn)程調(diào)度則是對CPU的微觀調(diào)度,即按照某種策略,選擇合適的進(jìn)程占用CPU運(yùn)行。

批處理系統(tǒng)中,作業(yè)是成批提交的。提交后的作業(yè)在外存中的作業(yè)隊(duì)列中等待,經(jīng)過作業(yè)調(diào)度程序進(jìn)行調(diào)度,由外存進(jìn)入內(nèi)存,再以進(jìn)程的形式運(yùn)行。作業(yè)調(diào)度程序根據(jù)某種算法對作業(yè)進(jìn)行選擇,合理地搭配作業(yè)以使系統(tǒng)的資源利用率達(dá)到最高。因此,作業(yè)調(diào)度是宏觀調(diào)度,即決定哪些作業(yè)可以進(jìn)入系統(tǒng)。進(jìn)入系統(tǒng)的作業(yè)宏觀上處于運(yùn)行狀態(tài),但微觀上則是以進(jìn)程的形式走走停停。對于Unix/Linux等交互式系統(tǒng)來說,并沒有作業(yè)調(diào)度的概念。作業(yè)一旦被提交便立即進(jìn)入內(nèi)存開始運(yùn)行。這意味著用戶需要自己承擔(dān)作業(yè)調(diào)度的任務(wù)。比如,不要同時(shí)啟動(dòng)多個(gè)需要競爭同一資源的作業(yè)(如多個(gè)網(wǎng)絡(luò)應(yīng)用)等。在作業(yè)的運(yùn)行過程中,用戶可以控制作業(yè)運(yùn)行的方式,比如掛起一個(gè)作業(yè)、終止一個(gè)作業(yè)、將作業(yè)切換到后臺(tái)或前臺(tái)等??刂谱鳂I(yè)運(yùn)行的方法見10.6.2小節(jié)。8.1.2操作系統(tǒng)的接口

操作系統(tǒng)接口的功能就是提供一個(gè)用戶使用系統(tǒng)的界面。根據(jù)服務(wù)對象的不同,操作系統(tǒng)的接口可以劃分為兩類:一是供用戶使用的用戶級(jí)接口,二是供程序使用的程序級(jí)接口。

1.用戶接口

用戶接口就是操作系統(tǒng)向用戶提供的使用界面。分為脫機(jī)接口與交互式接口兩種。

在批處理系統(tǒng)中,用戶不能直接與系統(tǒng)交互,而是以提交作業(yè)的方式來脫機(jī)使用系統(tǒng)的。用戶通過預(yù)先編寫的作業(yè)控制語言來控制作業(yè)的運(yùn)行,因此,批處理系統(tǒng)的用戶接口就是作業(yè)控制語言。

在交互式系統(tǒng)中,用戶直接通過終端與系統(tǒng)交互。根據(jù)操作方式和表示形式的不同,交互式用戶接口分為命令行用戶接口和圖形用戶接口兩種形式。

1)命令行用戶接口

命令行用戶接口(CommandLineInterface,CLI)是以命令方式使用系統(tǒng)的用戶界面。操作系統(tǒng)提供給用戶一組操作命令,用戶在文本方式的界面上輸入命令與系統(tǒng)交互,執(zhí)行程序。命令執(zhí)行的結(jié)果也以文本方式顯示在界面上。

命令接口的特點(diǎn)是執(zhí)行效率高、靈活、可編程實(shí)現(xiàn)自動(dòng)化,但不易使用。

2)圖形用戶接口

圖形用戶接口(GraphicalUserInterface,GUI)是以鼠標(biāo)驅(qū)動(dòng)方式使用系統(tǒng)的用戶界面。操作系統(tǒng)將用戶可執(zhí)行的操作以圖形元素(窗口、圖標(biāo)、菜單、按鈕等)的方式顯示在圖形界面上,用戶通過點(diǎn)擊鼠標(biāo)或按鍵來操作界面上的圖形元素,實(shí)現(xiàn)與系統(tǒng)的交互,運(yùn)行程序。運(yùn)行結(jié)果也以圖形方式顯示在界面上。

圖形界面具有很好的直觀性,用戶不必記憶復(fù)雜的命令和語法就可以輕松地使用系統(tǒng)。

2.程序接口

程序級(jí)接口是為程序訪問系統(tǒng)資源而提供的,它由一組系統(tǒng)調(diào)用組成。系統(tǒng)調(diào)用(SystemCall)可以看作是由操作系統(tǒng)內(nèi)核提供的一組廣義指令。程序員在設(shè)計(jì)程序時(shí),凡涉及到系統(tǒng)資源訪問的操作,如文件讀/寫、數(shù)據(jù)輸入/輸出、網(wǎng)絡(luò)傳輸?shù)龋急仨毻ㄟ^系統(tǒng)調(diào)用來實(shí)現(xiàn)。所以說,系統(tǒng)調(diào)用是操作系統(tǒng)提供給應(yīng)用程序的唯一接口。

從層次上來看,用戶接口屬于高層接口,是用戶與操作系統(tǒng)之間的接口。而程序接口則是低級(jí)接口,是任何核外程序(包括應(yīng)用程序和系統(tǒng)程序)與操作系統(tǒng)內(nèi)核之間的接口。用戶接口的功能最終是通過程序接口來實(shí)現(xiàn)的。8.1.3Linux系統(tǒng)的接口

Linux系統(tǒng)提供了命令行和圖形兩種用戶接口以及程序接口。Linux的命令行接口是由命令解釋程序Shell提供的文本方式的命令行用戶界面。Linux的圖形接口是基于XWindow系統(tǒng)構(gòu)建的窗口化圖形用戶界面。Linux的程序接口是由Linux內(nèi)核提供的一組系統(tǒng)調(diào)用。以下各節(jié)分別介紹這3個(gè)接口的組成結(jié)構(gòu)和原理。

Linux系統(tǒng)接口的設(shè)計(jì)繼承了Unix的設(shè)計(jì)哲學(xué),即提供的是工具而非策略(tools,notpolicy)。這意味著接口不會(huì)試圖去規(guī)定任務(wù)應(yīng)該如何去完成,而是只給用戶提供一些基本的工具,讓用戶自己決定如何去使用這些工具干自己的事情。Unix/Linux的用戶“高手”與“新手”所采用的手法可能大相徑庭。因此,學(xué)習(xí)使用Linux是一個(gè)持續(xù)深入的過程。

8.2Shell命令接口

Linux系統(tǒng)的命令行接口是由Shell提供的文本方式的界面,也稱為Shell界面。與圖形界面相比,Shell界面顯得不夠簡單易用,但它的功能更強(qiáng)大,更成熟,也更可信賴。所以,無論是從事系統(tǒng)開發(fā)還是系統(tǒng)管理,Shell都是必然要用到的界面。

8.2.1Shell界面的組成

Shell界面由一組命令和命令解釋程序Shell組成。

1.命令

Linux系統(tǒng)提供給用戶一組完備的命令,這些命令可以完成用戶需要的各種操作,如文件操作、數(shù)據(jù)傳輸、進(jìn)程控制、系統(tǒng)監(jiān)控管理等。所有命令都需由Shell程序解釋執(zhí)行,所以也稱為Shell命令。

Shell命令分為內(nèi)部命令和外部命令兩類。兩者的區(qū)別在于,內(nèi)部命令的實(shí)現(xiàn)代碼是包含在Shell內(nèi)部的,外部命令的實(shí)現(xiàn)代碼是以可執(zhí)行文件的形式存儲(chǔ)在文件系統(tǒng)中的。

2.命令解釋程序

Linux的命令解釋程序稱為Shell。Shell負(fù)責(zé)接收用戶提交的命令行并解析命令行。如果是內(nèi)部命令,Shell就調(diào)用該命令對應(yīng)的函數(shù)并執(zhí)行,然后返回;如果是外部命令,Shell就創(chuàng)建一個(gè)進(jìn)程來執(zhí)行它。8.2.2Shell的功能

Shell的功能包括以下幾項(xiàng):

1.解析和執(zhí)行命令

Shell的主要功能是在交互方式下解釋和執(zhí)行用戶輸入的命令。Shell首先從終端讀取輸入的命令行,然后解析出命令名、各個(gè)選項(xiàng)和參數(shù)。如果命令行中有特殊字符,如文件通配符、管道和重定向符、后臺(tái)運(yùn)行符等,Shell會(huì)對其進(jìn)行相應(yīng)的處理。處理完命令行后,Shell就啟動(dòng)命令運(yùn)行,并將運(yùn)行的結(jié)果顯示在屏幕上。

Shell提供了兩種執(zhí)行進(jìn)程的方式,即前臺(tái)運(yùn)行和后臺(tái)運(yùn)行。前臺(tái)進(jìn)程就是在Shell所在的終端運(yùn)行的進(jìn)程。前臺(tái)進(jìn)程通過終端與用戶交互,響應(yīng)用戶的輸入,并向用戶顯示輸出結(jié)果。后臺(tái)進(jìn)程是脫離了Shell所在的終端而默默地運(yùn)行的進(jìn)程。后臺(tái)進(jìn)程不與用戶交互,常用于執(zhí)行一些非交互的、耗時(shí)的任務(wù)。

有關(guān)Shell命令的特殊字符和解析意義將在9.2節(jié)中進(jìn)一步介紹。

2.配置命令的運(yùn)行環(huán)境

Shell的另一項(xiàng)功能是定制運(yùn)行環(huán)境。環(huán)境由一組環(huán)境變量組成,環(huán)境變量中記錄了Shell運(yùn)行時(shí)需要的一些信息,如命令的搜索路徑、用戶的主目錄、系統(tǒng)的主機(jī)名、提示符、終端的類型等。它們的取值決定了Shell的具體行為。

Shell啟動(dòng)時(shí)會(huì)自動(dòng)執(zhí)行一些配置文件建立起自己的環(huán)境。用戶可以通過修改配置文件來設(shè)置適應(yīng)于自己工作風(fēng)格的環(huán)境。有關(guān)Shell的環(huán)境變量將在9.3節(jié)介紹,有關(guān)Shell的配置文件將在10.3節(jié)介紹。

3.提供內(nèi)部命令

對于操作較為簡單而又使用頻繁的命令,如echo、cd、pwd等,可以在Shell程序中直接實(shí)現(xiàn)。這些由Shell自己實(shí)現(xiàn)的命令就是內(nèi)部命令,其特點(diǎn)是不需創(chuàng)建進(jìn)程,執(zhí)行速度快。常用的Shell都提供有幾十個(gè)內(nèi)部命令。

4.支持Shell編程

Shell還能用作解釋性的編程語言。用Shell語言編寫的程序稱為Shell程序(也稱為Shell腳本),它是由一系列Shell命令組成的可執(zhí)行文本文件。Shell提供了一些專用的命令和語法成分,如變量、條件測試、循環(huán)控制等,將它們與其他命令相結(jié)合即可構(gòu)造出各種基本的程序結(jié)構(gòu)和邏輯。

Shell程序的運(yùn)行方式與普通命令相同,可以看作是高級(jí)批處理命令。第9章將專門介紹Shell編程的基本方法。8.2.3Shell的版本

在Unix誕生之初,系統(tǒng)只配有一個(gè)命令解釋器,用來解釋和執(zhí)行用戶的命令。1979年,AT&TBell實(shí)驗(yàn)室的S.R.Bourne開發(fā)出第一個(gè)Shell程序——BourneShell(程序名是bsh)。以后又陸續(xù)出現(xiàn)了由Berkeley大學(xué)的BillJoy開發(fā)的CShell(csh)和由AT&TBell實(shí)驗(yàn)室DavidKorn開發(fā)的KornShell(ksh)。

目前Shell的版本有很多種,基本上是以上3種Shell的擴(kuò)展和結(jié)合。各種Shell雖然在基本功能上是相同的,但附加功能不同,語法風(fēng)格各異,彼此不盡兼容。常用的Shell版本有以下幾種:●Bourneshell(bsh):最經(jīng)典的Shell,幾乎每種Unix/Linux上都可以使用,適于編程。

●Cshell(csh):語法與C語言相似,但交互特性更好。

●Kornshell(ksh):集合了csh和bsh的優(yōu)點(diǎn),符合POSIX標(biāo)準(zhǔn)。

●EnhancedCshell(tcsh):csh的擴(kuò)展。

●BourneAgainshell(bash):bsh的擴(kuò)展,同時(shí)結(jié)合了csh和ksh的優(yōu)點(diǎn)。

●PublicDomainKornshell(pdksh):ksh的擴(kuò)展。

●Zshell(zsh):結(jié)合了bash、tcsh和ksh的許多功能。

Linux系統(tǒng)中默認(rèn)使用的Shell是BourneAgainshell(bash)。bash是基于Bourneshell開發(fā)的GNU自由軟件,它符合POSIX標(biāo)準(zhǔn),且與Bourneshell完全兼容。bash還包含了很多Cshell和Kornshell中的優(yōu)點(diǎn),如命令自動(dòng)補(bǔ)齊、命令歷史、別名擴(kuò)展等,方便易用,在編程方面也十分出色。

此外,Linux系統(tǒng)常用的Shell還有tcsh、zsh以及pdksh。要了解當(dāng)前Linux系統(tǒng)中所有可用的Shell,可以查看/etc/shells文件。8.2.4Shell的工作流程與原理

Shell的運(yùn)行方式有交互式和非交互式兩種,在啟動(dòng)時(shí)可以用選項(xiàng)指定運(yùn)行方式。交互式Shell解釋執(zhí)行用戶輸入的命令,非交互式Shell則專門執(zhí)行某個(gè)或某些指定的命令,不與用戶直接交互。本節(jié)介紹的是交互式Shell,它的基本工作流程如圖8-1所示。從中可以理解Shell的運(yùn)行機(jī)制和原理。圖8-1Shell的基本工作流程

1.?Shell的啟動(dòng)

從字符控制臺(tái)登錄后,Shell自動(dòng)啟動(dòng)。這個(gè)在登錄時(shí)啟動(dòng)的Shell稱為登錄Shell(loginshell)。通常默認(rèn)啟動(dòng)的登錄Shell是bash,用戶也可以指定其他Shell作為登錄Shell。

另一種方式是用命令啟動(dòng)Shell,即通過輸入相應(yīng)的命令來啟動(dòng)另外一個(gè)Shell。如:命令bash將啟動(dòng)一個(gè)bash進(jìn)程,命令ksh將啟動(dòng)一個(gè)ksh進(jìn)程。這些用Shell命令啟動(dòng)的Shell稱為子Shell(subshell)。在圖形界面中打開一個(gè)“終端”窗口時(shí)啟動(dòng)的Shell也是子Shell。同樣,子Shell還可以啟動(dòng)它的子Shell。

登錄Shell與子Shell的主要區(qū)別在于它們的初始化和退出過程有所不同。

2.初始化

Shell啟動(dòng)后,首先要進(jìn)行初始化,建立工作環(huán)境。登錄Shell在初始化時(shí)要執(zhí)行一系列的環(huán)境配置腳本文件,建立起完整的運(yùn)行環(huán)境。所有子Shell都工作在登錄Shell所建立的環(huán)境之下,因此,子Shell啟動(dòng)時(shí)只需執(zhí)行一個(gè)專門用于子Shell定制的腳本文件。

初始化完成后,Shell顯示命令提示符,等待輸入命令行。

3.讀取、解析命令行

當(dāng)Shell從終端讀入一個(gè)完整的命令行后,首先解析出命令名、選項(xiàng)和參數(shù),然后對命令行中的特殊字符進(jìn)行處理,如替換文件通配符、設(shè)置管道、重定向和后臺(tái)進(jìn)程等。

4.執(zhí)行內(nèi)部命令

當(dāng)Shell解析出一條內(nèi)部命令時(shí),它就調(diào)用命令對應(yīng)的內(nèi)部函數(shù)運(yùn)行,運(yùn)行結(jié)束后返回,顯示命令提示符,等待下一條輸入命令。

執(zhí)行內(nèi)部命令的方式是函數(shù)調(diào)用,也就是說內(nèi)部命令是在Shell進(jìn)程內(nèi)部完成的,是Shell自身的一個(gè)操作。

5.執(zhí)行外部命令

當(dāng)Shell解析出一條外部命令時(shí),下一步的任務(wù)就是啟動(dòng)那條命令并執(zhí)行。Shell首先創(chuàng)建一個(gè)子進(jìn)程,在子進(jìn)程中查找到命令的執(zhí)行文件,然后用其更換進(jìn)程映像,運(yùn)行該命令。此時(shí),作為父進(jìn)程的Shell有兩種運(yùn)行方式:

(1)如果命令是前臺(tái)運(yùn)行方式,則Shell將等待命令子進(jìn)程的結(jié)束。子進(jìn)程運(yùn)行結(jié)束后用信號(hào)方式通知Shell并報(bào)告運(yùn)行結(jié)果。Shell處理完子進(jìn)程信號(hào)后,再轉(zhuǎn)去接收下一條命令。

(2)如果命令是在后臺(tái)運(yùn)行的(命令行尾有&字符),則Shell不等待子進(jìn)程結(jié)束,立刻顯示命令提示符,準(zhǔn)備接收下一條命令。

總之,執(zhí)行外部命令的方式是為命令建立子進(jìn)程,子進(jìn)程與Shell父進(jìn)程并發(fā)運(yùn)行。

6.退出

當(dāng)Shell接收到退出命令時(shí)則主動(dòng)結(jié)束運(yùn)行。Shell的退出有兩種情況:如果當(dāng)前Shell是登錄Shell,則退出Shell將導(dǎo)致退出登錄;如果當(dāng)前Shell不是登錄Shell,而是它的一個(gè)子Shell,則退出Shell就是結(jié)束這個(gè)子Shell進(jìn)程,返回到上一級(jí)Shell。

退出Shell的命令是exit,Ctrl+d鍵的作用與exit命令相同。此外,在登錄Shell中也可以使用logout命令退出。

8.3X圖形窗口接口

8.3.1XWindow系統(tǒng)概述

XWindow(簡稱X或X11)系統(tǒng)是一個(gè)基于窗口的圖形用戶接口系統(tǒng),1984年由麻省理工學(xué)院發(fā)布。設(shè)計(jì)XWindow的目的是為Unix系統(tǒng)提供一個(gè)優(yōu)秀的圖形界面。如今X已成為Unix/Linux系統(tǒng)上的標(biāo)準(zhǔn)圖形接口,并被廣泛移植到各種操作系統(tǒng)上。

X的當(dāng)前版本是1987年發(fā)布的X11。目前廣泛使用的是1994年5月發(fā)布的發(fā)行版本X11R6,最新的發(fā)行版本是2005年12月發(fā)布的X11R7。嚴(yán)格地說,XWindow并不是一個(gè)圖形接口軟件,它是圖形接口系統(tǒng)的標(biāo)準(zhǔn)體系框架。X規(guī)定了構(gòu)成圖形界面的顯示架構(gòu)、軟件成分及運(yùn)作協(xié)定。只要遵照X的規(guī)范開發(fā)出的圖形界面都可稱為X圖形界面,即使它們在功能、外觀和操作風(fēng)格上可能差異巨大。

XWindow系統(tǒng)有以下特點(diǎn):

1.獨(dú)立于操作系統(tǒng)內(nèi)核

X圖形界面與系統(tǒng)內(nèi)核不是集成在一起的,而是相互獨(dú)立的。X系統(tǒng)也不與任何操作系統(tǒng)捆綁。在操作系統(tǒng)看來,它只是一個(gè)應(yīng)用軟件,可以被單獨(dú)地安裝、升級(jí)和卸載,無須重新啟動(dòng)系統(tǒng)。X系統(tǒng)也可以被單獨(dú)地啟動(dòng)和停止,不會(huì)影響到其他應(yīng)用程序的運(yùn)行。

2.基于網(wǎng)絡(luò)運(yùn)行

X系統(tǒng)采用“客戶/服務(wù)器”(Client/Server)模式,基于網(wǎng)絡(luò)運(yùn)行。這種模式的獨(dú)到之處是程序的運(yùn)行與顯示相分離,即在一臺(tái)機(jī)器上運(yùn)行而在另一臺(tái)機(jī)器上顯示。這使用戶可以在網(wǎng)絡(luò)上任意一臺(tái)機(jī)器上運(yùn)行程序,而將圖形界面顯示在自己面前的顯示屏上。

3.高度的可定制性

X只為圖形界面環(huán)境提供了基本的框架,許多開發(fā)商都提供符合X標(biāo)準(zhǔn)的軟件構(gòu)件,如X服務(wù)器、窗口管理器等。用戶可根據(jù)需求選擇合適的軟件構(gòu)造出個(gè)性化的窗口界面。這意味著選擇的自由。因此,基于X的圖形界面可以是各式各樣的。

4.高度的可移植性

基于X標(biāo)準(zhǔn)開發(fā)的應(yīng)用程序與終端設(shè)備無關(guān),可在任何支持X的終端上顯示運(yùn)行界面。

5.效率問題

X的主要問題在于效率。由于沒有與操作系統(tǒng)內(nèi)核整合在一起,使得基于X的圖形界面不可能有很高的運(yùn)行效率。這對于一般應(yīng)用來說不是問題,但對于從事大型3D圖形設(shè)計(jì)的系統(tǒng)來說則顯得不足。在這類系統(tǒng)上應(yīng)用的X系統(tǒng)通常是經(jīng)過特殊優(yōu)化的。8.3.2X系統(tǒng)的體系結(jié)構(gòu)與工作原理

X系統(tǒng)采用了“客戶/服務(wù)器”的體系結(jié)構(gòu)。一個(gè)完整的X系統(tǒng)由3個(gè)部分組成:X服務(wù)器、X客戶和X協(xié)議。X系統(tǒng)的體系結(jié)構(gòu)如圖8?2所示。圖8?2XWindow系統(tǒng)的體系結(jié)構(gòu)

1.?X服務(wù)器

X服務(wù)器(XServer)是構(gòu)成X系統(tǒng)的核心成份。它是專門控制終端設(shè)備(顯示器、鍵盤和鼠標(biāo))實(shí)現(xiàn)圖形界面交互的軟件。X服務(wù)器的主要功能如下:

●控制對終端設(shè)備的輸入/輸出操作,維護(hù)字體、顏色等相關(guān)資源。

●響應(yīng)X客戶程序的請求,完成在顯示屏上繪制圖形和文字的操作。

●跟蹤鼠標(biāo)和鍵盤的輸入事件,將輸入事件和狀態(tài)信息返回給X客戶程序處理。

總之,X服務(wù)器包攬了所有對該終端的操作,X客戶只需關(guān)注要顯示的內(nèi)容和輸入的事件,而不需要了解顯示器等硬件的配備與操作細(xì)節(jié)。

X系統(tǒng)支持多顯示器結(jié)構(gòu),它允許系統(tǒng)配置多個(gè)物理顯示器,而更多情況下是在一個(gè)物理顯示器上模擬出多個(gè)虛擬顯示器。當(dāng)有多個(gè)顯示器存在時(shí),每個(gè)顯示器都需要獨(dú)立地運(yùn)行一個(gè)X服務(wù)器。運(yùn)行了X服務(wù)器的顯示器稱為X顯示器,它們從0開始依次編號(hào)。當(dāng)X客戶需要顯示界面時(shí),只要指定X顯示器的編號(hào),它的界面就會(huì)出現(xiàn)在那個(gè)X顯示器上。

對于操作系統(tǒng)而言,X服務(wù)器只是一個(gè)運(yùn)行級(jí)別較高的應(yīng)用程序而已。可以像其他應(yīng)用程序一樣獨(dú)立地安裝、更換和升級(jí)。Linux系統(tǒng)常用的X服務(wù)器有XFree86、Xorg、MetroX,Accelerated-X等。其中,XFree86和Xorg是自由軟件,MetroX和Accelerated-X是商用的。2003年之前,XFree86一直都是X的主流。從2004年開始,X.Org基金會(huì)開始在XFree86基礎(chǔ)上主導(dǎo)開發(fā)了Xorg。Xorg遵照GPL許可,目前已經(jīng)逐漸替代XFree86成為Linux主要發(fā)行版上的X服務(wù)器。MSWindows系統(tǒng)上的X服務(wù)器主要有XWin32和XManager。

2.?X客戶

X客戶(XClient)是一些需要在屏幕上顯示圖形界面的程序。在X系統(tǒng)中,這些程序無法直接在顯示屏幕上顯示界面,它們只能作為X服務(wù)器的客戶,請求X服務(wù)器完成指定的操作。同樣它也不能直接接受用戶的輸入,而只能通過X服務(wù)器獲得鍵盤和鼠標(biāo)的輸入。在這里,X服務(wù)器是界面服務(wù)的提供者,X客戶是界面服務(wù)的使用者,兩者共同完成界面的交互操作:在向界面輸出時(shí),X客戶決定要顯示的內(nèi)容,而X服務(wù)器完成實(shí)際的顯示工作;在響應(yīng)界面輸入時(shí),X服務(wù)器發(fā)現(xiàn)并通知輸入事件,X客戶處理輸入事件。

X客戶多種多樣,凡是帶有圖形界面的程序都是X客戶。按功能可以把它們分為以下兩類:

X工具:用于支持界面運(yùn)行環(huán)境的程序,如窗口管理器、顯示管理器、桌面環(huán)境等。

X應(yīng)用:用于實(shí)現(xiàn)某個(gè)應(yīng)用目的的程序,如xterm(虛擬終端)、xclock(時(shí)鐘)、xcalc(計(jì)算器)、xbiff(郵件到達(dá)提示)等。

3.?X協(xié)議

X協(xié)議(XProtocol)是X客戶與X服務(wù)器之間通信時(shí)所遵循的一套規(guī)則,它規(guī)定了通信雙方交換信息的格式和順序。X客戶在向X服務(wù)器發(fā)送請求,以及X服務(wù)器向X客戶返回輸入事件等信息時(shí),都需遵照X協(xié)議才能彼此理解和溝通。

X協(xié)議運(yùn)行在TCP/IP協(xié)議之上,X服務(wù)器默認(rèn)使用TCP6000端口監(jiān)聽X客戶的請求。這意味著X客戶和X服務(wù)器可以分別運(yùn)行在網(wǎng)絡(luò)上的不同計(jì)算機(jī)上。只要在用戶所在的計(jì)算機(jī)上運(yùn)行X服務(wù)器,則不論是在本地還是在遠(yuǎn)程計(jì)算機(jī)上運(yùn)行X客戶,都可以將它們的運(yùn)行界面顯示在用戶面前的顯示器上。在用戶看來,它們沒有區(qū)別,這就是X系統(tǒng)的網(wǎng)絡(luò)透明性。在有些應(yīng)用環(huán)境,X應(yīng)用與顯示相分離的特性十分有用。例如,在大型網(wǎng)絡(luò)環(huán)境中,通常會(huì)設(shè)立一些維護(hù)良好的服務(wù)器系統(tǒng),如大容量的檔案服務(wù)器、高性能的應(yīng)用服務(wù)器或配備有特殊軟件工具的項(xiàng)目開發(fā)平臺(tái)等。用戶可以通過網(wǎng)絡(luò)遠(yuǎn)程登錄到這些服務(wù)器上,啟動(dòng)應(yīng)用程序運(yùn)行,并將界面調(diào)到自己面前顯示。更方便的是,用戶可以啟動(dòng)不同機(jī)器上的多個(gè)應(yīng)用,將它們的窗口界面都同時(shí)顯示在本地屏幕上。例如,圖8-2中顯示屏上顯示的3個(gè)窗口可能分別來自本地與遠(yuǎn)程的不同系統(tǒng)。用戶可以在這些來自不同系統(tǒng)的窗口之間隨意地拷貝和粘貼數(shù)據(jù),而完全不用關(guān)心底層發(fā)生的網(wǎng)絡(luò)傳輸。這給用戶帶來許多操作上的便利和靈活。8.3.3X圖形界面的組成

基于X的圖形窗口界面由一個(gè)X服務(wù)器和各種X客戶組成。由于X客戶樣式繁多,它們的各種搭配使得XWindow系統(tǒng)的界面看起來多種多樣,不拘一格。

1.簡單圖形界面

最簡單的圖形界面是由一個(gè)X服務(wù)器和一個(gè)X應(yīng)用程序組成的界面。例如,圖8-3就是由X服務(wù)器和一個(gè)xcalc應(yīng)用構(gòu)成的簡單圖形界面。

在這種簡單界面中,X應(yīng)用直接向X服務(wù)器發(fā)送顯示輸出的請求,X服務(wù)器完成顯示輸出操作,并將鼠標(biāo)和鍵盤的輸入直接傳遞給X應(yīng)用。它們之間的結(jié)構(gòu)關(guān)系如圖8-4所示。圖8?3xcalc的簡單圖形界面圖8?4簡單圖形界面的結(jié)構(gòu)以xclac應(yīng)用為例,它與X服務(wù)器的交互過程大致如下:xclac啟動(dòng)后,向X服務(wù)器發(fā)出一系列請求,在屏幕上繪出計(jì)算器圖形。當(dāng)鼠標(biāo)點(diǎn)擊計(jì)算器上的一個(gè)按鈕時(shí),X服務(wù)器將這一輸入事件通知xcalc。xcalc請求X服務(wù)器用陰影顯示該按鈕凹下。當(dāng)鼠標(biāo)抬起時(shí),X服務(wù)器通知xcalc,xcalc請求X服務(wù)器恢復(fù)該按鈕的顯示,同時(shí)保存按鈕對應(yīng)的字符并分析其含義。如果是數(shù)字就請求X服務(wù)器在計(jì)算器顯示屏上顯示這個(gè)數(shù)字;如果是等號(hào)“=”就開始計(jì)算,并將結(jié)果通過X服務(wù)器顯示出來。這種簡單圖形界面的缺點(diǎn)是:X應(yīng)用程序本身不具備管理自己的工作區(qū)域的能力,它無法移動(dòng)、放大或縮小自己的界面。因此,當(dāng)多個(gè)X應(yīng)用同時(shí)運(yùn)行時(shí),它們的界面很可能會(huì)重疊在一起,無法使用。圖8-5就是啟動(dòng)了xterm、xcalc、xclocks和xbiff四個(gè)應(yīng)用的界面,由于初始位置和大小沒有設(shè)定好,造成界面重疊,此時(shí)只有上面的界面可以正常工作。

簡單圖形界面只在特殊情況下使用,比如測試X系統(tǒng),或在速度很低的網(wǎng)絡(luò)上遠(yuǎn)程執(zhí)行單個(gè)應(yīng)用。圖8?5啟動(dòng)多個(gè)X應(yīng)用的簡單圖形界面

2.窗口化圖形界面

當(dāng)有多個(gè)程序需要同時(shí)顯示在同一顯示屏上時(shí),需要采用窗口機(jī)制來管理應(yīng)用程序的界面。窗口(window)是應(yīng)用程序與用戶交互的可管理的圖形化區(qū)域。每個(gè)窗口都有一個(gè)窗口框架,框架由邊框、標(biāo)題欄、控制按鈕和控制菜單等元素組成。利用這些元素可以調(diào)整窗口尺寸、移動(dòng)、縮放或關(guān)閉窗口。窗口之間可以層次疊放,共享屏幕資源。

X采用了樹型結(jié)構(gòu)來組織各個(gè)窗口。背景窗口稱為根窗口(rootwindow),所有的應(yīng)用程序的窗口都是顯示在根窗口上,稱為子窗口。各應(yīng)用程序只能工作在自己的窗口范圍內(nèi),即只能響應(yīng)來自自己窗口區(qū)域的輸入事件,也只能向自己的窗口區(qū)域輸出信息。與MSWindows系統(tǒng)不同,在X系統(tǒng)中,X應(yīng)用程序并不自己實(shí)現(xiàn)窗口管理功能。也就是說,應(yīng)用程序中沒有用于顯示窗口框架的代碼,也沒有處理窗口控制事件(縮放、移動(dòng)、關(guān)閉等)的代碼。所有應(yīng)用程序的窗口繪制和窗口控制操作都統(tǒng)一由另一個(gè)程序來完成,這個(gè)程序就是窗口管理器。窗口管理器(WindowManager)是管理窗口的一個(gè)X工具軟件,負(fù)責(zé)窗口的建立、刪除、層疊、拖動(dòng)、更改尺寸等工作。當(dāng)一個(gè)應(yīng)用程序啟動(dòng)時(shí),窗口管理器負(fù)責(zé)為它的顯示區(qū)域加上窗口框架。當(dāng)鼠標(biāo)點(diǎn)擊框架上的控制按鈕時(shí),窗口管理器會(huì)收到輸入事件并進(jìn)行相應(yīng)的處理。比如點(diǎn)擊了最小化按鈕時(shí),窗口管理器就負(fù)責(zé)把這個(gè)窗口隱藏起來,顯示它的最小化圖標(biāo)。當(dāng)點(diǎn)擊關(guān)閉窗口的按鈕時(shí),窗口管理器就會(huì)通知那個(gè)應(yīng)用程序退出。圖8-6所示是啟動(dòng)了窗口管理器后的界面。顯示的還是那4個(gè)X應(yīng)用,但它們的界面已經(jīng)是窗口化的了。圖8?6有窗口管理器的圖形界面將應(yīng)用的界面操作與窗口管理操作相分離,這是X的優(yōu)秀設(shè)計(jì)思想。這意味著即使一個(gè)程序掛起了,它的窗口仍然是可以移動(dòng)的,可以被最小化和關(guān)閉。如果因錯(cuò)誤導(dǎo)致X應(yīng)用崩潰了,它也不會(huì)占據(jù)著屏幕無法退出,因?yàn)榇翱诠芾砥骺偸强梢躁P(guān)掉它。

圖8-7是窗口化圖形界面的組成和結(jié)構(gòu)關(guān)系。圖8?7窗口化圖形界面的結(jié)構(gòu)窗口管理器工作在根窗口,因此當(dāng)窗口管理器運(yùn)行時(shí),它將截獲所有來自X服務(wù)器的輸入事件。此時(shí),X應(yīng)用并不直接與X服務(wù)器通信,而是通過窗口管理器中轉(zhuǎn)。當(dāng)輸入事件針對窗口管理器時(shí),比如點(diǎn)擊或拖動(dòng)某應(yīng)用的窗口框架,或點(diǎn)擊空白背景處時(shí),它們會(huì)被窗口管理器攔截并進(jìn)行處理,如移動(dòng)、關(guān)閉窗口、顯示窗口管理器菜單等。而當(dāng)輸入事件針對應(yīng)用時(shí),比如點(diǎn)擊計(jì)算器的按鈕處,則它們會(huì)被窗口管理器傳遞給應(yīng)用程序進(jìn)行處理。窗口管理器定義了窗口的一致外觀與行為,不論是來自哪個(gè)系統(tǒng)的應(yīng)用,其窗口都由窗口管理器統(tǒng)一裝飾和指揮。但不同的窗口管理器具有不同的窗口樣式和操作風(fēng)格,通過選用不同的窗口管理器,可以定義出個(gè)性化的窗口環(huán)境。流行的窗口管理器有twm、kwm、fvwm、WindowMaker、enlightenment、sawmill、sawfish、metacity等。twm是經(jīng)典的窗口管理器,在幾乎所有系統(tǒng)上都可找到。其特點(diǎn)是簡陋但很小巧。圖8-6就是twm的窗口風(fēng)格。

窗口圖形界面是應(yīng)用開發(fā)者和系統(tǒng)管理員常用的圖形界面形式,經(jīng)常用于訪問遠(yuǎn)程X應(yīng)用程序。例如,X應(yīng)用的開發(fā)者在遠(yuǎn)程的開發(fā)平臺(tái)上調(diào)試程序,而在本地觀察運(yùn)行結(jié)果。對于普通用戶來說,直接使用這樣的界面并不方便。

3.桌面環(huán)境

桌面(Desktop)是一個(gè)集成的圖形化工作環(huán)境,通過在屏幕上放置的圖標(biāo)、窗口、菜單、面板等圖形元素來模仿人們的日常辦公桌面。桌面為普通用戶提供了一個(gè)更直觀、更方便的方式來使用計(jì)算機(jī),其設(shè)計(jì)充分考慮了易用性。用戶不需學(xué)習(xí)任何命令,只需用鼠標(biāo)點(diǎn)擊圖標(biāo)即可完成啟動(dòng)應(yīng)用、配置系統(tǒng)、管理文件等日常操作。

桌面啟動(dòng)后的界面如圖8-10所示。

桌面環(huán)境是一整套X工具軟件的集合,包括窗口管理器、桌面控制程序、文件管理程序和一些工具軟件。它們之間的結(jié)構(gòu)關(guān)系如圖8-8所示。圖8-8桌面系統(tǒng)圖形界面的結(jié)構(gòu)通常,桌面系統(tǒng)都配套了一組實(shí)用工具軟件,主要的一個(gè)工具軟件是圖形化的文件管理器,它使用戶可以輕松地進(jìn)行文件管理操作。另一個(gè)重要工具是控制面板,它用于容納常用的工具和操作,方便用戶執(zhí)行各種任務(wù)。此外還有一些圖形化的系統(tǒng)管理和配置工具。這些工具軟件與應(yīng)用軟件的界面都受窗口管理器的管理,而它們的啟動(dòng)和在桌面上的配置則受桌面控制系統(tǒng)的控制。

桌面系統(tǒng)通常在系統(tǒng)本地使用,在高速局域網(wǎng)環(huán)境下也可以使用遠(yuǎn)程桌面。

Linux上流行的桌面環(huán)境是GNOME和KDE,將在8.3.5小節(jié)中做簡單介紹。

4.顯示管理器

桌面系統(tǒng)的使用非常方便,但手工啟動(dòng)桌面系統(tǒng)的過程卻比較麻煩。用戶需要先在字符控制臺(tái)下登錄,輸入相應(yīng)命令在另一個(gè)圖形控制臺(tái)上啟動(dòng)X和桌面系統(tǒng),然后再切換到該桌面上工作。為方便用戶使用圖形界面,Linux系統(tǒng)普遍采用了一種顯示管理技術(shù),即通過一個(gè)專門的顯示管理器程序來管理圖形終端,使用戶可以直接在圖形終端登錄系統(tǒng),進(jìn)入桌面環(huán)境工作。顯示管理器(DisplayManager)是一個(gè)管理X顯示器的軟件,它負(fù)責(zé)為用戶提供一個(gè)完整的X會(huì)話周期,即從用戶登錄進(jìn)入系統(tǒng)直到退出系統(tǒng)的整個(gè)過程都是在X顯示器中完成的。顯示管理器在系統(tǒng)啟動(dòng)時(shí)就開始運(yùn)行,它首先在圖形終端上啟動(dòng)X系統(tǒng),也就是說建立一個(gè)可用的X顯示器,然后顯示一個(gè)圖形化的登錄界面。用戶在此界面登錄后,它按照配置文件的設(shè)置啟動(dòng)一個(gè)圖形用戶界面(默認(rèn)的配置是啟動(dòng)一個(gè)桌面系統(tǒng))。當(dāng)用戶從界面退出后,它再重新啟動(dòng)登錄界面,等待用戶的下一次登錄。系統(tǒng)啟動(dòng)時(shí),默認(rèn)在7號(hào)控制臺(tái)啟動(dòng)一個(gè)顯示管理器。常用的顯示管理器有xdm、kdm和gdm。kdm用于登錄進(jìn)入KDE桌面,gdm用于登錄進(jìn)入GNOME桌面,xdm按配置文件啟動(dòng)設(shè)定的圖形界面,常用于提供遠(yuǎn)程X終端的顯示管理。圖8-9所示是在fedora9上啟動(dòng)了gdm后顯示出的圖形登錄界面。圖8-9fedora9gdm的圖形登錄界面8.3.4X系統(tǒng)的啟動(dòng)與停止

啟動(dòng)XWindow系統(tǒng)的方法很多,從手動(dòng)到自動(dòng),適合不同人的不同需要。歸納起來有如下幾種:

1.手工啟動(dòng)X系統(tǒng)

有些情況下需要手工啟動(dòng)X系統(tǒng),即用命令的方式啟動(dòng)X系統(tǒng)。比如,系統(tǒng)啟動(dòng)時(shí)未啟動(dòng)X系統(tǒng)(用作服務(wù)器的系統(tǒng)通常如此),或需要訪問某個(gè)遠(yuǎn)程X應(yīng)用。用這種方式啟動(dòng)的界面精簡而高效,但需要對X系統(tǒng)有較深入的了解。

啟動(dòng)操作包括啟動(dòng)X服務(wù)器和X客戶兩部分。X服務(wù)器要先于X客戶啟動(dòng)。

1)啟動(dòng)X服務(wù)器

啟動(dòng)X服務(wù)器的命令是:(X[:顯示器號(hào)])

其中,顯示器號(hào)是指定X服務(wù)器要控制的顯示器編號(hào),缺省時(shí)為0。

例如:X:1&命令將啟動(dòng)一個(gè)X服務(wù)器,管理1號(hào)顯示器。用“&”將命令置為后臺(tái)運(yùn)行是為了立即返回Shell,執(zhí)行其他命令。

Linux系統(tǒng)的7~12號(hào)虛擬控制臺(tái)都是圖形終端,用戶可以根據(jù)需要啟動(dòng)多個(gè)X顯示器,它們按啟動(dòng)順序依次占用第7~12號(hào)虛擬控制臺(tái)。即,第一個(gè)啟動(dòng)的X顯示器占用7號(hào)控制臺(tái),第二個(gè)啟動(dòng)的X顯示器則占用8號(hào)控制臺(tái),…。假設(shè)在執(zhí)行X:1&命令前系統(tǒng)已在7號(hào)控制臺(tái)上默認(rèn)啟動(dòng)了一個(gè)0號(hào)顯示器,則此命令啟動(dòng)的1號(hào)顯示器將占用8號(hào)控制臺(tái)。用切換鍵Ctrl+Alt+F8切換到該控制臺(tái)就可看到一個(gè)帶有鼠標(biāo)指針的黑色根窗口。

在其他系統(tǒng)上啟動(dòng)X服務(wù)器的方法見相應(yīng)的軟件說明。

2)啟動(dòng)X客戶程序

手工啟動(dòng)X客戶程序的方法是在Shell下輸入命令,命令名就是X客戶程序的名稱。命令除了程序本身定義的選項(xiàng)外,還有兩個(gè)對幾乎所有的X應(yīng)用都有效的通用選項(xiàng),即-geometry和-display選項(xiàng)。啟動(dòng)X應(yīng)用的命令格式如下:

命令名[選項(xiàng)][-geometry選項(xiàng)][-display選項(xiàng)]

【-display選項(xiàng)】格式:-display[主機(jī)]:顯示號(hào)[.屏幕號(hào)]指定顯示窗口要輸出到哪個(gè)顯示器,即連接到哪個(gè)X服務(wù)器。其中,主機(jī)是顯示器所在的計(jì)算機(jī)的主機(jī)名或IP地址,缺省時(shí)表示是本機(jī)。顯示器號(hào)是指要使用的X顯示器的編號(hào),屏幕號(hào)僅對多屏顯示器有效,一般省略。另外,若在Shell的環(huán)境變量$DISPLAY中設(shè)置了-display的缺省值,則在命令行中可省略此選項(xiàng)。否則此選項(xiàng)不可缺省。

【-geometry選項(xiàng)】格式:-geometry寬x高+/-X偏移量+/-Y偏移量指定顯示界面的大小和位置,以像素為單位,也可簡寫為-g選項(xiàng)。寬x高定義窗口的大小,缺省時(shí)采用應(yīng)用程序定義的默認(rèn)大小。X偏移量和Y偏移量定義窗口相對屏幕的位置。<+X偏移量,+Y偏移量>表示以左上角為參照點(diǎn)的位置,即窗口的左上角相對屏幕左上角向右向下的偏移。<+X偏移量,-Y偏移量>、<-X偏移量,+Y偏移量>、<-X偏移量,-Y偏移量>分別表示以左下角、右上角、右下角為參照點(diǎn)的位置。缺省的位置為<+0,+0>,即窗口左上角位于屏幕的左上角坐標(biāo)。例如:

①?xterm-display:1 啟動(dòng)xterm,在本機(jī)的X顯示器1上顯示。

②?xcalc-display:0 啟動(dòng)xcalc,在本機(jī)的X顯示器0上顯示。

③?xterm-display:0啟動(dòng)xterm,在主機(jī)的X

顯示器0上顯示。

④?xcalc-g+30+30-display:1啟動(dòng)xcalc,在本機(jī)的X顯示器1

<+30,+30>處顯示。

⑤?xclock-g-10+10-display:1啟動(dòng)xclock,在本機(jī)的X顯示器1<

-10,+10>處顯示。

⑥?xbiff-g50?×?50-display:1啟動(dòng)xbiff,在本機(jī)的X顯示器1上

顯示,大小為50?×?50。

圖8-3所示是執(zhí)行命令②后的界面顯示,圖8-5所示是順序執(zhí)行命令①④⑤⑥后的界面顯示。

3)啟動(dòng)窗口管理器

用窗口管理器的命令名,按啟動(dòng)X客戶的方法啟動(dòng)窗口管理器。如:

①?twm-display:1& 在X顯示器1上啟動(dòng)twm窗口管

理器。

②?mwm-display:0& 在X顯示器0上啟動(dòng)mwm窗口

管理器。

圖8-6所示是在圖8-5的界面上又執(zhí)行了命令①后的界面。

要停止用手工方法啟動(dòng)的X系統(tǒng),則結(jié)束對應(yīng)的X進(jìn)程即可。

2.用xinit命令啟動(dòng)X系統(tǒng)

如果是在本機(jī)運(yùn)行X服務(wù)器和X客戶,使用xinit命令和startx命令可以簡化手工啟動(dòng)的過程。

1)?xinit命令

xinit命令用于控制本機(jī)上的X系統(tǒng)的啟動(dòng)過程,它按命令行參數(shù)的設(shè)定,啟動(dòng)指定的X服務(wù)器和X客戶程序。xinit命令的格式是:

xinit[-X客戶啟動(dòng)命令][--X服務(wù)器啟動(dòng)命令]

例如:xinit-xterm-display:1--X:1

該命令將在顯示器1啟動(dòng)一個(gè)xterm界面。如果沒有指定X服務(wù)器參數(shù),xinit將用~/.xserverrc文件中的命令來啟動(dòng)X服務(wù)器,如果也沒有這個(gè)文件,則xinit將缺省地用X:0啟動(dòng)X服務(wù)器;如果沒有指定X客戶參數(shù),xinit將用~/.xinitrc文件中的命令來啟動(dòng)X客戶程序,如果也沒有這個(gè)文件,xinit將缺省地用xterm-display:0啟動(dòng)一個(gè)xterm。所以,如果用戶未建立這兩個(gè)文件,則不帶參數(shù)的xinit命令等同于xinit-xterm-display:0--X:0,即在顯示器0啟動(dòng)一個(gè)類似圖8-3所示的簡單界面。

如果用戶希望xinit啟動(dòng)一個(gè)預(yù)先定制好的圖形界面,可以編輯xinit的腳本文件,指定要啟動(dòng)的應(yīng)用程序和窗口管理器,并設(shè)計(jì)好初始布局。下面是.xinitrc文件的一個(gè)樣本:

xsetroot-solidgray-display:0& #設(shè)置根窗口背景為實(shí)底灰色

xclock-g100×100-0+0-display:0&

xbiff-g50×50-0+130-display:0&

xcalc-g200×250-0-0-display:0&

xterm-fn8×16-g80×22+0+0-display:0& #選用8×16字體

twm-display:0

有了這個(gè)文件,當(dāng)執(zhí)行xinit時(shí)就會(huì)在顯示器0上啟動(dòng)如圖8-6所示的X界面。當(dāng)X客戶結(jié)束時(shí)(如點(diǎn)擊twm菜單中的exit),X服務(wù)器也會(huì)隨之關(guān)閉。

2)?startx命令

對于運(yùn)行單一會(huì)話的X系統(tǒng),startx提供了更為良好的用戶接口。startx是一個(gè)腳本命令(即Shell程序),它負(fù)責(zé)讀取和處理一系列配置文件,為xinit設(shè)置執(zhí)行參數(shù),然后調(diào)用xinit命令啟動(dòng)預(yù)定的圖形界面。使用startx配置界面比直接使用xinit命令更方便也更容易,往往用于配置較復(fù)雜的圖形界面,如系統(tǒng)提供的桌面或用戶自定義的桌面等。

startx首先在用戶主目錄下找.xinitrc及.xserverrc腳本文件。如果用戶定義了這兩個(gè)文件,則執(zhí)行startx與執(zhí)行xinit效果是一樣的。若未找到用戶的配置文件,startx就使用系統(tǒng)配置文件,即/etc/X11/xinit目錄下的xinitrc和xserverrc文件。這兩個(gè)文件指定了構(gòu)成界面的各項(xiàng)規(guī)格和要素。通常系統(tǒng)的默認(rèn)配置是啟動(dòng)桌面環(huán)境(在Fedora中,啟動(dòng)的是GNOME桌面)。這是啟動(dòng)桌面最簡單的方法。啟動(dòng)后的界面如圖8-10所示。

按Ctrl+Alt+Backspace鍵或退出桌面后X即停止。圖8-10GNOME桌面

3.用顯示管理器啟動(dòng)

顯示管理器可用命令xdm、kdm、或gdm(需要root權(quán)限)啟動(dòng)。默認(rèn)在顯示器0顯示登錄界面。按Ctrl+Alt+Backspace或退出桌面后回到登錄界面。

如果系統(tǒng)默認(rèn)的運(yùn)行級(jí)別是模式5(關(guān)于系統(tǒng)運(yùn)行級(jí)別的定義見10.2.1小節(jié)),則系統(tǒng)在啟動(dòng)時(shí)就會(huì)自動(dòng)在顯示器0運(yùn)行顯示管理器,顯示圖形登錄界面。在Fedora系統(tǒng)上默認(rèn)啟動(dòng)的是gdm。8.3.5Linux桌面系統(tǒng)簡介

目前Linux系統(tǒng)最流行的桌面系統(tǒng)是GNOME和KDE。它們包含用戶日常應(yīng)用所需要的應(yīng)用程序,如Web瀏覽器、電子郵件客戶端、辦公套件、圖形圖像處理軟件等。圖形桌面旨在為Linux用戶提供一個(gè)完美易用的圖形化操作環(huán)境。

KDE(KoolDesktopEnvironment)擁有華麗的界面和豐富的功能,使用習(xí)慣也與Windows較類似。與GNOME相比,KDE集成了更多的應(yīng)用程序和設(shè)置桌面的工具,但KDE使用的底層開發(fā)庫QT不是按GPL所許可方式發(fā)布的。GNOME(GNUNetworkObjectModelEnvironment)提供了相對簡單、高效的桌面體驗(yàn),運(yùn)行速度更快。另外,GNOME是完全自由的軟件,因而獲得了更多的商業(yè)支持和社區(qū)開發(fā)者的支持。目前,這兩大平臺(tái)已經(jīng)實(shí)現(xiàn)高度的互操作性,應(yīng)用程序可以完全共享。兩者在功能上和外觀上均已達(dá)到足夠完美的境地。

由于桌面系統(tǒng)的設(shè)計(jì)十分人性化,用戶無需特別學(xué)習(xí)就可以直接使用。在此只對GNOME桌面系統(tǒng)作一簡單的介紹。

1.?GNOME概況

1999年,墨西哥程序員MigueldeIcaza率領(lǐng)眾多開發(fā)者共同開發(fā)出了Linux下的桌面系統(tǒng)“GNOME1.0”。GNOME是GNU計(jì)劃的一部分,它的目標(biāo)是讓每一個(gè)普通用戶都能輕松地使用Linux系統(tǒng)。

GNOME遵照GPL許可發(fā)行,是完全自由的軟件。?正因?yàn)槿绱耍?GNOME得到了RedHat的大力支持,成為RedHat等許多Linux發(fā)行版的默認(rèn)安裝的桌面。

2.?GNOME桌面系統(tǒng)的構(gòu)成

GNOME桌面系統(tǒng)由背景桌面區(qū)域、窗口管理器、控制面板、文件管理器和應(yīng)用軟件等元素構(gòu)成,如圖8-10所示。

1)?GNOME桌面區(qū)域

桌面是用戶可使用的屏幕區(qū)域,用于放置應(yīng)用程序的圖標(biāo)和運(yùn)行程序的窗口。這個(gè)區(qū)域可能比屏幕上顯示的區(qū)域大,稱為虛擬桌面。在缺省情況下,GNOME虛擬桌面劃分為4個(gè)桌面區(qū)域,稱為工作區(qū)。工作區(qū)之間可以快速切換。桌面區(qū)域的組成元素包括:

(1)桌面背景:在X根窗口(布滿屏幕的窗口)上顯示的背景圖片。

(2)桌面菜單:用于配置桌面區(qū)域的菜單,右鍵單擊桌面時(shí)調(diào)出。

(3)桌面圖標(biāo):用于啟動(dòng)應(yīng)用程序的啟動(dòng)器(animation),雙擊圖標(biāo)時(shí)啟動(dòng)應(yīng)用。

(4)窗口:正在運(yùn)行的應(yīng)用程序的顯示窗口。

2)窗口管理器

運(yùn)行中的X程序都受窗口管理器的統(tǒng)一控制,在桌面顯示它們的窗口界面。與KDE不同的是,GNOME未與窗口管理器綁定。新版本的GNOME默認(rèn)使用metacity窗口管理器,其風(fēng)格以簡潔為主,如圖8-10所示。也可配置GNOME使用其他的窗口管理器,如sawmill,sawfish,englightenment等。

3)文件管理器

圖形化文件管理器Nautilus提供了系統(tǒng)和個(gè)人文件的圖形化顯示。然而,Nautilus不僅僅可以瀏覽文件,它還可配置系統(tǒng)、瀏覽影集、啟動(dòng)應(yīng)用、訪問網(wǎng)絡(luò)等。總之,Nautilus可看作是整個(gè)桌面的“外殼”(Shell),相當(dāng)于Windows系統(tǒng)中的資源管理器Explorer。

點(diǎn)擊桌面上的“計(jì)算機(jī)”或“主文件夾”圖標(biāo)都可以啟動(dòng)Nautilus。圖8-10中后面的窗口就是Nautilus的顯示窗口。

4)?GNOME面板

GNOME面板(GnomePanel)是GNOME的控制中心,通常位于屏幕底部,或分為兩部分分別置于屏幕上方和下方,樣式如圖8-11所示。

GNOME面板程序是一個(gè)X客戶程序,用于啟動(dòng)應(yīng)用程序和嵌入的小程序、顯示正在運(yùn)行的程序和切換工作區(qū)。面板上放置了一些圖標(biāo),它們是面板的控制對象,單擊圖標(biāo)即可執(zhí)行其對應(yīng)的操作。面板上的元素是可配置的,用右鍵單擊面板空白處即可調(diào)出面板菜單,然后根據(jù)需要配置面板,如向面板中添加、移動(dòng)和刪除對象等。圖8-11GNOME面板面板上主要包含以下幾類對象:

(1)主菜單:8-11中圖標(biāo)①是主菜單。從主菜單中可以訪問幾乎全部的應(yīng)用和工具。

(2)啟動(dòng)器:啟動(dòng)器用于啟動(dòng)應(yīng)用程序。與桌面上的啟動(dòng)器的不同之處在于,面板上的啟動(dòng)器只需單擊即可快速啟動(dòng)。因此,用戶可以將一些常用的應(yīng)用啟動(dòng)器添加到面板中。

圖8-11中圖標(biāo)②和③都是啟動(dòng)器,分別用于啟動(dòng)WEB瀏覽器和電子郵件。

(3)小程序:小應(yīng)用程序(applet)與一般的應(yīng)用程序不同,它不能獨(dú)立地運(yùn)行,而是需要運(yùn)行在某個(gè)軟件“容器”中。GNOME小應(yīng)用程序是可嵌入GNOME面板中運(yùn)行的小工具,用于執(zhí)行一些簡單實(shí)用的功能。

圖8-11中的面板上放置了如下幾個(gè)小程序:

上面板中,圖標(biāo)④是便簽,⑥是字典,⑦是語言切換器,⑧是網(wǎng)絡(luò)管理器,⑨是時(shí)鐘,⑩是音量控制器。下面板中,圖標(biāo)用于顯示桌面,點(diǎn)擊即可隱藏/恢復(fù)遮蓋桌面的窗口。圖標(biāo)和是任務(wù)列表,它們列出每個(gè)正在運(yùn)行的程序,點(diǎn)擊即可切換當(dāng)前顯示窗口。圖標(biāo)是工作區(qū)切換器,它包含了4個(gè)工作區(qū)。點(diǎn)擊即可切換當(dāng)前工作區(qū)。從網(wǎng)絡(luò)上還可以獲取更多實(shí)用的GNOME小程序,如氣象預(yù)報(bào)、股市信息、CD播放、CPU頻率調(diào)節(jié)、電池監(jiān)視等。

(4)抽屜:抽屜是面板的擴(kuò)展,以容納更多的面板對象。⑤是一個(gè)抽屜的圖標(biāo),點(diǎn)擊可以打開和關(guān)閉抽屜。

(5)按鈕:按鈕是一些用于執(zhí)行系統(tǒng)控制操作的圖標(biāo)。是屏幕鎖定按鈕,是注銷按鈕,是關(guān)機(jī)按鈕。

5)?GNOME應(yīng)用軟件

GNOME集成了一套功能完善、運(yùn)行穩(wěn)定的實(shí)用工具和應(yīng)用程序,用戶還可以選擇安裝其他應(yīng)用。GNOME下常用的工具和軟件有:

●?OpenO:辦公軟件,兼容WindowsOffice文件格式。

●?Evolution:電子郵件客戶軟件,具備靈活的日歷(調(diào)度器)功能。

●?Firefox:WEB瀏覽器,各Linux發(fā)行版默認(rèn)安裝。

●Gimp:圖像編輯器,GNU的“PhotoShop”。

●?Gaim:即時(shí)通訊軟件,支持多種流行通訊,如MSN、YahooMessenger、ICQ等。

●?Totem:視頻播放器,支持網(wǎng)絡(luò)視頻播放。

8.4系統(tǒng)調(diào)用接口

系統(tǒng)調(diào)用是操作系統(tǒng)的程序接口。從某種意義上來說,系統(tǒng)調(diào)用定義了操作系統(tǒng)的原始功能,而用戶界面都是對系統(tǒng)調(diào)用接口的包裝。所以,要想深入了解一個(gè)操作系統(tǒng)的操作特性,就要熟悉該系統(tǒng)提供的各種系統(tǒng)調(diào)用,這是一個(gè)系統(tǒng)程序員的必備條件。8.4.1系統(tǒng)調(diào)用接口概述

操作系統(tǒng)的內(nèi)核進(jìn)程需要訪問核心數(shù)據(jù)結(jié)構(gòu)和硬件資源,所以它們運(yùn)行在核心態(tài)。用戶級(jí)的進(jìn)程包括Shell,vi,XWindow等,它們都只能在用戶態(tài)下運(yùn)行。這種限制保護(hù)了系統(tǒng)不會(huì)受到來自用戶進(jìn)程的有意或無意的破壞。

但是很多情況下,用戶進(jìn)程也需要執(zhí)行一些涉及系統(tǒng)資源的操作,比如打開、關(guān)閉或讀/寫文件,進(jìn)行I/O傳輸?shù)炔僮鳌_@些操作是無法在用戶態(tài)下完成的,因此需要進(jìn)行狀態(tài)的切換。當(dāng)用戶進(jìn)程需要完成核心態(tài)后才能完成的某些功能時(shí),必須按照內(nèi)核提供的一個(gè)接口進(jìn)入內(nèi)核,然后調(diào)用內(nèi)核函數(shù)完成所需的功能。這些供用戶進(jìn)程調(diào)用的內(nèi)核函數(shù)就是系統(tǒng)調(diào)用。打個(gè)比方,就像在圖書館中,讀者可以自由地檢索目錄、閱讀開架圖書、復(fù)印資料等。但他們無法直接去書庫取書,也無權(quán)修改圖書館的借書登記和圖書管理資料。當(dāng)他們想借出圖書時(shí),只能填寫借書單,到指定的借閱柜臺(tái),將借書單提交給圖書管理人員,由他們來完成登記和取書工作。從行為模式上看,圖書管理人員工作在特權(quán)狀態(tài),他們有權(quán)訪問和修改圖書館的各種資源。而讀者工作在非特權(quán)狀態(tài),只能在有限的權(quán)利和范圍內(nèi)活動(dòng)。他們之間的接口只有借閱臺(tái)。使用系統(tǒng)調(diào)用來訪問系統(tǒng)資源的主要目的是為了保護(hù)系統(tǒng)資源和內(nèi)核的安全,以及提高資源利用率。系統(tǒng)調(diào)用的另一個(gè)作用是方便用戶使用,使用戶不必了解操作系統(tǒng)的內(nèi)部結(jié)構(gòu)和有關(guān)硬件的細(xì)節(jié)問題。就像讀者在借書時(shí)只需提供一個(gè)索書號(hào),而不必了解目前書庫的具體布局以及圖書的具體擺放位置一樣。8.4.2Linux系統(tǒng)調(diào)用接口的組成

Linux系統(tǒng)調(diào)用接口的組成和結(jié)構(gòu)如圖8-12所示。圖8?12Linux系統(tǒng)調(diào)用接口示意圖

1.系統(tǒng)調(diào)用服務(wù)例程

Linux內(nèi)核提供了一組用于實(shí)現(xiàn)各種系統(tǒng)功能的內(nèi)核函數(shù),稱為系統(tǒng)調(diào)用服務(wù)例程(syscallroutine)。這些內(nèi)核函數(shù)在形式上與普通C函數(shù)相同,調(diào)用格式也基本相同。主要區(qū)別在于它們運(yùn)行在核心態(tài),而普通C函數(shù)運(yùn)行在用戶態(tài)。通過系統(tǒng)調(diào)用進(jìn)程可由用戶態(tài)轉(zhuǎn)入核心態(tài),在核心態(tài)下完成一定的操作后再返回用戶態(tài)。

Linux的每個(gè)系統(tǒng)調(diào)用服務(wù)例程都有一個(gè)編號(hào),同時(shí)在內(nèi)核中保存了一張系統(tǒng)調(diào)用表,該表中保存了系統(tǒng)調(diào)用編號(hào)和其對應(yīng)服務(wù)例程。

2.系統(tǒng)調(diào)用總控程序

系統(tǒng)調(diào)用總控程序(system_call)是操作系統(tǒng)提供給應(yīng)用程序的一個(gè)特殊接口,特殊之處在于它是利用軟中斷方式陷入內(nèi)核的入口。執(zhí)行系統(tǒng)調(diào)用的進(jìn)程先將參數(shù)值填入寄存器,然后執(zhí)行一個(gè)特殊的陷入指令(對i386體系結(jié)構(gòu)的CPU來說,就是執(zhí)行一個(gè)INT0x80軟中斷指令),這個(gè)指令會(huì)產(chǎn)生一個(gè)“系統(tǒng)調(diào)用”中斷,使控制跳轉(zhuǎn)到內(nèi)核的系統(tǒng)調(diào)用中斷總控程序的入口,同時(shí)將CPU切換到核心態(tài)。系統(tǒng)調(diào)用總控程序負(fù)責(zé)將系統(tǒng)調(diào)用派發(fā)到它們各自的服務(wù)例程。進(jìn)程在執(zhí)行陷入指令前已把系統(tǒng)調(diào)用號(hào)裝入寄存器,這樣當(dāng)系統(tǒng)調(diào)用總控程序運(yùn)行時(shí)就可以得到系統(tǒng)調(diào)用號(hào),用這個(gè)號(hào)碼在系統(tǒng)調(diào)用表中查找相應(yīng)的服務(wù)例程,然后調(diào)用它執(zhí)行。

除了需要傳遞系統(tǒng)調(diào)用號(hào)以外,許多系統(tǒng)調(diào)用還需要傳遞一些參數(shù)到內(nèi)核(如文件描述符、要寫入的內(nèi)容和寫入字節(jié)數(shù)等),Linux采用CPU寄存器來傳遞這些參數(shù)。system_call運(yùn)行時(shí)會(huì)把這些寄存器的值保存在內(nèi)核堆棧中,供服務(wù)例程使用。

3.系統(tǒng)調(diào)用封裝函數(shù)

編寫應(yīng)用程序時(shí),直接用陷入指令來執(zhí)行系統(tǒng)調(diào)用的難度較大。所以,Linux隨內(nèi)核一起還提供了一套系統(tǒng)調(diào)用的封裝(wrapper)函數(shù)。系統(tǒng)調(diào)用封裝函數(shù)是用C函數(shù)的形式封裝的系統(tǒng)調(diào)用,在程序中可以像使用普通C函數(shù)一樣使用這些封裝函數(shù),很方便地實(shí)現(xiàn)對系統(tǒng)調(diào)用服務(wù)例程的調(diào)用。

系統(tǒng)調(diào)用封裝函數(shù)的作用就像是圖書館為讀者提供了一些服務(wù)員,這些服務(wù)員活動(dòng)在讀者的空間,為讀者提供諸如借書、還書、預(yù)約、辦證等服務(wù)。讀者只要告訴負(fù)責(zé)借書的服務(wù)員要借哪本書,他就會(huì)代替讀者填寫和提交借書單,并將借到的書交給讀者。系統(tǒng)調(diào)用封裝函數(shù)與系統(tǒng)調(diào)用服務(wù)例程是一對一的關(guān)系。在不加區(qū)分的情況下,它們都可以被稱作系統(tǒng)調(diào)用。但習(xí)慣上程序員所說的系統(tǒng)調(diào)用通常是指前者,即在程序中直接使用的系統(tǒng)調(diào)用封裝函數(shù)。在函數(shù)命名方式上,兩者的對應(yīng)關(guān)系是:服務(wù)例程的名字是系統(tǒng)調(diào)用名加“sys_”前綴。如write()系統(tǒng)調(diào)用對應(yīng)的服務(wù)例程名是sys_write()。

4.標(biāo)準(zhǔn)庫函數(shù)

系統(tǒng)調(diào)用提供了系統(tǒng)的一個(gè)基本功能集,但編程者更多是通過C標(biāo)準(zhǔn)庫函數(shù)來使用系統(tǒng)調(diào)用的。C庫函數(shù)是對系統(tǒng)調(diào)用的更高一級(jí)的引用和封裝,它與系統(tǒng)調(diào)用不是一對一的關(guān)系,可能會(huì)引用多個(gè)系統(tǒng)調(diào)用,或進(jìn)行一些額外的處理步驟。如printf()函數(shù)引用了write()系統(tǒng)調(diào)用,同時(shí)還提供了格式化的輸出功能,因而使用起來更加方便。

C庫函數(shù)的作用就如同圖書館為用戶提供了更高一級(jí)的信息服務(wù)。例如讀者需要某方面的資料,只要向信息服務(wù)員描述對資料的需求,由信息服務(wù)員負(fù)責(zé)檢索資料,確定要借的圖書,再交借書服務(wù)員去辦理。最后信息服務(wù)員將用戶所需的信息摘錄整理后交給用戶。從圖8-12中可以看出,應(yīng)用程序可以用3種方式使用系統(tǒng)調(diào)用:一是調(diào)用C標(biāo)準(zhǔn)函數(shù),這種方式最簡單;二是調(diào)用系統(tǒng)調(diào)用封裝函數(shù),當(dāng)沒有合適的C函數(shù)可用,或?qū)π阅苡刑厥庖髸r(shí),則需要直接使用系統(tǒng)調(diào)用;三是直接用軟中斷指令陷入內(nèi)核,這僅在特殊情況下,比如做底層軟件開發(fā)時(shí)可能用到。8.4.3Linux系統(tǒng)調(diào)用

Linux

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論