資源描述:
《Linux內(nèi)核結(jié)構(gòu)與進程管理.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、Linux內(nèi)核結(jié)構(gòu)與進程管理Linux系統(tǒng)結(jié)構(gòu)Linuxkernel:開放源代碼的linux操作系統(tǒng)內(nèi)核,目前版本為2.6Linux內(nèi)核組成1.進程調(diào)度程序(SCHED)負責控制進程訪問CPU。保證進程能夠公平地訪問CPU,同時保證內(nèi)核可以準時執(zhí)行一些必需的硬件操作。2.內(nèi)核管理程序(MM)使多個進程可以安全地共享機器的主存系統(tǒng),并支持虛擬內(nèi)存。3.虛擬文件系統(tǒng)(VFS)。通過提供一個所有設(shè)備的公共文件接口,VFS抽象了不同硬件設(shè)備的細節(jié)。此外,VFS支持與其他操作系統(tǒng)兼容的不同的文件系統(tǒng)格式。4.網(wǎng)絡(luò)接口(NET)提供對許多建網(wǎng)標準和網(wǎng)絡(luò)硬件的訪問。
2、5.進程間通信(IPC)子系統(tǒng)為進程與進程之間的通信提供了一些機制。這些子系統(tǒng)雖然實現(xiàn)的功能相對獨立,但存在著較強的依賴性(調(diào)用依賴模塊中相應的函數(shù)),所以說linux內(nèi)核是單塊結(jié)構(gòu)(monolithic)的,而windows體系結(jié)構(gòu)是微內(nèi)核(microkernel)的。Linux啟動流程從BIOS到KERNELMBR->KERNEL->KERNEL自解壓->內(nèi)核初始化->內(nèi)核啟動(start_kernel函數(shù),在linux內(nèi)核源代碼樹的/usr/src/linux/init/main.c中)2.內(nèi)核啟動:創(chuàng)建1#進程并執(zhí)行,由它創(chuàng)建若干內(nèi)核線程(ke
3、rnelthread),然后裝入并執(zhí)行程序/sbin/init(變成一個用戶進程)。此后,init根據(jù)/etc/inittab配置文件來執(zhí)行相應的腳本進行系統(tǒng)初始化,如設(shè)置鍵盤、字體,裝載模塊,設(shè)置網(wǎng)絡(luò)等對于Redhat來說,執(zhí)行的順序為:/etc/rc.d/rc.sysinit????????????#由init執(zhí)行的第一個腳本/etc/rc.d/rc?$RUNLEVEL??????????#?$RUNLEVEL為缺省的運行模式/etc/rc.d/rc.local#運行模式2、3、5時會運行的腳本/sbin/mingetty(或getty)#等待用戶
4、登錄/etc/inittab中指定了系統(tǒng)的運行級別(RUNLEVEL),init根據(jù)運行級別啟動相關(guān)的服務(一些后臺進程),實現(xiàn)不同的功能。RUNLEVEL:0-60:halt,1:單用戶,2:多用戶,3:多用戶并啟動NFS服務4:保留,5:運行xdm(Xwindow)以圖形界面方式登錄6:rebootLinux中用戶登陸流程linux進程的四要素程序PCB地址空間系統(tǒng)堆??臻gPCB:進程創(chuàng)建時內(nèi)核為其分配的一個核心數(shù)據(jù)結(jié)構(gòu),進程自身不能直接存取。系統(tǒng)堆??臻g:進程運行在核心態(tài)時使用的堆棧,和PCB連在一起,共8KB,其中PCB約占1000字節(jié),系統(tǒng)堆
5、??臻g約占7200字節(jié)。2.2內(nèi)核中l(wèi)inux進程個數(shù)有最大值限制(4092)。但2.4以后,系統(tǒng)中的進程個數(shù)受限于系統(tǒng)的物理內(nèi)存數(shù),即限定所有進程的PCB及系統(tǒng)堆棧(8K)占用的空間≤1/2的物理內(nèi)存總和。例64M內(nèi)存:進程數(shù)≤64M/2/8K=4KPCB中的重要信息身份信息:pid,uid,gid,euid,egid等;狀態(tài)信息:running,interruptible,non-interruptible,stopped,zombie調(diào)度信息:policy,priority,rt_priorty,need_reschedpolicy即進程的類別,
6、分SCHED_FIFO,SCHED_RR,SCHED_OTHER三種,前兩種為實時進程,后一種為非實時進程IPC信息:如定義對某些信號的處理等家族信息:父進程、兄弟進程、子進程信息時鐘和定時信息文件系統(tǒng)存儲管理進程的創(chuàng)建進程創(chuàng)建:fork,clone,vfork父子進程共享資源的形式a.不共享(fork時缺?。゜.部分共享c.完全共享(線程)#includeintmyvar=0;voidmain(){intpid;pid=fork();//systemcallif(pid<0){//erroroccurredprintf
7、(“forkfailed.”);exit(-1);//systemcall}elseif(pid==0){//childprocessprintf(“childprocessexecuting…”);myvar=1;}else{//parentprocesswait();//systemcall,waitforchildrencompletionprintf(“childcomplete.”);myvar++;printf(“father,myvar=%d”,myvar);exit(0);}}fork實例進程調(diào)度調(diào)度時機a.
8、用戶進程自愿放棄CPU,如執(zhí)行sleep()系統(tǒng)調(diào)用;b.系統(tǒng)調(diào)用中,需要等待時,直接調(diào)用sc