《信號(hào)與系統(tǒng)》第二篇實(shí)驗(yàn)進(jìn)階_第1頁(yè)
《信號(hào)與系統(tǒng)》第二篇實(shí)驗(yàn)進(jìn)階_第2頁(yè)
《信號(hào)與系統(tǒng)》第二篇實(shí)驗(yàn)進(jìn)階_第3頁(yè)
《信號(hào)與系統(tǒng)》第二篇實(shí)驗(yàn)進(jìn)階_第4頁(yè)
《信號(hào)與系統(tǒng)》第二篇實(shí)驗(yàn)進(jìn)階_第5頁(yè)
已閱讀5頁(yè),還剩32頁(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)介

?信號(hào)與系統(tǒng)?第二篇實(shí)驗(yàn)進(jìn)階——深入Linux一.系統(tǒng)初始化開(kāi)機(jī)啟動(dòng)流程開(kāi)機(jī)效勞與守護(hù)進(jìn)程自動(dòng)執(zhí)行程序3.自動(dòng)執(zhí)行程序開(kāi)機(jī)啟動(dòng)時(shí)自動(dòng)運(yùn)行程序登錄時(shí)自動(dòng)運(yùn)行程序退出系統(tǒng)時(shí)自動(dòng)執(zhí)行程序定期自動(dòng)運(yùn)行程序定時(shí)自動(dòng)運(yùn)行程序一次二.系統(tǒng)調(diào)用系統(tǒng)調(diào)用的實(shí)現(xiàn)過(guò)程系統(tǒng)調(diào)用的使用方法系統(tǒng)調(diào)用的添加步驟1.系統(tǒng)調(diào)用的實(shí)現(xiàn)過(guò)程Linux分為用戶空間和內(nèi)核空間兩個(gè)層次Linux系統(tǒng)調(diào)用機(jī)制Linux內(nèi)核中設(shè)置了一組用于實(shí)現(xiàn)各種系統(tǒng)功能的子程序,稱為系統(tǒng)調(diào)用用戶通過(guò)系統(tǒng)調(diào)用命令在自己的應(yīng)用程序中調(diào)用它們2.系統(tǒng)調(diào)用的使用方法系統(tǒng)調(diào)用與普通函數(shù)調(diào)用的區(qū)別系統(tǒng)調(diào)用:

核心態(tài)

操作系統(tǒng)核心提供普通的函數(shù)調(diào)用

用戶態(tài)

函數(shù)庫(kù)或用戶自己提供3.系統(tǒng)調(diào)用的添加步驟編寫(xiě)系統(tǒng)調(diào)用效勞例程添加系統(tǒng)調(diào)用號(hào)修改系統(tǒng)調(diào)用表重新編譯內(nèi)核并測(cè)試三.進(jìn)程/線程管理進(jìn)程、進(jìn)程組線程及線程分類多進(jìn)程/線程編程1.進(jìn)程/進(jìn)程組Linux系統(tǒng)進(jìn)程類型交互進(jìn)程:Shell啟動(dòng)的進(jìn)程,可在前臺(tái)或后臺(tái)運(yùn)行批處理進(jìn)程:進(jìn)程序列,不與特定終端關(guān)聯(lián)守護(hù)進(jìn)程:后臺(tái)效勞進(jìn)程,獨(dú)立于控制終端,常在系統(tǒng)引導(dǎo)裝入時(shí)啟動(dòng),在系統(tǒng)關(guān)閉時(shí)終止進(jìn)程、進(jìn)程組與會(huì)話的關(guān)系2.線程及線程分類

從開(kāi)始,Linuxkernel才有真正的thread線程庫(kù)叫NPTL(NativePOSIXThreadLibrary),采用1:1的線程模型,創(chuàng)立線程的效率非常高IBM的線程庫(kù)叫NGPT〔NextGenerationPOSIXThreads〕,采用M:N模型,上下文切換很快,但增加了復(fù)雜性,會(huì)出現(xiàn)優(yōu)先級(jí)反轉(zhuǎn)等問(wèn)題Linux線程分為核心態(tài)線程和用戶態(tài)線程核心態(tài)線程沒(méi)有獨(dú)立的地址空間,只在內(nèi)核空間運(yùn)行

用戶態(tài)線程在用戶空間中實(shí)現(xiàn)核心態(tài)線程更利于并發(fā)使用多處理器的資源

用戶態(tài)線程更多考慮上下文切換開(kāi)銷3.多進(jìn)程/線程編程——進(jìn)程fork()產(chǎn)生當(dāng)前進(jìn)程的拷貝3.多進(jìn)程/線程編程——進(jìn)程進(jìn)程標(biāo)識(shí)符管理intgetpid(); 取得當(dāng)前進(jìn)程的標(biāo)識(shí)符〔進(jìn)程ID〕。intgetppid(); 取得當(dāng)前進(jìn)程的父進(jìn)程ID。intgetpgrp(); 取得當(dāng)前進(jìn)程的進(jìn)程組標(biāo)識(shí)符。intgetpgid(intpid);修改當(dāng)前進(jìn)程的進(jìn)程組標(biāo)識(shí)符為進(jìn)程ID函數(shù)族e(cuò)xec():加載新的進(jìn)程映像intexecl(); intexeclp(); intexecle();intexecv(); intexecve(); intexecvp();wait/waitpid函數(shù)pit_twait();pid_waitpid();3.多進(jìn)程/線程編程——線程intpthread_create();

創(chuàng)立線程就是確定調(diào)用該線程函數(shù)的入口點(diǎn),相當(dāng)于fork函數(shù)。intpthread_join();

等待tid線程終止,相當(dāng)于waitpid函數(shù)。pthread_tpthread_self();

取得自己的線程ID,相當(dāng)于getpid函數(shù)。intpthread_detach();

將指定的線程脫離,脫離的線程類似于守護(hù)進(jìn)程。voidpthread_exit();

終止線程的執(zhí)行。四.進(jìn)程間通信

管道通信消息隊(duì)列共享內(nèi)存

信號(hào)量套接字

1.管道通信無(wú)名管道用于具有親緣關(guān)系進(jìn)程間的通信管道是半雙工的,數(shù)據(jù)只能單向流動(dòng)〔雙方通信需建立兩個(gè)管道〕管道只能用于父子進(jìn)程或兄弟進(jìn)程之間管道對(duì)于管道兩端的進(jìn)程而言就是一個(gè)文件,并單獨(dú)構(gòu)成一種文件系統(tǒng),存在于內(nèi)存中寫(xiě)管道的內(nèi)容添加在管道緩沖區(qū)的末尾,讀管道那么從緩沖區(qū)頭部讀出有名管道在普通管道具備功能根底上,通過(guò)給管道命名的方法變成管道文件,允許無(wú)親緣關(guān)系進(jìn)程間通過(guò)訪問(wèn)管道文件進(jìn)行通信2.消息隊(duì)列

也叫報(bào)文隊(duì)列,是消息的鏈接表有兩種類型的消息隊(duì)列:POSIX消息隊(duì)列和系統(tǒng)V消息隊(duì)列運(yùn)行于同一臺(tái)機(jī)器上的進(jìn)程間通信,與管道類似可以用流管道或套接口方式取代系統(tǒng)V消息隊(duì)列intmsgget(); 創(chuàng)立一個(gè)新隊(duì)列或翻開(kāi)一個(gè)存在的隊(duì)列intmsgsnd(); 把消息添加到msgid代表的消息隊(duì)列的末尾,消息的大小由msgsz指定。intmsgrcv(); 從msgid代表的消息隊(duì)列中取走一個(gè)消息。intmsgctl(); 在由msgid標(biāo)識(shí)的消息隊(duì)列上執(zhí)行cmd指定的操作。3.共享內(nèi)存將同一塊內(nèi)存區(qū)映射到共享它的不同進(jìn)程的地址空間中效率高:進(jìn)程可以直接讀寫(xiě)內(nèi)存,不需任何數(shù)據(jù)拷貝,防止了內(nèi)核空間與用戶空間的切換內(nèi)核未對(duì)共享內(nèi)存的訪問(wèn)提供同步機(jī)制,需要依靠某種同步機(jī)制來(lái)同步對(duì)共享進(jìn)程的訪問(wèn)POSIX共享內(nèi)存通過(guò)用戶空間掛載的tmpfs文件系統(tǒng)實(shí)現(xiàn),持久化的API:shm_open()、mmap()、munmap()、shm_unlink()等SystemV共享內(nèi)存由內(nèi)核本身的tmpfs實(shí)現(xiàn),非持久化的API:shmget()、shmat()、shmdt()、shmctl()等4.信號(hào)量

也稱信號(hào)燈,用來(lái)協(xié)調(diào)不同進(jìn)程間的數(shù)據(jù)對(duì)象提供對(duì)進(jìn)程間共享資源訪問(wèn)控制的手段,用來(lái)保護(hù)共享資源還可用于進(jìn)程間及同一進(jìn)程不同線程間的進(jìn)程同步兩種類型二值信號(hào)燈:取值只能為0或1,類似于互斥鎖計(jì)算信號(hào)燈:取值可以為任意非負(fù)值(受內(nèi)核本身約束)POSIX信號(hào)量和SystemV信號(hào)量〔與共享內(nèi)存的兩種方式類似〕5.套接字

也稱套接字,用于不同機(jī)器之間的進(jìn)程間通信采用客戶/效勞器模式,可以在本地單機(jī)上運(yùn)行,也可以在網(wǎng)絡(luò)中運(yùn)行以文件的形式實(shí)現(xiàn)〔屬于sockfs特殊文件系統(tǒng)〕套接字類型流式套接字:面向連接、可靠的全雙工數(shù)據(jù)傳輸效勞數(shù)據(jù)報(bào)式套接字:無(wú)連接效勞原始套接字:允許對(duì)較低層協(xié)議進(jìn)行直接訪問(wèn)五.內(nèi)存管理

內(nèi)存空間管理內(nèi)存分頁(yè)機(jī)制內(nèi)存操作函數(shù)1.內(nèi)存空間管理

Linux采用虛擬內(nèi)存管理技術(shù)32位系統(tǒng)中虛擬地址空間的劃分進(jìn)程需要內(nèi)存時(shí)獲得的是虛擬的內(nèi)存區(qū)域,只有當(dāng)進(jìn)程真正訪問(wèn)新獲取的虛擬地址時(shí),才會(huì)映射到實(shí)際的物理內(nèi)存上2.內(nèi)存分頁(yè)機(jī)制

物理內(nèi)存管理按地址分為三類:DMA使用、內(nèi)核使用、高端內(nèi)存物理內(nèi)存分配函數(shù):_alloc_pages()、_get_free_pages()、kmalloc()頁(yè)表管理三級(jí)分頁(yè)機(jī)制虛擬內(nèi)存管理分為用戶空間〔0~3GB〕和內(nèi)核空間〔3~4GB〕0~896MB的空間一對(duì)一映射,剩下的動(dòng)態(tài)映射3.內(nèi)核操作函數(shù)

內(nèi)核態(tài)操作函數(shù)kmalloc()/kfree()、vmalloc()/vfree()alloc_pages()/free_pages()、_get_free_pages()/__free_pages()copy_from_user()/copy_to_user()……用戶態(tài)操作函數(shù)alloc()、calloc()、malloc()和relloc()mmap()/munmap()……六.設(shè)備管理

設(shè)備管理策略設(shè)備驅(qū)動(dòng)原理編寫(xiě)設(shè)備驅(qū)動(dòng)程序1.設(shè)備管理策略

早期:普通的帶特殊屬性的文件,由mknod命令創(chuàng)立,掛載于/dev下,由普通的文件系統(tǒng)統(tǒng)一管理浪費(fèi)空間,管理混亂,設(shè)備檢測(cè)存在額外開(kāi)銷:內(nèi)核中引入了Devfs,所有需要的設(shè)備節(jié)點(diǎn)都將由內(nèi)核自動(dòng)創(chuàng)立同一個(gè)物理設(shè)備可能會(huì)被映射成不同的設(shè)備文件、主/輔設(shè)備號(hào)缺乏、額外的內(nèi)核內(nèi)存開(kāi)銷:提供了統(tǒng)一的內(nèi)核設(shè)備模型,以支持智能電源管理、熱插拔以及plugandplay的要求2.設(shè)備驅(qū)動(dòng)原理

字符設(shè)備映射為chrdevs向量表中的device_struct大局部字符設(shè)備是數(shù)據(jù)通道,只能順序存取直接對(duì)設(shè)備進(jìn)行讀寫(xiě)操作塊設(shè)備填充blk_dev向量表中的blk_dev_struct利用系統(tǒng)內(nèi)存作為緩沖區(qū)在設(shè)備與內(nèi)存間傳送數(shù)據(jù)網(wǎng)絡(luò)設(shè)備類似于一個(gè)已掛載的塊設(shè)備基于BSDUnix的Socket機(jī)制3.編寫(xiě)設(shè)備驅(qū)動(dòng)程序

設(shè)備驅(qū)動(dòng)程序的組成設(shè)備的翻開(kāi)和釋放:open()、release()設(shè)備的讀寫(xiě):read()、write()設(shè)備的控制:ioctl()設(shè)備的中斷和輪詢?cè)O(shè)備驅(qū)動(dòng)的加載重編譯、直接內(nèi)核加載模塊方式動(dòng)態(tài)加載七.文件系統(tǒng)

文件系統(tǒng)層次結(jié)構(gòu)文件系統(tǒng)格式虛擬文件系統(tǒng)proc

1.文件層次結(jié)構(gòu)

Linux文件系統(tǒng)是一個(gè)樹(shù)形結(jié)構(gòu),一切都從根目錄(“/〞)開(kāi)始Linux以“加載〞的方式把所有分區(qū)都放置在“根〞下指定的目錄里L(fēng)inux常用的文件系統(tǒng)ext、ext2、ext3、JFS、XFS、LinuxSwap、VFAT2.文件系統(tǒng)格式

EXT2文件系統(tǒng)GNU/Linux系統(tǒng)中標(biāo)準(zhǔn)的文件系統(tǒng)文件存取性能極好,對(duì)中小型文件尤為突出文件狀態(tài)可能不一致,非日志文件系統(tǒng)EXT3文件系統(tǒng)日志式文件系統(tǒng)回溯追蹤功能,平安性較高文件處理速度較慢EXT4文件系統(tǒng)支持1EB的文件系統(tǒng)性能、伸縮性和可靠性方面有改進(jìn)LinuxSWAP專用于交換分區(qū)的swap文件系統(tǒng)通常情況下,swap的空間大小應(yīng)是物理主存的倍3.虛擬文件系統(tǒng)proc

常駐虛擬內(nèi)存,維持操作系統(tǒng)動(dòng)態(tài)數(shù)據(jù)的偽文件系統(tǒng)可以在Linux內(nèi)核空間和用戶空間之間進(jìn)行通信進(jìn)程可用文件系統(tǒng)的方式、通過(guò)對(duì)虛擬文件的讀寫(xiě)實(shí)現(xiàn)與內(nèi)核內(nèi)部數(shù)據(jù)結(jié)構(gòu)的交互包含的內(nèi)容系統(tǒng)/內(nèi)核信息運(yùn)行中的進(jìn)程信息通過(guò)/proc與內(nèi)核交互〔慎重使用〕八.內(nèi)核編程

內(nèi)核體系結(jié)構(gòu)內(nèi)核鏡像與加載動(dòng)態(tài)模塊加載1.內(nèi)核體系結(jié)構(gòu)Linux內(nèi)核體系結(jié)構(gòu)Linux內(nèi)核子系統(tǒng)及其關(guān)系2.內(nèi)核鏡像與加載

鏡像文件的類型非壓縮版本Vmlinux:可引導(dǎo)的、可壓縮de內(nèi)核鏡像Image:經(jīng)objcopy處理的、只包含二進(jìn)制數(shù)據(jù)的內(nèi)核代碼壓縮版本zImage:由vmlinux加上解壓代碼經(jīng)gzip壓縮而成bzImage:與zImage類似,但采用了不同的壓縮算法,壓縮率更高uImage:uboot專用的鏡像文件,在zImage

溫馨提示

  • 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)論