




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1概要Linux定義Linux種類(lèi)Linux優(yōu)勢(shì)如何選擇linux版本Linux內(nèi)核簡(jiǎn)介1概要Linux定義2Linux的定義Linux一般是指Linux內(nèi)核、Linux系統(tǒng)、Linux發(fā)行版。嚴(yán)格意義上說(shuō)Linux是指由LinusTorvalds維護(hù)的并發(fā)布的內(nèi)核。它的代碼基只包括內(nèi)核而不包括其它方面的應(yīng)用。內(nèi)核提供系統(tǒng)核心服務(wù),如進(jìn)程管理,進(jìn)程的調(diào)度,虛擬文件系統(tǒng),內(nèi)存的管理等等。嵌入式Linux,一般是指把Linux內(nèi)核移植到一個(gè)專(zhuān)用嵌入式設(shè)備的CPU和主板上?,F(xiàn)在有很多公司提供嵌入式Linux解決方案。通常包括一個(gè)移植的內(nèi)核、嵌入式Linux的開(kāi)發(fā)工具以及根據(jù)應(yīng)用需要裁減的應(yīng)用程序等,有時(shí)還提供實(shí)時(shí)擴(kuò)展的內(nèi)核。就大部分而言,嵌入式Linux和桌面Linux提供的API函數(shù)和內(nèi)核源代碼都是相同的。開(kāi)發(fā)工具主要包括源碼瀏覽器、交叉編譯器、調(diào)試器、CVS等項(xiàng)目管理軟件等等。這些工具一般都是裝在主機(jī)上。
2Linux的定義Linux一般是指Linux內(nèi)核、Linu3LinusTorvalds(萊納斯.托瓦茨)
托瓦茲1969年12月28日出生于芬蘭赫爾辛基市,芬蘭瑞典。人現(xiàn)受聘于開(kāi)放源代碼開(kāi)發(fā)實(shí)驗(yàn)(OSDL:OpenSourceDevelopmentLabs,Inc)。
Linux的誕生顯得充滿了偶然。萊納斯經(jīng)常要用他的終端仿真器(TerminalEmulator)去訪問(wèn)大學(xué)主機(jī)上的新聞組和郵件,為了方便讀寫(xiě)和下載文件,他自己編寫(xiě)了磁盤(pán)驅(qū)動(dòng)程序和文件系統(tǒng),這些在后來(lái)成為了Linux第一個(gè)內(nèi)核的雛形。當(dāng)時(shí),他年僅21歲。在自由軟件之父理查德?斯托曼(RichardStallman)某些精神的感召下,萊納斯很快以Linux的名字把這款類(lèi)Unix的操作系統(tǒng)加入到了自由軟件基金(FSF)的GNU計(jì)劃中,并通過(guò)GPL的通用性授權(quán),允許用戶銷(xiāo)售、拷貝并且改動(dòng)程序,但你必須將同樣的自由傳遞下去,而且必須免費(fèi)公開(kāi)你修改后的代碼。這說(shuō)明,Linux并不是被刻意創(chuàng)造的,它完全是日積月累的結(jié)果,是經(jīng)驗(yàn)、創(chuàng)意和一小段一小段代碼的集合體。3LinusTorvalds(萊納斯.托瓦茨)4嵌入式Linux種類(lèi)嵌入式系統(tǒng)的劃分一般是根據(jù)使用對(duì)象進(jìn)行劃分,消費(fèi)類(lèi)電子、工控設(shè)備等。為了更好的理解所設(shè)計(jì)的系統(tǒng),可以按照尺寸,時(shí)間約束,網(wǎng)絡(luò),用戶交互程度等因素劃分。尺寸:小系統(tǒng),中等系統(tǒng),大系統(tǒng)小系統(tǒng)-CPU的性能比較低,ROM<2MBRAM<4MB中系統(tǒng)-CPU的性能中等,ROM32MBRAM64MB左右大系統(tǒng)-CPU性能高,存儲(chǔ)量大時(shí)間約束:實(shí)時(shí),非實(shí)時(shí)網(wǎng)絡(luò)連接性用戶交互4嵌入式Linux種類(lèi)嵌入式系統(tǒng)的劃分一般是根據(jù)使用對(duì)象進(jìn)行5嵌入式Linux種類(lèi)是否支持MMU不支持MMU:ucLinux,主要應(yīng)用在ARM7系列微處理系統(tǒng)中,如三星公司的S3C44B0,S3C4510等,無(wú)MMU,不支持虛地址,直接訪問(wèn)內(nèi)存,所有程序中訪問(wèn)的地址都是物理地址。支持MMU:嵌入式Linux,主要應(yīng)用在ARM9系列微處理器系統(tǒng)中,如三星公司的S3C2410,Intel公司的PXA255等。5嵌入式Linux種類(lèi)是否支持MMU6MMU實(shí)現(xiàn)虛擬存儲(chǔ)空間即將虛擬存儲(chǔ)空間影射到實(shí)際物理存儲(chǔ)空間。使編程人員不用考慮具體程序所放在物理存儲(chǔ)空間的具體位置和程序的大小。存儲(chǔ)器訪問(wèn)權(quán)限的控制
任務(wù)間通訊,對(duì)自己的內(nèi)存、堆棧等進(jìn)行保護(hù),只能通過(guò)管道、信號(hào)量、共享內(nèi)存等方式進(jìn)行通訊??刂艭ache。6MMU實(shí)現(xiàn)虛擬存儲(chǔ)空間7Linux的主要特點(diǎn)開(kāi)放性開(kāi)放性是指系統(tǒng)遵循世界標(biāo)準(zhǔn)規(guī)范,特別是遵循開(kāi)放系統(tǒng)互連(OSI)國(guó)際標(biāo)準(zhǔn)。多用戶多用戶是指系統(tǒng)資源可以被不同用戶各自擁有使用,即每個(gè)用戶對(duì)自己的資源(例如:文件、設(shè)備)有特定的權(quán)限,互不影響。多任務(wù)多任務(wù)是現(xiàn)代計(jì)算機(jī)的最主要的一個(gè)特點(diǎn)。它是指計(jì)算機(jī)同時(shí)執(zhí)行多個(gè)程序,而且各個(gè)程序的運(yùn)行互相獨(dú)立。Linux系統(tǒng)調(diào)度每一個(gè)進(jìn)程平等地訪問(wèn)微處理器。良好的用戶界面Linux向用戶提供了兩種界面:用戶界面和系統(tǒng)調(diào)用。用戶界面可分為基于文本的命令行界面和圖形界面,作為人機(jī)交互界面。系統(tǒng)調(diào)用給用戶提供編程時(shí)使用的界面。用戶可以在編程時(shí)直接使用系統(tǒng)提供的系統(tǒng)調(diào)用命令。7Linux的主要特點(diǎn)開(kāi)放性8Linux的主要特點(diǎn)設(shè)備獨(dú)立性指操作系統(tǒng)把所有外部設(shè)備統(tǒng)一當(dāng)作成文件來(lái)看待,只要安裝它們的驅(qū)動(dòng)程序,任何用戶都可以象使用文件一樣,操縱、使用這些設(shè)備,而不必知道它們的具體存在形式。豐富的網(wǎng)絡(luò)功能完善的內(nèi)置網(wǎng)絡(luò)是Linux的一大特點(diǎn)??煽康南到y(tǒng)安全Linux采取了許多安全技術(shù)措施,包括對(duì)讀、寫(xiě)進(jìn)行權(quán)限控制、帶保護(hù)的子系統(tǒng)、審計(jì)跟蹤、核心授權(quán)等。良好的可移植性可移植性是指將操作系統(tǒng)從一個(gè)平臺(tái)轉(zhuǎn)移到另一個(gè)平臺(tái)使它仍然能按其自身的方式運(yùn)行的能力。8Linux的主要特點(diǎn)設(shè)備獨(dú)立性9嵌入式Linux優(yōu)勢(shì)Linux的費(fèi)用低;Linux的所有部分可以充分地定制;Linux可以運(yùn)行在低檔,便宜的硬件平臺(tái);Linux的功能是強(qiáng)大的;Linux對(duì)源代碼質(zhì)量有一個(gè)高標(biāo)準(zhǔn);Linux內(nèi)核非常小,而且緊湊;Linux有很好的支持;Linux有很多合適的工具;9嵌入式Linux優(yōu)勢(shì)Linux的費(fèi)用低;10Linux的版本內(nèi)核版本與發(fā)型版本操作系統(tǒng)的內(nèi)核版本指的是在Linus本人領(lǐng)導(dǎo)下的開(kāi)發(fā)小組開(kāi)發(fā)出的系統(tǒng)內(nèi)核的版本號(hào),如2.4.x,2.6.x。有一些組織或商業(yè)廠家,將Linux系統(tǒng)的內(nèi)核與外圍應(yīng)用軟件和文檔包裝起來(lái),并提供一些系統(tǒng)安裝界面和系統(tǒng)設(shè)定與管理工具,這樣就構(gòu)成了一個(gè)發(fā)行版本,如RedHat紅帽子(FeDora斐徳拉)、Debian蝶變
(UBuntu烏本圖)。10Linux的版本內(nèi)核版本與發(fā)型版本11如何選擇Linux的版本DIY-自己動(dòng)手做一個(gè)滿足需要的Linux版本選擇商用Linux版本、自由的、免費(fèi)的授權(quán)和涉及到的授權(quán)是否滿足你的需要,是否有合適的開(kāi)發(fā)工具是否能夠提供足夠的支持信譽(yù)文檔11如何選擇Linux的版本DIY-自己動(dòng)手做一個(gè)滿足需要的12嵌入式Linux發(fā)展現(xiàn)狀RT-Linux RT-Linux是利用Linux進(jìn)行實(shí)時(shí)系統(tǒng)開(kāi)發(fā)比較早的嘗試,是一種硬實(shí)時(shí)操作系統(tǒng)。目前RT-Linux已成功應(yīng)用于航天飛機(jī)的空間數(shù)據(jù)采集、科學(xué)儀器測(cè)控,以及電影特技圖像處理等眾多領(lǐng)域。
RT-Linux的原理是采用雙內(nèi)核機(jī)構(gòu),即將Linux的內(nèi)核代碼進(jìn)行少量修改,將Linux任務(wù)以及Linux內(nèi)核本身作為實(shí)時(shí)內(nèi)核的一個(gè)優(yōu)先級(jí)最低的任務(wù),即實(shí)時(shí)任務(wù)優(yōu)先級(jí)高于普通Linux任務(wù),即在實(shí)時(shí)任務(wù)存在的情況下運(yùn)行實(shí)時(shí)任務(wù),否則才運(yùn)行Linux本身的任務(wù)。實(shí)時(shí)任務(wù)不同于Linux普通進(jìn)程,它是以Linux的內(nèi)核模塊(LinuxLoadableKernelModule,LKM)的形式存在的。需要運(yùn)行實(shí)時(shí)任務(wù)的時(shí)候,將這個(gè)實(shí)時(shí)任務(wù)的內(nèi)核模塊插入到內(nèi)核中去。實(shí)時(shí)任務(wù)和Linux一般進(jìn)程之間的通信通過(guò)共享內(nèi)存或者FIFO通道來(lái)實(shí)現(xiàn)。12嵌入式Linux發(fā)展現(xiàn)狀RT-Linux13RT-Linux的工作原理圖13RT-Linux的工作原理圖14uClinux控制領(lǐng)域中的linux系統(tǒng)。它包含linux常用的API,內(nèi)核小于512K,保留了linux原有的高穩(wěn)定性、強(qiáng)大的網(wǎng)絡(luò)功能和卓越的文件系統(tǒng)支持功能等優(yōu)點(diǎn)。目前已支持的CPU芯片有,Motorola公司的68K系列、PowerPC系列以及ARM公司的系列芯片。官方網(wǎng)站,。uClinux最大特點(diǎn)就是不支持MMU。
uClinux系統(tǒng)對(duì)內(nèi)存的訪問(wèn)是直接的,即不需要經(jīng)過(guò)MMU,直接將地址發(fā)送到地址線上,所有程序訪問(wèn)的都是實(shí)際的物理地址,這樣一方面減小了內(nèi)核的體積,另一方面又增強(qiáng)了系統(tǒng)的實(shí)時(shí)性能。但內(nèi)存空間得不到保護(hù),對(duì)于應(yīng)用開(kāi)發(fā)者來(lái)說(shuō),必須明白自己程序運(yùn)行的位置,以及保證不會(huì)破壞其它程序運(yùn)行空間以及系統(tǒng)的穩(wěn)定。uClinux也可以使用RT-Linux的實(shí)時(shí)補(bǔ)丁,以增強(qiáng)其實(shí)時(shí)性。14uClinux控制領(lǐng)域中的linux系統(tǒng)。15MizilinuxMIZI
韓國(guó)MIZI公司所公布的開(kāi)放源代碼的免費(fèi)嵌入式操作系統(tǒng)arm-Linux。大部分的2410系統(tǒng)板上都是采用的mizilinux。
15MizilinuxMIZI16Linux內(nèi)核簡(jiǎn)介L(zhǎng)inux文件系統(tǒng)Linux內(nèi)核Linux的啟動(dòng)16Linux內(nèi)核簡(jiǎn)介L(zhǎng)inux文件系統(tǒng)17Linux主要目錄介紹與Windows一樣,在Linux中也是通過(guò)目錄來(lái)組織文件的。但不同的是,在Linux下只有一個(gè)根目錄,而不象Windows那樣一個(gè)分區(qū)一個(gè)根目錄。
17Linux主要目錄介紹與Windows一樣,在Linux18Linux下常用的命令、工具系統(tǒng)啟動(dòng)時(shí)要用到的程序、
系統(tǒng)內(nèi)核,引導(dǎo)配置文件等。Linux就是從這里啟動(dòng)的。所有的設(shè)備文件。但不是具體的驅(qū)動(dòng)程序,而是一個(gè)訪問(wèn)這些外部設(shè)備的端口。
系統(tǒng)管理時(shí)要用到的各種配置文件和子目錄。用戶主目錄,用戶獨(dú)立的空間非標(biāo)準(zhǔn)目錄,內(nèi)空,但決不能刪系統(tǒng)管理員的系統(tǒng)管理程序一個(gè)虛擬的文件系統(tǒng),可用來(lái)訪問(wèn)到內(nèi)存里的內(nèi)容。包含許多被/bin/和/sbin/中的程序使用的庫(kù)文件大多數(shù)情況下是空的,用來(lái)保存異常時(shí)候的丟失文件超級(jí)用戶(管理員)的專(zhuān)用目錄外部設(shè)備的掛接點(diǎn),通常用cdrom與floppy兩個(gè)子目錄通常用來(lái)安裝各種軟件的地方。/usr/src、/usr/bin系統(tǒng)運(yùn)行時(shí)的各種臨時(shí)文件18Linux下常用的命令、工具系統(tǒng)啟動(dòng)時(shí)要用到的程序、系19Linux的內(nèi)核結(jié)構(gòu)Linux內(nèi)核主要由5個(gè)子系統(tǒng)組成:進(jìn)程調(diào)度進(jìn)程間通訊內(nèi)存管理虛擬文件系統(tǒng)網(wǎng)絡(luò)接口19Linux的內(nèi)核結(jié)構(gòu)Linux內(nèi)核主要由5個(gè)子系統(tǒng)組成:20進(jìn)程調(diào)度
(ProcessScheduling)
進(jìn)程:程序執(zhí)行的一個(gè)范例。進(jìn)程的4要素:一段供進(jìn)程執(zhí)行的程序,該程序可以被多個(gè)進(jìn)程執(zhí)行;
獨(dú)立的內(nèi)核堆棧;進(jìn)程控制快;獨(dú)立的存儲(chǔ)空間;pid_tfork(void)函數(shù):生成進(jìn)程。
voidmain()
{
for(;;)fork();
}Exit():退出進(jìn)程。20進(jìn)程調(diào)度
(ProcessScheduling)進(jìn)程21進(jìn)程與線程進(jìn)程是具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位.線程是進(jìn)程的一個(gè)實(shí)體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器,一組寄存器和棧),但是它可與同屬一個(gè)進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源.一個(gè)線程可以創(chuàng)建和撤銷(xiāo)另一個(gè)線程;同一個(gè)進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行需要注意的是:在應(yīng)用程序中使用多線程不會(huì)增加CPU的數(shù)據(jù)處理能力。21進(jìn)程與線程進(jìn)程是具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合上22進(jìn)程調(diào)度進(jìn)程的狀態(tài)
運(yùn)行態(tài)r、休眠態(tài)s、僵死態(tài)z作用:
控制進(jìn)程對(duì)CPU的訪問(wèn)。當(dāng)需要選擇下一個(gè)進(jìn)程運(yùn)行時(shí),由調(diào)度程序選擇最值得運(yùn)行的進(jìn)程??蛇\(yùn)行進(jìn)程實(shí)際上是僅等待CPU資源的進(jìn)程,如果某個(gè)進(jìn)程在等待其它資源,則該進(jìn)程是不可運(yùn)行進(jìn)程。Linux使用了比較簡(jiǎn)單的基于優(yōu)先級(jí)的進(jìn)程調(diào)度算法選擇新的進(jìn)程。進(jìn)程處于操作系統(tǒng)的中心位置,其他的子系統(tǒng)都依賴(lài)它。因?yàn)槊總€(gè)子系統(tǒng)都需要掛起或恢復(fù)進(jìn)程。一般情況下,當(dāng)一個(gè)進(jìn)程等待硬件操作完成時(shí),它被掛起;當(dāng)操作真正完成時(shí),進(jìn)程被恢復(fù)執(zhí)行。22進(jìn)程調(diào)度進(jìn)程的狀態(tài)23進(jìn)程通訊
(Interprocesscommunication)管道和FIFO信號(hào)量消息隊(duì)列共享內(nèi)存23進(jìn)程通訊
(Interprocesscommun24進(jìn)程通訊--管道(pipe)管道 管道是進(jìn)程之間單向的數(shù)據(jù)流:一個(gè)進(jìn)程寫(xiě)入管道的所有數(shù)據(jù)都有內(nèi)核定向到另一個(gè)進(jìn)程,另一個(gè)進(jìn)程由此可以從管道中讀取數(shù)據(jù)。管道的特點(diǎn):管道被看作是打開(kāi)的文件,但是在已經(jīng)裝載的文件系統(tǒng)中沒(méi)有映象;管道是單向的,只提供一個(gè)方向的數(shù)據(jù)流,如果需要雙向數(shù)據(jù)流,必須創(chuàng)建兩個(gè)管道,每個(gè)方向一個(gè)一個(gè)管道可以被多個(gè)進(jìn)程使用,如果一個(gè)管道被多個(gè)進(jìn)程使用,必須使用文件加鎖機(jī)制管道的一個(gè)主要缺點(diǎn)是:用戶無(wú)法打開(kāi)一個(gè)現(xiàn)有的管道,除非管道是由一個(gè)公共的祖先進(jìn)程創(chuàng)建的,否則兩個(gè)任意進(jìn)程就不能共享同一個(gè)管道。此問(wèn)題可由FIFO解決。FIFO命名管道,指代先進(jìn)先出。每個(gè)FIFO有一個(gè)路徑名與之關(guān)聯(lián),從而允許無(wú)親緣關(guān)系的進(jìn)程訪問(wèn)同一個(gè)FIFOFIFO是半雙工的。24進(jìn)程通訊--管道(pipe)管道25管道相關(guān)函數(shù)創(chuàng)建管道
intpipe(intfd[2]);
該函數(shù)返回兩個(gè)文件描述字:fd[0],fd[1]。前者打開(kāi)文件讀,后者打開(kāi)文件寫(xiě)。從管道中讀數(shù)據(jù)read(intfd,void*buff,unsignednbytes)管道描述符fd,傳送數(shù)據(jù)地址buf,傳送字節(jié)數(shù)nbytes向管道中寫(xiě)數(shù)據(jù)write(intfd,void*buff,unsignednbytes)25管道相關(guān)函數(shù)創(chuàng)建管道26進(jìn)程通訊--信號(hào)量(semaphores)信號(hào)量信號(hào)量是個(gè)整數(shù)對(duì)象,是個(gè)計(jì)數(shù)器,用來(lái)為多個(gè)進(jìn)程共享的數(shù)據(jù)結(jié)構(gòu)提供受控訪問(wèn)信號(hào)量大于0,表示受保護(hù)的資源可用,信號(hào)量小于等于0,受保護(hù)資源不可用只能通過(guò)原語(yǔ)操作而改變信號(hào)量相關(guān)函數(shù)創(chuàng)建信號(hào)量
intsemget(key_tkey,intnSems,intflag)根據(jù)路徑名產(chǎn)生一個(gè)關(guān)鍵字
key_tftok(constchar*pathname,intproj_id);控制信號(hào)量
intsemctl(intsemid,intsemnum,intcmd)對(duì)信號(hào)量+1或-1測(cè)試是否為0 intsemop(intsemid,structsembuf*sops,unsignedshortnsops)26進(jìn)程通訊--信號(hào)量(semaphores)信號(hào)量27進(jìn)程通訊--共享內(nèi)存
(ShareMemory
)共享內(nèi)存最有用的進(jìn)程間通信機(jī)制,允許兩個(gè)或多個(gè)進(jìn)程通過(guò)把公共數(shù)據(jù)結(jié)構(gòu)放入一個(gè)共享內(nèi)存段來(lái)訪問(wèn)它們。共享內(nèi)存區(qū)是最快的進(jìn)程間通信機(jī)制。一旦這樣的內(nèi)存區(qū)映射到它的進(jìn)程的地址空間,這些進(jìn)程間數(shù)據(jù)的傳遞就不再涉及內(nèi)核。主要局限就是它不能提供同步,如果兩個(gè)進(jìn)程企圖修改相同的共享內(nèi)存區(qū)域,內(nèi)存不能串行化這些操作。使用共享內(nèi)存區(qū)必須設(shè)計(jì)出他們自己的同步協(xié)議客戶服務(wù)器共享內(nèi)存客戶地址空間服務(wù)器地址空間27進(jìn)程通訊--共享內(nèi)存
(ShareMemory)共享28共享內(nèi)存相關(guān)函數(shù)創(chuàng)建一個(gè)尚未存在的共享內(nèi)存區(qū)intshmget(key_tkey,size_tsize,intoflag);共享內(nèi)存區(qū)同虛擬地址范圍聯(lián)系起來(lái)void*shmat(intshmid,constvoid*shmaddr,intflag)斷接這個(gè)內(nèi)存區(qū)intshmdt(constvoid*shmaddr)刪除這個(gè)內(nèi)存區(qū)intshmctl(intshmid,intcmd,structshmid_ds*buff)28共享內(nèi)存相關(guān)函數(shù)創(chuàng)建一個(gè)尚未存在的共享內(nèi)存區(qū)29進(jìn)程通訊--消息隊(duì)列進(jìn)程彼此之間可以同IPC消息進(jìn)行通信。進(jìn)程產(chǎn)生的每個(gè)消息都被發(fā)送到一個(gè)消息隊(duì)列中,這個(gè)消息隊(duì)列一直存放在隊(duì)列中,直到另一個(gè)進(jìn)程將其讀走為止。一個(gè)進(jìn)程只能接收一個(gè)給定的消息消息隊(duì)列是使用一個(gè)鏈表來(lái)實(shí)現(xiàn)的。消息可以按照非“先進(jìn)先出”的次序獲得新消息常都放在這個(gè)鏈表的尾進(jìn)程讀出消息,該消息將從隊(duì)列中移去,其它的進(jìn)程不能再讀到了。如果因?yàn)榻邮盏木彌_區(qū)太小造成消息被截?cái)啵財(cái)嗟牟糠謱⒂谰玫貋G失而不給接收者任何提示它和管道很相似,事實(shí)上,它是一種正逐漸被淘汰的通信方式
29進(jìn)程通訊--消息隊(duì)列進(jìn)程彼此之間可以同IPC消息進(jìn)行通信30消息隊(duì)列相關(guān)函數(shù)創(chuàng)建一個(gè)新消息或訪問(wèn)存在的消息隊(duì)列intmsgget(key_tkey,intoflag);放置消息于隊(duì)列中Intmsgsnd(intmsqid,constvoid*ptr,size_tlength,intflag)從消息隊(duì)列中讀出一個(gè)消息msgrcv(intmsqid,void*ptr,size_tlength,longtype,intflag)從隊(duì)列中刪除消息intmsgctl(intmsqid,intcmd,structmsqid_ds*buff)30消息隊(duì)列相關(guān)函數(shù)創(chuàng)建一個(gè)新消息或訪問(wèn)存在的消息隊(duì)列31內(nèi)存管理
(MemoryManagement
)允許多個(gè)進(jìn)程安全的共享主內(nèi)存區(qū)域。Linux的內(nèi)存管理支持虛擬內(nèi)存,即在計(jì)算機(jī)中運(yùn)行的程序,其代碼,數(shù)據(jù),堆棧的總量可以超過(guò)實(shí)際內(nèi)存的大小,操作系統(tǒng)只是把當(dāng)前使用的程序塊保留在內(nèi)存中,其余的程序塊則保留在磁盤(pán)中。必要時(shí),操作系統(tǒng)負(fù)責(zé)在磁盤(pán)和內(nèi)存間交換程序塊。內(nèi)存管理從邏輯上分為硬件無(wú)關(guān)部分和硬件有關(guān)部分。硬件無(wú)關(guān)部分提供了進(jìn)程的映射和邏輯內(nèi)存的對(duì)換;硬件相關(guān)的部分為內(nèi)存管理硬件提供了虛擬接口。31內(nèi)存管理
(MemoryManagement)允許多32虛擬文件系統(tǒng)(VirtualFileSystem,VFS)隱藏了各種硬件的具體細(xì)節(jié),為所有的設(shè)備提供了統(tǒng)一的接口,VFS提供了多達(dá)數(shù)十種不同的文件系統(tǒng)。虛擬文件系統(tǒng)可以分為邏輯文件系統(tǒng)和設(shè)備驅(qū)動(dòng)程序。邏輯文件系統(tǒng)指Linux所支持的文件系統(tǒng),如ext2,fat等,設(shè)備驅(qū)動(dòng)程序指為每一種硬件控制器所編寫(xiě)的設(shè)備驅(qū)動(dòng)程序模塊。網(wǎng)絡(luò)接口(NET)提供了對(duì)各種網(wǎng)絡(luò)標(biāo)準(zhǔn)的存取和各種網(wǎng)絡(luò)硬件的支持。網(wǎng)絡(luò)接口可分為網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)驅(qū)動(dòng)程序。網(wǎng)絡(luò)協(xié)議部分負(fù)責(zé)實(shí)現(xiàn)每一種可能的網(wǎng)絡(luò)傳輸協(xié)議。網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序負(fù)責(zé)與硬件設(shè)備通訊,每一種可能的硬件設(shè)備都有相應(yīng)的設(shè)備驅(qū)動(dòng)程序。32虛擬文件系統(tǒng)(VirtualFileSystem,V33內(nèi)核代碼結(jié)構(gòu)Linux的源代碼一般在/usr/src/Linux-*.*.*(*.*.*代表內(nèi)核版本,如2.4.20)代碼分布如下/arch:包含所有硬件結(jié)構(gòu)特定的內(nèi)核代碼。如i386、ARM等33內(nèi)核代碼結(jié)構(gòu)Linux的源代碼一般在/usr/src/L34/drivers:包含內(nèi)核中所有的設(shè)備驅(qū)動(dòng)程序。如USB、串口等;/fs:包含所有的文件系統(tǒng)代碼。如jffs2、ext2、ntfs等;/include:包含建立內(nèi)核代碼時(shí)所需的大部分庫(kù)文件。如asm-arm是arm平臺(tái)所需的庫(kù)文件;/init:包含內(nèi)核的初始化代碼,內(nèi)核從此處工作;/ipc:包含了核心進(jìn)程間的通訊代碼;/kernel:包含了內(nèi)核管理的核心代碼;/mm:包含了所有的內(nèi)存管理代碼;/net:包含了核心的網(wǎng)絡(luò)部分代碼,如:ipv4、ipv6等;34/drivers:包含內(nèi)核中所有的設(shè)備驅(qū)動(dòng)程序。如USB353536Documentation
保存著詳細(xì)的說(shuō)明文檔Scripts
主要在配置內(nèi)核時(shí)用到,存放了配置內(nèi)核的一些腳本文件,比如makemenuconfig命令等。36Documentation37Linux啟動(dòng)pc機(jī)上linux的啟動(dòng)在x86體系中,cpu上電后在存儲(chǔ)位置0xffff0處開(kāi)始執(zhí)行程序代碼,這個(gè)地址通常是ROM-BIOS中的地址。BIOS硬件檢測(cè),資源分配。將MBR中的bootloader加載到RAM中,然后將控制權(quán)交給RAM內(nèi)的bootloader。
MBR:MainBootRecord主引導(dǎo)記錄
位于MBR的bootloader將內(nèi)核映像從硬盤(pán)中加載到RAM中,然后跳到內(nèi)核的入口點(diǎn),即開(kāi)始啟動(dòng)操作系統(tǒng)。常用的如:lilogrub等
LILO(LInuxLOader)和GNUGRUB(GRandUnifiedBootloader).
37Linux啟動(dòng)pc機(jī)上linux的啟動(dòng)38BIOSGRUB/LILOKernelbootstart_kernel()initrc.sysinitrcmingettylogin()shell進(jìn)入linux操作系統(tǒng)中完成外設(shè)及其驅(qū)動(dòng)程序的加載和初始化激活交換分區(qū),檢查磁盤(pán),加載硬件模塊不同的啟動(dòng)參數(shù),實(shí)現(xiàn)不同的啟動(dòng)設(shè)置用戶登錄power執(zhí)行配置文件YoucanuseLINUX38BIOSGRUB/LILOKernelbootinit39啟動(dòng)參數(shù)嵌入式系統(tǒng)中的Bootloader
系統(tǒng)上電后,在0x0000初開(kāi)始執(zhí)行代碼。常用的啟動(dòng)代碼如:vivi、blob等主要功能:自引導(dǎo)下載嵌入式linux啟動(dòng)內(nèi)核根文件系統(tǒng)0x0000bootloader39啟動(dòng)參數(shù)嵌入式系統(tǒng)中的Bootloader嵌入式lin40嵌入式linuxbootloaderBootloader的結(jié)構(gòu)stage1(匯編語(yǔ)言實(shí)現(xiàn))stage2(c語(yǔ)言實(shí)現(xiàn))硬件設(shè)備初始化準(zhǔn)備RAM,將stage2部分拷貝到RAM中設(shè)置堆棧,跳轉(zhuǎn)到stage2的入口點(diǎn)硬件設(shè)備初始化監(jiān)測(cè)系統(tǒng)內(nèi)存映射將kernel映像和根文件系統(tǒng)加載到RAM中設(shè)置啟動(dòng)參數(shù)進(jìn)入內(nèi)核40嵌入式linuxbootloaderBootload41概要Linux定義Linux種類(lèi)Linux優(yōu)勢(shì)如何選擇linux版本Linux內(nèi)核簡(jiǎn)介1概要Linux定義42Linux的定義Linux一般是指Linux內(nèi)核、Linux系統(tǒng)、Linux發(fā)行版。嚴(yán)格意義上說(shuō)Linux是指由LinusTorvalds維護(hù)的并發(fā)布的內(nèi)核。它的代碼基只包括內(nèi)核而不包括其它方面的應(yīng)用。內(nèi)核提供系統(tǒng)核心服務(wù),如進(jìn)程管理,進(jìn)程的調(diào)度,虛擬文件系統(tǒng),內(nèi)存的管理等等。嵌入式Linux,一般是指把Linux內(nèi)核移植到一個(gè)專(zhuān)用嵌入式設(shè)備的CPU和主板上。現(xiàn)在有很多公司提供嵌入式Linux解決方案。通常包括一個(gè)移植的內(nèi)核、嵌入式Linux的開(kāi)發(fā)工具以及根據(jù)應(yīng)用需要裁減的應(yīng)用程序等,有時(shí)還提供實(shí)時(shí)擴(kuò)展的內(nèi)核。就大部分而言,嵌入式Linux和桌面Linux提供的API函數(shù)和內(nèi)核源代碼都是相同的。開(kāi)發(fā)工具主要包括源碼瀏覽器、交叉編譯器、調(diào)試器、CVS等項(xiàng)目管理軟件等等。這些工具一般都是裝在主機(jī)上。
2Linux的定義Linux一般是指Linux內(nèi)核、Linu43LinusTorvalds(萊納斯.托瓦茨)
托瓦茲1969年12月28日出生于芬蘭赫爾辛基市,芬蘭瑞典。人現(xiàn)受聘于開(kāi)放源代碼開(kāi)發(fā)實(shí)驗(yàn)(OSDL:OpenSourceDevelopmentLabs,Inc)。
Linux的誕生顯得充滿了偶然。萊納斯經(jīng)常要用他的終端仿真器(TerminalEmulator)去訪問(wèn)大學(xué)主機(jī)上的新聞組和郵件,為了方便讀寫(xiě)和下載文件,他自己編寫(xiě)了磁盤(pán)驅(qū)動(dòng)程序和文件系統(tǒng),這些在后來(lái)成為了Linux第一個(gè)內(nèi)核的雛形。當(dāng)時(shí),他年僅21歲。在自由軟件之父理查德?斯托曼(RichardStallman)某些精神的感召下,萊納斯很快以Linux的名字把這款類(lèi)Unix的操作系統(tǒng)加入到了自由軟件基金(FSF)的GNU計(jì)劃中,并通過(guò)GPL的通用性授權(quán),允許用戶銷(xiāo)售、拷貝并且改動(dòng)程序,但你必須將同樣的自由傳遞下去,而且必須免費(fèi)公開(kāi)你修改后的代碼。這說(shuō)明,Linux并不是被刻意創(chuàng)造的,它完全是日積月累的結(jié)果,是經(jīng)驗(yàn)、創(chuàng)意和一小段一小段代碼的集合體。3LinusTorvalds(萊納斯.托瓦茨)44嵌入式Linux種類(lèi)嵌入式系統(tǒng)的劃分一般是根據(jù)使用對(duì)象進(jìn)行劃分,消費(fèi)類(lèi)電子、工控設(shè)備等。為了更好的理解所設(shè)計(jì)的系統(tǒng),可以按照尺寸,時(shí)間約束,網(wǎng)絡(luò),用戶交互程度等因素劃分。尺寸:小系統(tǒng),中等系統(tǒng),大系統(tǒng)小系統(tǒng)-CPU的性能比較低,ROM<2MBRAM<4MB中系統(tǒng)-CPU的性能中等,ROM32MBRAM64MB左右大系統(tǒng)-CPU性能高,存儲(chǔ)量大時(shí)間約束:實(shí)時(shí),非實(shí)時(shí)網(wǎng)絡(luò)連接性用戶交互4嵌入式Linux種類(lèi)嵌入式系統(tǒng)的劃分一般是根據(jù)使用對(duì)象進(jìn)行45嵌入式Linux種類(lèi)是否支持MMU不支持MMU:ucLinux,主要應(yīng)用在ARM7系列微處理系統(tǒng)中,如三星公司的S3C44B0,S3C4510等,無(wú)MMU,不支持虛地址,直接訪問(wèn)內(nèi)存,所有程序中訪問(wèn)的地址都是物理地址。支持MMU:嵌入式Linux,主要應(yīng)用在ARM9系列微處理器系統(tǒng)中,如三星公司的S3C2410,Intel公司的PXA255等。5嵌入式Linux種類(lèi)是否支持MMU46MMU實(shí)現(xiàn)虛擬存儲(chǔ)空間即將虛擬存儲(chǔ)空間影射到實(shí)際物理存儲(chǔ)空間。使編程人員不用考慮具體程序所放在物理存儲(chǔ)空間的具體位置和程序的大小。存儲(chǔ)器訪問(wèn)權(quán)限的控制
任務(wù)間通訊,對(duì)自己的內(nèi)存、堆棧等進(jìn)行保護(hù),只能通過(guò)管道、信號(hào)量、共享內(nèi)存等方式進(jìn)行通訊??刂艭ache。6MMU實(shí)現(xiàn)虛擬存儲(chǔ)空間47Linux的主要特點(diǎn)開(kāi)放性開(kāi)放性是指系統(tǒng)遵循世界標(biāo)準(zhǔn)規(guī)范,特別是遵循開(kāi)放系統(tǒng)互連(OSI)國(guó)際標(biāo)準(zhǔn)。多用戶多用戶是指系統(tǒng)資源可以被不同用戶各自擁有使用,即每個(gè)用戶對(duì)自己的資源(例如:文件、設(shè)備)有特定的權(quán)限,互不影響。多任務(wù)多任務(wù)是現(xiàn)代計(jì)算機(jī)的最主要的一個(gè)特點(diǎn)。它是指計(jì)算機(jī)同時(shí)執(zhí)行多個(gè)程序,而且各個(gè)程序的運(yùn)行互相獨(dú)立。Linux系統(tǒng)調(diào)度每一個(gè)進(jìn)程平等地訪問(wèn)微處理器。良好的用戶界面Linux向用戶提供了兩種界面:用戶界面和系統(tǒng)調(diào)用。用戶界面可分為基于文本的命令行界面和圖形界面,作為人機(jī)交互界面。系統(tǒng)調(diào)用給用戶提供編程時(shí)使用的界面。用戶可以在編程時(shí)直接使用系統(tǒng)提供的系統(tǒng)調(diào)用命令。7Linux的主要特點(diǎn)開(kāi)放性48Linux的主要特點(diǎn)設(shè)備獨(dú)立性指操作系統(tǒng)把所有外部設(shè)備統(tǒng)一當(dāng)作成文件來(lái)看待,只要安裝它們的驅(qū)動(dòng)程序,任何用戶都可以象使用文件一樣,操縱、使用這些設(shè)備,而不必知道它們的具體存在形式。豐富的網(wǎng)絡(luò)功能完善的內(nèi)置網(wǎng)絡(luò)是Linux的一大特點(diǎn)??煽康南到y(tǒng)安全Linux采取了許多安全技術(shù)措施,包括對(duì)讀、寫(xiě)進(jìn)行權(quán)限控制、帶保護(hù)的子系統(tǒng)、審計(jì)跟蹤、核心授權(quán)等。良好的可移植性可移植性是指將操作系統(tǒng)從一個(gè)平臺(tái)轉(zhuǎn)移到另一個(gè)平臺(tái)使它仍然能按其自身的方式運(yùn)行的能力。8Linux的主要特點(diǎn)設(shè)備獨(dú)立性49嵌入式Linux優(yōu)勢(shì)Linux的費(fèi)用低;Linux的所有部分可以充分地定制;Linux可以運(yùn)行在低檔,便宜的硬件平臺(tái);Linux的功能是強(qiáng)大的;Linux對(duì)源代碼質(zhì)量有一個(gè)高標(biāo)準(zhǔn);Linux內(nèi)核非常小,而且緊湊;Linux有很好的支持;Linux有很多合適的工具;9嵌入式Linux優(yōu)勢(shì)Linux的費(fèi)用低;50Linux的版本內(nèi)核版本與發(fā)型版本操作系統(tǒng)的內(nèi)核版本指的是在Linus本人領(lǐng)導(dǎo)下的開(kāi)發(fā)小組開(kāi)發(fā)出的系統(tǒng)內(nèi)核的版本號(hào),如2.4.x,2.6.x。有一些組織或商業(yè)廠家,將Linux系統(tǒng)的內(nèi)核與外圍應(yīng)用軟件和文檔包裝起來(lái),并提供一些系統(tǒng)安裝界面和系統(tǒng)設(shè)定與管理工具,這樣就構(gòu)成了一個(gè)發(fā)行版本,如RedHat紅帽子(FeDora斐徳拉)、Debian蝶變
(UBuntu烏本圖)。10Linux的版本內(nèi)核版本與發(fā)型版本51如何選擇Linux的版本DIY-自己動(dòng)手做一個(gè)滿足需要的Linux版本選擇商用Linux版本、自由的、免費(fèi)的授權(quán)和涉及到的授權(quán)是否滿足你的需要,是否有合適的開(kāi)發(fā)工具是否能夠提供足夠的支持信譽(yù)文檔11如何選擇Linux的版本DIY-自己動(dòng)手做一個(gè)滿足需要的52嵌入式Linux發(fā)展現(xiàn)狀RT-Linux RT-Linux是利用Linux進(jìn)行實(shí)時(shí)系統(tǒng)開(kāi)發(fā)比較早的嘗試,是一種硬實(shí)時(shí)操作系統(tǒng)。目前RT-Linux已成功應(yīng)用于航天飛機(jī)的空間數(shù)據(jù)采集、科學(xué)儀器測(cè)控,以及電影特技圖像處理等眾多領(lǐng)域。
RT-Linux的原理是采用雙內(nèi)核機(jī)構(gòu),即將Linux的內(nèi)核代碼進(jìn)行少量修改,將Linux任務(wù)以及Linux內(nèi)核本身作為實(shí)時(shí)內(nèi)核的一個(gè)優(yōu)先級(jí)最低的任務(wù),即實(shí)時(shí)任務(wù)優(yōu)先級(jí)高于普通Linux任務(wù),即在實(shí)時(shí)任務(wù)存在的情況下運(yùn)行實(shí)時(shí)任務(wù),否則才運(yùn)行Linux本身的任務(wù)。實(shí)時(shí)任務(wù)不同于Linux普通進(jìn)程,它是以Linux的內(nèi)核模塊(LinuxLoadableKernelModule,LKM)的形式存在的。需要運(yùn)行實(shí)時(shí)任務(wù)的時(shí)候,將這個(gè)實(shí)時(shí)任務(wù)的內(nèi)核模塊插入到內(nèi)核中去。實(shí)時(shí)任務(wù)和Linux一般進(jìn)程之間的通信通過(guò)共享內(nèi)存或者FIFO通道來(lái)實(shí)現(xiàn)。12嵌入式Linux發(fā)展現(xiàn)狀RT-Linux53RT-Linux的工作原理圖13RT-Linux的工作原理圖54uClinux控制領(lǐng)域中的linux系統(tǒng)。它包含linux常用的API,內(nèi)核小于512K,保留了linux原有的高穩(wěn)定性、強(qiáng)大的網(wǎng)絡(luò)功能和卓越的文件系統(tǒng)支持功能等優(yōu)點(diǎn)。目前已支持的CPU芯片有,Motorola公司的68K系列、PowerPC系列以及ARM公司的系列芯片。官方網(wǎng)站,。uClinux最大特點(diǎn)就是不支持MMU。
uClinux系統(tǒng)對(duì)內(nèi)存的訪問(wèn)是直接的,即不需要經(jīng)過(guò)MMU,直接將地址發(fā)送到地址線上,所有程序訪問(wèn)的都是實(shí)際的物理地址,這樣一方面減小了內(nèi)核的體積,另一方面又增強(qiáng)了系統(tǒng)的實(shí)時(shí)性能。但內(nèi)存空間得不到保護(hù),對(duì)于應(yīng)用開(kāi)發(fā)者來(lái)說(shuō),必須明白自己程序運(yùn)行的位置,以及保證不會(huì)破壞其它程序運(yùn)行空間以及系統(tǒng)的穩(wěn)定。uClinux也可以使用RT-Linux的實(shí)時(shí)補(bǔ)丁,以增強(qiáng)其實(shí)時(shí)性。14uClinux控制領(lǐng)域中的linux系統(tǒng)。55MizilinuxMIZI
韓國(guó)MIZI公司所公布的開(kāi)放源代碼的免費(fèi)嵌入式操作系統(tǒng)arm-Linux。大部分的2410系統(tǒng)板上都是采用的mizilinux。
15MizilinuxMIZI56Linux內(nèi)核簡(jiǎn)介L(zhǎng)inux文件系統(tǒng)Linux內(nèi)核Linux的啟動(dòng)16Linux內(nèi)核簡(jiǎn)介L(zhǎng)inux文件系統(tǒng)57Linux主要目錄介紹與Windows一樣,在Linux中也是通過(guò)目錄來(lái)組織文件的。但不同的是,在Linux下只有一個(gè)根目錄,而不象Windows那樣一個(gè)分區(qū)一個(gè)根目錄。
17Linux主要目錄介紹與Windows一樣,在Linux58Linux下常用的命令、工具系統(tǒng)啟動(dòng)時(shí)要用到的程序、
系統(tǒng)內(nèi)核,引導(dǎo)配置文件等。Linux就是從這里啟動(dòng)的。所有的設(shè)備文件。但不是具體的驅(qū)動(dòng)程序,而是一個(gè)訪問(wèn)這些外部設(shè)備的端口。
系統(tǒng)管理時(shí)要用到的各種配置文件和子目錄。用戶主目錄,用戶獨(dú)立的空間非標(biāo)準(zhǔn)目錄,內(nèi)空,但決不能刪系統(tǒng)管理員的系統(tǒng)管理程序一個(gè)虛擬的文件系統(tǒng),可用來(lái)訪問(wèn)到內(nèi)存里的內(nèi)容。包含許多被/bin/和/sbin/中的程序使用的庫(kù)文件大多數(shù)情況下是空的,用來(lái)保存異常時(shí)候的丟失文件超級(jí)用戶(管理員)的專(zhuān)用目錄外部設(shè)備的掛接點(diǎn),通常用cdrom與floppy兩個(gè)子目錄通常用來(lái)安裝各種軟件的地方。/usr/src、/usr/bin系統(tǒng)運(yùn)行時(shí)的各種臨時(shí)文件18Linux下常用的命令、工具系統(tǒng)啟動(dòng)時(shí)要用到的程序、系59Linux的內(nèi)核結(jié)構(gòu)Linux內(nèi)核主要由5個(gè)子系統(tǒng)組成:進(jìn)程調(diào)度進(jìn)程間通訊內(nèi)存管理虛擬文件系統(tǒng)網(wǎng)絡(luò)接口19Linux的內(nèi)核結(jié)構(gòu)Linux內(nèi)核主要由5個(gè)子系統(tǒng)組成:60進(jìn)程調(diào)度
(ProcessScheduling)
進(jìn)程:程序執(zhí)行的一個(gè)范例。進(jìn)程的4要素:一段供進(jìn)程執(zhí)行的程序,該程序可以被多個(gè)進(jìn)程執(zhí)行;
獨(dú)立的內(nèi)核堆棧;進(jìn)程控制快;獨(dú)立的存儲(chǔ)空間;pid_tfork(void)函數(shù):生成進(jìn)程。
voidmain()
{
for(;;)fork();
}Exit():退出進(jìn)程。20進(jìn)程調(diào)度
(ProcessScheduling)進(jìn)程61進(jìn)程與線程進(jìn)程是具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位.線程是進(jìn)程的一個(gè)實(shí)體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器,一組寄存器和棧),但是它可與同屬一個(gè)進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源.一個(gè)線程可以創(chuàng)建和撤銷(xiāo)另一個(gè)線程;同一個(gè)進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行需要注意的是:在應(yīng)用程序中使用多線程不會(huì)增加CPU的數(shù)據(jù)處理能力。21進(jìn)程與線程進(jìn)程是具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合上62進(jìn)程調(diào)度進(jìn)程的狀態(tài)
運(yùn)行態(tài)r、休眠態(tài)s、僵死態(tài)z作用:
控制進(jìn)程對(duì)CPU的訪問(wèn)。當(dāng)需要選擇下一個(gè)進(jìn)程運(yùn)行時(shí),由調(diào)度程序選擇最值得運(yùn)行的進(jìn)程??蛇\(yùn)行進(jìn)程實(shí)際上是僅等待CPU資源的進(jìn)程,如果某個(gè)進(jìn)程在等待其它資源,則該進(jìn)程是不可運(yùn)行進(jìn)程。Linux使用了比較簡(jiǎn)單的基于優(yōu)先級(jí)的進(jìn)程調(diào)度算法選擇新的進(jìn)程。進(jìn)程處于操作系統(tǒng)的中心位置,其他的子系統(tǒng)都依賴(lài)它。因?yàn)槊總€(gè)子系統(tǒng)都需要掛起或恢復(fù)進(jìn)程。一般情況下,當(dāng)一個(gè)進(jìn)程等待硬件操作完成時(shí),它被掛起;當(dāng)操作真正完成時(shí),進(jìn)程被恢復(fù)執(zhí)行。22進(jìn)程調(diào)度進(jìn)程的狀態(tài)63進(jìn)程通訊
(Interprocesscommunication)管道和FIFO信號(hào)量消息隊(duì)列共享內(nèi)存23進(jìn)程通訊
(Interprocesscommun64進(jìn)程通訊--管道(pipe)管道 管道是進(jìn)程之間單向的數(shù)據(jù)流:一個(gè)進(jìn)程寫(xiě)入管道的所有數(shù)據(jù)都有內(nèi)核定向到另一個(gè)進(jìn)程,另一個(gè)進(jìn)程由此可以從管道中讀取數(shù)據(jù)。管道的特點(diǎn):管道被看作是打開(kāi)的文件,但是在已經(jīng)裝載的文件系統(tǒng)中沒(méi)有映象;管道是單向的,只提供一個(gè)方向的數(shù)據(jù)流,如果需要雙向數(shù)據(jù)流,必須創(chuàng)建兩個(gè)管道,每個(gè)方向一個(gè)一個(gè)管道可以被多個(gè)進(jìn)程使用,如果一個(gè)管道被多個(gè)進(jìn)程使用,必須使用文件加鎖機(jī)制管道的一個(gè)主要缺點(diǎn)是:用戶無(wú)法打開(kāi)一個(gè)現(xiàn)有的管道,除非管道是由一個(gè)公共的祖先進(jìn)程創(chuàng)建的,否則兩個(gè)任意進(jìn)程就不能共享同一個(gè)管道。此問(wèn)題可由FIFO解決。FIFO命名管道,指代先進(jìn)先出。每個(gè)FIFO有一個(gè)路徑名與之關(guān)聯(lián),從而允許無(wú)親緣關(guān)系的進(jìn)程訪問(wèn)同一個(gè)FIFOFIFO是半雙工的。24進(jìn)程通訊--管道(pipe)管道65管道相關(guān)函數(shù)創(chuàng)建管道
intpipe(intfd[2]);
該函數(shù)返回兩個(gè)文件描述字:fd[0],fd[1]。前者打開(kāi)文件讀,后者打開(kāi)文件寫(xiě)。從管道中讀數(shù)據(jù)read(intfd,void*buff,unsignednbytes)管道描述符fd,傳送數(shù)據(jù)地址buf,傳送字節(jié)數(shù)nbytes向管道中寫(xiě)數(shù)據(jù)write(intfd,void*buff,unsignednbytes)25管道相關(guān)函數(shù)創(chuàng)建管道66進(jìn)程通訊--信號(hào)量(semaphores)信號(hào)量信號(hào)量是個(gè)整數(shù)對(duì)象,是個(gè)計(jì)數(shù)器,用來(lái)為多個(gè)進(jìn)程共享的數(shù)據(jù)結(jié)構(gòu)提供受控訪問(wèn)信號(hào)量大于0,表示受保護(hù)的資源可用,信號(hào)量小于等于0,受保護(hù)資源不可用只能通過(guò)原語(yǔ)操作而改變信號(hào)量相關(guān)函數(shù)創(chuàng)建信號(hào)量
intsemget(key_tkey,intnSems,intflag)根據(jù)路徑名產(chǎn)生一個(gè)關(guān)鍵字
key_tftok(constchar*pathname,intproj_id);控制信號(hào)量
intsemctl(intsemid,intsemnum,intcmd)對(duì)信號(hào)量+1或-1測(cè)試是否為0 intsemop(intsemid,structsembuf*sops,unsignedshortnsops)26進(jìn)程通訊--信號(hào)量(semaphores)信號(hào)量67進(jìn)程通訊--共享內(nèi)存
(ShareMemory
)共享內(nèi)存最有用的進(jìn)程間通信機(jī)制,允許兩個(gè)或多個(gè)進(jìn)程通過(guò)把公共數(shù)據(jù)結(jié)構(gòu)放入一個(gè)共享內(nèi)存段來(lái)訪問(wèn)它們。共享內(nèi)存區(qū)是最快的進(jìn)程間通信機(jī)制。一旦這樣的內(nèi)存區(qū)映射到它的進(jìn)程的地址空間,這些進(jìn)程間數(shù)據(jù)的傳遞就不再涉及內(nèi)核。主要局限就是它不能提供同步,如果兩個(gè)進(jìn)程企圖修改相同的共享內(nèi)存區(qū)域,內(nèi)存不能串行化這些操作。使用共享內(nèi)存區(qū)必須設(shè)計(jì)出他們自己的同步協(xié)議客戶服務(wù)器共享內(nèi)存客戶地址空間服務(wù)器地址空間27進(jìn)程通訊--共享內(nèi)存
(ShareMemory)共享68共享內(nèi)存相關(guān)函數(shù)創(chuàng)建一個(gè)尚未存在的共享內(nèi)存區(qū)intshmget(key_tkey,size_tsize,intoflag);共享內(nèi)存區(qū)同虛擬地址范圍聯(lián)系起來(lái)void*shmat(intshmid,constvoid*shmaddr,intflag)斷接這個(gè)內(nèi)存區(qū)intshmdt(constvoid*shmaddr)刪除這個(gè)內(nèi)存區(qū)intshmctl(intshmid,intcmd,structshmid_ds*buff)28共享內(nèi)存相關(guān)函數(shù)創(chuàng)建一個(gè)尚未存在的共享內(nèi)存區(qū)69進(jìn)程通訊--消息隊(duì)列進(jìn)程彼此之間可以同IPC消息進(jìn)行通信。進(jìn)程產(chǎn)生的每個(gè)消息都被發(fā)送到一個(gè)消息隊(duì)列中,這個(gè)消息隊(duì)列一直存放在隊(duì)列中,直到另一個(gè)進(jìn)程將其讀走為止。一個(gè)進(jìn)程只能接收一個(gè)給定的消息消息隊(duì)列是使用一個(gè)鏈表來(lái)實(shí)現(xiàn)的。消息可以按照非“先進(jìn)先出”的次序獲得新消息常都放在這個(gè)鏈表的尾進(jìn)程讀出消息,該消息將從隊(duì)列中移去,其它的進(jìn)程不能再讀到了。如果因?yàn)榻邮盏木彌_區(qū)太小造成消息被截?cái)?,截?cái)嗟牟糠謱⒂谰玫貋G失而不給接收者任何提示它和管道很相似,事實(shí)上,它是一種正逐漸被淘汰的通信方式
29進(jìn)程通訊--消息隊(duì)列進(jìn)程彼此之間可以同IPC消息進(jìn)行通信70消息隊(duì)列相關(guān)函數(shù)創(chuàng)建一個(gè)新消息或訪問(wèn)存在的消息隊(duì)列intmsgget(key_tkey,intoflag);放置消息于隊(duì)列中Intmsgsnd(intmsqid,constvoid*ptr,size_tlength,intflag)從消息隊(duì)列中讀出一個(gè)消息msgrcv(intmsqid,void*ptr,size_tlength,longtype,intflag)從隊(duì)列中刪除消息intmsgctl(intmsqid,intcmd,structmsqid_ds*buff)30消息隊(duì)列相關(guān)函數(shù)創(chuàng)建一個(gè)新消息或訪問(wèn)存在的消息隊(duì)列71內(nèi)存管理
(MemoryManagement
)允許多個(gè)進(jìn)程安全的共享主內(nèi)存區(qū)域。Linux的內(nèi)存管理支持虛擬內(nèi)存,即在計(jì)算機(jī)中運(yùn)行的程序,其代碼,數(shù)據(jù),堆棧的總量可以超過(guò)實(shí)際內(nèi)存的大小,操作系統(tǒng)只是把當(dāng)前使用的程序塊保留在內(nèi)存中,其余的程序塊則保留在磁盤(pán)中。必要時(shí),操作系統(tǒng)負(fù)責(zé)在磁盤(pán)和內(nèi)存間交換程序塊。內(nèi)存管理從邏輯上分為硬件無(wú)關(guān)部分和硬件有關(guān)部
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 印刷月結(jié)協(xié)議合同范本
- 合同主體變更補(bǔ)充合同范本
- 動(dòng)遷出售合同范例
- 合陽(yáng)房子出租合同范本
- 不規(guī)則車(chē)位轉(zhuǎn)讓合同范本
- 水果存儲(chǔ)合同范本
- 公寓降價(jià)出租合同范例
- 農(nóng)田承包中介合同范本
- 發(fā)廊出兌合同范本
- 商務(wù)外貿(mào)合同范本
- 2025河北石家莊市交建(交投津石)高速公路建設(shè)管理限公司招聘120人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- DeepSeek從入門(mén)到精通培訓(xùn)課件
- 俄羅斯進(jìn)口凍肉合同范例
- 23G409先張法預(yù)應(yīng)力混凝土管樁
- 個(gè)體工商戶公司章程模板
- 陜西各市(精確到縣區(qū))地圖PPT課件(可編輯版)
- 部編版小學(xué)六年級(jí)書(shū)法教案【16課時(shí)】電子稿
- 廣元九州施工合同正式
- 蘭州商學(xué)院二級(jí)學(xué)院權(quán)力運(yùn)行流程圖
- 預(yù)埋件計(jì)算公式
- 鋼結(jié)構(gòu)廠房水電安裝施工組織設(shè)計(jì)方案
評(píng)論
0/150
提交評(píng)論