版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
嵌入式Linux操作系統(tǒng)嵌入式Linux操作系統(tǒng)計(jì)算機(jī)軟件分為系統(tǒng)軟件和應(yīng)用軟件兩大類:系統(tǒng)軟件用于管理計(jì)算機(jī)本身和應(yīng)用程序;應(yīng)用軟件是為滿足用戶特定需求而設(shè)計(jì)的軟件。操作系統(tǒng)(OperatingSystem,OS)是最基本的系統(tǒng)軟件,它和系統(tǒng)工具軟件構(gòu)成了系統(tǒng)軟件。但給操作系統(tǒng)下定義是困難的,至今沒(méi)有一個(gè)能公認(rèn)的統(tǒng)一說(shuō)法,以下列舉了現(xiàn)今操作系統(tǒng)教材中常見的幾種觀察操作系統(tǒng)的角度。①自頂向下的角度。操作系統(tǒng)是對(duì)裸機(jī)的第1層軟件,是對(duì)機(jī)器的第1次擴(kuò)展,為用戶提供了一臺(tái)與實(shí)際硬件等價(jià)的虛擬機(jī)。操作系統(tǒng)嵌入式Linux操作系統(tǒng)②自底向上的角度。操作系統(tǒng)是資源管理,在相互競(jìng)爭(zhēng)的程序之間有序地控制對(duì)處理器、存儲(chǔ)器以及其他I/O接口設(shè)備的分配。③軟件分類角度。操作系統(tǒng)是最基本的系統(tǒng)軟件,它控制著計(jì)算機(jī)所有的資源并提供應(yīng)用程序開發(fā)的接口。④系統(tǒng)管理員角度。操作系統(tǒng)合理地組織管理了計(jì)算機(jī)系統(tǒng)的工作流程,使之能為多個(gè)用戶提供安全高效的計(jì)算機(jī)資源共享。⑤程序員角度(即從操作系統(tǒng)產(chǎn)生的角度)。操作系統(tǒng)是將程序員從復(fù)雜的硬件控制中解脫出來(lái),并為軟件開發(fā)者提供了一個(gè)虛擬機(jī),從而能更方便地進(jìn)行程序設(shè)計(jì)。操作系統(tǒng)嵌入式Linux操作系統(tǒng)⑥一般用戶角度。操作系統(tǒng)為他們提供了一個(gè)良好的交互界面,使得他們不必了解有關(guān)硬件和系統(tǒng)軟件的細(xì)節(jié),就能方便地使用計(jì)算機(jī)。⑦硬件設(shè)計(jì)者角度。操作系統(tǒng)為計(jì)算機(jī)系統(tǒng)功能擴(kuò)展提供了支撐平臺(tái),使硬件系統(tǒng)與應(yīng)用軟件產(chǎn)生了相對(duì)獨(dú)立性,可以在一定范圍內(nèi)對(duì)硬件模塊進(jìn)行升級(jí)和添加新硬件,而不會(huì)影響原先應(yīng)用軟件??偟膩?lái)講,傳統(tǒng)的操作系統(tǒng)定義如下。操作系統(tǒng)是計(jì)算機(jī)系統(tǒng)中負(fù)責(zé)支撐應(yīng)用程序運(yùn)行環(huán)境以及用戶操作環(huán)境的系統(tǒng)軟件,同時(shí)也是計(jì)算機(jī)系統(tǒng)的核心與基石。它的職責(zé)常包括對(duì)操作系統(tǒng)嵌入式Linux操作系統(tǒng)硬件的直接監(jiān)管,對(duì)各種計(jì)算資源(如內(nèi)存、處理器時(shí)間等)的管理,以及提供諸如作業(yè)管理之類的面向應(yīng)用程序的服務(wù)等。通常來(lái)說(shuō),現(xiàn)代標(biāo)準(zhǔn)操作系統(tǒng)應(yīng)具備的功能分別為處理機(jī)管理、存儲(chǔ)管理、文件管理、設(shè)備管理、進(jìn)程管理、用戶界面、網(wǎng)絡(luò)通信、安全機(jī)制等。操作系統(tǒng)根據(jù)在用戶界面的使用環(huán)境和功能特征的不同,一般可分為3種基本類型,即批處理操作系統(tǒng)、分時(shí)操作系統(tǒng)和實(shí)時(shí)操作系統(tǒng)。隨著計(jì)算機(jī)體系的發(fā)展,又出現(xiàn)了許多種操作系統(tǒng),分別是嵌入式操作系統(tǒng)、個(gè)人操作系統(tǒng)、網(wǎng)絡(luò)操作系統(tǒng)、分布式操作系統(tǒng)、云操作系統(tǒng)等。操作系統(tǒng)嵌入式Linux操作系統(tǒng)嵌入式操作系統(tǒng)是一種用途廣泛的系統(tǒng)軟件,過(guò)去它主要應(yīng)用于工業(yè)控制和國(guó)防系統(tǒng)領(lǐng)域。嵌入式操作系統(tǒng)負(fù)責(zé)嵌入系統(tǒng)的全部軟、硬件資源的分配、調(diào)度工作,控制協(xié)調(diào)并發(fā)的活動(dòng),并且體現(xiàn)其所在系統(tǒng)的特征,能夠通過(guò)裝卸某些模塊來(lái)達(dá)到系統(tǒng)所要求的功能。隨著Internet技術(shù)的發(fā)展、信息家電的普及應(yīng)用以及嵌入式操作系統(tǒng)的微型化和專業(yè)化,嵌入式操作系統(tǒng)開始從單一的弱功能向高專業(yè)化的強(qiáng)功能方向發(fā)展。嵌入式操作系統(tǒng)在系統(tǒng)實(shí)時(shí)高效性、硬件的相關(guān)依賴性、軟件固態(tài)化以及應(yīng)用的專用性等方面具有較為突出的特點(diǎn)。嵌入式操作系統(tǒng)是相對(duì)于一般操作系統(tǒng)而言的,它除具備了一般操作系統(tǒng)最基本的功能,如任務(wù)調(diào)度、同步機(jī)制、中斷處理、文件功能等外,還有以下特點(diǎn)。嵌入式操作系統(tǒng)嵌入式Linux操作系統(tǒng)①可裝卸性。開放性、可伸縮性的體系結(jié)構(gòu)。②強(qiáng)實(shí)時(shí)性。嵌入式操作系統(tǒng)實(shí)時(shí)性一般較強(qiáng),可用于各種設(shè)備控制當(dāng)中。③統(tǒng)一的接口。提供各種設(shè)備驅(qū)動(dòng)接口。④操作方便、簡(jiǎn)單、提供友好的圖形GUI,圖形界面,追求易學(xué)易用。⑤提供強(qiáng)大的網(wǎng)絡(luò)功能,支持TCP/IP及其他協(xié)議,提供TCP/UDP/IP/PPP支持及統(tǒng)一的MAC訪問(wèn)層接口,為各種移動(dòng)計(jì)算設(shè)備預(yù)留接口。嵌入式操作系統(tǒng)嵌入式Linux操作系統(tǒng)嵌入式操作系統(tǒng)⑥強(qiáng)穩(wěn)定性,弱交互性。嵌入式系統(tǒng)一旦開始運(yùn)行就不需要用戶過(guò)多的干預(yù),這就要求負(fù)責(zé)系統(tǒng)管理的嵌入式操作系統(tǒng)具有較強(qiáng)的穩(wěn)定性。嵌入式操作系統(tǒng)的用戶接口一般不提供操作命令,它通過(guò)系統(tǒng)調(diào)用命令向用戶程序提供服務(wù)。⑦固化代碼。在嵌入系統(tǒng)中,嵌入式操作系統(tǒng)和應(yīng)用軟件被固化在嵌入式系統(tǒng)計(jì)算機(jī)的ROM中。輔助存儲(chǔ)器在嵌入式系統(tǒng)中很少使用,因此,嵌入式操作系統(tǒng)的文件管理功能應(yīng)該能夠很容易地拆卸,而用各種內(nèi)存文件系統(tǒng)。⑧更好的硬件適應(yīng)性,也就是良好的移植性。嵌入式操作系統(tǒng)與嵌入式系統(tǒng)密不可分。嵌入式系統(tǒng)主要由嵌入式微處理器、外圍硬件設(shè)備、嵌入式操作系統(tǒng)以及用戶的應(yīng)用程序4個(gè)部分組成。國(guó)外嵌入式操作系統(tǒng)已經(jīng)從簡(jiǎn)單走向成熟,主要有VxWorks、QNX、PalmOS、WindowsCE等。國(guó)內(nèi)的嵌入式操作系統(tǒng)研究開發(fā)有2種類型,一類是基于國(guó)外操作系統(tǒng)二次開發(fā)完成的,如海信的基于WindowsCE的機(jī)頂盒系統(tǒng);另一類是中國(guó)自主開發(fā)的嵌入式操作系統(tǒng),如凱思集團(tuán)公司自主研制開發(fā)的嵌入式操作系統(tǒng)HopenOS(“女媧計(jì)劃”)等。嵌入式Linux操作系統(tǒng)設(shè)備、嵌入式操作系統(tǒng)以及用戶的應(yīng)用程序4個(gè)部分組成。國(guó)外嵌入式操作系統(tǒng)已經(jīng)從簡(jiǎn)單走向成熟,主要有VxWorks、QNX、PalmOS、WindowsCE等。國(guó)內(nèi)的嵌入式操作系統(tǒng)研究開發(fā)有2種類型,一類是基于國(guó)外操作系統(tǒng)二次開發(fā)完成的,如海信的基于WindowsCE的機(jī)頂盒系統(tǒng);另一類是中國(guó)自主開發(fā)的嵌入式操作系統(tǒng),如凱思集團(tuán)公司自主研制開發(fā)的嵌入式操作系統(tǒng)HopenOS(“女媧計(jì)劃”)等。嵌入式操作系統(tǒng)嵌入式Linux操作系統(tǒng)嵌入式Linux是以Linux為基礎(chǔ)的嵌入式操作系統(tǒng),被廣泛地使用在移動(dòng)電話、PDA、媒體播放器以及眾多消費(fèi)性電子裝置中。在過(guò)去,嵌入式應(yīng)用通常使用專用的組合語(yǔ)言程式碼,開發(fā)者必須撰寫所有的硬件驅(qū)動(dòng)程式以及接口。自從嵌入式Linux出現(xiàn)之后,以自由軟件為主的核心與公用程序被放進(jìn)嵌入式裝置的硬件資源中。典型的嵌入式Linux安裝大概需要2MB的系統(tǒng)內(nèi)存。嵌入式Linux與其他嵌入式操作系統(tǒng)相比具有如下優(yōu)點(diǎn)。①開放源碼。嵌入式Linux操作系統(tǒng)嵌入式Linux操作系統(tǒng)②所需容量?。ㄗ钚〉陌惭b大約需要2MB)。③無(wú)須版權(quán)費(fèi)用。④成熟且穩(wěn)定(經(jīng)歷許多年的發(fā)展與使用)。⑤良好的支援。嵌入式Linux操作系統(tǒng)與普通的Linux操作系統(tǒng)在功能與結(jié)構(gòu)上沒(méi)有很大的區(qū)別,作為嵌入式Linux操作臺(tái),突出的就是Linux適應(yīng)于多種CPU和多種硬件平臺(tái),是一個(gè)跨平臺(tái)的系統(tǒng)。到目前為止,它可以支持二三十種CPU。其性能穩(wěn)定,裁剪性很好,開發(fā)和使用都很容易。因此,要了解嵌入式Linux必須首先了解Linux操作系統(tǒng)。嵌入式Linux操作系統(tǒng)嵌入式Linux操作系統(tǒng)Linux是一個(gè)世界上最受歡迎的自由計(jì)算機(jī)操作系統(tǒng)內(nèi)核,1991年是由芬蘭人LinusTorvalds為嘗試在英特爾x86架構(gòu)上提供只有免費(fèi)的類UNIX操作系統(tǒng)而開發(fā)的。技術(shù)上說(shuō)Linux是一個(gè)內(nèi)核?!皟?nèi)核”指的是一個(gè)提供硬件抽象層、磁盤及文件系統(tǒng)控制、多任務(wù)等功能的系統(tǒng)軟件。一個(gè)內(nèi)核不是一套完成的操作系統(tǒng),還需要加載庫(kù)文件、應(yīng)用程序等,才可以形成完整的操作系統(tǒng)。一套基于Linux內(nèi)核的完整操作系統(tǒng)叫做Linux操作系統(tǒng)。Linux操作系統(tǒng)具備結(jié)構(gòu)清晰、功能簡(jiǎn)介等特征,逐漸成為一個(gè)穩(wěn)定可靠、功能完善的操作系統(tǒng)。作為一個(gè)操作系統(tǒng),Linux幾乎滿足當(dāng)今UNIX操作系統(tǒng)的所有要求,簡(jiǎn)單說(shuō),Linux具有以下特點(diǎn)。Linux介紹
嵌入式Linux操作系統(tǒng)1.完全免費(fèi)Linux是一款免費(fèi)的操作系統(tǒng),用戶可以通過(guò)網(wǎng)絡(luò)或其他途徑免費(fèi)獲得,并可以任意修改其源代碼,這是其他的操作系統(tǒng)所做不到的。正是由于這一點(diǎn),來(lái)自全世界的無(wú)數(shù)程序員參與了Linux的修改、編寫工作,程序員可以根據(jù)自己的興趣和靈感對(duì)其進(jìn)行改變。這讓Linux吸收了無(wú)數(shù)程序員的精華,不斷壯大。2.開放性開放性是指系統(tǒng)遵循世界標(biāo)準(zhǔn)規(guī)范,特別是遵循開放系統(tǒng)互連(OSI)國(guó)際標(biāo)準(zhǔn)。凡是遵循國(guó)際標(biāo)準(zhǔn)開發(fā)的硬件和軟件,都能彼此兼容,可方便地實(shí)現(xiàn)互連。3.支持多用戶訪問(wèn)和多任務(wù)編程
Linux是一個(gè)多用戶操作系統(tǒng),它允許多個(gè)用戶同時(shí)訪問(wèn)系統(tǒng)而不會(huì)造成用戶Linux介紹
嵌入式Linux操作系統(tǒng)之間的相互干擾。另外,Linux還支持真正的多用戶編程,一個(gè)用戶可以創(chuàng)建多個(gè)進(jìn)程,并使各個(gè)進(jìn)程協(xié)同工作來(lái)完成用戶的需求。4.良好的用戶界面Linux向用戶提供了兩種界面:用戶界面和系統(tǒng)調(diào)用。Linux的傳統(tǒng)用戶界面是基于文本的命令行界面,即Shell。Shell有很強(qiáng)的程序設(shè)計(jì)能力,用戶可方便地使用它編制程序,從而為用戶擴(kuò)充系統(tǒng)功能提供了更高級(jí)的手段。系統(tǒng)調(diào)用給用戶提供編程時(shí)使用的界面,用戶可以在編程時(shí)直接使用系統(tǒng)提供的系統(tǒng)調(diào)用命令。系統(tǒng)通過(guò)這個(gè)界面為用戶程序提供低級(jí)、高效率的服務(wù)。Linux還為用戶提供了圖形用戶界面,可利用鼠標(biāo)、菜單、窗口和滾動(dòng)條等設(shè)施,給用戶呈現(xiàn)一個(gè)直觀、易操作、交互性強(qiáng)的圖形化友好界面。Linux介紹
嵌入式Linux操作系統(tǒng)5.支持多種文件系統(tǒng)
Linux能支持多種文件系統(tǒng)。目前支持的文件系統(tǒng)有EXT2、EXT、XIAFS、ISOFS、HPFS、MSDOS、UMSDOS、PROC、NFS、SYSV、MINIX、SMB、UFS、NCP、VFAT、AFFS。Linux最常用的文件系統(tǒng)是EXT2,它的文件名長(zhǎng)度可達(dá)255字符,并且還有許多特有的功能,使它比常規(guī)的UNIX文件系統(tǒng)更加安全。6.采用虛擬內(nèi)存管理技術(shù)Linux支持請(qǐng)求頁(yè)式虛擬內(nèi)存管理技術(shù),這意味著只有當(dāng)前運(yùn)行的或者必須的代碼和數(shù)據(jù),才會(huì)被裝入到系統(tǒng)的物理內(nèi)存。為了進(jìn)一步優(yōu)化內(nèi)存,Linux還支持內(nèi)存緩沖機(jī)制,空閑的內(nèi)存可用于磁盤和設(shè)備緩存,從而加速了對(duì)代碼和數(shù)據(jù)的訪問(wèn),并能根據(jù)內(nèi)存的使用情況自動(dòng)對(duì)緩存的大小進(jìn)行調(diào)整。7.設(shè)備獨(dú)立性設(shè)備獨(dú)立性是指操作系統(tǒng)把所有外部設(shè)備當(dāng)成文件來(lái)看待,只要安裝設(shè)備的驅(qū)動(dòng)程序,任何用戶都可以像使用文件一樣,操縱、使用這些設(shè)備,而不必知道它們具體存在形式。Linux是具有設(shè)備獨(dú)立性的操作系統(tǒng),它的內(nèi)核具有高度適應(yīng)能力,隨著更多的程序員加入Linux編程,會(huì)有更多硬件設(shè)備加入到各種Linux內(nèi)核和發(fā)行版本中。另外,由于用戶可以免費(fèi)得到Linux的內(nèi)核源代碼,因此,用戶可以修改內(nèi)核源代碼,以適應(yīng)新增加的外部設(shè)備。Linux介紹
嵌入式Linux操作系統(tǒng)8.豐富的網(wǎng)絡(luò)功能完善的并且內(nèi)置在核心的網(wǎng)絡(luò)功能是Linux的一大特點(diǎn)。Linux在通信和網(wǎng)絡(luò)功能方面優(yōu)于其他操作系統(tǒng)。其他操作系統(tǒng)通常不包含如此緊密地和內(nèi)核在一起的連接網(wǎng)絡(luò)的能力,用于通信和聯(lián)網(wǎng)的實(shí)用程序也不多。支持Internet是網(wǎng)絡(luò)功能之一:Linux免費(fèi)提供了大量支持Internet的軟件,用戶可以通過(guò)這類軟件,同世界上其他人進(jìn)行網(wǎng)絡(luò)通信。文件傳輸是網(wǎng)絡(luò)功能之二:用戶能通過(guò)一些Linux命令完成內(nèi)部信息或文件的傳輸。遠(yuǎn)程訪問(wèn)是網(wǎng)絡(luò)功能之三:Linux不僅允許進(jìn)行文件和程序傳輸,還為系統(tǒng)管理員和技術(shù)人員提供了訪問(wèn)其他系統(tǒng)的窗口。通過(guò)這種遠(yuǎn)程訪問(wèn)的功能,技術(shù)人員能有效地為多個(gè)系統(tǒng)服務(wù)。9.可靠的系統(tǒng)安全Linux采取了許多安全技術(shù)措施,包括對(duì)讀/寫進(jìn)行權(quán)限控制、帶保護(hù)的子系統(tǒng)、審計(jì)跟蹤、核心授權(quán)等,這為網(wǎng)絡(luò)多用戶環(huán)境中的用戶提供了必要的安全保障。Linux介紹
嵌入式Linux操作系統(tǒng)10.良好的可移植性可移植性是指將操作系統(tǒng)從一個(gè)平臺(tái)轉(zhuǎn)移到另一個(gè)平臺(tái)時(shí),它仍然能按其自身的方式運(yùn)行的能力。
Linux是一種可移植的操作系統(tǒng),能夠在從微型計(jì)算機(jī)到大型計(jì)算機(jī)的任何環(huán)境中和任何平臺(tái)上運(yùn)行??梢浦残詾檫\(yùn)行Linux的不同計(jì)算機(jī)平臺(tái)與其他任何機(jī)器進(jìn)行準(zhǔn)確而有效的通信提供了手段,不需要另外增加特殊的和昂貴的通信接口。作為一個(gè)完整的操作系統(tǒng),Linux具有穩(wěn)定而強(qiáng)大的功能,想要訪問(wèn)任何非自己的存儲(chǔ)器空間的進(jìn)程只能通過(guò)系統(tǒng)調(diào)用來(lái)達(dá)成。一般進(jìn)程是處于用戶模式底下,而運(yùn)行系統(tǒng)調(diào)用時(shí)會(huì)被切換成內(nèi)核模式,所有的特殊指令只能在內(nèi)核模式運(yùn)行,此措施讓內(nèi)核可以完美管理系統(tǒng)內(nèi)部與外部設(shè)備,并且拒絕無(wú)權(quán)限的進(jìn)程提出的請(qǐng)求。因此理論上任何應(yīng)用程序運(yùn)行時(shí)的錯(cuò)誤,都不可能讓系統(tǒng)崩潰。Linux的架構(gòu)如圖5-1所示。Linux介紹
嵌入式Linux操作系統(tǒng)Linux介紹
嵌入式Linux操作系統(tǒng)1.支持多種硬件平臺(tái)
由于嵌入式設(shè)備硬件平臺(tái)的多樣性,CPU芯片的快速更新,嵌入式操作系統(tǒng)要求支持常用的嵌入式CPU,如x86、ARM、MIPS、PowerPC等,并具有良好的可移植性。另外,還需要支持種類繁多的外部設(shè)備。Linux支持以上幾乎所有的主流芯片,并且還在不斷地被移植到新的芯片上。2.占有較少的硬件資源由于多數(shù)嵌入式系統(tǒng)具有成本敏感性,處理器速度較低,存儲(chǔ)器空間較少,這要求嵌入式操作系統(tǒng)體積小、速度快。Linux體系結(jié)構(gòu)比較靈活,易于裁減,可以小到2MFlash或4MRAM。Linux作為嵌入式操作系統(tǒng)的優(yōu)勢(shì)嵌入式Linux操作系統(tǒng)3.高可定制性由于不同的嵌入式應(yīng)用對(duì)系統(tǒng)要求各不相同,這要求嵌入式操作系統(tǒng)具備較高的可定制性,能夠根據(jù)需要方便地增加和減少各項(xiàng)功能模塊。這一點(diǎn)對(duì)于嵌入式領(lǐng)域至關(guān)重要,而Linux由于圖形系統(tǒng)不在內(nèi)核中,且支持模塊機(jī)制,內(nèi)核可根據(jù)需要加入或去掉功能。其外圍工具擁有眾多選擇,由于可以自由修改源代碼,具有極強(qiáng)的可定制性。Linux作為嵌入式操作系統(tǒng)的優(yōu)勢(shì)嵌入式Linux操作系統(tǒng)4.具有實(shí)時(shí)處理能力實(shí)時(shí)應(yīng)用分為硬實(shí)時(shí)和軟實(shí)時(shí)兩大類,嵌入式操作系統(tǒng)需要明確是否支持實(shí)時(shí)和支持哪一類實(shí)時(shí)應(yīng)用,需要提供最壞情況響應(yīng)時(shí)間為多長(zhǎng)。Linux最初設(shè)計(jì)時(shí)沒(méi)有考慮實(shí)時(shí)應(yīng)用,但眾多的實(shí)時(shí)Linux項(xiàng)目已使Linux具備了硬實(shí)時(shí)和軟實(shí)時(shí)處理能力,硬實(shí)時(shí)有RT-Linux和RTAI,而版本為2.6的Linux中加入了可搶占核心,使得Linux具備了軟實(shí)時(shí)處理能力,此外還有Timsys、Montavista等實(shí)時(shí)Linux實(shí)現(xiàn)。Linux自由開發(fā)模式的優(yōu)點(diǎn)得到了充分的體現(xiàn)。RT-Linux已經(jīng)在美國(guó)航天部門、印度軍方等得到了廣泛應(yīng)用,還有Montavista和Timsys的實(shí)時(shí)Linux都有很多成功案例。5.具備強(qiáng)大的網(wǎng)絡(luò)功能現(xiàn)在越來(lái)越多的嵌入式設(shè)備需要具備網(wǎng)絡(luò)功能。這要求嵌入式操作系統(tǒng)支持常用的網(wǎng)絡(luò)協(xié)議和可靠的網(wǎng)絡(luò)功能。Linux的網(wǎng)絡(luò)功能經(jīng)過(guò)幾次改進(jìn),其效率、功能都很突出。且具有眾多的網(wǎng)絡(luò)工具,支持幾乎所有常見的網(wǎng)絡(luò)協(xié)議。這些使得Linux在網(wǎng)絡(luò)設(shè)備中倍受青睞,很多防火墻、低端路由器等中使用的都是Linux。Linux作為嵌入式操作系統(tǒng)的優(yōu)勢(shì)嵌入式Linux操作系統(tǒng)當(dāng)然,Linux作為嵌入式操作系統(tǒng)也存在著不足,主要表現(xiàn)在集成開發(fā)環(huán)境有待改善。一個(gè)完整的嵌入式系統(tǒng)的集成開發(fā)環(huán)境一般需要提供的工具是編譯/連接器、內(nèi)核調(diào)試/跟蹤器和集成圖形界面開發(fā)平臺(tái)。其中集成圖形界面開發(fā)平臺(tái)包括編輯器、調(diào)試器、軟件仿真器、監(jiān)視器等。在Linux系統(tǒng)中,具有功能強(qiáng)大的gcc編譯工具鏈,它使用基于GNU的調(diào)試器gbd的遠(yuǎn)程調(diào)試功能,一般由一臺(tái)客戶機(jī)運(yùn)行調(diào)試程序調(diào)試宿主機(jī)的操作系統(tǒng)內(nèi)核,在使用遠(yuǎn)程開發(fā)時(shí)還可以使用交叉平臺(tái)的方式,如在Windows平臺(tái)下的調(diào)試跟蹤器對(duì)Linux的宿主系統(tǒng)做調(diào)試。但是Linux在基于圖形界面的特定系統(tǒng)定制平臺(tái)的研究上,與Windows操作系統(tǒng)相比還存在差距,因此,要使嵌入式Linux在嵌入式操作系統(tǒng)領(lǐng)域中的優(yōu)勢(shì)更加明顯,整體集成開發(fā)環(huán)境還有待提高和完善。Linux作為嵌入式操作系統(tǒng)的優(yōu)勢(shì)嵌入式Linux操作系統(tǒng)進(jìn)程是UNIX操作系統(tǒng)最基本的抽象之一。一個(gè)進(jìn)程就是處于執(zhí)行期的程序(目標(biāo)代碼存放在某種存儲(chǔ)介質(zhì)上)。但進(jìn)程并不僅僅局限于一段可執(zhí)行代碼,通常進(jìn)程還包含其他資源,像用來(lái)存放全局變量的數(shù)據(jù)段(Textsection)、打開的文件、掛起的信號(hào)等,當(dāng)然還包含地址空間及一個(gè)或幾個(gè)執(zhí)行線程(Threadsofexccution)。執(zhí)行線程,簡(jiǎn)稱線程(Threads),是在進(jìn)程中活動(dòng)的對(duì)象。每個(gè)線程都擁有一個(gè)獨(dú)立的程序計(jì)數(shù)器、進(jìn)程棧和一組進(jìn)程寄存器。內(nèi)核調(diào)度的對(duì)象是線程,而不是進(jìn)程。在傳統(tǒng)的UNIX系統(tǒng)中,一個(gè)進(jìn)程只包含一個(gè)線程,但現(xiàn)在的系統(tǒng)大多支持多線程應(yīng)用程序。進(jìn)程提供兩種虛擬機(jī)制:虛擬處理器和虛擬內(nèi)存。雖然實(shí)際上可能是許多進(jìn)程正在分享一個(gè)處理器,但虛擬處理器給進(jìn)程一種假象,讓這些進(jìn)程覺(jué)得自己在獨(dú)享處理器。而虛擬內(nèi)存使得進(jìn)程在獲取和使用內(nèi)存時(shí)覺(jué)得自己擁有整個(gè)系統(tǒng)的所有內(nèi)存資源。線程之間(包含在同一個(gè)進(jìn)程中的線程)可以共享虛擬內(nèi)存,但擁有各自的虛擬處理器。進(jìn)程管理嵌入式Linux操作系統(tǒng)1.Linux進(jìn)程的基礎(chǔ)(1)進(jìn)程的基本概念程序是為了完成某種任務(wù)而設(shè)計(jì)的軟件,比如vi是程序。進(jìn)程就是運(yùn)行中的程序。一個(gè)運(yùn)行著的程序,可能有多個(gè)進(jìn)程,比如Web服務(wù)器是Apache服務(wù)器,當(dāng)管理員啟動(dòng)服務(wù)后,可能會(huì)有好多人來(lái)訪問(wèn),也就是說(shuō)許多用戶同時(shí)請(qǐng)求httpd服務(wù),Apache服務(wù)器將會(huì)創(chuàng)建多個(gè)httpd進(jìn)程來(lái)對(duì)其進(jìn)行服務(wù)。對(duì)于進(jìn)程來(lái)說(shuō),可以看成是一個(gè)具有獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合的一次可以并發(fā)執(zhí)行的運(yùn)行活動(dòng),是處于活動(dòng)狀態(tài)的計(jì)算機(jī)程序。進(jìn)程作為構(gòu)成系統(tǒng)的基本細(xì)胞,不僅是系統(tǒng)內(nèi)部獨(dú)立運(yùn)行的實(shí)體,而且是獨(dú)立競(jìng)爭(zhēng)資源的基本實(shí)體。了解進(jìn)程的本質(zhì),對(duì)于理解、描述和設(shè)計(jì)操作系統(tǒng)有著極為重要的意義。了解進(jìn)程的活動(dòng)、狀態(tài),也有利于編制復(fù)雜程序。進(jìn)程管理嵌入式Linux操作系統(tǒng)
進(jìn)程管理
(2)進(jìn)程的屬性進(jìn)程的定義:一個(gè)進(jìn)程是一個(gè)程序的一次執(zhí)行的過(guò)程;程序是靜態(tài)的,它是一些保存在磁盤上的可執(zhí)行的代碼和數(shù)據(jù)集合;進(jìn)程是一個(gè)動(dòng)態(tài)的概念,它是Linux系統(tǒng)的基本的調(diào)度單位。一個(gè)進(jìn)程由如下元素組成:●程序讀取的上、下文,它表示程序讀取執(zhí)行的狀態(tài);●程序當(dāng)前執(zhí)行的目錄;●程序服務(wù)的文件和目錄;●程序訪問(wèn)的權(quán)限;●內(nèi)存和其他分配給進(jìn)程的系統(tǒng)資源。嵌入式Linux操作系統(tǒng)進(jìn)程管理(3)理解Linux下進(jìn)程的結(jié)構(gòu)圖5-2Linux下進(jìn)程的結(jié)構(gòu)
Linux中一個(gè)進(jìn)程在內(nèi)存里有3部分?jǐn)?shù)據(jù),即“數(shù)據(jù)段”、“堆棧段”和“代碼段”。基于I386兼容的中央處理器,都有上述3種段寄存器,以方便操作系統(tǒng)的運(yùn)行,如圖5-2所示。代碼段是存放了程序代碼的數(shù)據(jù),假如機(jī)器中有數(shù)個(gè)進(jìn)程運(yùn)行相同的一個(gè)程序,那么它們就可以使用同一個(gè)代碼段。而數(shù)據(jù)段則存放程序的全局變量、常數(shù)及動(dòng)態(tài)數(shù)據(jù)分配的數(shù)據(jù)空間。堆棧段存放的就是子程序的返回地址、子程序的參數(shù)及程序的局部變量。堆棧段包含在進(jìn)程控制塊(ProcessControlBlock,PCB)中。PCB處于進(jìn)程核心堆棧的底部,不需要額外分配空間。嵌入式Linux操作系統(tǒng)進(jìn)程管理(4)進(jìn)程狀態(tài)進(jìn)程狀態(tài)是指進(jìn)程在生存周期中的各種狀態(tài)及狀態(tài)的轉(zhuǎn)換。下面是Linux系統(tǒng)的進(jìn)程狀態(tài)模型的各種狀態(tài)。●用戶狀態(tài):進(jìn)程在用戶狀態(tài)下運(yùn)行的狀態(tài)。●內(nèi)核狀態(tài):進(jìn)程在內(nèi)核狀態(tài)下運(yùn)行的狀態(tài)。●內(nèi)存中就緒:進(jìn)程沒(méi)有執(zhí)行,但處于就緒狀態(tài),只要內(nèi)核調(diào)度它,就可以執(zhí)行?!駜?nèi)存中睡眠:進(jìn)程正在睡眠并且進(jìn)程存儲(chǔ)在內(nèi)存中,沒(méi)有被交換到SWAP設(shè)備。●就緒且換出:進(jìn)程處于就緒狀態(tài),但是必須把它換入內(nèi)存,內(nèi)核才能再次調(diào)度它運(yùn)行。●睡眠且換出:進(jìn)程正在睡眠,且被換出內(nèi)存?!癖粨屜龋哼M(jìn)程從內(nèi)核狀態(tài)返回用戶狀態(tài)時(shí),內(nèi)核搶先于它做了上下文切換,調(diào)度了另一個(gè)進(jìn)程,原先這個(gè)進(jìn)程就處于被搶先狀態(tài)?!駝?chuàng)建狀態(tài):進(jìn)程剛被創(chuàng)建。該進(jìn)程存在,但既不是就緒狀態(tài),也不是睡眠狀態(tài)。這個(gè)狀態(tài)是除了進(jìn)程0以外的所有進(jìn)程的最初狀態(tài)?!窠┧罓顟B(tài)(zombie):進(jìn)程調(diào)用exit結(jié)束,進(jìn)程不再存在,但在進(jìn)程表項(xiàng)中仍有記錄,該記錄可由父進(jìn)程收集。嵌入式Linux操作系統(tǒng)(1)進(jìn)程的創(chuàng)建與結(jié)束在Linux系統(tǒng)中,通常使用fork(
)系統(tǒng)調(diào)用用來(lái)復(fù)制一個(gè)現(xiàn)有進(jìn)程,從而創(chuàng)建一個(gè)全新的進(jìn)程。被復(fù)制的進(jìn)程被稱為父進(jìn)程,新產(chǎn)生的進(jìn)程被稱為子進(jìn)程。fork一詞在英文中是“分叉”的意思,同樣fork(
)調(diào)用也起到一個(gè)“分叉”的作用,如果系統(tǒng)中只提供fork(
)調(diào)用,那么整個(gè)操作系統(tǒng)的所有進(jìn)程都只能運(yùn)行同一個(gè)程序了,因?yàn)槠浯a段都是復(fù)制或者共享的。Linux為了創(chuàng)建進(jìn)程運(yùn)行新的程序,又提供了execve(
)系統(tǒng)調(diào)用。進(jìn)程的結(jié)束可以使用exit(
)系統(tǒng)調(diào)用,無(wú)論在執(zhí)行到什么位置,只要執(zhí)行到exit系統(tǒng)調(diào)用,進(jìn)程會(huì)停止所有操作并將其占用的資源釋放掉。進(jìn)程管理嵌入式Linux操作系統(tǒng)(2)進(jìn)程的組成在Linux中,進(jìn)程是以進(jìn)程號(hào)(ProcessID,PID)作為標(biāo)示。任何對(duì)進(jìn)程進(jìn)行的操作都要給與其相應(yīng)的PID。每個(gè)進(jìn)程都屬于一個(gè)用戶,進(jìn)程要配備其所屬的用戶編號(hào)(UID)。此外,每個(gè)進(jìn)程都屬于多個(gè)用戶組,所以進(jìn)程還要配備其歸屬的用戶組編號(hào)(GID)的數(shù)組。進(jìn)程運(yùn)行的環(huán)境成為進(jìn)程上、下文。Linux中進(jìn)程的上、下文由進(jìn)程控制塊(ProcessControlBlock,PCB)、正文段、數(shù)據(jù)段以及用戶堆棧組成。其中,正文段存放該進(jìn)程的可執(zhí)行代碼,數(shù)據(jù)段存放進(jìn)程中靜態(tài)產(chǎn)生的數(shù)據(jù)結(jié)構(gòu),而PCB包括進(jìn)程的編號(hào)、狀態(tài)、優(yōu)先級(jí)以及正文段和數(shù)據(jù)段中數(shù)據(jù)分布的大概情況。進(jìn)程管理嵌入式Linux操作系統(tǒng)啟動(dòng)進(jìn)程時(shí)輸入需要運(yùn)行的程序的程序名,執(zhí)行一個(gè)程序,其實(shí)也就是啟動(dòng)了一個(gè)進(jìn)程。在Linux系統(tǒng)中,每個(gè)進(jìn)程都具有一個(gè)進(jìn)程號(hào),用于系統(tǒng)識(shí)別和調(diào)度進(jìn)程。啟動(dòng)一個(gè)進(jìn)程有兩個(gè)主要途徑:手工啟動(dòng)和調(diào)度啟動(dòng)。后者是事先進(jìn)行設(shè)置,根據(jù)用戶要求自行啟動(dòng)。由用戶輸入命令,直接啟動(dòng)一個(gè)進(jìn)程便是手工啟動(dòng)進(jìn)程。但手工啟動(dòng)進(jìn)程又可以分為很多種,根據(jù)啟動(dòng)的進(jìn)程類型不同、性質(zhì)不同,實(shí)際結(jié)果也不一樣。①前臺(tái)啟動(dòng)。前臺(tái)啟動(dòng)是手工啟動(dòng)一個(gè)進(jìn)程的最常用的方式。用戶鍵入一個(gè)命令“df”,就已經(jīng)啟動(dòng)了一個(gè)進(jìn)程,而且是一個(gè)前臺(tái)的進(jìn)程。這時(shí)候系統(tǒng)其實(shí)已經(jīng)處于多進(jìn)程狀態(tài)。有許多運(yùn)行在后臺(tái)的、系統(tǒng)啟動(dòng)時(shí)就已經(jīng)自動(dòng)啟動(dòng)的進(jìn)程正在悄悄運(yùn)行著。有的用戶在鍵入“df”命令以后趕緊使用“ps–x”查看,卻沒(méi)有看到df進(jìn)程,會(huì)覺(jué)得很奇怪。其實(shí)這是因?yàn)閐f這個(gè)進(jìn)程結(jié)束太快,使用ps查看時(shí)該進(jìn)程已經(jīng)執(zhí)行結(jié)束了。如果啟動(dòng)一個(gè)比較耗時(shí)的進(jìn)程,如在根命令下運(yùn)行find,然后使用psaux查看,就會(huì)看到在里面有一個(gè)find進(jìn)程。進(jìn)程管理嵌入式Linux操作系統(tǒng)②后臺(tái)啟動(dòng)。直接從后臺(tái)手工啟動(dòng)一個(gè)進(jìn)程用得比較少一些,除非是該進(jìn)程甚為耗時(shí),且用戶也不急著需要結(jié)果。假設(shè)用戶要啟動(dòng)一個(gè)需要長(zhǎng)時(shí)間運(yùn)行的格式化文本文件的進(jìn)程,為了不使整個(gè)Shell在格式化過(guò)程中都處于“癱瘓”狀態(tài),從后臺(tái)啟動(dòng)這個(gè)進(jìn)程是明智的選擇。(3)進(jìn)程的狀態(tài)和調(diào)度進(jìn)程是一個(gè)動(dòng)態(tài)的實(shí)體,從創(chuàng)建到結(jié)束時(shí)一個(gè)進(jìn)程的整個(gè)生命周期。在這個(gè)周期中,進(jìn)程可能會(huì)經(jīng)歷不同的狀態(tài),一般來(lái)說(shuō),所有進(jìn)程都要經(jīng)歷3種狀態(tài),即運(yùn)行態(tài)、就緒態(tài)和阻塞態(tài)(或封鎖態(tài)),其狀態(tài)轉(zhuǎn)換如圖5-4所示。進(jìn)程管理嵌入式Linux操作系統(tǒng)●運(yùn)行狀態(tài)是指當(dāng)前進(jìn)程已分配到處理器,并不需要等待其他所需資源,正在處理器上執(zhí)行時(shí)的狀態(tài)。處于這種狀態(tài)的進(jìn)程個(gè)數(shù)不能大于處理器的數(shù)目。在一般單CPU機(jī)制中,任何時(shí)刻處于運(yùn)行狀態(tài)的進(jìn)程至多有一個(gè)。只有在運(yùn)行態(tài)時(shí),進(jìn)程才可以使用所申請(qǐng)到的資源?!窬途w狀態(tài)是指進(jìn)程已經(jīng)獲得運(yùn)行所需的資源,具備運(yùn)行條件,但因?yàn)槠渌M(jìn)程正占用處理器,所以暫時(shí)不能運(yùn)行而等待分配處理器資源的狀態(tài)。一旦把處理器分配給它,立即就可運(yùn)行。在操作系統(tǒng)中,處于就緒狀態(tài)的進(jìn)程數(shù)目可以是多個(gè)?!褡枞麪顟B(tài)是指進(jìn)程因等待某種事件發(fā)生(如等待某一輸入、輸出操作完成,等待其他進(jìn)程發(fā)來(lái)的信號(hào)等)而暫時(shí)不能運(yùn)行的狀態(tài)。也就是說(shuō),處于封鎖狀態(tài)的進(jìn)程尚不具備運(yùn)行條件,即使處理器空閑,它也無(wú)法使用。這種狀態(tài)有時(shí)也稱為休眠狀態(tài)、封鎖狀態(tài)、等待狀態(tài)或者掛起狀態(tài)。阻塞狀態(tài)不能直接進(jìn)入運(yùn)行狀態(tài)。系統(tǒng)中處于這種狀態(tài)的進(jìn)程可以是多個(gè)。進(jìn)程管理嵌入式Linux操作系統(tǒng)●運(yùn)行態(tài)(TASK_RUNNING):此時(shí)進(jìn)程正在運(yùn)行或者準(zhǔn)備運(yùn)行。一個(gè)進(jìn)程處于RUNNING狀態(tài)并不代表它一定被執(zhí)行。由于在多任務(wù)系統(tǒng)中,各個(gè)就緒進(jìn)程需要并發(fā)執(zhí)行,但是一般系統(tǒng)資源中只有一個(gè)處理器,因此在某個(gè)特定時(shí)刻,這些處于RUNNING狀態(tài)的進(jìn)程之中,只有一個(gè)能夠得到處理器,而其他進(jìn)程必須在一個(gè)就緒隊(duì)列中等待?!竦却龖B(tài):此時(shí)進(jìn)程在等待一個(gè)事件的發(fā)生或某種系統(tǒng)資源。Linux系統(tǒng)分為兩種等待進(jìn)程,即可中斷的(TASK_INTERRUPTIBLE)和不可中斷的(TASK_UNINTERR-UPTIBLE)。可中斷的等待進(jìn)程處于等待隊(duì)列中,當(dāng)需要的條件許可時(shí),可以被操作系統(tǒng)或者其他進(jìn)程的信號(hào)喚醒;而不可中斷的等待進(jìn)程不受信號(hào)的打擾,將一直等待系統(tǒng)資源狀態(tài)的改變,當(dāng)系統(tǒng)資源有效時(shí),可以由操作系統(tǒng)喚醒,否則一直處于等待狀態(tài)?!裢V箲B(tài)(TASK_STOPPED):進(jìn)程被暫停,需要通過(guò)其他進(jìn)程的信號(hào)才能喚醒。●僵尸態(tài)(TASK_ZOMBIE):進(jìn)程結(jié)束但是尚未消亡的一種狀態(tài),此時(shí)進(jìn)程已經(jīng)結(jié)束運(yùn)行并釋放大部分資源,但尚未釋放進(jìn)程控制塊。進(jìn)程管理嵌入式Linux操作系統(tǒng)(4)進(jìn)程的調(diào)度為了讓Linux來(lái)管理系統(tǒng)中的進(jìn)程,每個(gè)進(jìn)程用一個(gè)task_struct數(shù)據(jù)結(jié)構(gòu)來(lái)表示(任務(wù)與進(jìn)程在Linux中可以混用)。數(shù)組task包含指向系統(tǒng)中所有task_struct結(jié)構(gòu)的指針。這意味著系統(tǒng)中的最大進(jìn)程數(shù)目受task數(shù)組大小的限制,默認(rèn)值一般為512。創(chuàng)建新進(jìn)程時(shí),Linux將從系統(tǒng)內(nèi)存中分配一個(gè)task_struct結(jié)構(gòu)并將其加入task數(shù)組。當(dāng)前運(yùn)行進(jìn)程的結(jié)構(gòu)用current指針來(lái)指示。①Linux還支持實(shí)時(shí)進(jìn)程。這些進(jìn)程必須對(duì)外部時(shí)間作出快速反應(yīng)(這就是“實(shí)時(shí)”的意思),系統(tǒng)將區(qū)分對(duì)待這些進(jìn)程和其他進(jìn)程。雖然task_struct數(shù)據(jù)結(jié)構(gòu)龐大而復(fù)雜,但它可以分成一些功能組成部分?!馭tate:進(jìn)程在執(zhí)行過(guò)程中會(huì)根據(jù)環(huán)境來(lái)改變state。Linux進(jìn)程有圖5-5所述4種狀態(tài)。●Scheduling
Information:調(diào)度器需要這些信息以便判定系統(tǒng)中哪個(gè)進(jìn)程最迫切需要運(yùn)行。●Identifiers:系統(tǒng)中每個(gè)進(jìn)程都有進(jìn)程標(biāo)志。進(jìn)程標(biāo)志并不是task數(shù)組的索引,它僅僅是個(gè)數(shù)字。每個(gè)進(jìn)程還有一個(gè)用戶與組標(biāo)志,它們用來(lái)控制進(jìn)程對(duì)系統(tǒng)中文件和設(shè)備的存取權(quán)限。進(jìn)程管理嵌入式Linux操作系統(tǒng)●Inter-Process
Communication:Linux支持經(jīng)典的UNIX
IPC機(jī)制,如信號(hào)、管道和信號(hào)燈以及系統(tǒng)V中IPC機(jī)制,包括共享內(nèi)存、信號(hào)燈和消息隊(duì)列?!馤inks:Linux系統(tǒng)中所有進(jìn)程都是相互聯(lián)系的。除了初始化進(jìn)程外,所有進(jìn)程都有一個(gè)父進(jìn)程。新進(jìn)程不是被創(chuàng)建,而是被復(fù)制,或者從以前的進(jìn)程克隆而來(lái)。每個(gè)進(jìn)程對(duì)應(yīng)的task_struct結(jié)構(gòu)中包含有指向其父進(jìn)程和兄弟進(jìn)程(具有相同父進(jìn)程的進(jìn)程)以及子進(jìn)程的指針。我們可以使用pstree命令來(lái)觀察Linux系統(tǒng)中運(yùn)行進(jìn)程間的關(guān)系。另外,系統(tǒng)中所有進(jìn)程都用一個(gè)雙向鏈表連接起來(lái),而它們的根是init進(jìn)程的task_struct數(shù)據(jù)結(jié)構(gòu)。這個(gè)鏈表被Linux核心用來(lái)尋找系統(tǒng)中所有進(jìn)程,它對(duì)ps或者kill命令提供了支持?!馮imes
and
Timers:核心需要記錄進(jìn)程的創(chuàng)建時(shí)間以及在其生命期中消耗的CPU時(shí)間。時(shí)鐘每跳動(dòng)一次,核心就要更新保存在jiffies變量中,記錄進(jìn)程在系統(tǒng)和用戶模式下消耗的時(shí)間量。Linux支持與進(jìn)程相關(guān)的interval定時(shí)器,進(jìn)程可以通過(guò)系統(tǒng)調(diào)用來(lái)設(shè)定定時(shí)器,以便在定時(shí)器到時(shí)后向它發(fā)送信號(hào)。這些定時(shí)器可以是一次性的或者周期性的。進(jìn)程管理嵌入式Linux操作系統(tǒng)●File
system:進(jìn)程可以自由地打開或關(guān)閉文件,進(jìn)程的task_struct結(jié)構(gòu)中包含一個(gè)指向每個(gè)打開文件描敘符的指針以及指向兩個(gè)VFSinode的指針。每個(gè)VFSFinode唯一地標(biāo)記文件中的一個(gè)目錄或者文件,同時(shí)還對(duì)底層文件系統(tǒng)提供統(tǒng)一的接口。這兩個(gè)指針,一個(gè)指向進(jìn)程的根目錄,另一個(gè)指向其當(dāng)前或者pwd目錄。pwd從UNIX命令pwd中派生出來(lái),用來(lái)顯示當(dāng)前工作目錄。這兩個(gè)VFS
inode包含一個(gè)count域,當(dāng)多個(gè)進(jìn)程引用它們時(shí),它的值將增加。這就是為什么不能刪除進(jìn)程當(dāng)前目錄,或者其子目錄的原因?!馰irtual
memory:多數(shù)進(jìn)程都有一些虛擬內(nèi)存(核心線程和后臺(tái)進(jìn)程沒(méi)有),Linux核心必須跟蹤虛擬內(nèi)存與系統(tǒng)物理內(nèi)存的映射關(guān)系。●Processor
Specific
Context:進(jìn)程可以認(rèn)為是系統(tǒng)當(dāng)前狀態(tài)的總和。進(jìn)程運(yùn)行時(shí),它將使用處理器的寄存器以及堆棧等。進(jìn)程被掛起時(shí),進(jìn)程的上、下文以及所有的與CPU相關(guān)的狀態(tài)必須保存在它的task_struct結(jié)構(gòu)中。當(dāng)調(diào)度器重新調(diào)度該進(jìn)程時(shí),所有上、下文被重新設(shè)定。進(jìn)程管理嵌入式Linux操作系統(tǒng)②Linux使用用戶和組標(biāo)志符來(lái)檢查對(duì)系統(tǒng)中文件和可執(zhí)行映像的訪問(wèn)權(quán)限。Linux系統(tǒng)中所有的文件都有使用者和允許的權(quán)限,這些權(quán)限描敘了系統(tǒng)使用者對(duì)文件或者目錄的使用權(quán)?;镜臋?quán)限是讀、寫和可執(zhí)行,這些權(quán)限被分配給3類用戶:文件的所有者,屬于相同組的進(jìn)程,以及系統(tǒng)中的所有進(jìn)程。每類用戶具有不同的權(quán)限,如一個(gè)文件允許其擁有者讀寫,但是同組的只能讀而其他進(jìn)程不允許訪問(wèn)。Linux將文件和目錄的訪問(wèn)特權(quán)授予一組用戶,而不是單個(gè)用戶或者系統(tǒng)中所有進(jìn)程。如可以為某個(gè)軟件項(xiàng)目中的所有用戶創(chuàng)建一個(gè)組,并將其權(quán)限設(shè)置成只有他們才允許讀寫項(xiàng)目中的源代碼。一個(gè)進(jìn)程可以同時(shí)屬于多個(gè)組(最多為32個(gè)),這些組都被放在進(jìn)程的task_struct中的group數(shù)組中。只要某組進(jìn)程可以存取某個(gè)文件,則由此組派生出的進(jìn)程對(duì)這個(gè)文件有相應(yīng)的組訪問(wèn)權(quán)限。進(jìn)程管理嵌入式Linux操作系統(tǒng)task_struct結(jié)構(gòu)中有4對(duì)進(jìn)程和組標(biāo)志符?!駏id,
gid:表示運(yùn)行進(jìn)程的用戶標(biāo)志符和組標(biāo)志符。
●effective
uid
and
gid:有些程序可以在執(zhí)行過(guò)程中將執(zhí)行進(jìn)程的uid和gid改成其程序自身的uid和gid(保存在描敘可執(zhí)行映象的VFSinode屬性中)。這些程序被稱為setuid程序,常在嚴(yán)格控制對(duì)某些服務(wù)的訪問(wèn)時(shí)使用,特別是那些為別的進(jìn)程而運(yùn)行的進(jìn)程,如網(wǎng)絡(luò)后臺(tái)進(jìn)程。有效uid和gid是那些setuid執(zhí)行過(guò)程在執(zhí)行時(shí)變化出的uid和gid。當(dāng)進(jìn)程試圖訪問(wèn)特權(quán)數(shù)據(jù)或代碼時(shí),核心將檢查進(jìn)程的有效gid和uid?!駀ile
system
uid
and
gid:它們和有效uid和gid相似但用來(lái)檢驗(yàn)進(jìn)程的文件系統(tǒng)訪問(wèn)權(quán)限,如運(yùn)行在用戶模式下的NFS服務(wù)器存取文件時(shí),NFS文件系統(tǒng)將使用這些標(biāo)志符。在這里只有文件系統(tǒng)uid和gid發(fā)生了改變(而非有效uid和gid)。這樣可以避免惡意用戶向NFS服務(wù)器發(fā)送KILL信號(hào)?!駍aved
uid
and
gid:POSIX標(biāo)準(zhǔn)中要求實(shí)現(xiàn)這兩個(gè)標(biāo)志符,它們被那些通過(guò)系統(tǒng)調(diào)用改變進(jìn)程uid和gid的程序使用。當(dāng)進(jìn)程的原始uid和gid變化時(shí),它們被用來(lái)保存真正的uid和gid。進(jìn)程管理嵌入式Linux操作系統(tǒng)③進(jìn)程調(diào)度機(jī)制的設(shè)計(jì),還對(duì)系統(tǒng)復(fù)雜性有著極大的影響,常常會(huì)由于實(shí)現(xiàn)的復(fù)雜程度而在功能和性能方面做出必要的權(quán)衡和讓步。另外,進(jìn)度調(diào)度的機(jī)制還要考慮到“公正性”,讓系統(tǒng)所有進(jìn)程都有機(jī)會(huì)向前推進(jìn),盡管其進(jìn)度各有不同,并最終會(huì)受到CPU速度和負(fù)載的影響。更重要的是,還要防止死鎖的發(fā)生,以及防止對(duì)CPU能力的不合理使用,也就是說(shuō)要防止CPU尚有能力且有進(jìn)程等待執(zhí)行,卻由于某種原因而長(zhǎng)時(shí)間得不到執(zhí)行的情況。一旦這些情況發(fā)生,調(diào)度機(jī)制還能識(shí)別與化解。所有進(jìn)程部分時(shí)間運(yùn)行于用戶模式,部分時(shí)間運(yùn)行于系統(tǒng)模式。如何支持這些模式,底層硬件的實(shí)現(xiàn)各不相同,但是存在一種安全機(jī)制可以使它們?cè)谟脩裟J胶拖到y(tǒng)模式之間來(lái)回切換。用戶模式的權(quán)限比系統(tǒng)模式下的小得多。進(jìn)程通過(guò)系統(tǒng)調(diào)用切換到系統(tǒng)模式繼續(xù)執(zhí)行,此時(shí)的核心是為進(jìn)程而執(zhí)行的。在Linux中,進(jìn)程不能被搶占。只要能夠運(yùn)行它們就不能被停止。當(dāng)進(jìn)程必須等待某個(gè)系統(tǒng)事件時(shí),它才決定釋放出CPU,如進(jìn)程可能需要從文件中讀出字符。一般等待的發(fā)生是在系統(tǒng)調(diào)用過(guò)程中,此時(shí)進(jìn)程處于系統(tǒng)模式,處于等待狀態(tài)的進(jìn)程將被掛起而其他的進(jìn)程被調(diào)度管理器選出來(lái)執(zhí)行。
進(jìn)程管理嵌入式Linux操作系統(tǒng)在每個(gè)進(jìn)程的task_struct結(jié)構(gòu)中有以下4項(xiàng):policy、priority、counter、rt_priority,這4項(xiàng)是選擇進(jìn)程的依據(jù)。其中,policy是進(jìn)程的調(diào)度策略,用來(lái)區(qū)分實(shí)時(shí)進(jìn)程和普通進(jìn)程,實(shí)時(shí)進(jìn)程優(yōu)先于普通進(jìn)程運(yùn)行;priority是進(jìn)程(包括實(shí)時(shí)和普通)的靜態(tài)優(yōu)先級(jí);counter是進(jìn)程剩余的時(shí)間片,它的起始值就是priority的值;由于counter在后面計(jì)算一個(gè)處于可運(yùn)行狀態(tài)的進(jìn)程值得運(yùn)行的程度goodness時(shí)起重要作用,因此,counter也可以看做是進(jìn)程的動(dòng)態(tài)優(yōu)先級(jí)。rt_priority是實(shí)時(shí)進(jìn)程特有的,用于實(shí)時(shí)進(jìn)程間的選擇。進(jìn)程管理嵌入式Linux操作系統(tǒng)2.舉例說(shuō)明在Linux操作系統(tǒng)中進(jìn)程的概念(1)程序和進(jìn)程程序是為了完成某種任務(wù)而設(shè)計(jì)的軟件,如OpenOffice是程序。進(jìn)程就是運(yùn)行中的程序。一個(gè)運(yùn)行著的程序,可能有多個(gè)進(jìn)程,如LinuxSir.Org所用的WWW服務(wù)器是Apache服務(wù)器,當(dāng)管理員啟動(dòng)服務(wù)后,可能會(huì)有很多人來(lái)訪問(wèn),也就是說(shuō)許多用戶來(lái)同時(shí)請(qǐng)求httpd服務(wù),Apache服務(wù)器將會(huì)創(chuàng)建有多個(gè)httpd進(jìn)程來(lái)對(duì)其進(jìn)行服務(wù)。①進(jìn)程分類:進(jìn)程一般分為交互進(jìn)程、批處理進(jìn)程和守護(hù)進(jìn)程3類。值得一提的是,守護(hù)進(jìn)程總是活躍的,一般是后臺(tái)運(yùn)行,守護(hù)進(jìn)程一般是由系統(tǒng)在開機(jī)時(shí)通過(guò)腳本自動(dòng)激活啟動(dòng)或由超級(jí)管理用戶root來(lái)啟動(dòng)。比如在Fedora或Redhat中,可以定義httpd服務(wù)器的啟動(dòng)腳本的運(yùn)行級(jí)別,此文件位于/etc/init.d目錄下,進(jìn)程管理嵌入式Linux操作系統(tǒng)文件名是httpd,/etc/init.d/httpd就是httpd服務(wù)器的守護(hù)程序,當(dāng)把它的運(yùn)行級(jí)別設(shè)置為3和5時(shí),當(dāng)系統(tǒng)啟動(dòng)時(shí),它會(huì)跟著啟動(dòng)。
[root@localhost~]#chkconfig--level35httpdon
由于守護(hù)進(jìn)程是一直運(yùn)行著的,所以它所處的狀態(tài)是等待請(qǐng)求處理任務(wù)。例如,用戶是否訪問(wèn)LinuxSir.Org,LinuxSir.Org的httpd服務(wù)器都在運(yùn)行,等待著用戶來(lái)訪問(wèn),也就是等待著任務(wù)處理。進(jìn)程管理嵌入式Linux操作系統(tǒng)②進(jìn)程的屬性?!襁M(jìn)程ID(PID):是唯一的數(shù)值,用來(lái)區(qū)分進(jìn)程;●父進(jìn)程和父進(jìn)程的ID(PPID);●啟動(dòng)進(jìn)程的用戶ID(UID)和所歸屬的組(GID);●進(jìn)程狀態(tài):狀態(tài)分為運(yùn)行R、休眠S、僵尸Z;●進(jìn)程執(zhí)行的優(yōu)先級(jí);●進(jìn)程所連接的終端名;●進(jìn)程資源占用:比如占用資源大?。▋?nèi)存、CPU占用量)。③父進(jìn)程和子進(jìn)程。二者的關(guān)系是管理和被管理的關(guān)系,當(dāng)父進(jìn)程終止時(shí),子進(jìn)程也隨之而終止時(shí)。但子進(jìn)程終止,父進(jìn)程并不一定終止,例如,httpd服務(wù)器運(yùn)行時(shí),可以終止其子進(jìn)程,父進(jìn)程并不會(huì)因?yàn)樽舆M(jìn)程的終止而終止。進(jìn)程管理嵌入式Linux操作系統(tǒng)(2)進(jìn)程管理對(duì)于Linux進(jìn)程的管理,是通過(guò)進(jìn)程管理工具實(shí)現(xiàn)的,有ps、pgrep等工具。①ps監(jiān)視進(jìn)程工具。ps為我們提供了進(jìn)程的一次性查看,它所提供的查看結(jié)果并不是動(dòng)態(tài)連續(xù)的,如果想對(duì)進(jìn)程時(shí)間監(jiān)控,應(yīng)該用top工具?!駊s的參數(shù)說(shuō)明:ps提供了很多的選項(xiàng)參數(shù),常用的有以下幾個(gè)。
l:長(zhǎng)格式輸出;
u:按用戶名和啟動(dòng)時(shí)間的順序來(lái)顯示進(jìn)程;
j:用任務(wù)格式來(lái)顯示進(jìn)程;
f:用樹形格式來(lái)顯示進(jìn)程;
a:顯示所有用戶的所有進(jìn)程(包括其他用戶);
x:顯示無(wú)控制終端的進(jìn)程;
r:顯示運(yùn)行中的進(jìn)程;
ww:避免詳細(xì)參數(shù)被截?cái)唷?/p>
一般常用的選項(xiàng)組合是aux或lax,還有參數(shù)f的應(yīng)用。psaux或lax輸出的解釋。進(jìn)程管理嵌入式Linux操作系統(tǒng)USER:
進(jìn)程的屬主;PID:
進(jìn)程的ID;
PPID:
父進(jìn)程;
%CPU:
進(jìn)程占用的CPU百分比;
%MEM:
占用內(nèi)存的百分比;
NI:
進(jìn)程的NICE值,數(shù)值大,表示較少占用CPU時(shí)間;
VSZ:
進(jìn)程虛擬大??;
RSS:
駐留中頁(yè)的數(shù)量;
WCHANTTY:
終端ID;
STAT:
進(jìn)程狀態(tài);
進(jìn)程管理嵌入式Linux操作系統(tǒng)D:Uninterruptiblesleep(usuallyIO);
R:
中在隊(duì)列中可過(guò)行的正在運(yùn)行可;
S:
處于休眠狀態(tài);
T:
停止或被追蹤;
W:
進(jìn)入內(nèi)存交換(從內(nèi)核2.6開始無(wú)效);
X:
死掉的進(jìn)程(從來(lái)沒(méi)見過(guò));
Z:
僵尸進(jìn)程;
<:
優(yōu)先級(jí)高的進(jìn)程;
N:
優(yōu)先級(jí)較低的進(jìn)程;
L:
有些頁(yè)被鎖進(jìn)內(nèi)存;
s:
進(jìn)程的領(lǐng)導(dǎo)者(在它之下有子進(jìn)程);
l:ismulti-threaded(usingCLONE_THREAD,likeNPTLpthreadsdo);
+:
位于后臺(tái)的進(jìn)程組;
進(jìn)程管理嵌入式Linux操作系統(tǒng)WCHAN:
正在等待的進(jìn)程資源;START:
啟動(dòng)進(jìn)程的時(shí)間;
TIME:
進(jìn)程消耗CPU的時(shí)間;
COMMAND:
命令的名稱和參數(shù)。
●ps應(yīng)用舉例?!纠?-1】psaux舉例。用法:
[root@localhost~]#ps-aux|more
可以用|管道和more連接起來(lái)分頁(yè)查看。
[root@localhost~]#ps-aux>ps001.txt[root@localhost~]#moreps001.txt
這里是把所有進(jìn)程顯示出來(lái),并輸出到ps001.txt文件,然后再通過(guò)more來(lái)分頁(yè)查看。【例5-2】
和grep結(jié)合,提取指定程序的進(jìn)程。進(jìn)程管理嵌入式Linux操作系統(tǒng)[root@localhost~]#psaux|grephttpdroot41870.01.32423610272?Ss11:550:00/usr/sbin/httpdapache41890.00.6243684940?S11:550:00/usr/sbin/httpdapache41900.00.6243684932?S11:550:00/usr/sbin/httpdapache41910.00.6243684932?S11:550:00/usr/sbin/httpdapache41920.00.6243684932?S11:550:00/usr/sbin/httpdapache41930.00.6243684932?S11:550:00/usr/sbin/httpdapache41940.00.6243684932?S11:550:00/usr/sbin/httpd進(jìn)程管理嵌入式Linux操作系統(tǒng)apache41950.00.6243684932?S11:550:00/usr/sbin/httpdapache41960.00.6243684932?S11:550:00/usr/sbin/httpdroot44800.00.05160708pts/3R+12:200:00grephttpd例5-3】
父進(jìn)程和子進(jìn)程的關(guān)系友好判斷的例子。
[root@localhost~]#psauxf|grephttpdroot44840.00.05160704pts/3S+12:210:00\_grephttpdroot41870.01.32423610272?Ss11:550:00/usr/sbin/httpdapache41890.00.6243684940?S11:550:00\_/usr/sbin/httpdapache41900.00.6243684932?S11:550:00\_/usr/sbin/httpdapache41910.00.6243684932?S11:550:00\_/usr/sbin/httpd進(jìn)程管理嵌入式Linux操作系統(tǒng)apache41920.00.6243684932?S11:550:00\_/usr/sbin/httpdapache41930.00.6243684932?S11:550:00\_/usr/sbin/httpdapache41940.00.6243684932?S11:550:00\_/usr/sbin/httpdapache41950.00.6243684932?S11:550:00\_/usr/sbin/httpdapache41960.00.6243684932?S11:550:00\_/usr/sbin/httpd
這里用到了f參數(shù),父與子關(guān)系一目了然。進(jìn)程管理嵌入式Linux操作系統(tǒng)②pgrep:pgrep是通過(guò)程序的名字來(lái)查詢進(jìn)程的工具,一般是用來(lái)判斷程序是否正在運(yùn)行。在服務(wù)器的配置和管理中,這個(gè)工具常被應(yīng)用,簡(jiǎn)單明了。用法:
#ps參數(shù)選項(xiàng)
程序名
常用參數(shù):
-l:
列出程序名和進(jìn)程ID;
-o:
進(jìn)程起始的ID;
-n:
進(jìn)程終止的ID;
進(jìn)程管理嵌入式Linux操作系統(tǒng)【例5-4】pgrep的使用。
[root@localhost~]#pgrep-lohttpd4557httpd
[root@localhost~]#pgrep-lnhttpd4566httpd
[root@localhost~]#pgrep-lhttpd4557httpd4560httpd4561httpd進(jìn)程管理嵌入式Linux操作系統(tǒng)4562httpd4563httpd4564httpd4565httpd4566httpd
[root@localhost~]#pgrephttpd45574560456145624563456445654566進(jìn)程管理嵌入式Linux操作系統(tǒng)
(3)終止進(jìn)程的工具終止一個(gè)進(jìn)程或終止一個(gè)正在運(yùn)行的程序,一般是通過(guò)kill、killall、pkill、xkill等進(jìn)行。例如,一個(gè)程序已經(jīng)終止,但又不能退出,這時(shí)就應(yīng)該考慮應(yīng)用這些工具。另外,這些工具應(yīng)用的場(chǎng)合就是在服務(wù)器管理中,在不涉及數(shù)據(jù)庫(kù)服務(wù)器程序的父進(jìn)程的停止運(yùn)行時(shí),也可以用這些工具來(lái)終止。為什么數(shù)據(jù)庫(kù)服務(wù)器的父進(jìn)程不能用這些工具終止呢?原因很簡(jiǎn)單,這些工具在強(qiáng)行終止數(shù)據(jù)庫(kù)服務(wù)器時(shí),會(huì)讓數(shù)據(jù)庫(kù)產(chǎn)生更多的文件碎片,當(dāng)碎片達(dá)到一定程度的時(shí)候,數(shù)據(jù)庫(kù)就有崩潰的危險(xiǎn)。例如,mysql服務(wù)器最好是按其正常的程序關(guān)閉,而不是用pkillmysqld或killallmysqld這樣危險(xiǎn)的動(dòng)作,但對(duì)于占用資源過(guò)多的數(shù)據(jù)庫(kù)子進(jìn)程,則應(yīng)該用kill來(lái)終止。進(jìn)程管理嵌入式Linux操作系統(tǒng)①kill:kill的應(yīng)用是和ps或pgrep命令結(jié)合在一起使用的。用法:
kill[信號(hào)代碼]
進(jìn)程ID
注:信號(hào)代碼可以省略,一般常用的信號(hào)代碼是-9,表示強(qiáng)制終止?!纠?-5】kill使用舉例。
[root@localhost~]#psauxf|grephttpdroot49390.00.05160708pts/3S+13:100:00\_grephttpdroot48300.11.32423210272?Ss13:020:00/usr/sbin/httpdapache48330.00.6243644932?S13:020:00\_/usr/sbin/httpd進(jìn)程管理嵌入式Linux操作系統(tǒng)apache48340.00.6243644928?S13:020:00\_/usr/sbin/httpdapache48350.00.6243644928?S13:020:00\_/usr/sbin/httpdapache48360.00.6243644928?S13:020:00\_/usr/sbin/httpdapache48370.00.6243644928?S13:020:00\_/usr/sbin/httpdapache48380.00.6243644928?S13:020:00\_/usr/sbin/httpdapache48390.00.6243644928?S13:020:00\_/usr/sbin/httpdapache48400.00.6243644928?S13:020:00\_/usr/sbin/httpd
上面是查看httpd服務(wù)器的進(jìn)程,也可以用pgrep-lhttpd來(lái)查看。例子中的第2列,就是進(jìn)程PID的列,其中4830是httpd服務(wù)器的父進(jìn)程,從4833~4840的進(jìn)程都是4830的子進(jìn)程;如果終止父進(jìn)程4830,其下的子進(jìn)程也會(huì)跟著終止,如進(jìn)程管理嵌入式Linux操作系統(tǒng)[root@localhost~]#kill4840注:終止4840這個(gè)進(jìn)程;
[root@localhost~]#ps-auxf|grephttpd注:查看一下會(huì)有什么結(jié)果?是不是httpd服務(wù)器仍在運(yùn)行?
[root@localhost~]#kill4830注:終止httpd的父進(jìn)程;
[root@localhost~]#ps-aux|grephttpd注:查看httpd的其他子進(jìn)程是否存在,httpd服務(wù)器是否仍在運(yùn)行?
對(duì)于僵尸進(jìn)程,可以用kill-9來(lái)強(qiáng)制終止退出。例如,一個(gè)程序已經(jīng)徹底死掉,如果kill不加信號(hào)強(qiáng)度是進(jìn)程管理嵌入式Linux操作系統(tǒng)沒(méi)有辦法退出的,最好的辦法就是加信號(hào)強(qiáng)度-9,后面要接著終止父進(jìn)程?!纠?-6】kill-9使用舉例。
[root@localhost~]#psaux|grepgaimbeinan50319.02.310499617484?S13:230:01gaimroot50360.00.05160724pts/3S+13:240:00grepgaim
或
[root@localhost~]#pgrep-lgaim5031gaim[root@localhost~]#kill-95031進(jìn)程管理嵌入式Linux操作系統(tǒng)[root@localhost~]#pgrep-lgaim5031gaim[root@localhost~]#kill-95031
②killall:killall通過(guò)程序的名字,直接終止所有進(jìn)程。用法:
#killall正在運(yùn)行的程序名
killall也和ps或pgrep結(jié)合使用時(shí)比較方便,通過(guò)ps或pgrep來(lái)查看哪些程序在運(yùn)行?!纠?-7】killall舉例。
[root@localhostbeinan]#pgrep-lgaim2979gaim
進(jìn)程管理嵌入式Linux操作系統(tǒng)[root@localhostbeinan]#killallgaim
③pkill:pkill和killall應(yīng)用方法差不多,也是直接終止運(yùn)行中的程序;如果想終止單個(gè)進(jìn)程,用kill命令。用法:
#pkill正在運(yùn)行的程序名
【例5-8】pkill使用舉例。
[root@localhostbeinan]#pgrep-lgaim2979gaim
[root@localhostbeinan]#pkillgaim
④xkill:xkill是在桌面用的終止圖形界面的程序。例如,當(dāng)firefox出現(xiàn)崩潰不能退出時(shí),單擊鼠標(biāo)就能終止firefox。如果不想終止xkill,就按鼠標(biāo)右鍵取消。用法:進(jìn)程管理嵌入式Linux操作系統(tǒng)[root@localhost~]#xkill
(4)監(jiān)視系統(tǒng)任務(wù)的工具和ps相比,top是動(dòng)態(tài)監(jiān)視系統(tǒng)任務(wù)的工具,top輸出的結(jié)果是連續(xù)的。①top命令用法及參數(shù)。用法:
top選擇參數(shù)
參數(shù):
進(jìn)程管理嵌入式Linux操作系統(tǒng)-b:
以批量模式運(yùn)行,但不能接收命令行輸入;
-c:顯示命令行,而不僅僅是命令名;
-d:N顯示兩次刷新時(shí)間的間隔,比如-d5,表示兩次刷新間隔為5s;
-i:禁止顯示空閑進(jìn)程或僵尸進(jìn)程;
-n:NUM顯示更新次數(shù),然后退出,如-n5,表示top更新5次數(shù)據(jù)就退出;
-p:PID僅監(jiān)視指定進(jìn)程的ID,PID是一個(gè)數(shù)值;
-q:
不經(jīng)任何延時(shí)就刷新;
-s:
安全模式運(yùn)行,禁用一些效互指令;
-S:累積模式,輸出每個(gè)進(jìn)程的總的CPU時(shí)間,包括已死的子進(jìn)程。
進(jìn)程管理嵌入式Linux操作系統(tǒng)②【例5-9】top應(yīng)用舉例。用法:
[root@localhost~]#top
使用top命令時(shí)還可以同時(shí)按交互式命令鍵將輸出的結(jié)果按要求顯示。交互式命令鍵位:
space:
立即更新;
c:切換到命令名顯示,或顯示整個(gè)命令(包括參數(shù));
f,F:增加顯示字段,或刪除顯示字段;
h,?:顯示有關(guān)安全模式及累積模式的幫助信息;
k:提示輸入要?dú)⑺赖倪M(jìn)程ID,目的是用來(lái)殺死該進(jìn)程(默認(rèn)信號(hào)為15);
i:禁止空閑進(jìn)程和僵尸進(jìn)程;
進(jìn)程管理嵌入式Linux操作系統(tǒng)l:切換到顯法負(fù)載平均值和正常運(yùn)行的時(shí)間等信息;
m:切換到內(nèi)存信息,并以內(nèi)存占用大小排序;
n:
提示顯示的進(jìn)程數(shù),比如輸入3,就在整屏上顯示3個(gè)進(jìn)程;
o,O:改變顯示字段的順序;
r:把renice應(yīng)用到一個(gè)進(jìn)程,提示輸入PID和renice的值;
s:改變兩次刷新時(shí)間間隔,以秒為單位;
t:切換到顯示進(jìn)程和CPU狀態(tài)的信息;
A:按進(jìn)程生命大小進(jìn)行排序,最新進(jìn)程顯示在最前;
M:按內(nèi)存占用大小排序,由大到??;
N:以進(jìn)程ID大小排序,由大到??;
P:按CPU占用情況排序,由大到小
S:切換到累積時(shí)間模式;
T:
按時(shí)間/累積時(shí)間對(duì)任務(wù)排序;
W:把當(dāng)前的配置寫到~/.toprc中。
進(jìn)程管理嵌入式Linux操作系統(tǒng)【例5-10】
當(dāng)使用top命令時(shí)按M鍵,就按內(nèi)存占用大小排序。也可以把top的輸出傳到一個(gè)文件中。
[root@localhost~]#top>mytop.txt
然后就可以通過(guò)查看mytop文件,慢慢地分析系統(tǒng)進(jìn)程狀態(tài)。(5)進(jìn)程的優(yōu)先級(jí):nice和renice在Linux操作系統(tǒng)中,進(jìn)程之間是竟?fàn)庂Y源(如CPU和內(nèi)存的占用)關(guān)系。這個(gè)竟?fàn)巸?yōu)劣是通過(guò)一個(gè)數(shù)值來(lái)實(shí)現(xiàn)的,也就是謙讓度。高謙讓度表示進(jìn)程優(yōu)化級(jí)別最低。負(fù)值或0表示對(duì)高優(yōu)點(diǎn)級(jí),對(duì)其他進(jìn)程不謙讓,也就是擁有優(yōu)先占用系統(tǒng)資源的權(quán)利。謙讓度的值從-20~19。目前硬件技術(shù)發(fā)展極速,在大多情況下,不必設(shè)置進(jìn)程的優(yōu)先級(jí),除非在進(jìn)程失控而瘋狂占用資源的情況下,才有可能來(lái)設(shè)置一下優(yōu)先級(jí),但實(shí)際上可以用命令終止一些失控進(jìn)程。nice可以在創(chuàng)建進(jìn)程時(shí),為進(jìn)程指定謙讓度的值,進(jìn)程的優(yōu)先級(jí)的值是父進(jìn)程SHELL的優(yōu)先級(jí)的值與所指定謙讓度的相加和。所以在用nice設(shè)置程序的優(yōu)先級(jí)時(shí),所指定數(shù)值是一個(gè)增量,并不是優(yōu)先級(jí)的絕對(duì)值。進(jìn)程管理嵌入式Linux操作系統(tǒng)【例5-11】nice的使用舉例。
[root@localhost~]#nice-n5gaim&注:運(yùn)行g(shù)aim程序,并為它指定謙讓度增量為5
所以nice最常用的應(yīng)用為
nice-n謙讓度的增量值
程序
renice是通過(guò)進(jìn)程ID(PID)來(lái)改變謙讓度,進(jìn)而達(dá)到更改進(jìn)程的優(yōu)先級(jí)。
renice謙讓度PID
進(jìn)程管理嵌入式Linux操作系統(tǒng)renice所設(shè)置的謙讓度就是進(jìn)程的絕對(duì)值;看下面的例5-12。【例5-12】renice的謙讓度舉例。
[root@localhost~]#pslax|grepgaim404437341910-512092420492-S<pts/00:01gaim004530341910-55160708-R<+pts/00:00grepgaim
[root@localhost~]#renice-644374437:oldpriority-5,newpriority-6
[root@localhost~]#pslax|grepgaim404437341914-612092420492-S<pts/00:01gaim004534341911-55160708-R<+pts/00:00grepgaim進(jìn)程管理嵌入式Linux操作系統(tǒng)1.Linux存儲(chǔ)器管理基本概念(1)存儲(chǔ)管理的任務(wù)存儲(chǔ)管理是Linux中負(fù)責(zé)管理內(nèi)存的模塊。存儲(chǔ)管理的任務(wù)有以下幾點(diǎn)?!衿帘胃鞣N硬件的內(nèi)存結(jié)構(gòu),并向上層返回同意的訪問(wèn)界面。Linux支持各種各樣的硬件體系結(jié)構(gòu)。對(duì)每種硬件結(jié)構(gòu),其內(nèi)存的組織形式各不相同。然而,對(duì)于用戶的應(yīng)用程序來(lái)說(shuō),總是希望提供一個(gè)統(tǒng)一的界面以供調(diào)用。這樣,存儲(chǔ)模塊就自然要擔(dān)負(fù)這個(gè)屏蔽和轉(zhuǎn)化的任務(wù)?!窠鉀Q進(jìn)程狀態(tài)下內(nèi)存不足的問(wèn)題,按需調(diào)頁(yè)。隨著硬件的發(fā)展,內(nèi)存的增大,軟件業(yè)相應(yīng)地向著大規(guī)模方向發(fā)展。在一個(gè)多進(jìn)程系統(tǒng)中,存儲(chǔ)管理嵌入式Linux操作系統(tǒng)所有進(jìn)程所占用的內(nèi)存總和往往會(huì)超過(guò)物理內(nèi)存容量。這樣就需要存儲(chǔ)管理實(shí)現(xiàn)能夠利用副存儲(chǔ)器(比如硬盤)進(jìn)行輔助存儲(chǔ)的功能。存儲(chǔ)管理機(jī)制甚至還能夠處理單個(gè)進(jìn)程所占用內(nèi)存超過(guò)主存大小的情況?!褡柚惯M(jìn)程肆意訪問(wèn)其他進(jìn)程的地址空間和內(nèi)核地址空間。由于并發(fā)執(zhí)行的進(jìn)程所在的地址空間都不能沖突,而進(jìn)程太多,物理內(nèi)存空間根本不夠,故需要模擬出一個(gè)更大的虛擬邏輯空間提供給上層應(yīng)用程序,并通過(guò)一個(gè)可靠的機(jī)制建立起邏輯空間到物理空間的映射關(guān)系?!駷檫M(jìn)程中通信所需要的共享內(nèi)存提供必要的基礎(chǔ)。對(duì)于上層用戶來(lái)講,共享內(nèi)存和普通內(nèi)存是兩種概念;然而對(duì)于存儲(chǔ)管理系統(tǒng)來(lái)講,這兩者卻都是內(nèi)存中的一部分,所有內(nèi)存空間的任一部分都可被劃為共享內(nèi)存使用。因此,實(shí)現(xiàn)共享內(nèi)存的任務(wù)就需要由存儲(chǔ)管理模塊來(lái)實(shí)現(xiàn)。存儲(chǔ)管理嵌入式Linux操作系統(tǒng)(2)虛擬內(nèi)存虛擬內(nèi)存是現(xiàn)代操作系統(tǒng)的重要特征。對(duì)于一個(gè)多進(jìn)程的操作系統(tǒng)來(lái)說(shuō),每個(gè)進(jìn)程都要占據(jù)自己唯一的內(nèi)存地址空間。虛擬內(nèi)存的基本原理是將內(nèi)存中一部分近期不需要的內(nèi)容移出到外存上,從而讓出一塊內(nèi)存空間,以供其他需要的內(nèi)存使用。當(dāng)要訪問(wèn)到那些已經(jīng)被調(diào)出到外存的數(shù)據(jù)時(shí),存儲(chǔ)管理要將內(nèi)存中一部分不常被訪問(wèn)的數(shù)據(jù)調(diào)出,讓出一塊空間以供需要的數(shù)據(jù)調(diào)入內(nèi)存。時(shí)間局部性和空間局部性的原理是虛擬內(nèi)存效率的重要保證。所謂時(shí)間局部性原理,指在存儲(chǔ)訪問(wèn)中,人們對(duì)最近訪問(wèn)過(guò)的數(shù)據(jù)進(jìn)行再次訪問(wèn)的概率非常大。這個(gè)原理確保了用戶不用頻繁地將數(shù)據(jù)在主存和外存之間換入換出,因?yàn)檫@些數(shù)據(jù)很可能在未來(lái)再次被訪問(wèn)。所謂空間局部性原理,指在存儲(chǔ)訪問(wèn)中,人們時(shí)常會(huì)訪問(wèn)到最近訪問(wèn)過(guò)的地址附近的數(shù)據(jù)。這個(gè)原理的啟示是將內(nèi)存劃分成一定長(zhǎng)度的數(shù)據(jù)段,從而每次換入換出時(shí),將整個(gè)數(shù)據(jù)段一起操作,這樣可以減少訪問(wèn)失效的次數(shù)。存儲(chǔ)管理嵌入式Linux操作系統(tǒng)(3)頁(yè)面模式頁(yè)面為存儲(chǔ)管理中調(diào)入調(diào)出的基本單位。在存儲(chǔ)管理中,將內(nèi)存劃分為長(zhǎng)度相等的頁(yè)面。Linux將每個(gè)用戶進(jìn)程4GB長(zhǎng)度的虛擬內(nèi)存劃分成固定大小的頁(yè)面。其中,0~3GB是用戶態(tài)空間,由各進(jìn)程獨(dú)占;3~4GB
是內(nèi)核態(tài)空間,由所有進(jìn)程共享,但只有內(nèi)核態(tài)的進(jìn)程才能訪問(wèn)。(4)按需調(diào)頁(yè)當(dāng)進(jìn)程訪問(wèn)到某個(gè)虛存地址,卻發(fā)現(xiàn)該地址所對(duì)應(yīng)的物理頁(yè)面已經(jīng)被換出內(nèi)存時(shí),系統(tǒng)會(huì)自動(dòng)產(chǎn)生一個(gè)硬件中斷,即缺頁(yè)中斷。在中斷產(chǎn)生后,系統(tǒng)會(huì)自動(dòng)調(diào)用相應(yīng)的中斷處理程序,來(lái)將所需的頁(yè)面從外存調(diào)入,或者干脆新建一個(gè)空白頁(yè)面。這個(gè)過(guò)程就叫做按需調(diào)頁(yè)。(5)對(duì)換對(duì)于虛擬內(nèi)存頁(yè)面來(lái)說(shuō),總是要將其改動(dòng)過(guò)的內(nèi)容寫回到外存中,才能夠?qū)⑵鋪G棄。一個(gè)被更改過(guò)的內(nèi)存頁(yè)面,但還沒(méi)有將其內(nèi)容寫到外存中,就稱之為“臟頁(yè)面”。在換入頁(yè)面時(shí),首先考慮的肯定是將“干凈的”頁(yè)面直接丟棄,然后將外存數(shù)據(jù)寫進(jìn)來(lái),因?yàn)檫@樣不會(huì)破壞數(shù)據(jù)的完整性。然而這是一個(gè)矛盾,內(nèi)存調(diào)用者希望盡可能少地進(jìn)行外存的刷新,這個(gè)結(jié)果造成內(nèi)存中“臟頁(yè)面”不斷增加,而換入程序又希望盡可能多一些“干凈”頁(yè)面,以便使它們可以很方便地將數(shù)據(jù)調(diào)入。于是,收拾垃圾的工作就由一個(gè)被稱做“對(duì)換”(swap)的程序來(lái)完成。存儲(chǔ)管理嵌入式Linux操作系統(tǒng)2.Linux中存儲(chǔ)器管理的相關(guān)概念及實(shí)現(xiàn)在Linux中,CPU不能按物理地址來(lái)訪
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 跨部門聯(lián)合督查制度
- 行政處罰協(xié)助制度是一種特殊的公法制度
- 雷士介紹教學(xué)課件
- 2026天津市濱海新區(qū)教育體育局招聘298人備考考試試題附答案解析
- 2026云南文山州教育體育局所屬事業(yè)單位選調(diào)37人(2026年第1號(hào))參考考試題庫(kù)附答案解析
- 骨髓炎的護(hù)理研究進(jìn)展
- 2026年廬山市應(yīng)急管理局招聘森林消防隊(duì)隊(duì)員60人備考考試題庫(kù)附答案解析
- 2026云南紅河州紅河縣公安局招聘警務(wù)輔助人員24人備考考試試題附答案解析
- 2026上半年黑龍江省體育局事業(yè)單位招聘13人參考考試題庫(kù)附答案解析
- 2026廣西南寧市公開考試招聘事業(yè)單位工作人員1798人備考考試試題附答案解析
- 廣東省佛山市南海區(qū)2025-2026學(xué)年上學(xué)期期末八年級(jí)數(shù)學(xué)試卷(含答案)
- 【地理】期末重點(diǎn)復(fù)習(xí)課件-2025-2026學(xué)年八年級(jí)地理上學(xué)期(人教版2024)
- 2026年鄉(xiāng)村治理體系現(xiàn)代化試題含答案
- 通風(fēng)設(shè)備采購(gòu)與安裝合同范本
- 化工設(shè)備清洗安全課件
- 光伏收購(gòu)合同范本
- T∕ZZB 1815-2020 塑料 汽車配件用再生聚碳酸酯(PC)專用料
- 2025~2026學(xué)年吉林省吉林市一中高一10月月考語(yǔ)文試卷
- 天津市南開中學(xué)2025-2026學(xué)年高一上數(shù)學(xué)期末調(diào)研模擬試題含解析
- 麻辣燙創(chuàng)業(yè)商業(yè)計(jì)劃書范文
- 微專題:突破語(yǔ)病題+2026屆高考語(yǔ)文二輪復(fù)習(xí)
評(píng)論
0/150
提交評(píng)論