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