




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Linux內(nèi)核分析與高級(jí)編程演示文稿目前一頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)Linux內(nèi)核分析與高級(jí)編程目前二頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)建立WindowsVMLinux文件共享的步驟:(1)在Windows下建立共享文件夾(2)進(jìn)入VMWare,點(diǎn)擊CommandsEditVirtuvalMachineSettingsOptionsSharedFoldersEnabledAdd…
在向?qū)б龑?dǎo)下分別指定Linux下和Windows下的文件夾名(3)進(jìn)入Linux,執(zhí)行命令進(jìn)入目錄
cd/mnt/hgfs
即可存取Windows下共享文件夾的所有文件
目前三頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)內(nèi)存管理虛擬文件系統(tǒng)進(jìn)程調(diào)度網(wǎng)絡(luò)接口進(jìn)程間通信Linux內(nèi)核的抽象結(jié)構(gòu)網(wǎng)絡(luò)文件傳送VFSSCHEDNET調(diào)度\交換進(jìn)程IPC存取共享內(nèi)存裝入數(shù)據(jù)和程序虛存交換MM目前四頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)用戶應(yīng)用程序系統(tǒng)庫(kù)(如標(biāo)準(zhǔn)C庫(kù))系統(tǒng)調(diào)用接口硬件用戶態(tài)進(jìn)程請(qǐng)求與內(nèi)核的接口
模塊(動(dòng)態(tài)鏈接)I/O進(jìn)程控制(調(diào)度\通信內(nèi)存管理)內(nèi)核目前五頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)/usr/srclinuxdocumentationscriptsnetmodulesmmlibkernelipcinitincludearchi386…alphakernelmmlib…driversblockcharfsext2fatproc…源代碼目錄樹結(jié)構(gòu)目前六頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)/procdriverfsideirqnetsyssysvipctty有關(guān)進(jìn)程的子目錄(十進(jìn)制數(shù)目錄)虛擬文件系統(tǒng)/PROC目錄結(jié)構(gòu)目前七頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)一個(gè)簡(jiǎn)單的系統(tǒng)監(jiān)測(cè)工具的實(shí)現(xiàn)命令行形式:sysinfo[-h][-i][-linterval]
選項(xiàng):-h——顯示命令用法
-i——顯示系統(tǒng)靜態(tài)信息,包括:內(nèi)核版本信息,主機(jī)名,內(nèi)核版本號(hào),操作系統(tǒng)類型,CPU類型和主頻,內(nèi)存信息
-l間隔時(shí)間——按指定間隔時(shí)間刷新顯示CPU占用率,包括:用戶態(tài)、核心態(tài)和空閑態(tài)占用CPU時(shí)間百分比。main()顯示幫助信息顯示系統(tǒng)靜態(tài)信息cpuinfo()顯示系統(tǒng)動(dòng)態(tài)信息loadinfo()-h-i-l目前八頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)cpuinfo()獲取系統(tǒng)日期及時(shí)間顯示報(bào)告系統(tǒng)靜態(tài)信息的時(shí)間和日期依次打開/proc下的相關(guān)文件提取系統(tǒng)信息字符串并顯示顯示系統(tǒng)靜態(tài)信息/proc/version/proc/sys/kernel/hostname/proc/sys/kernel/osrelease/proc/sys/kernel/ostype/proc/cpuinfo/proc/meminfo目前九頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)loadinfo()執(zhí)行procinfo命令產(chǎn)生系統(tǒng)信息文件info提取文件info中的cpu使用情況信息格式化輸出cpu使用情況信息休眠(由刷新參數(shù)指定休眠時(shí)間)顯示系統(tǒng)動(dòng)態(tài)信息目前十頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)運(yùn)行態(tài)停止態(tài)等待態(tài)就緒態(tài)僵死態(tài)進(jìn)程狀態(tài)轉(zhuǎn)換關(guān)系示意圖跟蹤結(jié)束創(chuàng)建進(jìn)程、分配資源調(diào)度回收資源進(jìn)程消亡等待事件睡眠時(shí)間片耗盡跟蹤事件喚醒exit目前十一頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)fork()創(chuàng)建新進(jìn)程后,將并發(fā)執(zhí)行兩個(gè)進(jìn)程:intmain(void){pid_tpid;…if((pid=fork())==0)//條件不成立
{…}else{
父進(jìn)程執(zhí)行的分支
}…intmain(void){pid_tpid;…if((pid=fork())==0)//條件成立
{
子進(jìn)程執(zhí)行的分支
}else{…}…父進(jìn)程代碼子進(jìn)程代碼目前十二頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)子進(jìn)程生命周期示意圖fork()exit()等待態(tài)終止信號(hào)和狀態(tài)父進(jìn)程子進(jìn)程wait()恢復(fù)執(zhí)行目前十三頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)shell系統(tǒng)調(diào)用
內(nèi)核硬件Shell與內(nèi)核的層次關(guān)系
Shell:接收、解釋、執(zhí)行用戶命令。
系統(tǒng)調(diào)用:為用戶態(tài)進(jìn)程提供內(nèi)核功能接口。
內(nèi)核:對(duì)硬件進(jìn)行抽象和管理,提供服務(wù)。用戶目前十四頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)gettyttyAlogingettylogingettyloginttyBttyX登錄登錄登錄/etc/passwdLinux系統(tǒng)yesyesyes登錄過程………目前十五頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)目前十六頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)模擬SHELL的執(zhí)行流程目前十七頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)例:輸入重定向的基本實(shí)現(xiàn)方法。
…
char*filename=“data.txt”;
intfid;
…
/*打開指定文件“data.txt”
,獲取該文件描述符*/
fid=open(filename,O_RDONLY,o600);
/*用指定文件的描述符替換標(biāo)準(zhǔn)輸入設(shè)備文件描述符*/
if(dup2(fid,STDIN_FILENO)==-1){
printf("RedirectStandardInError\n");
return-1;}…目前十八頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)例:父子進(jìn)程通過管道進(jìn)行通信。intfd[2];
…pipe(fd)/*建立管道pipe*/if(fork()==0){…read(fd[0],childbuf,len);/*從管道讀父進(jìn)程寫的信息*/…}else{…write(fd[1],msgbuf,len);/*將信息寫入管道傳給子進(jìn)程*/…}目前十九頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)例:管道命令“l(fā)s|more”的基本實(shí)現(xiàn)方法。intfd[2];
…pipe(fd)/*建立管道pipe*/
if((child1=fork())==0){if(fd[1]!=STDOUT_FILENO){if(dup2(fd[1],STDOUT_FILENO)==-1){/*輸出重定向到管道寫端*/printf("RedirectStandardOutError\n");return-1;}}execv(buffer,argv[0]);}…if((child2=fork())==0){if(fd[0]!=STDIN_FILENO){if(dup2(fd[0],STDIN_FILENO)==-1){/*輸入重定向到管道讀端*/printf("RedirectStandardInError\n");return-1;}}execv(buffer,argv[1]);}…目前二十頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)#!/bin/bashforiin2526272829303132333437383940414344doechoKillingprocessesfromgpp$i/usr/bin/rsh-ngpp$irm-f/home/test/mpida*killalltmpi3ddone例:在運(yùn)行并行程序的若干節(jié)點(diǎn)上刪除臨時(shí)文件和進(jìn)程。目前二十一頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)#!/bin/bashcounter=1whilereadlinedoif[${line:0:1}!='#'];thenecho"$counter:$line"counter=$[counter+1]fidone<$1例:讀文本文件并加行號(hào)后顯示。目前二十二頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)//例3工作目錄文件備份程序(shell腳本文件)#!/bin/bashcurr_dir=`pwd`listing=`ls`echo"Copyfor$curr_dir"forfilein$listingdoecho"$file"doneforfilenamein`ls`doecho“Copy$filename…"cp$filenameback/$filenameif[$?-ne0];thenecho"copy$filenamefailed"fidone目前二十三頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)//例4多文件查找與替換操作usage(){echo\"changstrOLDstrNEWstr<filenames>changesthefirstinstanceofOLDstrtoNEWstrineachlineof<filenames>,andreportonthedifferences.Examples:changstrTxTexas./addresses.*changstrasps*.c"exit0}case$1in-h|-help)usage;;esaciftest$#-lt3thenusagefi
目前二十四頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)TMPDIR=/tmpTMPFILE=$TMPDIR/changstr.$$OLDstr=$1NEWstr=$2shift2forFILEin$*dosed-e"s/$OLDstr/$NEWstr/"$FILE>$TMPFILEecho"$FILE:"diff$FILE$TMPFILEecho""mv$TMPFILE$FILEdone目前二十五頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)//例5終端鎖屏程序(shell腳本文件)stty-echowhiletest-z"$code"doecho-n"Enterpassword:"readcode</dev/ttydone
trap""23clearecho"**********************************************************"echo"**"echo"**"echo"*TERMINALSECURED!!*"echo"**"echo"**"echo"**************************************************"echo"“目前二十六頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)i=1match=""whiletest"$match"!="$code"dosleep$iecho-n"Enterpassword:"readmatch</dev/ttyi=`expr$i'*'2`doneechosttyecho目前二十七頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)用戶程序內(nèi)核代碼模式切換用戶空間核心空間用戶棧核心棧(進(jìn)行有關(guān)運(yùn)行級(jí)檢查)門用戶模式核心模式目前二十八頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)邏輯地址線性地址物理地址段機(jī)制頁(yè)機(jī)制兩級(jí)地址轉(zhuǎn)換機(jī)制虛擬地址實(shí)際地址虛擬系統(tǒng)空間1G進(jìn)程1虛存用戶空間3G……進(jìn)程2虛存用戶空間3G進(jìn)程n虛存用戶空間3G進(jìn)程虛擬地址空間:4G0XFFFFFFFF0XC00000000XBFFFFFFF0X00000000系統(tǒng)空間用戶空間目前二十九頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)邏輯地址轉(zhuǎn)換為線性地址邏輯地址結(jié)構(gòu)段寄存器OFFSET:16位選擇子32位偏移地址OFFSET索引TIRPL:153203108字節(jié)段描述符GDT全局描述符表┋+線性地址GDTR段內(nèi)偏移地址段基址TI=0目前三十頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)線性地址轉(zhuǎn)換為物理地址線性地址結(jié)構(gòu)頁(yè)目錄索引頁(yè)表索引頁(yè)內(nèi)偏移量頁(yè)目錄項(xiàng)┋頁(yè)表項(xiàng)┋
(1024項(xiàng))(1024項(xiàng))物理頁(yè)幀內(nèi)存頁(yè)內(nèi)偏移
頁(yè)幀號(hào)CR3頁(yè)目錄表頁(yè)表31222112110物理地址目前三十一頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)頁(yè)表項(xiàng)
3101211其它控制位禁止緩存位訪問位保護(hù)位修改位存在位1=只讀0=讀寫頁(yè)內(nèi)編移量查表最終得到頁(yè)幀號(hào)+
頁(yè)幀號(hào)頁(yè)內(nèi)偏移量頁(yè)幀號(hào)1=存在0=不存在物理地址送地址線MMU在頁(yè)表的支持下完成地址映射和虛實(shí)轉(zhuǎn)換線性地址32位10位10位12位目前三十二頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)0111010虛存空間頁(yè)存在位2013……虛擬空間頁(yè)……0-4k5-8k9-12k13-16k17-20k21-24k61-64k64k虛存1237頁(yè)幀0頁(yè)幀32k物理內(nèi)存0-4k9-12k13-16k29-32k某時(shí)刻的虛實(shí)映射5-8k…虛實(shí)地址映射0頁(yè)面123456…15目前三十三頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)入口地址高16位DDPLODXXX00087650段選擇碼入口地址低16位中斷門、陷入門及調(diào)用門的基本格式定義31031目前三十四頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)用戶進(jìn)程調(diào)用系統(tǒng)調(diào)用getuid()執(zhí)行宏調(diào)用_syscall0(int,getuid)即:調(diào)用getuid()產(chǎn)生陷入異常(模式切換到進(jìn)入內(nèi)核)traps.c內(nèi)核初始化時(shí)trap_init()建立了調(diào)用門執(zhí)行系統(tǒng)調(diào)用處理函數(shù)system_call()保護(hù)現(xiàn)場(chǎng),由系統(tǒng)調(diào)用號(hào)(24)查系統(tǒng)調(diào)用表(sys_call_table)找到該系統(tǒng)調(diào)用的內(nèi)核處理函數(shù)(sys_getuid16())調(diào)用sys_getuid16()返回uid,uid→eax,并壓入堆棧執(zhí)行ret_from_sys_call()恢復(fù)現(xiàn)場(chǎng),并從堆棧獲得(uid)→eaxeax→__res,uid返回給用戶程序系統(tǒng)調(diào)用結(jié)束將系統(tǒng)調(diào)用號(hào)(__NR_getuid=(24))送(eax),并執(zhí)行int$0x80unistd.hentry.Sgetuid()函數(shù)中的return__res目前三十五頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)intmain(){intuid;
┆uid=getuid();
┆printf(“┄”);}intgetuid(void){long_
_res;
┆
movl調(diào)用號(hào),%eaxint$0x80;movl%eax,__res┆return__res;}ENTRY(system_call)pushl%eaxSAVE_ALL
┆callsys_getuid16(void)
┆RESTORE_ALL
┆
asmlinkagelong\sys_getuid16(void){return用戶UID;}用戶程序標(biāo)準(zhǔn)C庫(kù)(系統(tǒng)調(diào)用)系統(tǒng)調(diào)用處理函數(shù)內(nèi)核處理函數(shù)系統(tǒng)調(diào)用實(shí)現(xiàn)中各程序間的關(guān)系示意圖目前三十六頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)10讀鎖SN_READ
寫鎖SN_WRITE
01信號(hào)量數(shù)組(初始狀態(tài))使用信號(hào)量(semaphore)實(shí)現(xiàn)讀進(jìn)程\寫進(jìn)程互斥訪問共享內(nèi)存的方法:10(-1)LOCK讀鎖
寫進(jìn)程獲取IPC資源00寫共享內(nèi)存(+1)UNLOCK寫鎖
釋放IPC資源0
101(-1)LOCK寫鎖
讀進(jìn)程獲取IPC資源0
0讀共享內(nèi)存(+1)UNLOCK讀鎖
釋放IPC資源10讀進(jìn)程、寫進(jìn)程互斥訪問共享內(nèi)存的流程:目前三十七頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)寫進(jìn)程進(jìn)入臨界區(qū)寫數(shù)據(jù)先寫滿管道可用空間喚醒等待的讀進(jìn)程管道空間>=所需空間?N退出臨界區(qū)喚醒讀進(jìn)程寫數(shù)據(jù)量很大?YYY阻塞式寫操作?寫進(jìn)程進(jìn)入等待隊(duì)列讀進(jìn)程讀數(shù)據(jù)NN寫進(jìn)程寫管道的規(guī)則和流程目前三十八頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)
#include<stdio.h>#include<stdlib.h>voidmain(){ charstr[10]; pid_tpid; pid=fork(); if(pid>0){ printf("daemonondutynow!\n"); exit(0);}
for(;;) { printf("Iamthedaemon!\n"); sleep(3); system("pwd"); }}目前三十九頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)
UIDLoginMath1Math2EnglishPhysicsGrade510wanglin99989590A501lsx190908080B502zhangyu80907085B-
Grades成績(jī)文件:目前四十頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)//suid程序舉例#include<stdio.h>#include<stdlib.h>#include<string.h>#defineN7#defineUID500intmain(){inti,uid;charstr[20],uids[10];FILE*fp;if((fp=fopen("grades","r"))==NULL){printf("Can'topenfilegrades\n");exit(1);}for(i=1;i<=N;i++){fscanf(fp,"%s",str);if(i>1)printf("\t%s",str);}printf("\n");uid=getuid();sprintf(uids,"%d",uid);while(!feof(fp)){fscanf(fp,"\t%s",str);if(feof(fp))break;if(strcmp(uids,str)==0||uid==UID){for(i=1;i<=N-1;i++){fscanf(fp,"\t%s",str);printf("\t%s",str); }if(uid!=UID)break; }if(uid==UID)printf("\n");}printf("\n");fclose(fp);return0;}目前四十一頁(yè)\總數(shù)四十七頁(yè)\編于十四點(diǎn)//stup
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 譜細(xì)胞抗體鑒定技術(shù)體系
- 秦漢時(shí)期名醫(yī)成就與醫(yī)學(xué)發(fā)展
- 先進(jìn)特鋼制造技術(shù)
- 我的秘密課文講解
- 汽車設(shè)計(jì)核心要點(diǎn)解析
- 牙周病檢查與診斷技術(shù)
- 軟件銷售年度匯報(bào)
- 人體器官大腦講解
- 人工智能算法核心功能使用方法詳解
- 胸心外科診療指南解讀
- Android移動(dòng)應(yīng)用開發(fā)(微課版)全套教學(xué)課件
- 腰椎間盤突出癥試講教案
- 2025-2031年中國(guó)手抓餅行業(yè)市場(chǎng)全景調(diào)研及投資規(guī)劃建議報(bào)告
- 計(jì)算機(jī)信息安全管理培訓(xùn)
- 體育與健康核心素養(yǎng)引領(lǐng)下的大單元教學(xué)
- 道路工程材料第7版 課件全套 -孫大權(quán) 0-緒論-6 無(wú)機(jī)結(jié)合料穩(wěn)定材料
- 如何高質(zhì)量開好經(jīng)營(yíng)分析會(huì)
- 醫(yī)療護(hù)理醫(yī)學(xué)培訓(xùn) 危重病人的風(fēng)險(xiǎn)評(píng)估及護(hù)理安全課件
- 香港上市公司分拆上市指引 2024
- 生態(tài)農(nóng)業(yè)開發(fā)授權(quán)委托書樣本
- 安全風(fēng)險(xiǎn)評(píng)估合同范例
評(píng)論
0/150
提交評(píng)論