《linux操作系統(tǒng)培訓》由會員分享,可在線閱讀,更多相關《linux操作系統(tǒng)培訓(28頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,2007 VCOM Corporation,單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,Linux,操作系統(tǒng)培訓,內(nèi)容摘要,Linux,基礎,Linux,常用操作命令,Linux,設備管理,Linux,文件管理,Linux,進程調(diào)度,Linux,多線程編程,Linux,進程間通信,Linux,基礎,操作系統(tǒng)的概念,操作系統(tǒng)是管理計算機系統(tǒng)資源(軟件和硬件)資源的系統(tǒng)軟件,它為計算機提供方便,有效,安全,可靠的工作環(huán)境。主要包括:進程管理,存儲器管理,設備管理,文件管理,作業(yè)管理等。,操作
2、系統(tǒng)的分類。,操作系統(tǒng)分為實時操作系統(tǒng)和非實時操作系統(tǒng),又可以分為嵌入式操作系統(tǒng)和非嵌入式操作系統(tǒng)等。,linux,操作系統(tǒng)即可以作為準實時的操作系統(tǒng)使用,也可作為非實時操作系統(tǒng)使用,并且可以滿足服務器操作系統(tǒng)的要求,在桌面操作系統(tǒng)領域也得到較大的發(fā)展。,所以,,linux,操作系統(tǒng)已經(jīng)滲透到嵌入式領域、服務器領域、個人,pc,領域,成為目前應用領域最廣的一種操作系統(tǒng)。,Linux,基礎,Linux,系統(tǒng)的組成,整個,linux,系統(tǒng)由內(nèi)核、設備驅動、各種運行時的庫、,shell,及應用程序等組成,。,Linux,的啟動過程。,在硬件上電之后,首先會有一個自舉程序運行(在嵌入式領域成為,loa
3、der,在,pc,中成為,bios),然后自舉程序在初始化必要的硬件(例如內(nèi)存)之后將,linux,內(nèi)核讀取到內(nèi)存中,然后跳轉到內(nèi)核的開始位置運行,linux,內(nèi)核,.,linux,內(nèi)核在進行必要的初始化設置工作和掛載根文件系統(tǒng)之后,會啟動文件系統(tǒng)中的一個程序作為系統(tǒng)中的第一個進程,這個進程就是大名鼎鼎的,init,進程,,init,進程會,然后運行,etc,目錄下的對應的,shell,腳本文件。,Linux,基礎,Linux,內(nèi)核的作用,內(nèi)核是,Linux,操作系統(tǒng)的核心,它負責系統(tǒng)的文件管理、設備管理、進程管理、存儲管理、網(wǎng)絡協(xié)議,直接決定著系統(tǒng)的性能和穩(wěn)定性。,linux,的版本號,通常
4、我們所說的,linux,的版本號,指的就是,linux,內(nèi)核的版本號。版本號由三部分組成主版本號、次版本號、末版本號。例如:,2.6.19 2,為主版本號、,6,為次版本號、,19,為末版本號。同時可以通過版本號來確定,linux,的版本是穩(wěn)定版本還是開發(fā)版本(次版本號奇數(shù)為開發(fā)版本,偶數(shù)為穩(wěn)定版本)。,Linux,常用操作命令,命令,功能,ls,列出當前目錄下有哪些文件和目錄。(,ls l,為列出一個目錄下的詳細信息),cd,進入一個目錄。(,cd.,為進入上一級目錄),pwd,顯示當前目錄。,rm,刪除一個文件或目錄。(,rm r,為刪除一個目錄及該目錄下的所有文件),mkdir,創(chuàng)建一個
5、目錄。,cp,拷貝一個文件。(,cp a b,把,a,文件拷貝成,b,文件),du,列出目錄占用磁盤空間的大小,rmdir,刪除一個目錄,find,在指定路徑查找文件,Linux,常用操作命令,命令,功能,grep,在指定文件查找指定字符串,mv,移動文件或目錄,chmod,改變文件權限指令,man,命令或函數(shù)幫助查詢指令,top,查看,cpu,和內(nèi)存使用情況的指令,ps,查看當前運行的進程的指令,pstree,查看進程樹的指令,Linux,設備管理,Linux,上層應用與實際設備的關聯(lián),Linux,對于設備的管理是通過設備驅動程序來進行管理,采用設備文件的方式進行關聯(lián)。每個設備文件都有設備類
6、型,主設備號、次設備號,在驅動程序中會注冊這些設備號。這樣當上層應用程序操作設備文件時,就會將請求通過,Linux,操作系統(tǒng)調(diào)用傳遞到驅動程序中,驅動程序控制硬件設備完成相應的操作。,Linux,設備文件一般在,/dev,目錄下面。例如如下設備文件:,crw-rw-1 root uucp 4,64 12,月,8 09:57/dev/ttyS0,是指,/dev/ttyS0,為字符型設備,主設備號為,4,,次設備號為,64,。其實這就是,linux,系統(tǒng)中的串口,1,的設備文件。我們打開這個設備文件,然后寫入數(shù)據(jù),我們寫入的數(shù)據(jù)就會從串口發(fā)送出去,我們讀入數(shù)據(jù),就會讀取到從串口收到的數(shù)據(jù)。,如果我
7、們想控制串口的速率、校驗位、碼位的長度,我們只需要調(diào)用,ioctl,函數(shù),然后傳入相應的數(shù)據(jù)就可以了。,Linux,文件管理,Linux,系統(tǒng)中使用的文件類型,目前,linux,采用的文件系統(tǒng)有,ext3,文件系統(tǒng),但是在嵌入式,linux,操作系統(tǒng)中更多的使用的是,jffs2,yaffs,和,nfs,網(wǎng)絡文件系統(tǒng)。,Jffs2,文件系統(tǒng)是專為,nor flash,設計的文件系統(tǒng),考慮到了,nor flash,的許多特性,同時具有壓縮性能,一般可以達到,2,:,1,的壓縮效果,但是在用于大于,128Mbytes,的,flash,時,效果不是太好。,Yaffs,文件系統(tǒng)是專為,nand flas
8、h,設計的文件系統(tǒng),考慮到了,nand falsh,的許多的特性,但是不具有壓縮性能,但其加載速度較快,使用于大容量存儲的場合。,除去以上文件類型的不同之外,,linux,提供統(tǒng)一的,api,操作函數(shù),來實現(xiàn)對文件系統(tǒng)的管理。另外,在,linux,中,在對一個設備上的文件進行操作時,需要首先掛載這個設備到文件系統(tǒng)中,才能操作這個設備上的文件。,在,linux,內(nèi)核啟動時,會默認掛載一個文件系統(tǒng),這個就是根文件系統(tǒng),此后所有的文件系統(tǒng)都是基于這個文件系統(tǒng)進行掛載,同時也可以卸載,但是根文件系統(tǒng)是不能卸載的。,掛載一個文件系統(tǒng)的命令如下:,mount t yaffs/dev/mtdblock0/m
9、nt,意思是說,把文件類型為,yaffs,的,mtdblock0,上的文件系統(tǒng)掛載到,/mnt,目錄下,Linux,進程調(diào)度,Linux,調(diào)度算法,Linux,調(diào)度算法把,CPU,的時間劃分為時期(,epoch,)。在一個單獨的時期內(nèi),每個進程有一個指定的時間片,時間片持續(xù)時間從這個時期的開始計算。一般情況下,不同的進程有不同大小的時間片。時間片的值是在一個時期內(nèi),分配給進程的最大,CPU,時間部分。當一個進程用完它的時間片時,這個進程被搶占,并用另一個可運行進程代替它。當然,在同一時期內(nèi),一個進程可以幾次被調(diào)度程序選中(只要它的時間片還沒用完),例如,如果進程掛起自己,等待,I/O,,那么,
10、它還剩余一些時間片,并可以在同一時期內(nèi)再度被選中。當所有的可運行進程都用完它們的時間片時,一個時期才結束;在這種情況下,調(diào)度程序的算法重新計算所有進程的時間片,然后,一個新的時期開始。,Linux,進程管理,Linux,進程的優(yōu)先級,靜態(tài)優(yōu)先級(,Static priority,),這種優(yōu)先級由用戶賦給實時進程,范圍從,1,到,99,,調(diào)度程序從不改變它。,動態(tài)優(yōu)先級(,Dynamic prority,),這種優(yōu)先級只應用于普通進程。實質(zhì)上它是基本時間片由此也叫進程的基本優(yōu)先級(,base priority,)與當前時期內(nèi)的剩余時間片之和。,當然,實時進程的靜態(tài)優(yōu)先級總是高于普通進程的動態(tài)優(yōu)先
11、級,只有當,TASK_RUNNING,狀態(tài)沒有實時進程時,調(diào)度程序才開始運行普通進程。,Linux,進程管理,Linux,進程的創(chuàng)建,在,Linux,中要使用,exec,函數(shù)族。系統(tǒng)調(diào)用,execve,()對當前進程進行替換,替換者為一個指定的程序,其參數(shù)包括文件名(,filename,)、參數(shù)列表(,argv,)以及環(huán)境變量(,envp,)。,exec,函數(shù)族當然不止一個,但它們大致相同,在,Linux,中,它們分別是:,execl,,,execlp,,,execle,,,execv,,,execve,和,execvp,,下面我只以,execlp,為例,其它函數(shù)究竟與,execlp,有何區(qū)別
12、,請通過,manexec,命令來了解它們的具體情況。,一個進程一旦調(diào)用,exec,類函數(shù),它本身就,死亡,了,系統(tǒng)把代碼段替換成新的程序的代碼,廢棄原有的數(shù)據(jù)段和堆棧段,并為新程序分配新的數(shù)據(jù)段與堆棧段,唯一留下的,就是進程號,也就是說,對系統(tǒng)而言,還是同一個進程,不過已經(jīng)是另一個程序了。(不過,exec,類函數(shù)中有的還允許繼承環(huán)境變量之類的信息。),Linux,線程管理,使用線程的優(yōu)點,和進程相比,它是一種非?!肮?jié)儉”的多任務操作方式(內(nèi)存占用,啟動時間,切換時間,),和進程相比,線程間的通信更加方便。,提高應用程序響應,使多,CPU,系統(tǒng)更加有效,改善程序結構,復雜問題簡單化,Linux,
13、線程管理,多線程的例子,#include,#include,#include,#include,void thread(void),int i;,for(i=0;i3;i+),printf(This is a pthreadn);,usleep(100*1000);,int main(void),pthread_t id;,int i,ret;,ret=pthread_create(,if(ret!=0),printf(Create pthread error!n);,exit(1);,for(i=0;i3;i+),printf(This is the main processn);,usle
14、ep(100*1000);,pthread_join(id,NULL);,return(0);,Linux,線程管理,多線程的編譯,APP=threadTest,$(APP):$(APP).c,gcc-Wall-o$(APP)$(APP).c-lpthread,clean:,rm$(APP),Linux,進程間通信,Linux,進程間通信的方法,管道、消息隊列、共享內(nèi)存、信號量、套接口、信號,Linux,進程間通信,管道,管道包括無名管道和有名管道兩種,前者用于父進程和子進程間的通信,后者用于運行于同一臺機器上的任意兩個進程間的通信,無名管道,無名管道由,pipe,()函數(shù)創(chuàng)建:,int pi
15、pe(int filedis2),;,參數(shù),filedis,返回兩個文件描述符:,filedes0,為讀而打開,,filedes1,為寫而打開。,filedes1,的輸出是,filedes0,的輸入。,Linux,進程間通信,無名管道的例子,#include,#include,#include,#include,#include,#define INPUT 0,#define OUTPUT 1,int main(),int file_descriptors2;,/*,定義子進程號*,/,pid_t pid;,char buf256;,int returned_count;,/*,創(chuàng)建無名管道*
16、,/,pipe(file_descriptors);,/*,創(chuàng)建子進程*,/,if(pid=fork()=-1),printf(Error in forkn);,exit(1);,Linux,進程間通信,無名管道的例子,if(pid=0),/*,執(zhí)行子進程*,/,printf(child process.n);,/*,子進程向父進程寫數(shù)據(jù),關閉管道的讀端*,/,close(file_descriptorsINPUT);,write(file_descriptorsOUTPUT,test data,strlen(test data);,exit(0);,else,/*,執(zhí)行父進程*,/,printf(parent process.n);,/*,父進程從管道讀取子進程寫的數(shù)據(jù),關閉管道的寫端*,/,close(file_descriptorsOUTPUT);,returned_count=read(file_descriptorsINPUT,buf,sizeof(buf)-1);,if(returned_count0),printf(receive data from child is e