chap-1-Linux操作系統(tǒng)概述課件_第1頁(yè)
chap-1-Linux操作系統(tǒng)概述課件_第2頁(yè)
chap-1-Linux操作系統(tǒng)概述課件_第3頁(yè)
chap-1-Linux操作系統(tǒng)概述課件_第4頁(yè)
chap-1-Linux操作系統(tǒng)概述課件_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Linux操作系統(tǒng)概述1主要內(nèi)容Linux的基本知識(shí)Linux的內(nèi)核代碼結(jié)構(gòu)堆?;靖拍頛inux的基本知識(shí)Linux的內(nèi)核代碼結(jié)構(gòu)堆?;靖拍?什么是LinuxLinux是一個(gè)類(lèi)Unix(Unix-like)的操作系統(tǒng),第一個(gè)版本發(fā)行于1991年在不同的語(yǔ)境下,“Linux”具有不同的內(nèi)涵,如Linux內(nèi)核Linux系統(tǒng)Linux開(kāi)發(fā)套件等術(shù)語(yǔ)嚴(yán)格來(lái)說(shuō),Linux指的是LinuxTorvalds維護(hù)的(及通過(guò)主要和鏡像網(wǎng)站發(fā)布的)內(nèi)核。GNU/LinuxGNU/Linux的擁護(hù)者們認(rèn)為,Linux僅僅是指Linux內(nèi)核,而整個(gè)Linux系統(tǒng)的大部分都建立在GNU軟件之上。3Linux的發(fā)展史1991年11月,芬蘭赫爾辛基大學(xué)的LinusTorvalds寫(xiě)了個(gè)小程序,取名為L(zhǎng)inux,放在互聯(lián)網(wǎng)上。希望借此搞出一個(gè)操作系統(tǒng)的“內(nèi)核”來(lái),這完全是一個(gè)偶然事件。1993年,在一批高水平黑客參與下,誕生Linux1.0版1994年,Linux的第一個(gè)商業(yè)版Slackware問(wèn)世1996年,美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)局的計(jì)算機(jī)系統(tǒng)實(shí)驗(yàn)室確認(rèn)Linux版本1.2.13(由OpenLinux公司打包)符合POSIX標(biāo)準(zhǔn)2001年,Linux2.4版內(nèi)核發(fā)布2003年,Linux2.6版內(nèi)核發(fā)布……4Linux的主要內(nèi)容Linux是免費(fèi)的、源代碼開(kāi)放的、符合POSIX標(biāo)準(zhǔn)規(guī)范的操作系統(tǒng)擁有現(xiàn)代操作系統(tǒng)具有的所有內(nèi)容,例如搶占式多任務(wù)處理,支持多用戶內(nèi)存保護(hù)支持SMP支持TCP/IP支持絕大多數(shù)的32位和64位CPU等還有一些其他操作系統(tǒng)沒(méi)有的特色,比如NFS,VFS,高效的EXT系列文件系統(tǒng)等

5Linux的內(nèi)核版本Linux內(nèi)核版本是由LinusTorvalds作為總體協(xié)調(diào)人的Linux開(kāi)發(fā)小組(分布在各個(gè)國(guó)家的近百位高手)開(kāi)發(fā)出的系統(tǒng)內(nèi)核的版本號(hào)Linux內(nèi)核采用的是雙樹(shù)系統(tǒng)一棵是穩(wěn)定樹(shù),主要用于發(fā)行另一棵是非穩(wěn)定樹(shù)或稱(chēng)為開(kāi)發(fā)樹(shù),用于產(chǎn)品開(kāi)發(fā)和改進(jìn)Linux內(nèi)核版本號(hào)由3位數(shù)字組成r.x.y第1位數(shù)字r為主版本號(hào)第2位數(shù)字x為說(shuō)明版本類(lèi)型的次版本號(hào),如果x為偶數(shù),則表示為產(chǎn)品化版本,為奇數(shù)時(shí)表示為實(shí)驗(yàn)版本第3位數(shù)字y為修改號(hào),表示錯(cuò)誤修補(bǔ)的次數(shù)6主流的Linux發(fā)行版本7Linux系統(tǒng)的目錄結(jié)構(gòu)/homebinprocusrbootlibdevetcvarzhengweiYMbinlibmantmplogrunspool名稱(chēng)

角色rootroot文件系統(tǒng)中的內(nèi)容包括:引導(dǎo)系統(tǒng)的必備文件,文件系統(tǒng)的掛裝信息以及系統(tǒng)修復(fù)工具和備份工具等。/usr/usr文件系統(tǒng)中包含通常操作中不需要進(jìn)行修改的命令程序文件、程序庫(kù)、手冊(cè)和其他文檔等。/var/var文件系統(tǒng)中包含經(jīng)常變化的文件,例如打印機(jī)、郵件、新聞等的假脫機(jī)目錄、日志文件、格式化后的手冊(cè)頁(yè)以及臨時(shí)文件等。/homehome中包含用戶的主目錄,用戶的數(shù)據(jù)保存在其主目錄中/etc系統(tǒng)內(nèi)部存放配置文件的主要位置,一般與系統(tǒng)關(guān)系十分密切的配置文件都放在該目錄下。大多是文本文件,如inittab,lilo.conf。/proc/proc文件系統(tǒng)并不保存在磁盤(pán)上,相反,操作系統(tǒng)在內(nèi)存中創(chuàng)建這一文件系統(tǒng)。8典型Linux操作系統(tǒng)的結(jié)構(gòu)用戶應(yīng)用程序Systemcall對(duì)硬件資源的管理Shell,libKernelimplementation9Linux內(nèi)核組成進(jìn)程調(diào)度程序負(fù)責(zé)控制進(jìn)程訪問(wèn)CPU。內(nèi)核管理程序使多個(gè)進(jìn)程安全地共享主存系統(tǒng),并支持虛擬內(nèi)存。虛擬文件系統(tǒng)抽象了不同硬件設(shè)備的細(xì)節(jié),提供公共文件接口。網(wǎng)絡(luò)接口提供對(duì)許多建網(wǎng)標(biāo)準(zhǔn)和網(wǎng)絡(luò)硬件的訪問(wèn)。進(jìn)程間通信子系統(tǒng)為進(jìn)程與進(jìn)程之間的通信提供了一些機(jī)制。linux內(nèi)核是單塊結(jié)構(gòu),而windows體系結(jié)構(gòu)是微內(nèi)核。10Linux環(huán)境下請(qǐng)求處理的完成在控制臺(tái)下輸入ls命令Shell程序分析輸入?yún)?shù),確定這是ls命令調(diào)用系統(tǒng)調(diào)用fork生成一個(gè)shell本身的拷貝什么是系統(tǒng)調(diào)用?為什么我們敲擊鍵盤(pán)就會(huì)在終端上顯示?fork是什么?為什么要調(diào)用fork?中斷的概念,終端控制臺(tái)設(shè)備驅(qū)動(dòng)的概念保護(hù)模式和實(shí)模式,內(nèi)存保護(hù),內(nèi)核態(tài)用戶態(tài)相關(guān)問(wèn)題進(jìn)程的描述,進(jìn)程的創(chuàng)建。COW技術(shù)系統(tǒng)調(diào)用是怎么實(shí)現(xiàn)的?軟中斷、異常的概念。陷阱門(mén),系統(tǒng)門(mén)調(diào)用exec系統(tǒng)調(diào)用將ls的可執(zhí)行文件裝入內(nèi)存內(nèi)存管理模塊,進(jìn)程的地址空間,分頁(yè)機(jī)制,文件系統(tǒng)從系統(tǒng)調(diào)用返回如何做到正確的返回?堆棧的維護(hù),寄存器的保存與恢復(fù)Shell和ls都得以執(zhí)行進(jìn)程的調(diào)度,運(yùn)行隊(duì)列等待隊(duì)列的維護(hù)11主要內(nèi)容Linux的基本知識(shí)Linux的內(nèi)核代碼結(jié)構(gòu)堆?;靖拍?2Linux核心源碼結(jié)構(gòu)核心源碼的頂層目錄:/usr/src/linux13Linux核心源碼的組織arch目錄:包含所有體系結(jié)構(gòu)相關(guān)的核心代碼。include目錄:包括用來(lái)重構(gòu)核心的大多數(shù)include文件。init目錄:包含核心啟動(dòng)代碼。mm目錄:包含所有的內(nèi)存管理代碼。drivers目錄:系統(tǒng)中所有的設(shè)備驅(qū)動(dòng)都位于該目錄中。ipc目錄:包含核心的進(jìn)程間通訊代碼。modules目錄:僅僅包含已建好的模塊。fs目錄:所有的文件系統(tǒng)代碼。kernel目錄:主要核心代碼,與處理器結(jié)構(gòu)相關(guān)代碼都放在arch/kernel目錄下。net目錄:核心的網(wǎng)絡(luò)部分代碼。lib目錄:包含核心的庫(kù)代碼。與處理器結(jié)構(gòu)相關(guān)庫(kù)代碼被放在arch/lib/目錄下。scripts目錄:包含用于配置核心的腳本文件(如awk和tk腳本)。14Linux內(nèi)核源碼的組成系統(tǒng)啟動(dòng)與初始化在基于intel的系統(tǒng)上,Linux可以通過(guò)loadlin.exe或者LILO將核心載入內(nèi)存并將控制傳遞給它。這部分程序位于arch/i386/kerneld/head.s。此文件完成一些處理器相關(guān)操作并跳轉(zhuǎn)到init/main.c中的main()例程。內(nèi)存管理主要位于mm目錄里,但與處理器結(jié)構(gòu)相關(guān)部分在arch/mm中。頁(yè)面出錯(cuò)處理代碼位于mm下的memory.c文件中內(nèi)存映射與頁(yè)面cache代碼位于中buffercache則在mm/buffer.c中實(shí)現(xiàn)s位于mm/s和mm/s中15Linux內(nèi)核源碼的組成(續(xù))核心大多數(shù)通用代碼位于kernel目錄下,而處理器相關(guān)代碼被放在arch/kernel中。調(diào)度管理程序位于kernel/sched.cfork代碼位于kernel/fork.c底層部分處理及中斷處理代碼位于include/linux/interrupt.h里在/linux/sched.h中可以找到task_struct的描敘PCIPCI偽設(shè)備驅(qū)動(dòng)位于drivers/pci/pci.c,其系統(tǒng)通用定義放在include/linux/pci.h中。每個(gè)處理器結(jié)構(gòu)具有特殊的PCIBIOS代碼AlphaAXP的位于arch/alpha/kernel/bios32.c中。16Linux內(nèi)核源碼的組成(續(xù))進(jìn)程間通訊進(jìn)程間通訊所有代碼都在ipc目錄中。系統(tǒng)VIPC對(duì)象都包含一個(gè)ipc_perm結(jié)構(gòu),它在include/linux/ipc.h中描敘。系統(tǒng)V消息在ipc/msg.c中實(shí)現(xiàn)共享內(nèi)存在ipc/shm.c而信號(hào)燈位于ipc/sem.c中管道在ipc/pipe.c中實(shí)現(xiàn)。中斷處理核心的中斷處理代碼總是與微處理器結(jié)構(gòu)相關(guān)。Intel系統(tǒng)的中斷處理代碼位于arch/i386/kernel/irq.c其定義位于include/asm-i386/irq.h17Linux內(nèi)核源碼的組成(續(xù))文件系統(tǒng)EXT2文件系統(tǒng)的源碼位于fs/ext2中,其數(shù)據(jù)結(jié)構(gòu)定義位于include/linux/ext2_fs.h,ext2_fs_i.h以及ext2_fs_sb.h中。虛擬文件系統(tǒng)數(shù)據(jù)結(jié)構(gòu)在include/linux/fs.h中描敘且其代碼在fs//中。buffercache和update核心后臺(tái)進(jìn)程在fs/buffer.c中實(shí)現(xiàn)。網(wǎng)絡(luò)網(wǎng)絡(luò)代碼位于net目錄而大多數(shù)包含文件位于include/net中。BSD套接口代碼位于net/socket.c中IPV4的INET套接口代碼位于net/ipv4/af_inet.c中通用協(xié)議支撐代碼(包括sk_buff處理過(guò)程)位于net/core中TCP/IP網(wǎng)絡(luò)代碼位于net/ipv4中網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)位于drivers/net中

18Linux內(nèi)核源碼的組成(續(xù))核心模塊核心模塊代碼部分位于核心中部分位于modules包中。核心代碼位于kernel/modules.c其數(shù)據(jù)結(jié)構(gòu)與核心后臺(tái)進(jìn)程kerneld消息位于include/linux/module.h和include/linux/kerneld.h目錄中同時(shí)必要時(shí)需查閱include/linux/elf.h中的ELF文件格式19Linux內(nèi)核源碼的組成—設(shè)備驅(qū)動(dòng)Linux核心源碼的大多數(shù)都是設(shè)備驅(qū)動(dòng)所有Linux的設(shè)備驅(qū)動(dòng)源碼都放在drivers目錄中并分成以下幾類(lèi):/block目錄:塊設(shè)備驅(qū)動(dòng)包括IDE(在ide.c中)驅(qū)動(dòng)。如果想尋找這些可包含文件系統(tǒng)的設(shè)備的初始化過(guò)程則應(yīng)該在drivers/block/genhd.c中的device_setup()。當(dāng)安裝一個(gè)nfs文件系統(tǒng)時(shí)不但要初始化硬盤(pán)還需初始化網(wǎng)絡(luò)。塊設(shè)備包括IDE與SCSI設(shè)備。/char目錄:包含字符設(shè)備的驅(qū)動(dòng),如ttys,串行口以及鼠標(biāo)。/cdrom目錄:包含所有LinuxCDROM代碼。IDE接口的CD驅(qū)動(dòng)位于drivers/block/ide-cd.c中SCSICD驅(qū)動(dòng)位于drivers/scsi/scsi.c中。20Linux內(nèi)核源碼的組成—設(shè)備驅(qū)動(dòng)(續(xù))/pci目錄:包含PCI偽設(shè)備驅(qū)動(dòng)源碼。/scsi目錄:包括所有的SCSI代碼以及Linux支持的SCSI設(shè)備的設(shè)備驅(qū)動(dòng)。/net目錄:包含網(wǎng)絡(luò)驅(qū)動(dòng)源碼,如tulip.c中的DECChip21040PCI以太網(wǎng)驅(qū)動(dòng)。/sound目錄:所有的聲卡驅(qū)動(dòng)源碼。21主要內(nèi)容Linux的基本知識(shí)Linux的內(nèi)核代碼結(jié)構(gòu)堆棧基本概念22堆棧堆棧是C語(yǔ)言程序運(yùn)行時(shí)必須的一個(gè)記錄調(diào)用路徑和參數(shù)的空間函數(shù)調(diào)用框架傳遞參數(shù)保存返回地址提供局部變量空間……C語(yǔ)言編譯器對(duì)堆棧的使用有一套的規(guī)則了解堆棧存在的目的和編譯器對(duì)堆棧使用的規(guī)則是理解操作系統(tǒng)一些關(guān)鍵性代碼的基礎(chǔ)23堆棧相關(guān)寄存器esp:堆棧指針(stackpointer),指向系統(tǒng)棧最上面一個(gè)棧幀的棧頂ebp:基址指針(basepointer),指向系統(tǒng)棧最上面一個(gè)棧幀的底部cs:eip:指令寄存器(extendedinstructionpointer),指向下一條等待執(zhí)行的指令地址ebp在C語(yǔ)言中用作記錄當(dāng)前函數(shù)調(diào)用基址24堆棧操作push:以字節(jié)為單位將數(shù)據(jù)(4個(gè)字節(jié))壓入棧,從高到低按字節(jié)依次將數(shù)據(jù)存入ESP-1、ESP-2、ESP-3、ESP-4的地址單元。pop:過(guò)程與PUSH相反。call:用來(lái)調(diào)用一個(gè)函數(shù)或過(guò)程,此時(shí),下一條指令地址會(huì)被壓入堆棧,以備返回時(shí)能恢復(fù)執(zhí)行下條指令。ret:從一個(gè)函數(shù)或過(guò)程返回,之前call保存的下條指令地址會(huì)從棧內(nèi)彈出到EIP寄存器中,程序轉(zhuǎn)到CALL之前下條指令處執(zhí)行。espebp高地址低地址esp25利用堆棧實(shí)現(xiàn)函數(shù)調(diào)用和返回//調(diào)用者…calltarget…//建立被調(diào)用者函數(shù)的堆棧框架

pushl%ebp

movl%esp,%ebp//拆除被調(diào)用者函數(shù)的堆??蚣?/p>

movl%ebp,%esp

popl%ebp

ret//被調(diào)用者函數(shù)體

//dosth.…call指令:1)將下一條指令的地址A保存在棧頂2)設(shè)置eip指向被調(diào)用程序代碼開(kāi)始處將地址A恢復(fù)到eip中26函數(shù)堆棧框架的形成執(zhí)行callXXX之前cs:eip原來(lái)的值指向call下一條指令,

該值被保存到棧頂然后cs:eip的值指向xxx的入口地址進(jìn)入XXX第一條指令:pushl%ebp保存調(diào)用者的棧幀地址第二條指令:movl%esp,%ebp初始化XXX的棧幀地址函數(shù)體中的常規(guī)操作,可能會(huì)壓棧、出棧退出XXXmovl%ebp,%esppopl%ebpretespebp高地址低地址cs:eipespebpespebpesp27堆棧其他作用C語(yǔ)言中還使用堆棧進(jìn)行參數(shù)的傳遞局部變量的使用編譯方法1)首先使用gcc生成test.c的可執(zhí)行文件test;2)然后使用objdump–S獲得test的反匯編文件;28建立框架拆除框架從test的反匯編文件中找到p2的反匯編代碼intp2(intx,inty){ push%ebp mov%esp,%ebp

returnx+y; mov0xc(%ebp),%eax add0x8(%ebp),%eax} pop%ebp retebpespebp調(diào)用者堆??蚣躤spebpyx高地址低地址觀察p2的堆??蚣蹽NU規(guī)則規(guī)定:%eax、%ecx和%edx是由調(diào)用者負(fù)責(zé)存儲(chǔ)的;%ebx、%ebi和%esi則由被調(diào)用者保護(hù)。29觀察main函數(shù)是如何傳遞參數(shù)給p2的 …z=p2(x,y); pushl0xfffffff8(%ebp) pushl0xfffffff4(%ebp) call804839b<p2> mov%eax,0xfffffffc(%ebp)printf("%d=%d+%d\n",z,x,y); pushl0xfffffff8(%ebp) pushl0xfffffff4(%ebp) pushl0xfffffffc(%ebp) push$0x8048510 call80482b0<printf@plt> …p2的返回值是如何返回給main的?調(diào)用者堆??蚣躤spebpy的值x的值高地址低地址被調(diào)用者堆棧框架ebpcs:eipespebpespesp30觀察程序運(yùn)行時(shí)堆棧的變化ebpintmain(void){ push%ebp mov%esp,%ebp sub$0x18,%esp … charc='a'; movb$0x61,0xfffffff3(%ebp) intx,y,z; x=1; movl$0x1,0xfffffff4(%ebp) y=2; movl$0x2,0xfffffff8(%ebp) …調(diào)用者ebpespebpespespc=‘a(chǎn)’x=1y=2高地址低地址31程序改進(jìn)在這個(gè)小程序中,main函數(shù)中調(diào)用了函數(shù)p2,而在p2的執(zhí)行過(guò)程中又調(diào)用了函數(shù)p132觀察程序運(yùn)行時(shí)堆棧的變化eipeipeipeipmain…p2(x,y)…p1p2…p1(c)…mainp2p1程序的代碼段堆棧eipespmain堆棧espeipeipx,yeipp2堆棧eipeipeipeipceipp1堆棧esp33觀察堆棧在內(nèi)核中的使用在內(nèi)核代碼中經(jīng)常有這樣的函數(shù),其參數(shù)為

structpt_regs*regs可以往回一層層的尋找這個(gè)參數(shù)是怎么傳遞過(guò)來(lái)的最后可以發(fā)現(xiàn)最源頭的函數(shù)使用參數(shù)structpt_regsregs,如如voiddo_IRQ(structpt_regsregs)如果再進(jì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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論