操作系統(tǒng)原理及應(yīng)用課件第8章 Linux系統(tǒng)簡(jiǎn)介_(kāi)第1頁(yè)
操作系統(tǒng)原理及應(yīng)用課件第8章 Linux系統(tǒng)簡(jiǎn)介_(kāi)第2頁(yè)
操作系統(tǒng)原理及應(yīng)用課件第8章 Linux系統(tǒng)簡(jiǎn)介_(kāi)第3頁(yè)
操作系統(tǒng)原理及應(yīng)用課件第8章 Linux系統(tǒng)簡(jiǎn)介_(kāi)第4頁(yè)
操作系統(tǒng)原理及應(yīng)用課件第8章 Linux系統(tǒng)簡(jiǎn)介_(kāi)第5頁(yè)
已閱讀5頁(yè),還剩129頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第八章Linux系統(tǒng)簡(jiǎn)介前面我們介紹了UNIX系統(tǒng)和Windows2000,這兩種操作系統(tǒng)在市場(chǎng)上具有強(qiáng)大的競(jìng)爭(zhēng)力。但是最近幾年,操作系統(tǒng)市場(chǎng)上出現(xiàn)了一個(gè)新生力量,成為各操作系統(tǒng)的強(qiáng)勁對(duì)手,它就是Linux。它與傳統(tǒng)的操作系統(tǒng)有著完全不同的開(kāi)發(fā)模式和發(fā)展歷史,并且,隨著網(wǎng)絡(luò)的不斷普及,Linux也必將發(fā)揮出越來(lái)越大的作用。本章我們就來(lái)認(rèn)識(shí)一下Linux系統(tǒng)。1.Linux概述

2.Linux文件系統(tǒng)

3.Linux內(nèi)存管理

4.Linux中的進(jìn)程管理

5.Linux中的設(shè)備管理

6.Linux的shell簡(jiǎn)介

7.本章小結(jié)從MS-DOS到Windows2000,操作系統(tǒng)的發(fā)展經(jīng)過(guò)了一個(gè)漫長(zhǎng)的過(guò)程,在這個(gè)發(fā)展過(guò)程中,UNIX扮演著一個(gè)重要的角色。從70年代中期發(fā)展起來(lái)的UNIX操作系統(tǒng),一直是世界上普遍使用的操作系統(tǒng)之一。然而由于UNIX版本的價(jià)格昂貴且操作復(fù)雜,普通用戶難以接受和使用。Linux的出現(xiàn)對(duì)那些個(gè)人用戶來(lái)說(shuō),無(wú)疑是一個(gè)福音,因?yàn)樗且粋€(gè)完全免費(fèi)的UNIX操作系統(tǒng)。8.1.1Linux的發(fā)展Linux最早是在1991年由芬蘭赫爾辛基大學(xué)的一位年輕人LinusBenedictTorralds開(kāi)發(fā)的一個(gè)UNIX免費(fèi)版本。剛開(kāi)始,Linux只是Linus的個(gè)人愛(ài)好產(chǎn)物,其靈感來(lái)自于Minix(一種小型的用于操作系統(tǒng)教學(xué)的UNIX系統(tǒng))。Linus首先在赫爾辛基大學(xué)的FTP服務(wù)器放置了這個(gè)操作系統(tǒng),讓人們下載Linux操作系統(tǒng)的第一個(gè)公開(kāi)版本。到1992年1月份,只有100個(gè)左右的用戶使用Linux,但網(wǎng)絡(luò)上的任何人在任何地方都可以得到基本的Linux文件。此后,網(wǎng)上的使用者們發(fā)送來(lái)許多修改代碼問(wèn)題的補(bǔ)丁程序?qū)inux不斷完善。1994年3月,正式的Linux1.0出現(xiàn),此時(shí),它的用戶數(shù)已經(jīng)非常龐大,而且也建立了Linux核心開(kāi)發(fā)隊(duì)伍。隨著開(kāi)發(fā)隊(duì)伍的增長(zhǎng),Linus開(kāi)始有計(jì)劃地選擇并依賴一些用戶,Linus從他們那里得到大量的補(bǔ)丁程序并且相信這些補(bǔ)丁的功能,結(jié)果這些補(bǔ)丁程序成為內(nèi)核中較大的部分。正是這種自由的氛圍,使得Linux快速地成長(zhǎng)起來(lái),成為一個(gè)具有生命力的可供選擇的桌面計(jì)算機(jī)的UNIX系統(tǒng)。Linux是繼SpaceWar、Ewacs之后風(fēng)靡全球的最成功的免費(fèi)軟件之一,它已迅速發(fā)展成為商業(yè)、教育及個(gè)人產(chǎn)品的操作系統(tǒng)?,F(xiàn)在,Linux正在進(jìn)入一個(gè)獨(dú)立的發(fā)展階段,而不是當(dāng)初那樣跟在UNIX的后面亦步亦趨。因?yàn)長(zhǎng)inux是完全公開(kāi)的,每個(gè)人都可以得到它的源代碼,而且Linux的許多應(yīng)用程序也可以免費(fèi)從Internet上獲得,這就使得越來(lái)越多的愛(ài)好者加入了Linux的開(kāi)發(fā)行列,施展著各自的才華。在中國(guó),隨著網(wǎng)絡(luò)的普及,Linux愛(ài)好者的隊(duì)伍也在不斷壯大,相信不久的將來(lái),Linux這種免費(fèi)而性能優(yōu)異的操作系統(tǒng)必將發(fā)揮越來(lái)越大的作用。

Linux與UNIX一樣是一個(gè)多用戶、多任務(wù)的操作系統(tǒng)。它除了具備UNIX的優(yōu)點(diǎn)外,還具有許多自身的特點(diǎn)。下面我們對(duì)Linux的特性做一下簡(jiǎn)單的介紹。8.1.2Linux的特性Linux是一個(gè)多任務(wù)系統(tǒng),它支持的是搶占調(diào)度多任務(wù),即每個(gè)程序都一直運(yùn)行到操作系統(tǒng)搶占CPU讓其他程序運(yùn)行為止。Linux的多任務(wù)性可以大大地方便用戶,你可以一邊欣賞音樂(lè),一邊編輯文件,這樣用戶可以充分地利用計(jì)算機(jī)資源。1.多任務(wù)多用戶是指多個(gè)用戶可以在同一時(shí)間內(nèi)使用同一臺(tái)機(jī)器。這是UNIX的重要特性,也是Linux的一個(gè)重要特性。在實(shí)際應(yīng)用中,尤其是在大的公司或者大學(xué),多個(gè)用戶同時(shí)訪問(wèn)同一資源,可以使某些昂貴的資源得到更充分的利用。例如一個(gè)普通的BBS(電子公告牌)站使用了操作系統(tǒng)為L(zhǎng)inux的普通微機(jī),同時(shí)上線人數(shù)可達(dá)200人以上。2.多用戶Linux是一個(gè)應(yīng)用軟件非常豐富的操作系統(tǒng)。下面是一些常用的應(yīng)用軟件?!?/p>

基本命令ls,tr,sed,awk等?!?/p>

編輯器vi,ez,pico,jed,jove,GNUEmacs等等。3.豐富的軟件·

編程語(yǔ)言和環(huán)境C,C++,ObjectiveC,Java,Pascal,F(xiàn)ortran,Lisp,Tcl/tk,Perl等等。·

圖形用戶界面X11R6.3(Xfree863.x),lesstif,qt,fvwm,openwin,KDE等等。還有許多其他的應(yīng)用程序,這里不再一一介紹。Linux可以支持多種類型的文件系統(tǒng),其中主要有:(1)Minix。這是Linux的第一個(gè)文件系統(tǒng)。Minix的限制較死板、嚴(yán)格,如文件名不得長(zhǎng)于14個(gè)字符,而且只支持64M的磁盤空間。4.多文件系統(tǒng)(2)EXT。擴(kuò)展文件系統(tǒng)(或稱EXT)是專門為L(zhǎng)inux設(shè)計(jì)的文件系統(tǒng),這個(gè)系統(tǒng)于1992年4月首次設(shè)計(jì)出來(lái),克服了Minix的不少缺陷,最大支持2GB的磁盤空間,并允許使用長(zhǎng)達(dá)255個(gè)字符的文件名,但這個(gè)系統(tǒng)在功能上仍有欠缺。因此,在1993年2月加入了第二個(gè)擴(kuò)展文件系統(tǒng),或稱為EXT2。(3)EXT2。EXT2幾乎已成為L(zhǎng)inux的標(biāo)準(zhǔn)文件系統(tǒng)。它可以移植到其它系統(tǒng)上,既可以用于固定盤,也可以用于可拆裝介質(zhì)。此系統(tǒng)允許盤分區(qū)的容量達(dá)到4T,文件名長(zhǎng)達(dá)255個(gè)字符。(4)SystemV。這是UNIX系統(tǒng)早期支持的文件系統(tǒng),現(xiàn)在仍可以在Linux系統(tǒng)中使用,這是因?yàn)橐c已有的systemV系統(tǒng)兼容。它也有minix文件系統(tǒng)同樣的限制。(5)NFS。這是由SUN公司開(kāi)發(fā)的網(wǎng)絡(luò)文件系統(tǒng),它允許將一臺(tái)機(jī)器上的文件系統(tǒng)裝配到網(wǎng)上另一臺(tái)計(jì)算機(jī)的目錄結(jié)構(gòu)中。盡管有少量的速度損失,網(wǎng)絡(luò)連接是透明的,并允許整個(gè)網(wǎng)絡(luò)共享磁盤分區(qū)和文件。(6)vfat。這是微軟的Windows95和WindowsNT使用的擴(kuò)展的DOS文件系統(tǒng)。它在MSDOS文件系統(tǒng)下增加了對(duì)長(zhǎng)文件名的支持。(7)umsdos。這是Linux使用的擴(kuò)展的DOS文件系統(tǒng)。它在保持了與DOS兼容的前提下,又增加了對(duì)長(zhǎng)文件名,UID/GID,POSIX文件保護(hù)和特殊文件的支持。(8)hpfs。是OS/2使用的高性能文件系統(tǒng)。由于缺乏應(yīng)有的文檔,在Linux下這種文件系統(tǒng)是只讀的。(9)proc。這是建立在Linux內(nèi)核中的特殊文件系統(tǒng)類型,是一種偽文件系統(tǒng),它被用來(lái)作為連接內(nèi)核數(shù)據(jù)結(jié)構(gòu)的界面。它允許對(duì)系統(tǒng)的不同部分和它的進(jìn)程進(jìn)行訪問(wèn)。查看/proc目錄時(shí),我們會(huì)發(fā)現(xiàn)其中有一些目錄和文件隨著時(shí)間在變化,

內(nèi)核通過(guò)/proc文件系統(tǒng)提供系統(tǒng)統(tǒng)計(jì)數(shù)據(jù)和進(jìn)程信息。當(dāng)用戶訪問(wèn)/proc中的文件時(shí),內(nèi)核可以識(shí)別并產(chǎn)生滿足用戶讀請(qǐng)求的某些數(shù)據(jù)。這些目錄和文件都不在磁盤上,它們是由內(nèi)核動(dòng)態(tài)地釋放出來(lái)的,以方便ps和top等程序訪問(wèn)這些數(shù)據(jù)。(10)Msdos。Dos、Windows和某些OS/2計(jì)算機(jī)使用的文件系統(tǒng)。標(biāo)準(zhǔn)的DOS磁盤和分區(qū)可以裝配到Linux系統(tǒng)中,并可以對(duì)它們進(jìn)行訪問(wèn)。系統(tǒng)力圖使它的外在表現(xiàn)類似UNIX,但還受到一定限制。如文件格式和名稱等。Linux支持的文件系統(tǒng)還有好多,這里不再一一介紹了。在這些文件系統(tǒng)中,Linux使用最普遍的文件系統(tǒng)是ext2,它可以支持到4T的硬盤,文件名最長(zhǎng)可達(dá)255個(gè)字符。Linux支持的硬件相當(dāng)廣泛,只要不是太冷僻的設(shè)備,在Linux中都可以找到相應(yīng)的驅(qū)動(dòng)程序。除了上述特性之外,Linux還有許多其它特性,如:對(duì)應(yīng)用程序使用的內(nèi)存進(jìn)行保護(hù),共享內(nèi)存頁(yè)面,使用分頁(yè)技術(shù)的虛擬內(nèi)存,優(yōu)秀的磁盤緩沖調(diào)度功能,動(dòng)態(tài)鏈接共享庫(kù),支持偽終端設(shè)備,支持多個(gè)虛擬控制臺(tái),具有強(qiáng)大的網(wǎng)絡(luò)和通信功能,良好的軟件移植性等。

5.支持的硬件多backLinux的文件系統(tǒng)設(shè)計(jì)思想與UNIX系統(tǒng)的設(shè)計(jì)思想一樣,完整、一致、統(tǒng)一,具有很大的靈活性。Linux的一個(gè)非常重要的特點(diǎn)是它采用了VFS(VirtualFilesystemSwitch)機(jī)制,這使得Linux支持的文件系統(tǒng)類型非常多。8.2.1概述Linux采取的是單一的目錄層次結(jié)構(gòu)。Linux系統(tǒng)中,使用fdisk命令將物理磁盤劃分為許多邏輯分區(qū),每個(gè)分區(qū)都可以是一個(gè)文件系統(tǒng)。每個(gè)文件系統(tǒng)有自己的頂層目錄和下面的目錄層次結(jié)構(gòu)。系統(tǒng)將這些單獨(dú)的文件系統(tǒng)組成一個(gè)系統(tǒng)的總的目錄層次結(jié)構(gòu),也就是說(shuō),將一個(gè)文件系統(tǒng)的頂層目錄裝配到另一個(gè)文件系統(tǒng)的子目錄上,形成一個(gè)樹狀的文件系統(tǒng)結(jié)構(gòu)。該目錄樹的頂部是一個(gè)單獨(dú)的根目錄,用“/”表示。根目錄是一些標(biāo)準(zhǔn)的子目錄和文件。在圖8-2-1的Linux目錄樹中,文件系統(tǒng)usr和home掛裝到根目錄下,形成統(tǒng)一的樹形目錄結(jié)構(gòu)。binlibetcdevproctmphomesxjlzwxyfhda1userx386bin圖

8-2-1Linux的目錄樹

這樣,在用戶看來(lái),Linux系統(tǒng)的文件空間是由基于樹狀結(jié)構(gòu)的文件和目錄組成的,它的根在頂部,就是頂層的根目錄“/”,其它的各種目錄和文件都作為根目錄向下的分支。雖然每種文件系統(tǒng)存儲(chǔ)數(shù)據(jù)的基本格式都是不一樣的,但在Linux中,系統(tǒng)會(huì)把任何被訪問(wèn)文件的數(shù)據(jù)整理成一個(gè)在目錄樹下的文件。Linux的文件分為常規(guī)文件和特殊文件兩類,常規(guī)文件又分為文本文件、數(shù)據(jù)文件、二進(jìn)制可執(zhí)行文件等。在/dev目錄下的設(shè)備文件叫做特殊文件,利用這些文件用戶可以像訪問(wèn)普通文件一樣方便地訪問(wèn)系統(tǒng)資源和設(shè)備。

例如,讀取/dev/mouse文件就是從鼠標(biāo)器讀取輸入信息。Linux提供的設(shè)備文件,為用戶使用設(shè)備提供了一致的訪問(wèn)接口。Linux中的目錄也可看成是一種特殊文件,其中保存著目錄中文件的名稱、文件在磁盤上的存儲(chǔ)位置等信息。另外,在Linux中文件名和目錄名都區(qū)分大小寫。Linux環(huán)境中,最成功的文件系統(tǒng)是第二個(gè)擴(kuò)展文件系統(tǒng)EXT2?,F(xiàn)在,EXT2文件系統(tǒng)作為所有Linux版本的基本文件系統(tǒng)。8.2.2Ext2文件系統(tǒng)EXT2文件系統(tǒng)中的數(shù)據(jù)保存在數(shù)據(jù)塊中,這些數(shù)據(jù)塊的長(zhǎng)度相等。實(shí)際上,數(shù)據(jù)塊的長(zhǎng)度在不同的EXT2文件系統(tǒng)中可以不同,數(shù)據(jù)塊的大小可以在在用mke2fs創(chuàng)建一個(gè)特定的EXT2文件系統(tǒng)時(shí)設(shè)定。每個(gè)文件保存在整數(shù)個(gè)數(shù)據(jù)塊上。若一個(gè)塊長(zhǎng)為1024字節(jié),則一個(gè)1025字節(jié)的文件會(huì)占2個(gè)1024字節(jié)大小的塊,這就意味著每個(gè)文件大體上要浪費(fèi)半個(gè)塊。數(shù)據(jù)塊中保存的并不全是數(shù)據(jù),有些塊用來(lái)定義文件系統(tǒng)使用的數(shù)據(jù)結(jié)構(gòu)。

EXT2用一個(gè)inode節(jié)點(diǎn)(也叫索引節(jié)點(diǎn))數(shù)據(jù)結(jié)構(gòu)描述每一個(gè)文件,該節(jié)點(diǎn)記錄了相應(yīng)文件的數(shù)據(jù)地址,占用的數(shù)據(jù)塊以及該文件的文件類型、訪問(wèn)權(quán)限、修改時(shí)間等。EXT2文件系統(tǒng)中的每個(gè)文件inode節(jié)點(diǎn)有唯一的整數(shù)標(biāo)識(shí)號(hào),文件系統(tǒng)的inode節(jié)點(diǎn)全部保存在節(jié)點(diǎn)表中。EXT2文件目錄只是一些簡(jiǎn)單的文件名和指向該文件節(jié)點(diǎn)的指針。圖8-2-2指出EXT2文件系統(tǒng)保存在塊結(jié)構(gòu)的設(shè)備中。文件系統(tǒng)不必考慮在物理介質(zhì)上的具體存放位置,而只需記住邏輯塊的編號(hào)。實(shí)際上,塊設(shè)備驅(qū)動(dòng)程序完成邏輯塊到物理存放位置的轉(zhuǎn)換。每當(dāng)文件系統(tǒng)需要從保存信息或數(shù)據(jù)的塊設(shè)備中讀取寫入數(shù)據(jù)時(shí),便要求它支持的設(shè)備驅(qū)動(dòng)程序讀入整數(shù)個(gè)塊。

EXT2文件系統(tǒng)將其占用的邏輯分區(qū)劃分為“塊組”(BlockGroup),每個(gè)塊組重復(fù)保存著文件系統(tǒng)中的重要信息,萬(wàn)一有重大問(wèn)題出現(xiàn),需要恢復(fù)文件系統(tǒng)時(shí),就會(huì)用到這些備份信息。同時(shí),這些塊組也用來(lái)保存實(shí)際的文件和目錄數(shù)據(jù)。塊組0塊組1┈塊組N-1塊組N超級(jí)塊塊組描述符塊位圖索引節(jié)點(diǎn)位圖索引節(jié)點(diǎn)表數(shù)據(jù)塊

8-2-2EXT2文件系統(tǒng)的物理布局

在Linux系統(tǒng)中,inode節(jié)點(diǎn)是基本的數(shù)據(jù)塊。文件系統(tǒng)中的每個(gè)文件或目錄由一個(gè)inode節(jié)點(diǎn)描述,每個(gè)塊組的EXT2inode節(jié)點(diǎn)保存在inode節(jié)點(diǎn)表中,同時(shí)也保存節(jié)點(diǎn)位圖,通過(guò)位圖可找到分配或未分配的inode節(jié)點(diǎn)。圖8-2-3表示了EXT2inode節(jié)點(diǎn)的結(jié)構(gòu)。1、EXT2中inode節(jié)點(diǎn)

模式

所有者信息

大小

時(shí)間戳

直接指針

一級(jí)間接指針

二級(jí)間接指針

三級(jí)間接指針

數(shù)據(jù)

數(shù)據(jù)

數(shù)據(jù)

數(shù)據(jù)

數(shù)據(jù)

數(shù)據(jù)

數(shù)據(jù)

數(shù)據(jù)

數(shù)據(jù)圖

8-2-3EXT2的inode節(jié)點(diǎn)

在EXT2中,一個(gè)inode節(jié)點(diǎn)可描述一個(gè)文件、目錄、符號(hào)鏈接、塊設(shè)備、字符設(shè)備或FIFO。它包含以下信息:(1)模式(mode):包含inode節(jié)點(diǎn)的內(nèi)容和用戶權(quán)限兩項(xiàng)信息。(2)所有者信息(OwnerInformation):該文件或目錄所有者的身份辨認(rèn),允許文件系統(tǒng)正確地設(shè)定訪問(wèn)權(quán)限。(3)大?。⊿ize):該文件或目錄占用的字節(jié)數(shù)。(4)時(shí)間戳(Timestampsinode):節(jié)點(diǎn)的建立時(shí)間及最后一次修改時(shí)間。(5)數(shù)據(jù)塊(datablocks):定義了指向保存inode節(jié)點(diǎn)描述的數(shù)據(jù)塊。

前12個(gè)數(shù)據(jù)塊指針直接指向包含文件數(shù)據(jù)的數(shù)據(jù)塊,后3個(gè)數(shù)據(jù)塊則是間接指針。利用前12個(gè)直接指針,可以保存的文件最大為12KB。如果文件大小超過(guò)了12KB,則用到了單級(jí)間接指針,這一指針指向保存著一組數(shù)據(jù)塊指針的數(shù)據(jù)塊,這些指針指向包含實(shí)際數(shù)據(jù)的數(shù)據(jù)塊。超級(jí)塊中描述了文件系統(tǒng)基本大小與形狀。其中的信息主要用來(lái)進(jìn)行文件系統(tǒng)的維護(hù)。雖然在每個(gè)塊組中都有一個(gè)超級(jí)塊的備份,一般情況下,EXT2文件系統(tǒng)只需讀取塊組0中的超級(jí)塊,其它塊組中的超級(jí)塊在塊組0中的超級(jí)塊損壞時(shí)使用。超級(jí)塊中主要包含的信息有:文件系統(tǒng)的標(biāo)識(shí)信息、安裝統(tǒng)計(jì)信息、數(shù)據(jù)塊的信息(如大小、數(shù)據(jù)塊數(shù)、空閑數(shù)據(jù)塊數(shù))、inode信息等。2、EXT2超級(jí)塊Linux文件系統(tǒng)的每個(gè)塊組都有一個(gè)描述塊組情況的數(shù)據(jù)結(jié)構(gòu)。它主要描述的信息有:數(shù)據(jù)塊的分配信息(即塊位圖)、節(jié)點(diǎn)表、節(jié)點(diǎn)的分配信息等。所有的塊組的描述形成一個(gè)塊組描述表,每個(gè)塊組也像超級(jí)塊一樣,在其超級(jí)塊的副本之后,也包含塊組描述的整個(gè)列表。但只有第一個(gè)副本(保存在塊組0中)真正被EXT2文件系統(tǒng)使用,其余副本像超級(jí)塊副本一樣,在主副本破壞時(shí)使用。3、EXT2的塊組描述在EXT2中,目錄是一種特殊文件,用于創(chuàng)建和保存文件系統(tǒng)、訪問(wèn)文件路徑。目錄文件中包含了目錄項(xiàng)的列表,每個(gè)目錄項(xiàng)中的信息非常簡(jiǎn)單,主要是文件名及其長(zhǎng)度以及索引節(jié)點(diǎn)號(hào)。如圖8-2-4所示:4、EXT2目錄文件名文件長(zhǎng)度Inode節(jié)點(diǎn)號(hào)

模式

所有者

大小

時(shí)間戳┈Inode節(jié)點(diǎn)號(hào)圖

8-2-4文件目錄

在Linux中,不注重文件名的格式和長(zhǎng)度。查找文件時(shí),先在超級(jí)塊中找到根目錄的inode編號(hào),然后從根目錄起查找各級(jí)目錄,直到找到要查找的文件的inode節(jié)點(diǎn),從inode節(jié)點(diǎn)中可找到文件所在的物理塊,進(jìn)而可讀出文件中的數(shù)據(jù)。在EXT文件系統(tǒng)的開(kāi)發(fā)過(guò)程中,引入了一個(gè)非常重要的概念,即虛擬文件系統(tǒng)(VFS)。VFS作為實(shí)際文件系統(tǒng)(EXT)和操作系統(tǒng)之間的接口,將實(shí)際的文件系統(tǒng)和操作系統(tǒng)隔離開(kāi)來(lái)。VFS允許Linux可以支持除EXT之外的許多文件系統(tǒng)類型。各文件系統(tǒng)為VFS提供一致的接口,文件系統(tǒng)的所有細(xì)節(jié)由軟件轉(zhuǎn)換,因此對(duì)Linux的內(nèi)核以及運(yùn)行在Linux上的程序而言,所有的文件系統(tǒng)都是一樣的。8.2.3Linux的虛擬文件系統(tǒng)如圖8-2-5所示,是虛擬文件系統(tǒng)和實(shí)際文件系統(tǒng)之間的關(guān)系。虛擬文件系統(tǒng)必須管理所有可在任意時(shí)刻掛裝的不同文件系統(tǒng)。為此,Linux虛擬文件系統(tǒng)維護(hù)一些數(shù)據(jù)結(jié)構(gòu),用以描述整個(gè)虛擬文件系統(tǒng)以及實(shí)際已掛裝的文件系統(tǒng)。VFS利用超級(jí)塊和inode節(jié)點(diǎn)描述整個(gè)文件系統(tǒng),這與EXT2文件系統(tǒng)使用的超級(jí)塊和inode節(jié)點(diǎn)方式?jīng)]什么不同。

但是在VFS中,超級(jí)塊是用來(lái)描述文件系統(tǒng)整體情況的數(shù)據(jù)結(jié)構(gòu),主要內(nèi)容包括文件系統(tǒng)所在的設(shè)備、指向文件系統(tǒng)的inode節(jié)點(diǎn)指針、塊尺寸、指向文件系統(tǒng)超級(jí)塊例行程序的指針等。像在EXT2文件系統(tǒng)中一樣,VFS中的文件、目錄等均由對(duì)應(yīng)的inode節(jié)點(diǎn)代表,每個(gè)VFSinode中的信息來(lái)源于基本文件系統(tǒng),由文件特定的子程序創(chuàng)建。VFSinode只存在于內(nèi)核內(nèi)存中,實(shí)際保存于VFS的inodecache中。目錄chacheVFSMinixEXT2緩沖區(qū)cache

磁盤驅(qū)動(dòng)程序Inodecache圖

8-2-5虛擬文件系統(tǒng)與實(shí)際文件系統(tǒng)之間的關(guān)系示意圖

每個(gè)文件系統(tǒng)在初始化時(shí),首先在VFS中進(jìn)行注冊(cè)。如果文件系統(tǒng)內(nèi)建于內(nèi)核中,則初始化過(guò)程發(fā)生在系統(tǒng)引導(dǎo)時(shí);如果文件系統(tǒng)作為內(nèi)核可裝卸的模塊,則實(shí)際掛裝某個(gè)文件系統(tǒng)時(shí)進(jìn)行初始化。當(dāng)某種基于塊設(shè)備的文件系統(tǒng)(包括root文件系統(tǒng))被掛裝,VFS必須讀取其超級(jí)塊。

不同類型的文件系統(tǒng)所對(duì)應(yīng)的超級(jí)塊讀取例程必須能理解實(shí)際文件系統(tǒng)的拓?fù)浣Y(jié)構(gòu),并且能夠?qū)?shí)際的超級(jí)塊結(jié)構(gòu)映射為VFS超級(jí)塊結(jié)構(gòu)。每個(gè)VFS超級(jí)塊包含了文件系統(tǒng)信息,并且還包含一些完成特定功能的函數(shù)指針。例如,某個(gè)超級(jí)塊代表一個(gè)已掛裝的EXT2文件系統(tǒng),則超級(jí)塊中包含有專門讀取EXT2文件系統(tǒng)inode的函數(shù)地址。每個(gè)VFS超級(jí)塊中包含指向?qū)嶋H文件系統(tǒng)第一個(gè)VFSinode的指針。對(duì)于root文件系統(tǒng)來(lái)說(shuō),第一個(gè)inode就是代表“/”目錄的inode。

backLinux是一個(gè)多任務(wù)的操作系統(tǒng),也就是多個(gè)進(jìn)程可以并發(fā)執(zhí)行,為了保證能有更多的進(jìn)程正確運(yùn)行,Linux采用了段頁(yè)式虛擬存儲(chǔ)管理技術(shù)。這樣,用戶就不用擔(dān)心內(nèi)存是否夠用。Linux將一個(gè)進(jìn)程中的程序、數(shù)據(jù)分成若干“段”來(lái)處理,每段有一個(gè)段描述符,這些段描述符組合形成段表。段表中的一個(gè)表項(xiàng)指出某一個(gè)段的起始地址、長(zhǎng)度和存取權(quán)限等,而段表的起始位置則記錄在一個(gè)寄存器中。8.3.Linux文件系統(tǒng)Linux內(nèi)存管理采用請(qǐng)求頁(yè)式技術(shù)實(shí)現(xiàn),每段被分為若干頁(yè),為保證需求內(nèi)存比實(shí)際內(nèi)存大得多的多個(gè)進(jìn)程同時(shí)運(yùn)行,系統(tǒng)只將要用的內(nèi)容以頁(yè)面為單位調(diào)入內(nèi)存塊中,而暫不需要的頁(yè)面仍留在外存交換區(qū)內(nèi)。一旦可執(zhí)行文件進(jìn)入程序的虛地址空間,便可開(kāi)始執(zhí)行。

這里的進(jìn)入并非是指文件的全部進(jìn)入,只要開(kāi)始部分裝入內(nèi)存,該可執(zhí)行文件就可以開(kāi)始執(zhí)行。在執(zhí)行過(guò)程中,若系統(tǒng)發(fā)現(xiàn)要執(zhí)行的內(nèi)容不在內(nèi)存時(shí),就發(fā)出缺頁(yè)請(qǐng)求信號(hào),請(qǐng)求內(nèi)存頁(yè)塊將所需內(nèi)容調(diào)入。在Linux中,實(shí)現(xiàn)頁(yè)面的交換和淘汰的是核心交換保護(hù)程序。核心保護(hù)程序是一個(gè)沒(méi)有虛存的核心線程,它以核心的方式在內(nèi)存中運(yùn)行,

不僅可以把換出去的頁(yè)面寫到交換區(qū),而且確保系統(tǒng)中有足夠的空閑塊,以保證存儲(chǔ)管理程序的有效運(yùn)行。交換保護(hù)程序在系統(tǒng)初始化時(shí)便開(kāi)始運(yùn)行,按核心交換時(shí)鐘工作或停止。它輪流查看系統(tǒng)中哪一個(gè)進(jìn)程的頁(yè)面適合換出或淘汰。因正文段不能被修改,這些頁(yè)不必寫回交換區(qū),淘汰即可,需要時(shí)還可以將原副本重新裝入內(nèi)存。當(dāng)確定某進(jìn)程的某頁(yè)要被換出或淘汰時(shí),還要檢查它是否還有共享者或被鎖定,如果是,就不能淘汰或換出。Linux淘汰頁(yè)的依據(jù)是頁(yè)的年齡。每頁(yè)一個(gè)計(jì)數(shù)器,初值為3,每訪問(wèn)一次年齡加3,最大值為20,如果年齡為0,交換保護(hù)程序?qū)阉粨Q出或淘汰。當(dāng)某頁(yè)曾被修改過(guò)后重放在交換區(qū)中,某進(jìn)程再次需要使用該頁(yè)時(shí),它已不在內(nèi)存(由頁(yè)表知道)中,請(qǐng)求者進(jìn)程便發(fā)出缺頁(yè)請(qǐng)求。這時(shí)操作系統(tǒng)的缺頁(yè)中斷處理程序被執(zhí)行。它首先進(jìn)行定位,找到缺頁(yè)進(jìn)程的虛地址,如果找到的是曾被換出的頁(yè)表項(xiàng),便把它再換入內(nèi)存,并把換入找到的內(nèi)存頁(yè)填到頁(yè)表項(xiàng)中,若引起調(diào)頁(yè)處理的訪問(wèn),則在頁(yè)表中要標(biāo)明“可寫”標(biāo)志,cache并標(biāo)明“修改過(guò)”。再次換出時(shí)要寫入交換區(qū);若不曾修改過(guò),就不寫入交換區(qū)了。

back在Linux中,一個(gè)進(jìn)程主要由三部分組成:(1)程序部分,也叫正文段。它是對(duì)進(jìn)程要完成任務(wù)的描述。為了便于共享,正文段是可再入程序,即只能使用,不能修改。另外,它可以為不同的用戶調(diào)用,不同的用戶調(diào)用同一正文段時(shí),就是不同的進(jìn)程。8.4.Linux中的進(jìn)程管理(2)數(shù)據(jù)部分,它是進(jìn)程要加工的對(duì)象。Linux進(jìn)程的數(shù)據(jù)段,除普通數(shù)據(jù)外,還有系統(tǒng)保留區(qū),也稱核心域。(3)任務(wù)描述結(jié)構(gòu),即通常所謂的PCB(進(jìn)程控制塊)。在Linux系統(tǒng)中,每個(gè)進(jìn)程在自己的虛擬地址空間運(yùn)行。為了便于管理Linux系統(tǒng)中的進(jìn)程,系統(tǒng)為每個(gè)進(jìn)程都設(shè)有一個(gè)task-struct數(shù)據(jù)結(jié)構(gòu),以此來(lái)識(shí)別進(jìn)程的存在與否。這個(gè)task-struct的數(shù)據(jù)結(jié)構(gòu),就是Linux進(jìn)程的進(jìn)程控制塊。還有一個(gè)task矢量表,由它給出指向每一個(gè)task-struc的指針。

8.4.1Linux的進(jìn)程控制塊task矢量表512個(gè)入口,每創(chuàng)建一個(gè)進(jìn)程,建立一個(gè)task-struct結(jié)構(gòu),并加入task矢量表中,矢量表的容量限制了進(jìn)程數(shù)量,此外還有一個(gè)當(dāng)前指針,可以指向當(dāng)前正在運(yùn)行的進(jìn)程的task-struct。Linux中的進(jìn)程控制塊中主要包括以下信息:(1)Linux進(jìn)程的狀態(tài)。記錄Linux進(jìn)程的此時(shí)所處的狀態(tài)。(2)調(diào)度信息。用于進(jìn)程調(diào)度,決定調(diào)度的次序,即優(yōu)先級(jí)別。(3)進(jìn)程標(biāo)識(shí)。Linux進(jìn)程標(biāo)識(shí)為數(shù)字,有進(jìn)程標(biāo)識(shí)PID,組織標(biāo)識(shí)GID,用于訪問(wèn)系統(tǒng)文件和設(shè)備時(shí)使用。(4)內(nèi)部通信信息。Linux支持IPC通信、管道和信號(hào)量通信。(5)家族關(guān)系。Linux中除初始化進(jìn)程外,其他進(jìn)程都被創(chuàng)建,所以進(jìn)程都有父進(jìn)程和子進(jìn)程之間連接關(guān)系問(wèn)題。(6)時(shí)鐘信息。為追蹤進(jìn)程使用CPU時(shí)間和創(chuàng)建時(shí)間等,需要時(shí)鐘信息。(7)文件系統(tǒng)。進(jìn)程可以隨時(shí)打開(kāi)和關(guān)閉文件,使用程序和數(shù)據(jù),所以要有與文件系統(tǒng)相關(guān)的信息。(8)虛存信息。進(jìn)程虛存空間信息及其與物理存儲(chǔ)有關(guān)信息。(9)處理機(jī)的特殊環(huán)境,相當(dāng)于通常CPU現(xiàn)場(chǎng)保留區(qū)。Linux進(jìn)程之間是一個(gè)樹形的結(jié)構(gòu)關(guān)系,每一個(gè)進(jìn)程都有唯一的標(biāo)識(shí)號(hào)PID,每一個(gè)進(jìn)程都有一個(gè)創(chuàng)建該進(jìn)程的父進(jìn)程,每一個(gè)進(jìn)程都屬于一個(gè)進(jìn)程組,所以還有一個(gè)組標(biāo)識(shí)號(hào)GID。為解決進(jìn)程訪問(wèn)不同文件擁有不同權(quán)限的問(wèn)題,又增加了“有效用戶標(biāo)識(shí)”和“有效組標(biāo)識(shí)”兩個(gè)標(biāo)識(shí)號(hào)。Linux有如下幾種狀態(tài):運(yùn)行狀態(tài):一個(gè)進(jìn)程正在運(yùn)行或已準(zhǔn)備好了,就要運(yùn)行。等待狀態(tài):進(jìn)程正在等待一事件或一種資源。Linux分兩種等待狀態(tài):即可中斷等待和不可中斷等待??芍袛嗟却鼙恍盘?hào)中斷;不可中斷等待直接在硬件環(huán)境中等待,不能被中斷。暫停狀態(tài):通常是由于進(jìn)程接收一個(gè)信號(hào)后,處于停止?fàn)顟B(tài)。僵死狀態(tài):一個(gè)進(jìn)程已停止運(yùn)行,但在進(jìn)程指針數(shù)組中仍占據(jù)著一個(gè)位置,因此,可將處于這種狀態(tài)的進(jìn)程看作是一個(gè)死進(jìn)程。Linux發(fā)生進(jìn)程調(diào)度的情況一般有如下幾種:(1)當(dāng)某個(gè)進(jìn)程因?yàn)橄到y(tǒng)調(diào)用運(yùn)行在內(nèi)核模式下時(shí),系統(tǒng)可以調(diào)度其它進(jìn)程運(yùn)行。(2)在運(yùn)行進(jìn)程用完自己的時(shí)間片時(shí),系統(tǒng)需選擇一個(gè)新的進(jìn)程運(yùn)行。(3)當(dāng)當(dāng)前運(yùn)行進(jìn)程因中斷或異常進(jìn)入等待狀態(tài)時(shí),系統(tǒng)也應(yīng)運(yùn)行調(diào)度程序來(lái)選擇下一個(gè)執(zhí)行進(jìn)程。8.4.2Linux中的進(jìn)程調(diào)度在Linux中,進(jìn)程分為普通進(jìn)程和實(shí)時(shí)進(jìn)程。實(shí)時(shí)進(jìn)程的優(yōu)先級(jí)高于普通進(jìn)程,一旦有實(shí)時(shí)進(jìn)程請(qǐng)求運(yùn)行,系統(tǒng)便將處理機(jī)分配給它。進(jìn)程的優(yōu)先級(jí)可以通過(guò)系統(tǒng)調(diào)用改變。實(shí)時(shí)進(jìn)程的調(diào)度策略有兩種:一種是先進(jìn)先出調(diào)度算法;另一種是輪轉(zhuǎn)調(diào)度算法。對(duì)于一般進(jìn)程,Linux采用一般的分時(shí)調(diào)度策略。Linux系統(tǒng)中,主要的并行操作單位是進(jìn)程。進(jìn)程切換時(shí),首先需要保護(hù)離開(kāi)CPU進(jìn)程的現(xiàn)場(chǎng)信息,恢復(fù)CPU進(jìn)程的現(xiàn)場(chǎng)信息。因?yàn)槊總€(gè)進(jìn)程有自己獨(dú)立的程序段、數(shù)據(jù)區(qū)、內(nèi)存區(qū)、時(shí)間片等,這樣就導(dǎo)致進(jìn)程切換的開(kāi)銷較大,此外進(jìn)程通信也需要開(kāi)銷。前面我們已經(jīng)知道了線程的概念,為了減少這些不必要的開(kāi)銷,Linux可以通過(guò)軟件包實(shí)現(xiàn)線程。不過(guò),Linux的線程支持不像Windows2000那樣典型,Linux支持內(nèi)核級(jí)的多線程。有了線程后,每個(gè)進(jìn)程又可由若干并行的線程共享進(jìn)程的時(shí)間片和其他資源。同一個(gè)進(jìn)程內(nèi)的線程可以作為調(diào)度單位競(jìng)爭(zhēng)使用CPU。因?yàn)檫M(jìn)程內(nèi)的線程共享進(jìn)程的正文、數(shù)據(jù)、內(nèi)存、及數(shù)據(jù)結(jié)構(gòu),因此在同一進(jìn)程中的線程之間的環(huán)境切換的工作量,遠(yuǎn)遠(yuǎn)小于進(jìn)程之間的環(huán)境切換的工作量。所以,不需為重新安排這些事情而付出代價(jià)。所以,有時(shí)也把線程叫做輕量級(jí)進(jìn)程。在Linux系統(tǒng)中,進(jìn)程的控制主要是使用系統(tǒng)調(diào)用來(lái)實(shí)現(xiàn)的,主要有以下幾種。1.進(jìn)程的建立在Linux系統(tǒng)中,除1#進(jìn)程是在系統(tǒng)初始化時(shí)由系統(tǒng)創(chuàng)建的之外,其他進(jìn)程都是通過(guò)fork()系統(tǒng)調(diào)用建立的。使用fork()的進(jìn)程為父進(jìn)程,通過(guò)fork()建立的新進(jìn)程叫子進(jìn)程父子進(jìn)程除進(jìn)程標(biāo)識(shí)號(hào)PID不同外,子進(jìn)程的正文段和用戶數(shù)據(jù)段與父進(jìn)程完全相同,系統(tǒng)數(shù)據(jù)段的內(nèi)容也幾乎相同。另外,凡是父進(jìn)程打開(kāi)的文件,子進(jìn)程全部可以使用。8.4.3Linux中的進(jìn)程控制在Linux中,要使進(jìn)程執(zhí)行新文件的唯一方法是使用exec()系統(tǒng)調(diào)用。具體的做法是:在使用exec()系統(tǒng)調(diào)用時(shí),將要執(zhí)行的文件名設(shè)為它的參數(shù)。

2.進(jìn)程的執(zhí)行將exec()放在程序中,其中的文件就是要執(zhí)行的正文和數(shù)據(jù),它將取代父進(jìn)程的正文和數(shù)據(jù)。我們知道,在UNIX中,子進(jìn)程被創(chuàng)建時(shí),從父進(jìn)程那里拷貝了正文和數(shù)據(jù),子進(jìn)程為了和父進(jìn)程完成不同的任務(wù),利用exec()系統(tǒng)調(diào)用可執(zhí)行其他指定的文件,取代從父進(jìn)程那里拷貝過(guò)來(lái)的內(nèi)容。而在Linux中則有所不同,它采用了一種“寫時(shí)拷貝”(copyonwrite)方法,即fork()命令建立子進(jìn)程時(shí),只有少量的共享內(nèi)容被復(fù)制,而執(zhí)行exec()時(shí),如果需要用父進(jìn)程的程序和數(shù)據(jù),這時(shí)才會(huì)拷貝。這樣就可節(jié)省不少內(nèi)存空間和拷貝時(shí)間。3.等待進(jìn)程結(jié)束

當(dāng)父進(jìn)程用fork()創(chuàng)建子進(jìn)程后,子進(jìn)程轉(zhuǎn)去執(zhí)行指定文件,而父進(jìn)程可通過(guò)wait()等待子進(jìn)程結(jié)束。其中的參數(shù)就是所等的子進(jìn)程。等到子進(jìn)程結(jié)束,父進(jìn)程再做其他工作。其返回值就是結(jié)束的子進(jìn)程的標(biāo)識(shí)號(hào)PID。在Linux系統(tǒng)中,進(jìn)程的終止可通過(guò)調(diào)用exit()來(lái)實(shí)現(xiàn)。exit()沒(méi)有返回值,但它取一個(gè)狀態(tài)參數(shù),可以使等待子進(jìn)程結(jié)束的父進(jìn)程恢復(fù)執(zhí)行,也可將所指狀態(tài)傳遞給父進(jìn)程。4.進(jìn)程的終止為了協(xié)調(diào)進(jìn)程之間的活動(dòng),進(jìn)程間以及進(jìn)程與核心之間要進(jìn)行通信。Linux支持流行UNIX系統(tǒng)所有的進(jìn)程通信機(jī)制(IPC),常用的有信號(hào)、管道、消息傳遞、信號(hào)量和共享內(nèi)存等機(jī)制。8.4.4Linux進(jìn)程通信信號(hào)是UNIX系統(tǒng)中最古老的一種通信機(jī)制,進(jìn)程通過(guò)信號(hào)了解系統(tǒng)中正在出現(xiàn)的事件。信號(hào)是隨機(jī)產(chǎn)生的,進(jìn)程必須隨時(shí)做好響應(yīng)信號(hào)的準(zhǔn)備,發(fā)信號(hào)的進(jìn)程將信號(hào)送給接收者進(jìn)程的pcb中,接收者進(jìn)程調(diào)度運(yùn)行時(shí),才能轉(zhuǎn)入處理信號(hào)引起的事件。這種現(xiàn)象類似中斷,為了和硬件中斷相區(qū)分,有時(shí)也把信號(hào)的處理叫“軟中斷”。

1.信號(hào)在Linux中,內(nèi)核用一個(gè)字表示所有信號(hào),字長(zhǎng)就是信號(hào)的最多種類,而不同的平臺(tái)字長(zhǎng)也不同,所以說(shuō),信號(hào)的種類和具體的平臺(tái)有關(guān)。Linux內(nèi)核定義的最常見(jiàn)的信號(hào)、C語(yǔ)言宏名及其用途如表8-1所示。

符號(hào)

1SIGHUP

在終端上發(fā)出的結(jié)束信號(hào)

2SIGINT從鍵盤上發(fā)出的中斷(ctrl-c)信號(hào)

3SIGQUT從鍵盤來(lái)的退出信號(hào)(ctrl-\)8SIGFPE

浮點(diǎn)異常(例如被0除)9SIGKILL

結(jié)束接收信號(hào)的進(jìn)程

14SIGALRMalarm()系統(tǒng)調(diào)用結(jié)束時(shí)的暫停

15SIGTERM

默認(rèn)的kill命令信號(hào)

17SIGCHLD表示子進(jìn)程停止或結(jié)束的信號(hào)

19SIGSTOP從鍵盤來(lái)執(zhí)行的信號(hào)(ctrl-z)表8-1常見(jiàn)信號(hào)及用途管道,原來(lái)是UNIX中的通信機(jī)制,是用于進(jìn)程通信的一種共享文件,(也叫pipe文件),進(jìn)程之間以比特流的方式傳送數(shù)據(jù)。系統(tǒng)允許一進(jìn)程從管道一端寫入數(shù)據(jù),另一進(jìn)程從管道的另一端讀出數(shù)據(jù)。相關(guān)的知識(shí)我們?cè)赨NIX系統(tǒng)中已經(jīng)介紹過(guò),這里不再論述。2.“管道”在Linux中,管道用兩個(gè)文件表數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn),二者都指向同一暫時(shí)的VFS(虛擬文件系統(tǒng))的inode節(jié)點(diǎn),由inode節(jié)點(diǎn)再指向內(nèi)存的物理頁(yè),如圖8-4-1所示。F_inode

寫管道F_inode

讀管道進(jìn)程1的文件表進(jìn)程2的文件表

某個(gè)搜索節(jié)點(diǎn)數(shù)據(jù)頁(yè)Inode節(jié)點(diǎn)圖

8-4-1兩個(gè)文件指向同一個(gè)數(shù)據(jù)塊

當(dāng)寫進(jìn)程要寫管道時(shí),內(nèi)容被復(fù)制到共享的數(shù)據(jù)頁(yè);當(dāng)讀進(jìn)程要讀管道時(shí),再將內(nèi)容從共享數(shù)據(jù)頁(yè)復(fù)制下來(lái),Linux必須同步訪問(wèn)管道,為此,采用了鎖等待隊(duì)列和信號(hào),具體工作過(guò)程與UNIX系統(tǒng)中的管道工作原理類似,這里不再多講。為了與其他系統(tǒng)兼容,Linux也支持systemV三種通信機(jī)制,它們是:共享內(nèi)存、消息隊(duì)列和信號(hào)量。3.Systemv的進(jìn)程通信機(jī)制共享內(nèi)存是指允許出現(xiàn)在一個(gè)或多個(gè)進(jìn)程的虛地址空間中的一個(gè)共享區(qū)域。當(dāng)進(jìn)程要通信時(shí),首先在內(nèi)存中建立一個(gè)共享區(qū),然后將它附接到自己的虛地址空間中,而實(shí)際的內(nèi)存頁(yè)面可以通過(guò)共享的進(jìn)程頁(yè)表給出。當(dāng)進(jìn)程把信息寫入這一內(nèi)存塊時(shí),其它可共享這一內(nèi)存塊的進(jìn)程便使用這些信息。當(dāng)然,對(duì)共享內(nèi)存的訪問(wèn)需要有相應(yīng)的同步機(jī)制。信號(hào)量和消息隊(duì)列的相關(guān)知識(shí)我們?cè)谇懊嬉呀?jīng)介紹過(guò),這里不再贅述。

back在Linux的設(shè)備管理中,最基本的一個(gè)特點(diǎn)就是它抽象了設(shè)備的處理過(guò)程。系統(tǒng)中的每一臺(tái)設(shè)備用一個(gè)特殊設(shè)備文件來(lái)表示。例如,/dev/hda就代表系統(tǒng)中的第一個(gè)IDE硬盤。所有對(duì)硬件設(shè)備的操作都可以像操作普通文件一樣,利用系統(tǒng)提供的系統(tǒng)調(diào)用來(lái)進(jìn)行打開(kāi)、關(guān)閉、讀、寫等操作。

8.5.1概述同一設(shè)備驅(qū)動(dòng)程序所控制的所有設(shè)備具有相同的主設(shè)備號(hào),次設(shè)備號(hào)用來(lái)區(qū)分同類設(shè)備中的不同設(shè)備。例如,系統(tǒng)中第一個(gè)IDE硬盤中的每個(gè)分區(qū)都有一個(gè)次設(shè)備號(hào),/dev/hda1代表的就是該硬盤的第一分區(qū)。Linux支持三種類型的硬件設(shè)備,即字符設(shè)備,塊設(shè)備和網(wǎng)絡(luò)設(shè)備。字符設(shè)備是Linux中最簡(jiǎn)單的設(shè)備,可以作為文件訪問(wèn),應(yīng)用程序可用標(biāo)準(zhǔn)的系統(tǒng)調(diào)用對(duì)字符設(shè)備進(jìn)行打開(kāi)、關(guān)閉、讀、寫等操作。字符設(shè)備可以直接進(jìn)行讀寫,不經(jīng)過(guò)緩沖區(qū)。塊設(shè)備的操作也與普通文件類似,不過(guò)與字符設(shè)備不同,塊設(shè)備又分為幾種類型,如IDE類型、SCSI類型等,每類塊設(shè)備驅(qū)動(dòng)程序提供用于該類設(shè)備的特殊接口。

就像提供正常的文件操作接口一樣,每個(gè)塊設(shè)備驅(qū)動(dòng)程序還必須提供與高速緩存的接口。塊設(shè)備按塊的大小進(jìn)行讀寫操作,一般一個(gè)為512字節(jié)或1024字節(jié)為一塊。塊設(shè)備可通過(guò)高速緩存隨時(shí)都可以對(duì)它進(jìn)行讀寫。塊設(shè)備一般是通過(guò)文件系統(tǒng)對(duì)其設(shè)備文件進(jìn)行訪問(wèn)的,只有網(wǎng)絡(luò)設(shè)備是通過(guò)BSDsockil和網(wǎng)絡(luò)子系統(tǒng)訪問(wèn)。Linux系統(tǒng)中的網(wǎng)絡(luò)設(shè)備的主要功能是發(fā)送和接收數(shù)據(jù),與一般的硬件設(shè)備不同,Linux中的某些網(wǎng)絡(luò)設(shè)備是硬件設(shè)備,而有些則是軟件設(shè)備,不存在與之對(duì)應(yīng)的實(shí)際硬件設(shè)備,如回環(huán)設(shè)備等。另外,一般的塊設(shè)備或字符設(shè)備的特殊文件可以通過(guò)mknod命令建立,而網(wǎng)絡(luò)設(shè)備只有在系統(tǒng)引導(dǎo)時(shí)發(fā)現(xiàn)和初始化之后才存在。由于Linux支持設(shè)備較多,每一類設(shè)備對(duì)應(yīng)一個(gè)設(shè)備驅(qū)動(dòng)程序,因此系統(tǒng)便有許多不同的驅(qū)動(dòng)程序,這些驅(qū)動(dòng)程序在某些方面具有共性。8.5.2Linux中的設(shè)備驅(qū)動(dòng)程序比如:

(1)設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)內(nèi)核的一部分,和系統(tǒng)中其他代碼一樣,一旦出錯(cuò),則嚴(yán)重破壞系統(tǒng)。(2)設(shè)備驅(qū)動(dòng)程序提供Linux內(nèi)核或子系統(tǒng)的接口。(3)設(shè)備驅(qū)動(dòng)程序用標(biāo)準(zhǔn)的內(nèi)核服務(wù),如內(nèi)存分配、中斷傳輸?shù)汝?duì)列進(jìn)行操作。

(4)Linux設(shè)備驅(qū)動(dòng)程序在需要時(shí)可以作為內(nèi)核模塊被請(qǐng)求裝入;當(dāng)不再需要時(shí),可以被卸載,這樣有利于內(nèi)核高效使用系統(tǒng)資源。(5)Linux設(shè)備驅(qū)動(dòng)程序可以進(jìn)入內(nèi)核中,當(dāng)內(nèi)核編譯時(shí),要建立哪一個(gè)設(shè)備是可以配置的。(6)系統(tǒng)自舉時(shí),要對(duì)每個(gè)設(shè)備驅(qū)動(dòng)程序進(jìn)行初始化,以管理文件控制的硬件設(shè)備。即使受特殊設(shè)備驅(qū)動(dòng)程序控制的設(shè)備不存在,也不會(huì)造成其他任何危害。設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)內(nèi)核與外設(shè)之間的接口,設(shè)備驅(qū)動(dòng)程序中包括與設(shè)備相關(guān)的代碼。設(shè)備驅(qū)動(dòng)程序的功能是從與設(shè)備無(wú)關(guān)的軟件中接收抽象的請(qǐng)求。但當(dāng)它正在處理另一個(gè)請(qǐng)求時(shí),會(huì)將該請(qǐng)求放在等待隊(duì)列中。Linux設(shè)備驅(qū)動(dòng)程序的主要功能有:

(1)將數(shù)據(jù)在內(nèi)核和設(shè)備之間接收和發(fā)送;(2)對(duì)設(shè)備進(jìn)行初始化;(3)使設(shè)備投入運(yùn)行和退出服務(wù);(4)檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤。在Linux中,每一個(gè)驅(qū)動(dòng)程序都是一個(gè)完整的進(jìn)程,每個(gè)這樣的進(jìn)程都有自己的狀態(tài)寄存器、堆棧等,進(jìn)程之間可以相互通信,也可與文件系統(tǒng)通信。設(shè)備驅(qū)動(dòng)程序進(jìn)程與其他進(jìn)程不同的是,這些進(jìn)程全部鏈入核心,它們都共享一個(gè)公用的地址空間。若幾個(gè)設(shè)備驅(qū)動(dòng)程序共用一個(gè)過(guò)程,則在執(zhí)行代碼過(guò)程中,只有一個(gè)過(guò)程的拷貝。這樣做可使操作系統(tǒng)設(shè)計(jì)更模塊化,并能提高效率。

backshell的種類有很多,RedHatLinux提供了下面的shell:sh、bash(BourneAgainshell)、tcsh、csh、pdksh(PublicDomainKomShell)、zsh、ash和mc等。你可以選擇你喜歡的shell來(lái)使用而不必?fù)?dān)心別的。8.6.1了解Linux的shell在眾多的shell中,sh是最早出現(xiàn)的一種,它也是最初的UNIXshell,它使用的語(yǔ)法類似于早期的UNIX系統(tǒng)

III的原始shell的語(yǔ)法。在UNIX系統(tǒng)中sh的可執(zhí)行程序在文件bin/sh中。事實(shí)上,Linux使用了sh的一種變種(即bashshell)作為它的默認(rèn)shell。因?yàn)閎ash支持sh語(yǔ)法的超集,所以用標(biāo)準(zhǔn)sh寫的任何一個(gè)shell腳本都可以在bash下運(yùn)行。

shell腳本就是在一個(gè)文件中包含一個(gè)或多個(gè)shell命令的集合,它是一種功能非常強(qiáng)大的工具,用它可以擴(kuò)展UNIX/Linux的用途。對(duì)于交互式用戶來(lái)說(shuō),sh缺少一些如任務(wù)控制等特性,但它提供了一個(gè)書寫絕大多數(shù)shell程序的很好的基礎(chǔ)。雖然UNIX和Linux版本中包括多種shell,但它們的工作方式都基本相同,shell在用戶和內(nèi)核之間起著橋梁作用。各種shell之間的主要區(qū)別在于命令行語(yǔ)法。我們只對(duì)常用的命令做以下講解,讀者可以通過(guò)man命令來(lái)獲得更詳細(xì)的說(shuō)明,或通過(guò)使用“—help”參數(shù)查詢其他命令的幫助信息。

8.6.2shell的一般用法作用是建立一個(gè)新的帳號(hào)。當(dāng)用戶完成Linux的安裝后,只有一個(gè)Username(即root)可以登錄。使用adduser可以建立另一個(gè)Username(也就是建立一個(gè)新帳號(hào)),以便將Linux提供給其他使用者使用。1.a(chǎn)dduser作用是安排、檢查、刪除隊(duì)列中的作業(yè)。at系列的命令有:at在設(shè)定的時(shí)間執(zhí)行作業(yè)atq列出用戶排在隊(duì)列中的作業(yè)atrm刪除隊(duì)列中的作業(yè)batch用低優(yōu)先級(jí)運(yùn)行作業(yè)2.a(chǎn)t系列超級(jí)用戶可以在任何情況下使用at系列的命令,一般用戶使用at系列命令的權(quán)利由文件/etc/at.allow,/etc/at.deny控制。例:at-ff16pm+3days表示:在三天后下午六點(diǎn)執(zhí)行文件f1中的作業(yè)。作用是連接文件并送到標(biāo)準(zhǔn)輸出。cat是傳統(tǒng)UNIX系統(tǒng)所使用的命令,和DOS下的TYPE命令相似。例:cattest.txt表示在屏幕上顯示test.txt文件的內(nèi)容。3.cat作用是改變當(dāng)前目錄。例:cd/返回根目錄

cd/home/xyf進(jìn)入home目錄下的子目錄xyf.4.cd作用是壓縮文件。compress利用LZW原理來(lái)壓縮文件,原文件將被替代為擴(kuò)張名為.z的新文件uncompress用來(lái)展開(kāi)壓縮文件。例:compressfile1壓縮文件file1uncompressfile1.z還原文件file15.compress6.cp

作用是拷貝文件,拷貝時(shí)可以使用通配符“*”和“?”。例:cp*/home/xyf將當(dāng)前目錄下的所有文件拷貝到/home/xyf下7.df作用是報(bào)告磁盤剩余空間。例:df-T列出磁盤的使用情況,并將每個(gè)文件系統(tǒng)的類型輸出。8.diff作用是比較兩個(gè)文件的不同。例:difffile1file1比較file1和file2兩個(gè)文件9.ed文本編輯器,用來(lái)編輯文本。例:edfile1編輯一個(gè)文件file110.fdformat作用是低級(jí)格式化一張軟盤。11.id顯示當(dāng)前用戶的用戶名和組。12.kill作用是終止一個(gè)正在執(zhí)行的進(jìn)程。kill向指定的進(jìn)程發(fā)出特定的信號(hào),如果沒(méi)有指定的信號(hào)則送出TERM信號(hào),TERM信號(hào)將殺死沒(méi)有捕捉到這個(gè)信號(hào)的進(jìn)程。例:kill101將進(jìn)程號(hào)是101的進(jìn)程殺死。13.last作用是顯示過(guò)去多少個(gè)用戶或終端登錄到這臺(tái)機(jī)器。例:last–5xyf顯示用戶xyf過(guò)去5次登錄的情況。14.less用來(lái)按頁(yè)顯示文件,作用類似于more,但是與more不同的是,less允許向前或向后瀏覽文件。例:lessfile1按頁(yè)顯示文件file115.logname作用是輸出用戶登錄時(shí)的用戶名。16.ls作用是列出目錄下的文件。若只執(zhí)行l(wèi)s而不帶參數(shù),則顯示效果與DOS下的dir/w命令一樣,只顯示目錄和文件名稱。例:ls-al輸出當(dāng)前目錄下所有文件的詳細(xì)信息17.man作用是訪問(wèn)聯(lián)機(jī)手冊(cè)。man對(duì)于所有用戶來(lái)說(shuō)都是非常有用的一個(gè)工具,利用它可以快速查詢命令和程序的使用方法和參數(shù)。例:manless查詢less的參數(shù)及用法18.mesg選擇是否接收其他用戶利用talk或write發(fā)來(lái)的信息。mesgn不接收其他的用戶發(fā)來(lái)的信息mesgy恢復(fù)接收其他的用戶發(fā)來(lái)的信息19.mkdir該命令是建立目錄,與DOS下的md類似。20.mv該命令是更改或移動(dòng)文件。注意一點(diǎn),在執(zhí)行該命令后,源文件就不存在了,而產(chǎn)生了新的目標(biāo)文件。例:mvfile1file2將文件file1改名為file2mvfile2/xyf將文件file2移到目錄/xyf下21.nice該命令用來(lái)為要運(yùn)行的程序設(shè)定優(yōu)先權(quán)。其中,優(yōu)先權(quán)缺省值為10,最高為-20(優(yōu)先權(quán)最高),最低為19(優(yōu)先權(quán)最低)。例:nice–18/usr/xyf/file2以優(yōu)先權(quán)-18運(yùn)行程序/usr/xyf/file222.passwd

該命令用來(lái)設(shè)置或更改用戶密碼。一般用戶只能更改自己的密碼,而超級(jí)用戶可以更改其他所有用戶的密碼。23.ps該命令用來(lái)查看進(jìn)程狀態(tài)。例:ps–c從task-struct中給出當(dāng)前的進(jìn)程名24.pwd該命令用來(lái)顯示當(dāng)前的工作目錄。例:pwd列出當(dāng)前工作目錄25.rm該命令用來(lái)刪除文件或目錄。與DOS不同,rm在刪除目錄時(shí),可以不事先刪除該目錄下的文件。例:rmfile2刪除文件file2rm-rxyf刪除目錄/xyf及其該目錄下的所有文件和目錄26.time顯示以秒為單位的當(dāng)前時(shí)間。27.unmount,mountmount:裝載一個(gè)文件系統(tǒng)。unmount:卸下一個(gè)文件系統(tǒng)。例:mount

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論