




版權(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.3
Linux圖形用戶界面8.4
Linux系統(tǒng)調(diào)用接口
8.1 操作系統(tǒng)接口概述
8.1.1 作業(yè)與作業(yè)調(diào)度按操作系統(tǒng)的術(shù)語,用戶是以“作業(yè)”的形式來使用系統(tǒng)的。
1. 作業(yè)的概念作業(yè)(job)是用戶向計(jì)算機(jī)系統(tǒng)提交的一項(xiàng)工作。
2. 作業(yè)調(diào)度
作業(yè)調(diào)度的概念來自于批處理系統(tǒng)。在批處理系統(tǒng)中,作業(yè)是成批提交的。提交后的作業(yè)在外存的作業(yè)隊(duì)列中等待,經(jīng)過作業(yè)調(diào)度程序選中后,由外存進(jìn)入內(nèi)存,再以進(jìn)程的形式運(yùn)行。作業(yè)調(diào)度算法的目標(biāo)是合理地搭配作業(yè),以使系統(tǒng)資源的利用率達(dá)到最高。在這樣的系統(tǒng)中,對CPU的調(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)行。進(jìn)入系統(tǒng)的作業(yè)宏觀上處于運(yùn)行狀態(tài),但微觀上則是以進(jìn)程的形式走走停停。
8.1.2 操作系統(tǒng)的接口
操作系統(tǒng)接口的功能就是提供使用系統(tǒng)的界面。根據(jù)服務(wù)對象的不同,操作系統(tǒng)的接口可以劃分為兩類:一是供用戶使用的用戶接口,二是供程序使用的程序接口。
1. 用戶接口
用戶接口就是操作系統(tǒng)向用戶提供的使用界面。在交互式系統(tǒng)中,用戶直接通過終端與系統(tǒng)交互,交互界面有命令行和圖形兩種形式。
1)命令行用戶接口
命令行用戶接口(CommandLineInterface,CLI)是以命令方式使用系統(tǒng)的用戶界面。操作系統(tǒng)提供給用戶一組操作命令,用戶在文本方式的界面上輸入命令與系統(tǒng)交互,執(zhí)行程序。命令執(zhí)行的結(jié)果也以文本方式顯示在界面上。
2)圖形用戶接口
圖形用戶接口(GraphicalUserInterface,GUI)是以鼠標(biāo)驅(qū)動方式使用系統(tǒng)的用戶界面。操作系統(tǒng)將用戶可執(zhí)行的操作以圖形元素(如窗口、圖標(biāo)、菜單、按鈕等)的方式顯示在圖形界面上,用戶通過鼠標(biāo)點(diǎn)擊或按鍵來操作界面上的圖形元素,實(shí)現(xiàn)與系統(tǒng)的交互,運(yùn)行程序。運(yùn)行結(jié)果也以圖形方式顯示在界面上。
2. 程序接口
程序接口是為程序訪問系統(tǒng)資源而提供的,它由一組系統(tǒng)調(diào)用組成。系統(tǒng)調(diào)用可以看作是由操作系統(tǒng)內(nèi)核提供的一組廣義指令。程序員在編寫程序時(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)之間的接口。而程序接口則是低級接口,是任何核外程序(包括應(yīng)用程序和系統(tǒng)程序)與操作系統(tǒng)內(nèi)核之間的接口。用戶接口的功能最終是通過程序接口來實(shí)現(xiàn)的。
8.1.3 Linux系統(tǒng)的接口
Linux系統(tǒng)提供了命令行和圖形兩種用戶接口以及程序接口。Linux的命令行接口是由命令解釋程序Shell提供的文本方式的命令行用戶界面。Linux的圖形接口是基于XWindow或Wayland架構(gòu)構(gòu)建的窗口化圖形用戶界面。Linux的程序接口是由Linux內(nèi)核提供的一組系統(tǒng)調(diào)用接口。以下各節(jié)分別介紹這3個(gè)接口的組成結(jié)構(gòu)和原理。
8.2 Shell命令接口
Linux系統(tǒng)的命令行接口是由Shell提供的文本方式的界面,也稱為Shell界面。與圖形界面相比,Shell界面顯得不夠簡單易用,但它的功能更強(qiáng)大,更成熟,也更可信賴。所以,無論是從事應(yīng)用開發(fā)還是系統(tǒng)管理,Shell都是必然要用到的界面。
8.2.1 Shell界面的組成
Shell界面由一組命令和稱為Shell的命令解釋程序組成。
1. 命令
Linux系統(tǒng)提供給用戶一組完備的命令,可以完成各種操作,如文件操作、進(jìn)程控制、系統(tǒng)監(jiān)控等。所有命令都需由Shell程序解釋執(zhí)行,所以也稱為Shell命令。
Shell命令分為內(nèi)部命令和外部命令兩類,它們的區(qū)別在于:內(nèi)部命令是由Shell自己實(shí)現(xiàn)的,其代碼包含在Shell程序內(nèi);外部命令是獨(dú)立實(shí)現(xiàn)的,其代碼以可執(zhí)行文件的形式存在于文件系統(tǒng)中。內(nèi)部命令是一些功能簡單且使用頻繁的命令,如echo、cd、pwd等。用help命令可查看所有的內(nèi)部命令。外部命令主要位于/usr/bin和/usr/sbin目錄下,它們用于完成比較復(fù)雜、耗時(shí)或特殊的功能。
2. 命令解釋程序
Linux的命令解釋程序稱為Shell,其主要功能是解釋和執(zhí)行命令。Shell從終端接收用戶提交的命令行并對其進(jìn)行解析。如果是內(nèi)部命令,Shell就調(diào)用該命令對應(yīng)的函數(shù)執(zhí)行;如果是外部命令,Shell就創(chuàng)建一個(gè)子進(jìn)程來執(zhí)行它。
8.2.2 Shell的版本
在UNIX誕生之初,系統(tǒng)只配有一個(gè)命令解釋器,用來解釋和執(zhí)行用戶命令。1979年,AT&TBell實(shí)驗(yàn)室的S.R.Bourne開發(fā)出第一個(gè)Shell程序——BourneShell。以后又陸續(xù)出現(xiàn)了由Berkeley大學(xué)BillJoy開發(fā)的CShell和由AT&TBell實(shí)驗(yàn)室DavidKorn開發(fā)的KornShell。目前Shell的版本很多,但基本上是以上3種Shell的擴(kuò)展與結(jié)合。各種Shell雖然在基本功能上是相同的,但附加功能不同,語法風(fēng)格各異,彼此也不盡兼容。
常用的Shell版本有以下幾種:
BourneShell(sh、bsh):最經(jīng)典的Shell,幾乎每種UNIX/Linux上都有;
CShell(csh):語法與C語言相似,交互特性較好;
KornShell(ksh):集合了csh和bsh的優(yōu)點(diǎn),與bsh完全兼容;
EnhancedCShell(tcsh):Linux上的csh的擴(kuò)展;
BourneAgainShell(bash):Linux上的bsh的擴(kuò)展;
PublicDomainKornShell(pdksh):Linux上的ksh的擴(kuò)展;
ZShell(zsh):結(jié)合了bash、tcsh和ksh的許多優(yōu)點(diǎn),功能強(qiáng)大。
8.2.3 Shell的工作流程
終端用戶所使用的Shell稱為交互式Shell,它運(yùn)行在用戶的終端界面中,守候和接收用戶輸入的命令,解釋并執(zhí)行命令,顯示命令執(zhí)行的結(jié)果。這種交互過程持續(xù)進(jìn)行直到退出。具體的工作流程如下:
1. Shell的啟動
在字符控制臺或圖形界面登錄時(shí)都會自動啟動一個(gè)Shell,這種在登錄時(shí)啟動的Shell稱為登錄Shell(LoginShell)。不過圖形界面的登錄Shell被隨后啟動的桌面覆蓋,無法使用。
2. Shell的初始化
Shell啟動時(shí)將執(zhí)行一系列的環(huán)境配置文件,初始化自己的運(yùn)行環(huán)境。運(yùn)行環(huán)境由一組環(huán)境變量組成,它們記錄了一些Shell運(yùn)行時(shí)可用的信息,比如用戶名、主目錄、主機(jī)名、終端類型等。
3. 讀取解析命令行
用戶輸入一個(gè)命令行,按Enter鍵提交給Shell。Shell收到后,首先識別出其中的詞法成分,然后進(jìn)行解析。
4. 執(zhí)行命令
1)內(nèi)部命令與外部命令
2)前臺執(zhí)行與后臺執(zhí)行
5. 命令結(jié)束處理
作為父進(jìn)程,Shell將負(fù)責(zé)所有命令子進(jìn)程的回收工作。當(dāng)命令交付執(zhí)行后,Shell有兩種方式等待回收子進(jìn)程:
(1)如果命令是在前臺運(yùn)行,則Shell將等待命令子進(jìn)程的結(jié)束。
(2)如果命令是在后臺運(yùn)行(命令行尾有&字符),則Shell不等待子進(jìn)程結(jié)束,立刻顯示命令提示符,準(zhǔn)備接收下一條命令。
6. 退出
當(dāng)Shell執(zhí)行到退出命令時(shí)將主動結(jié)束運(yùn)行。登錄Shell的退出將導(dǎo)致用戶退出登錄,非登錄Shell的退出將結(jié)束本Shell進(jìn)程。
退出Shell的命令是exit。Ctrl+d鍵的作用與exit命令相同。此外,在登錄Shell中也可以使用logout命令退出。
8.3 Linux圖形用戶界面
8.3.1 XWindow系統(tǒng)概述XWindow系統(tǒng)(簡稱X或X11)是一個(gè)基于窗口的圖形用戶接口系統(tǒng),1984年由麻省理工學(xué)院發(fā)布。如今X已成為UNIX/Linux系統(tǒng)上的標(biāo)準(zhǔn)圖形接口,并被廣泛移植到各種操作系統(tǒng)上。目前使用的是自2012年6月以來發(fā)布的發(fā)行版本X11R7.7。
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ú)地安裝和卸載。
(2)基于網(wǎng)絡(luò)運(yùn)行:X系統(tǒng)采用“客戶/服務(wù)器”(Client/Server)模式,基于網(wǎng)絡(luò)運(yùn)行。這種模式的獨(dú)到之處是程序的運(yùn)行與顯示相分離,即在一臺機(jī)器上運(yùn)行而在另一臺機(jī)器上顯示。
(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)行界面。
8.3.2 X系統(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-1所示。圖8-1?XWindow系統(tǒng)的體系架構(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客戶程序處理。
2. X客戶
X客戶(XClient)是一些需要在屏幕上顯示圖形界面的程序。X客戶多種多樣,凡是帶有圖形界面的程序都是X客戶。按功能可以把它們分為兩類:
X工具:用于支持界面運(yùn)行環(huán)境的程序,如窗口管理器、顯示管理器、桌面環(huán)境等。
X應(yīng)用:用于實(shí)現(xiàn)某個(gè)應(yīng)用的程序,如瀏覽器Firefox、終端xterm、時(shí)鐘xclock等。
3. X協(xié)議
X協(xié)議(XProtocol)是X客戶與X服務(wù)器之間通信時(shí)所遵循的一套規(guī)則,它規(guī)定了通信雙方交換信息的格式和順序。X客戶在向X服務(wù)器發(fā)送請求,以及X服務(wù)器向X客戶發(fā)送事件等信息時(shí),都需遵照X協(xié)議才能彼此理解和溝通。
8.3.3 X圖形界面的組成
1. 簡單圖形界面
最簡單的圖形界面是由一個(gè)X服務(wù)器和一個(gè)或多個(gè)X應(yīng)用組成的界面。例如,圖8-2就是由X服務(wù)器和一個(gè)xcalc應(yīng)用構(gòu)成的簡單圖形界面。圖8-2?xcalc的簡單圖形界面
這種簡單界面的構(gòu)成結(jié)構(gòu)如圖8-3所示。圖8-3簡單圖形界面的結(jié)構(gòu)
這種簡單的圖形界面有著明顯的缺點(diǎn):X應(yīng)用本身不具備管理自己的界面位置的能力,它無法移動、放大或縮小界面,因此,當(dāng)多個(gè)X應(yīng)用同時(shí)運(yùn)行時(shí),它們的界面很可能會重疊在一起,無法使用。圖8-4就是啟動了xterm、xcalc、xclock和xbiff四個(gè)應(yīng)用的界面,由于初始位置和大小沒有設(shè)定好,造成界面重疊,此時(shí)只有顯露的界面可以正常工作。圖8-4啟動多個(gè)X應(yīng)用的簡單圖形界面
2. 窗口化圖形界面
當(dāng)有多個(gè)程序需要同時(shí)顯示在同一顯示屏上時(shí),需要采用窗口機(jī)制來管理應(yīng)用程序的界面。窗口是應(yīng)用程序的可管理的圖形界面。每個(gè)窗口都有一個(gè)框架,窗口框架由邊框、標(biāo)題欄、控制按鈕和控制菜單等元素組成。利用這些控件可以調(diào)整窗口尺寸,移動、縮放或關(guān)閉窗口。多個(gè)應(yīng)用的窗口可以平鋪或疊放,共享屏幕資源。
窗口管理器(WindowManager)是管理窗口的一個(gè)X工具軟件,主要負(fù)責(zé)窗口的打開、關(guān)閉、移動、縮放、切換等操作。窗口管理器為每個(gè)應(yīng)用的界面加上一個(gè)窗口框架,通過這個(gè)框架來操控窗口。當(dāng)鼠標(biāo)點(diǎn)擊框架上的控制按鈕時(shí),窗口管理器會收到輸入事件并進(jìn)行相應(yīng)的處理。比如,點(diǎn)擊最小化的按鈕時(shí)就會把這個(gè)窗口隱藏起來,顯示它的最小化圖標(biāo);點(diǎn)擊關(guān)閉窗口的按鈕時(shí)就會通知那個(gè)應(yīng)用程序退出。圖8-5所示是啟動了窗口管理器后的界面。顯示的還是那4個(gè)X應(yīng)用,但它們的界面已經(jīng)是窗口化的了。圖8-5有窗口管理器的圖形界面
圖8-6是窗口化圖形界面的組成和結(jié)構(gòu)關(guān)系。圖8-6窗口化圖形界面的結(jié)構(gòu)
3. 桌面環(huán)境
桌面(desktop)是一個(gè)集成化的圖形界面環(huán)境,通過在屏幕上放置的圖標(biāo)、窗口、菜單、面板等圖形元素來模仿人們的日常辦公桌面。桌面的設(shè)計(jì)充分考慮了易用性。用戶不需學(xué)習(xí)任何命令,只需用鼠標(biāo)點(diǎn)擊圖標(biāo)即可完成啟動應(yīng)用、配置系統(tǒng)、管理文件等操作。圖8-7所示是一個(gè)輕量級的桌面。圖8-7?Xfce桌面環(huán)境
4. 顯示管理器
桌面應(yīng)在用戶登錄后啟動,用戶退出后關(guān)閉。登錄和啟動桌面的操作可以在字符終端完成,但對用戶來說卻不方便。對此,Linux系統(tǒng)的解決方案是建立一個(gè)圖形終端,使用戶可以直接在圖形界面中登錄,登錄后就自動進(jìn)入桌面系統(tǒng)。實(shí)現(xiàn)這個(gè)功能的軟件稱為顯示管理器(displaymanager)。
顯示管理器是一個(gè)管理X顯示器的軟件,它的作用是為用戶提供一個(gè)完整的X會話周期,也就是在X系統(tǒng)中完成從登錄進(jìn)入桌面到退出桌面的全過程。顯示管理器在系統(tǒng)啟動時(shí)即開始運(yùn)行,它首先在一個(gè)終端上啟動X服務(wù)器,使其成為一個(gè)X顯示器,然后在該顯示器上啟動登錄管理應(yīng)用,顯示出一個(gè)圖形化的登錄界面。用戶在此界面登錄后,顯示管理器按設(shè)定啟動一個(gè)桌面系統(tǒng),供用戶使用。當(dāng)用戶退出桌面后,桌面系統(tǒng)隨即關(guān)閉。本次X會話至此結(jié)束,系統(tǒng)回到登錄界面,等待用戶下次登錄。
常用的顯示管理器有xdm、kdm和gdm。kdm和gdm分別是為KDE和GNOME桌面而設(shè)計(jì)的顯示管理器;xdm則是用于啟動設(shè)定的圖形界面,常用于遠(yuǎn)程X終端的顯示管理。除了驗(yàn)證用戶口令外,登錄界面還可以提供更多功能,比如選擇要啟動的桌面,以及關(guān)機(jī)、重啟等。圖8-8所示是gdm的登錄界面。圖8-8?gdm的登錄界面
8.3.4 X系統(tǒng)的啟動與停止
1. 自動啟動
自動啟動是指在系統(tǒng)啟動時(shí)自動地啟動圖形界面。是否自動啟動圖形界面取決于系統(tǒng)預(yù)設(shè)的默認(rèn)運(yùn)行級別(有關(guān)系統(tǒng)運(yùn)行級別的介紹見10.2.2節(jié))。如果默認(rèn)運(yùn)行級別設(shè)置為圖形化(graphical),系統(tǒng)啟動時(shí)會自動啟動顯示管理器的圖形登錄界面,登錄后自動啟動一個(gè)桌面;如果默認(rèn)運(yùn)行級別是多用戶(multi-user),系統(tǒng)就不會啟動任何圖形界面。個(gè)人桌面系統(tǒng)通常運(yùn)行在圖形化級別,服務(wù)器系統(tǒng)則運(yùn)行在多用戶級別。
另外,從多用戶級別切換到圖形化級別時(shí),圖形界面將自動啟動。反之,從圖形化級別切換到多用戶級別時(shí),圖形界面將自動關(guān)閉。切換命令如下:
2. 手動啟動
手動啟動即用命令的方式啟動X系統(tǒng)。在有些情況下可能需要這樣做,比如,系統(tǒng)未啟動圖形界面,或需要啟動多個(gè)圖形界面,或需要訪問某個(gè)遠(yuǎn)程X應(yīng)用。手動啟動方式比較靈活,但需要對X系統(tǒng)有較深入的了解。
手動啟動X系統(tǒng)的方法是:登錄進(jìn)入一個(gè)字符終端,然后執(zhí)行X系統(tǒng)的啟動命令。啟動操作包括啟動X服務(wù)器和啟動X客戶程序兩部分,既可以分別啟動(X服務(wù)器要先于X客戶程序啟動),也可以用一個(gè)命令合并啟動。
例8.1設(shè)系統(tǒng)中沒有圖形界面,用如下命令在0號顯示器上啟動一個(gè)圖形界面。
3)啟動X系統(tǒng)
用xinit命令可以簡化手工啟動的過程。xinit命令用于控制X系統(tǒng)的啟動過程,它按命令行參數(shù)或配置文件的設(shè)定,啟動指定的X服務(wù)器和X客戶程序。xinit命令的格式是:
xinit[X客戶啟動命令][--X服務(wù)器啟動命令]
例8.2用xinit命令啟動指定的X應(yīng)用的圖形界面。
例8.3用xinit啟動預(yù)設(shè)的圖形界面。用xinit啟動預(yù)設(shè)的圖形界面。
4)啟動桌面系統(tǒng)
用xinit命令啟動預(yù)設(shè)界面時(shí)需要先設(shè)置好配置文件。如果界面較復(fù)雜,配置的難度就會很高。更方便的做法是使用startx命令。startx是xinit的前端,它負(fù)責(zé)讀取和處理一系列配置文件,為xinit設(shè)置執(zhí)行參數(shù),然后調(diào)用xinit命令啟動界面。startx常用于配置較復(fù)雜的圖形界面,如系統(tǒng)提供的桌面或用戶自定義的桌面等。
例8.4用startx啟動桌面。
8.3.5 新一代圖形系統(tǒng)
1. DRI顯示技術(shù)
計(jì)算機(jī)在繪制一個(gè)圖形時(shí),首先要生成圖形的模型數(shù)據(jù),也就是描述圖形的幾何結(jié)構(gòu)以及有關(guān)著色、紋理、光影等效果的數(shù)據(jù),然后對這些數(shù)據(jù)進(jìn)行計(jì)算整合,形成像素信息,寫入顯卡緩存,再刷新到屏幕上。其中將數(shù)據(jù)整合為圖像的過程稱為“渲染”(render)。在X系統(tǒng)中,X客戶只負(fù)責(zé)生成圖形的模型數(shù)據(jù),而X服務(wù)器則承擔(dān)了所有的渲染工作。這種通過X服務(wù)器的渲染方式叫作間接渲染(indirectrender)。
2. Wayland顯示架構(gòu)
2012年,一個(gè)旨在取代X的全新的圖形顯示架構(gòu)Wayland發(fā)布了。準(zhǔn)確地說,Wayland是一個(gè)協(xié)議,它定義了圖形顯示系統(tǒng)的構(gòu)成結(jié)構(gòu)以及它們之間的交互方式。在這一點(diǎn)上它與X是一樣的。與X的不同之處在于,Wayland取消了傳統(tǒng)的“X服務(wù)器/X客戶”的模式,而代之以“顯示服務(wù)器/客戶”模式。Wayland圖形顯示系統(tǒng)的架構(gòu)如圖8-9所示。圖8-9?Wayland圖形顯示系統(tǒng)架構(gòu)
支持客戶程序直接渲染的架構(gòu)包含有幾個(gè)構(gòu)件:
(1)開放式圖形庫(OpenGraphicsLibrary,OpenGL)。OpenGL是開放式的直接渲染函數(shù)庫,Linux采用的是OpenGLES(OpenGLforEmbeddedSystem)版本。應(yīng)用程序通過調(diào)用OpenGLES就可以方便地進(jìn)行各種渲染操作。
(2)本地平臺圖形接口(Embedded-SystemGraphicsLibrary,EGL)。OpenGLES是與平臺無關(guān)的,它無法與本地繪圖系統(tǒng)直接交互。EGL的作用就是建立兩者之間的連接。EGL是管理本地圖形資源的函數(shù)庫,它的主要功能是設(shè)置繪圖使用的緩存,此外還負(fù)責(zé)管理繪制參數(shù)和設(shè)備信息,同步繪制操作。應(yīng)用程序在使用OpenGLES繪圖前,需要先調(diào)用EGL搭建一個(gè)繪圖環(huán)境。如果將OpenGLES比作畫筆的話,EGL提供的就是畫布。
(3)直接渲染模塊(DirectRenderingModule,DRM)。DRM是DRI框架中的核心模塊,它的功能是控制顯卡硬件完成實(shí)際的渲染操作,也就是由畫筆驅(qū)動在畫布上繪圖。DRM是內(nèi)核模塊,需要通過I/O系統(tǒng)調(diào)用ioctl()來驅(qū)動。為方便應(yīng)用編程,DRI提供了一個(gè)用戶空間的應(yīng)用接口DRIdriver。DRIdriver是一個(gè)封裝了DRM操作的函數(shù)庫,應(yīng)用程序(也就是OpenGLES代碼)只需調(diào)用DRIdriver的函數(shù)即可驅(qū)動DRM完成渲染操作。
(4)內(nèi)核模式設(shè)置(KernelModeSetting,KMS)。KMS是用于控制顯示屏的內(nèi)核模塊,其功能是設(shè)置顯示參數(shù)和刷新顯示屏。當(dāng)需要輸出圖像時(shí),顯示服務(wù)器向KMS發(fā)出ioctl()系統(tǒng)調(diào)用,讓它執(zhí)行刷屏(flip)操作,將顯存中的圖像發(fā)送到顯示屏上。
總的來說,Wayland是一個(gè)精簡、高效的圖形顯示架構(gòu)。它去除了X架構(gòu)中的多余設(shè)計(jì),充分利用了現(xiàn)代圖形的顯示技術(shù),將Linux的桌面環(huán)境提升至一個(gè)新的境界。從目前的發(fā)展趨勢看,XWindow還會在一個(gè)相當(dāng)長的時(shí)間內(nèi)得到支持,而Wayland則會逐步發(fā)展完善,最終也許能夠取代X的地位,成為Linux桌面系統(tǒng)的主流圖形顯示架構(gòu)。
8.3.6 Linux桌面系統(tǒng)簡介
目前Linux系統(tǒng)最流行的桌面系統(tǒng)是GNOME(GNUNetworkObjectModelEnvironment)和KDE(KoolDesktopEnvironment)。KDE桌面精致華麗,集成了豐富的應(yīng)用程序和桌面工具,操作風(fēng)格也與Windows類似,因而擁有眾多個(gè)人用戶。GNOME桌面簡潔、精細(xì),可定制性好,而且是完全自由的軟件,因而獲得了更多的商業(yè)和社區(qū)開發(fā)者支持。目前,這兩大平臺已經(jīng)實(shí)現(xiàn)了高度的互操作性,兩者在功能、性能和外觀上不相上下,均已達(dá)到足夠完美的境地。除了這兩個(gè)重量級桌面之外,還有一些輕量級的桌面也很流行,如Xfce、LXDE等。
1. GNOME概況
1999年,墨西哥程序員MigueldeIcaza率領(lǐng)眾多開發(fā)者共同開發(fā)出了桌面系統(tǒng)GNOME1.0。GNOME是GNU計(jì)劃的一部分,它基于開源的GTK+圖形軟件工具包開發(fā),遵照GPL許可發(fā)行,是完全自由的軟件。正因?yàn)槿绱?,GNOME得到了RedHat的大力支持,成為RedHat、Fedora、Debian、Ubuntu、SUSE等許多Linux發(fā)行版的默認(rèn)安裝桌面。GNOME桌面以風(fēng)格簡潔而著稱,十分注重穩(wěn)定、易操作和可定制性。
2. GNOME桌面系統(tǒng)的構(gòu)成
GNOME桌面系統(tǒng)由桌面控制器GNOMEShell、窗口管理器、文件管理器和可選的桌面工具及應(yīng)用軟件等構(gòu)成。
1)GNOMEShell
GNOMEShell是GNOME的核心,它決定了桌面的風(fēng)格和操作特性,提供了桌面的各項(xiàng)基本功能,如切換窗口、加載應(yīng)用程序等。
2)窗口管理器
新版GNOME3默認(rèn)使用Wayland版的Mutter窗口管理器,它在GNOME桌面中的角色就是WaylandCompositor。
3)文件管理器
GNOME的圖形化文件管理器是Nautilus,其作用相當(dāng)于Windows系統(tǒng)的Explorer。Nautilus不僅具有所有文件管理的功能,它還將文件類型與應(yīng)用關(guān)聯(lián)起來,從而實(shí)現(xiàn)圖片瀏覽、音頻/視頻播放、應(yīng)用啟動、網(wǎng)絡(luò)訪問等功能。
4)桌面小工具
GNOME包含了一組桌面專屬的小應(yīng)用程序,如日歷、音量控制工具等。
5)GNOME應(yīng)用軟件
GNOME集成了一套功能完善、運(yùn)行穩(wěn)定的應(yīng)用程序。常用的GNOME應(yīng)用軟件有:
LibreOffice:辦公軟件,兼容WindowsOffice文件格式。
Evolution:電子郵件客戶軟件,具備靈活的日歷(調(diào)度器)功能。
Firefox:Web瀏覽器,各Linux發(fā)行版默認(rèn)已安裝。
Gimp:圖像編輯器,被譽(yù)為GNU的“PhotoShop”。
Empathy:即時(shí)通信軟件,支持多種協(xié)議,如MSN、Messenger、Skype、ICQ等。
Totem:視頻播放器,支持網(wǎng)絡(luò)視頻播放。
Rhythmbox:音頻播放器。
3. GNOME桌面的外觀與使用
1)桌面外觀
GNOME桌面外觀的設(shè)計(jì)采用了極簡設(shè)計(jì)思想,將桌面環(huán)境簡化至最低限度。
2)桌面的設(shè)施與布局
GNOME桌面以壁紙為背景,桌面頂部設(shè)有一個(gè)頂欄,頂欄下面的全部區(qū)域都是用戶可用的桌面區(qū)域,用于放置應(yīng)用程序的窗口、圖標(biāo)和其他桌面設(shè)施。
與傳統(tǒng)桌面的最明顯的區(qū)別在于,GNOME并不是將窗口和圖標(biāo)等都放置在桌面上,而是把它們分別表現(xiàn)在不同的視圖中。當(dāng)用戶與應(yīng)用程序打交道時(shí),比如編輯文檔、瀏覽網(wǎng)頁等,桌面上只有打開的應(yīng)用程序的窗口,沒有其他雜物,如圖8-10所示。圖8-10?GNOME桌面視圖
當(dāng)用戶需要與桌面系統(tǒng)打交道時(shí),比如啟動一個(gè)應(yīng)用,查找某個(gè)窗口等,只需將桌面切換到“活動概覽”視圖。在活動概覽視圖中,所有的窗口和應(yīng)用圖標(biāo)都會排列出來,供用戶選擇操作,如圖8-11和圖8-12所示。活動概覽的引入使得桌面更加整潔,整體布局更加有序。1圖8-11?GNOME活動概覽視圖——?窗口概覽圖8-12?GNOME活動概覽視圖——?應(yīng)用程序概覽
(3)?工作區(qū)(workspace):工作區(qū)對桌面上的應(yīng)用窗口進(jìn)行分組劃分。
(4) 活動概覽(activityoverview):當(dāng)需要與桌面系統(tǒng)交互時(shí),點(diǎn)擊頂欄左邊的“活動”按鈕即可將桌面切換到活動概覽視圖。
活動概覽包括如下幾個(gè)功能區(qū):
Dash欄:位于視圖的左側(cè),用于存放最常用的和正在運(yùn)行的應(yīng)用程序的圖標(biāo)。
搜索欄:位于視圖上方,用于搜索窗口或應(yīng)用。
概覽區(qū):位于視圖的中間區(qū)域,用于顯示概覽的內(nèi)容。
3)桌面操控
用戶登錄到桌面時(shí),首先看到的是一個(gè)空的桌面視圖。啟動應(yīng)用后,桌面上出現(xiàn)應(yīng)用的窗口。利用窗口中的設(shè)施可以對其進(jìn)行各種操作,如移動、調(diào)整大小、平鋪、還原和關(guān)閉等。需要時(shí),可以通過切換窗口和工作區(qū)來變換當(dāng)前工作窗口和桌面。在啟動應(yīng)用和切換窗口時(shí)可以借助搜索工具快速地定位目標(biāo)。
以下是幾個(gè)操作要點(diǎn):
啟動應(yīng)用:進(jìn)入活動概覽,在Dash欄或應(yīng)用程序概覽中點(diǎn)擊應(yīng)用的圖標(biāo)。
最大化/還原窗口:用鼠標(biāo)拖動窗口碰觸桌面上沿將其最大化,拖離上沿則還原。
切換窗口/工作區(qū):按Alt+Tab鍵,或進(jìn)入窗口概覽點(diǎn)擊選中的窗口/工作區(qū)。
查找窗口或應(yīng)用:進(jìn)入活動概覽界面,在搜索欄中輸入要查找的名字。
8.4 Linux系統(tǒng)調(diào)用接口
系統(tǒng)調(diào)用接口是操作系統(tǒng)的程序接口。從某種意義上來說,系統(tǒng)調(diào)用定義了操作系統(tǒng)的原始功能,操作系統(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ìn)程,包括Shell、vi、XWindow等,它們都只能在用戶態(tài)下運(yùn)行。這種限制保護(hù)了系統(tǒng)不會受到來自用戶進(jìn)程的有意或無意的破壞。
使用系統(tǒng)調(diào)用來訪問系統(tǒng)資源的主要目的是保護(hù)系統(tǒng)資源和內(nèi)核的安全,提高資源利用率。系統(tǒng)調(diào)用的另一個(gè)作用是方便用戶使用,使用戶不必了解操作系統(tǒng)的內(nèi)核運(yùn)作和有關(guān)硬件的細(xì)節(jié)問題。這就像讀者在借書時(shí)只需提供一個(gè)索書號,而不必了解目前書庫的布局、圖書的具體擺放位置以及取書的操作流程一樣。
8.4.2 系統(tǒng)調(diào)用接口的組成
Linux的系統(tǒng)調(diào)用接口的組成和結(jié)構(gòu)如圖8-13所示。圖8-13?Linux系統(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),具有訪問系統(tǒng)資源的特權(quán)。
2. 系統(tǒng)調(diào)用處理程序
系統(tǒng)調(diào)用處理程序是系統(tǒng)調(diào)用陷入內(nèi)核的入口程序,它負(fù)責(zé)將系統(tǒng)調(diào)用派發(fā)到它們各自的服務(wù)例程。進(jìn)程在要執(zhí)行系統(tǒng)調(diào)用時(shí),先把系統(tǒng)調(diào)用號和調(diào)用參數(shù)存入CPU寄存器中,再執(zhí)行一個(gè)陷入指令就會進(jìn)入到系統(tǒng)調(diào)用處理程序。這個(gè)程序會根據(jù)系統(tǒng)調(diào)用號在系統(tǒng)調(diào)用表中查找相應(yīng)的服務(wù)例程,然后調(diào)用它執(zhí)行。服務(wù)例程執(zhí)行結(jié)束后都會返回一個(gè)返回值,0表示成功,負(fù)數(shù)表示出錯(cuò)。系統(tǒng)調(diào)用處理程序負(fù)責(zé)將返回值存入CPU寄存器,然后執(zhí)行一個(gè)返回指令,返回到用戶進(jìn)程。
3. 系統(tǒng)調(diào)用封裝函數(shù)
編寫應(yīng)用程序時(shí),直接用陷入指令來執(zhí)行系統(tǒng)調(diào)用的難度較大。所以,Linux隨內(nèi)核一起還提供了一套系統(tǒng)調(diào)用的封裝函數(shù)(wrapper)。系統(tǒng)調(diào)用封裝函數(shù)是用C庫函數(shù)的形式封裝的系統(tǒng)調(diào)用,其作用是將內(nèi)核的系統(tǒng)調(diào)用服務(wù)例程發(fā)布到用戶空間,供應(yīng)用程序直接調(diào)用。應(yīng)用程序可以像使用普通C函數(shù)一樣在用戶態(tài)下調(diào)用這些封裝函數(shù),由封裝函數(shù)來完成系統(tǒng)調(diào)用的陷入及返回過程的處置,這將大大方便應(yīng)用程序的編程。
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)用的更高一級的引用和封裝,它與系統(tǒng)調(diào)用不是一對一的關(guān)系,可能會引用多個(gè)系統(tǒng)調(diào)用,或進(jìn)行一些額外的處理步驟。比如printf()函數(shù)引用了write()系統(tǒng)調(diào)用,同時(shí)還提供了格式化的功能,使用起來更加方便。
C標(biāo)準(zhǔn)函數(shù)庫以及系統(tǒng)調(diào)用封裝函數(shù)庫就構(gòu)成了Linux系統(tǒng)的應(yīng)用編程接口(ApplicationProgrammingInterface,API)。從圖8-13中可以看出,應(yīng)用程序可以用3種方式使用系統(tǒng)調(diào)用:一是調(diào)用C標(biāo)準(zhǔn)函數(shù),二是調(diào)用系統(tǒng)調(diào)用,三是用陷入指令。第一種方式最簡單也最常用,但如果沒有合適的C函數(shù)可用,或?qū)π阅苡刑厥庖螅瑒t需要使用第二種方式。第三種方式需要對系統(tǒng)調(diào)用的接口細(xì)節(jié)有深入了解,因此僅在特殊情況下,比如做某些特定底層軟件開發(fā)時(shí)才會用到。
8.4.3 系統(tǒng)調(diào)用的分類
Linux的系統(tǒng)調(diào)用繼承自UNIX,這些系統(tǒng)調(diào)用都是千錘百煉的力作,簡潔而高效。不過,Linux也做了許多改進(jìn)。它省去了UNIX系統(tǒng)中一些冗余的系統(tǒng)調(diào)用,僅保留了最基本和最有用的部分。目前的Linux內(nèi)核提供了300多個(gè)系統(tǒng)調(diào)用,它們的具體名稱與編號定義在/u
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 玻璃卸車施工方案
- 廣場水池石材施工方案
- 磚頭固化地坪施工方案
- 江門港碼頭施工方案
- 建筑地漏防滲施工方案
- 柴油電噴維修施工方案
- 二零二五年度冷凍食品冷鏈物流保險(xiǎn)合同
- 農(nóng)村水電資源開發(fā)與農(nóng)村生態(tài)旅游合作協(xié)議(2025年度)
- 2025年度高新技術(shù)產(chǎn)業(yè)園區(qū)場地?zé)o償使用協(xié)議
- 二零二五年度勞務(wù)安全責(zé)任協(xié)議書(含安全設(shè)備更新)
- GB/T 7631.5-1989潤滑劑和有關(guān)產(chǎn)品(L類)的分類第5部分:M組(金屬加工)
- GB/T 41326-2022六氟丁二烯
- 注塑模具分類及結(jié)構(gòu)組成
- GB/T 14002-2008勞動定員定額術(shù)語
- 盆腔炎性疾病后遺癥-病因病機(jī)-(中醫(yī))
- 沁園春雪拼音版
- 傳染病防治法培訓(xùn)講義課件
- 法律方法階梯實(shí)用版課件
- KET詞匯表(英文中文完整版)
- 實(shí)驗(yàn) 探究彈簧彈力與形變量的關(guān)系2022-2023學(xué)年高一物理(人教版2019必修第一冊)
- 《三位數(shù)的加減法》單元分析
評論
0/150
提交評論