




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第13章基于proc的Linux進程控制塊信息讀取操作系統(tǒng)實踐山東科技大學操作系統(tǒng)教研組理解proc偽文件系統(tǒng)的基本概念和功能,掌握常見操作命令。了解Linux進程控制塊task_strcut,并理解其重要成員變量的含義。理解基于seq_file機制的proc偽文件操作機制熟練掌握生成proc偽文件的Linux內(nèi)核模塊代碼實現(xiàn)方法。通過實驗認識Linux的進程概念,并加深對操作系統(tǒng)進程概念的理解。掌握Linux內(nèi)核為用戶提供服務(wù)的方式、方法,尤其是proc機制。Proc是Linux為用戶提供內(nèi)核和計算機運行狀態(tài)的主要接口,是從事Linux運維、管理工作所必須掌握的基本技能。本章目標實驗1:測試proc文件系統(tǒng)功能(教材P.168)實驗2:創(chuàng)建顯示系統(tǒng)進程信息的proc模塊(教材P.179)拓展實驗:顯示Linux進程控制塊中更多的信息(教材P.182)第13章基于proc的Linux進程控制塊信息讀取
實驗?zāi)康睦斫鈖roc偽文件系統(tǒng)的基本概念和功能,掌握常見操作命令。通過實驗深入理解操作系統(tǒng)為用戶提供服務(wù)的方式、方法實驗1:測試proc文件系統(tǒng)功能
實驗內(nèi)容請運行以下命令并仔細觀察實驗結(jié)果,理解proc文件系統(tǒng)的功能、作用$cat/proc/cpuinfo$cat/proc/modules$cat/proc/meminfo$cat/proc/iomem$cat/proc/devices$cat/proc/self/maps$cat/proc/filesystems$cat/proc/version提示:請結(jié)合Linux源代碼文檔中的proc.txt或網(wǎng)上資料了解proc偽文件的機制和功能實驗1:測試proc文件系統(tǒng)功能
原理/背景Proc是什么首先,proc是Linux系統(tǒng)根目錄下名為“proc”的文件目錄。其次,它是一種偽文件系統(tǒng)。它只存在內(nèi)存當中,不像普通文件一樣占用外存空間。它以文件系統(tǒng)的方式提供應(yīng)用程序訪問系統(tǒng)內(nèi)核數(shù)據(jù)的操作接口。proc偽文件系統(tǒng)動態(tài)地從系統(tǒng)內(nèi)核讀出所需信息并提交給應(yīng)用程序Proc文件系統(tǒng)提供哪些信息?與進程相關(guān)的目錄通用系統(tǒng)信息網(wǎng)絡(luò)信息系統(tǒng)控制信息實驗1:測試proc文件系統(tǒng)功能
原理/背景Proc可以作為動態(tài)添加的LKM模塊的輸出接口。應(yīng)用程序可以通過讀取proc中相應(yīng)的模塊信息來獲取動態(tài)添加的LKM模塊輸出。后續(xù)各章我們將采用proc作為LKM與應(yīng)用程序的主要接口。提醒:cat是讀取proc的一個命令;讀者可以在編寫程序,在程序中通過函數(shù)調(diào)用直接讀取proc信息。相關(guān)實現(xiàn),可以參考cat程序。實驗1:測試proc文件系統(tǒng)功能
實驗?zāi)康牧私釲inux進程控制塊task_strcut,并理解其重要成員變量的含義。理解基于seq_file機制的proc偽文件操作機制熟練掌握生成proc偽文件的Linux內(nèi)核模塊代碼實現(xiàn)方法。認識Linux的進程概念,深入理解操作系統(tǒng)的進程概念,實驗2:創(chuàng)建顯示系統(tǒng)進程信息的proc模塊
實驗內(nèi)容從教材提供的電子資源中找到或者按教材提示自己編寫Linux內(nèi)核模塊tasklist.c及其對應(yīng)的Makefile文件該模塊創(chuàng)建/proc/tasklist文件,并且提取系統(tǒng)中所有進程的pid、state和名稱進行顯示。編譯、安裝、刪除該模塊,查看該模塊的安裝位置、運行情況實驗2:創(chuàng)建顯示系統(tǒng)進程信息的proc模塊
實驗要求通過閱讀、執(zhí)行tasklist.c、對應(yīng)的Makefile文件及其執(zhí)行結(jié)果,理解Linux中進程控制塊的管理方式、以及進程控制塊的基本組成。通過閱讀、執(zhí)行tasklist.c、對應(yīng)的Makefile文件及其執(zhí)行結(jié)果,深入理解Linux操作系統(tǒng)為用戶提供服務(wù)的proc機制的工作原理和方法,尤其是proc的創(chuàng)建方式和基于seq_file的操作機制。結(jié)合操作系統(tǒng)知識,通過實驗深入理解計算機程序在內(nèi)核空間的運行方式。實驗2:創(chuàng)建顯示系統(tǒng)進程信息的proc模塊原理/背景Linux進程控制塊LKM模塊操作Proc文件的方式實驗2:創(chuàng)建顯示系統(tǒng)進程信息的proc模塊實驗2創(chuàng)建顯示系統(tǒng)進程信息的proc模塊
實驗原理和背景Linux的進程控制塊PCB使用task_struct結(jié)構(gòu)體進行描述進程概念進程控制塊概念進程控制塊中保存的信息是進程在執(zhí)行過程的快照,包含右圖中用戶進程在用戶空間中的分布信息,但不僅僅局限于這些信息。進程控制塊位于內(nèi)核空間,只能被特權(quán)級別的進程,即操作系統(tǒng)進程操作,而不能被用戶程序操作換句話說,用戶程序不能直接獲取進程信息,必須通過OS。圖13.4一個用戶進程的虛擬地址空間分布示意圖實驗2創(chuàng)建顯示系統(tǒng)進程信息的proc模塊
實驗原理原理和背景task_struct結(jié)構(gòu)體定義在<linux/sched.h>頭文件中structtask_struct {/*Linux3.13.0內(nèi)核*/ volatilelong state;//進程狀態(tài) void *stack;//進程內(nèi)核棧 unsignedlong flags;//進程標記 structmm_struct *mm;//進程內(nèi)存結(jié)構(gòu)體 structthread_struct *thread;//所包含的線程的結(jié)構(gòu)體 pid_t pid;//進程唯一標識符pid_ttgid;//線程組對應(yīng)的進程標識符 charcomm[TASK_COMM_LEN];//進程名稱 ......./*其他省略*/ };實驗2創(chuàng)建顯示系統(tǒng)進程信息的proc模塊
實驗原理原理和背景Linux中的進程狀態(tài)和轉(zhuǎn)換#defineTASK_RUNNING 0//表示運行或可運行#defineTASK_INTERRUPTIBLE 1//進程正在睡眠或者說阻塞,但可被喚醒#defineTASK_UNINTERRUPTIBLE 2//進程正在睡眠或者說阻塞,而且不能被喚醒#define__TASK_STOPPED 4//進程停止執(zhí)行#define__TASK_TRACED 8//進程可以被追蹤,比如處于調(diào)試狀態(tài)/*intsk->exit_state*/#defineEXIT_ZOMBIE 16#defineEXIT_DEAD 32實驗2創(chuàng)建顯示系統(tǒng)進程信息的proc模塊
實驗原理原理和背景LKM模塊操作Proc文件的方式Proc文件只能由Linux內(nèi)核代碼創(chuàng)建。Porc文件有一套規(guī)定的操作函數(shù)和方法。Linux內(nèi)核3.x.x版本中proc文件的訪問方式與2.x.x版本相比發(fā)生了重大改變。網(wǎng)絡(luò)上很多proc的編程說明都只適用于老版本內(nèi)核Proc文件包括兩個級別的操作:文件級別的操作:創(chuàng)建proc時指定操作函數(shù)結(jié)構(gòu)體記錄級別的操作:打開proc文件時指定操作函數(shù)結(jié)構(gòu)體實驗2創(chuàng)建顯示系統(tǒng)進程信息的proc模塊
實驗原理原理和背景Proc文件創(chuàng)建函數(shù)一個創(chuàng)建示例staticinlinestructproc_dir_entry*proc_create(constchar*name,umode_tmode,structproc_dir_entry*parent,conststructfile_operations*proc_fops)charmodname[]=“tasklist”;//聲明要創(chuàng)建的proc文件的名稱,此處為“/proc/tasklist”structproc_dir_entry*my_proc_entry;my_proc_entry=proc_create(modname,0,NULL,&my_proc);staticconststructfile_operationsmy_proc={ .owner=THIS_MODULE, .open=my_open, .read=seq_read, .llseek=seq_lseek, .release=seq_release };//先定義proc文件操作函數(shù)結(jié)構(gòu)體,并實現(xiàn)自己定義的函數(shù),如my_open實驗2創(chuàng)建顯示系統(tǒng)進程信息的proc模塊
實驗原理原理和背景Proc記錄采用seq_file機制(序列文件機制)進行操作seq_file機制的相關(guān)函數(shù)和定義說明包含在<linux/seq_file.h>頭文件中一個示例首先定義記錄操作函數(shù)結(jié)構(gòu)體。根據(jù)程序功能,實現(xiàn)所定義的函數(shù)
如my_seq_start等。其次在定義的proc文件操作函數(shù)my_proc中的open函數(shù)中指明使用該結(jié)構(gòu)體staticstructseq_operationsmy_seq_fops={.start=my_seq_start,.next=my_seq_next,.stop=my_seq_stop,.show=my_seq_show};staticintmy_open(structinode*inode,structfile*file){returnseq_open(file,&my_seq_fops);}實驗2創(chuàng)建顯示系統(tǒng)進程信息的proc模塊
實驗步驟本實驗代碼為電子資源中“/源代碼/ch13/vexp1”目錄下的tasklist.c和對應(yīng)的Makefile文件。編譯:make添加LKM模塊$sudoinsmodtasklist.ko查看LKM運行結(jié)果:$cat/proc/tasklist刪除LKM模塊$sudormmodtasklist請讀者按著本節(jié)內(nèi)容提示完成tasklist內(nèi)核模塊的添加和撤銷實驗,并結(jié)合實驗結(jié)果理解tasklist源代碼以及本節(jié)內(nèi)容。掌握proc的操作方法以及進程控制塊的讀取方法。實驗2創(chuàng)建顯示系統(tǒng)進程信息的proc模塊
總結(jié)請對照代碼和實驗結(jié)果,理解整個tasklist模塊的運行流程拓展實驗顯示Linux進程控制塊中更多的信息
Linux進程調(diào)度策略Linux進程優(yōu)先級/**Schedulingpolicies*/#defineSCHED_NORMAL 0#defineSCHED_FIFO 1#defineSCHED_RR 2#defineSCHED_BATCH 3/*SCHED_ISO:reservedbutnotimplementedyet*/#defineSCHED_IDLE 5在task_struct結(jié)構(gòu)體中有多個與進程優(yōu)先級相關(guān)的成員變量,定義如下: intprio,static_prio,normal_prio; unsignedintrt_priority;拓展實驗顯示Linux進程控制塊中更多的信息實驗3:顯示Linux進程控制塊中更多的信息實驗?zāi)繕藶閷崿F(xiàn)一個內(nèi)核模塊,該模塊創(chuàng)建/proc/tasklist文件,并且提取系統(tǒng)中所有進程的pid、state、名稱、優(yōu)先級、運行時間、上下文切換等信息進行顯示。本實驗代碼為電子資源中“/源代碼/ch13/vexp2”目錄下的tasklist.c和對應(yīng)的Makefile文件。拓展實驗上述實驗都是編寫一個LKM模塊,創(chuàng)建一個用于讀取進程控制快信息的proc文件tasklist。應(yīng)用程序,如cat,訪問/proc/tasklist從而獲得系統(tǒng)中正在運行的進程信息。除了讀取信息外,應(yīng)用程序還需要向內(nèi)核傳遞消息,即寫入。從應(yīng)用程序向內(nèi)核寫入信息,必須經(jīng)過嚴格審查,否則容易引起系統(tǒng)的崩潰。Linux不允許應(yīng)用程序直接向系統(tǒng)寫入數(shù)據(jù)。應(yīng)用程序必須向一個LKM模塊傳遞消息,然后由LKM模塊負責將消息寫入。LKM調(diào)用兩個系統(tǒng)函數(shù)實現(xiàn)用戶空間和內(nèi)核空間之間的數(shù)據(jù)傳遞copy_from_user完成從用戶空間拷貝數(shù)據(jù)到內(nèi)核空
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年國元農(nóng)業(yè)保險股份有限公司蚌埠中心支公司招聘4人筆試參考題庫附帶答案詳解
- 《水能溶解》教學設(shè)計-2024-2025學年 三年級科學上冊 教科版
- 2024年湖南長沙寧鄉(xiāng)市面向全國公開引進選拔生30人筆試參考題庫附帶答案詳解
- 東獅牌DSGX脫硫催化劑
- 13-2《上圖書館》教學設(shè)計 2024-2025學年統(tǒng)編版高中語文必修上冊
- 2024年度安徽蕪湖鳩茲水務(wù)有限公司第二批工作人員招聘3人筆試參考題庫附帶答案詳解
- 網(wǎng)絡(luò)的硬化 第1課 冷戰(zhàn)陰影-網(wǎng)狀連接保通暢 教學設(shè)計 2024-2025學年清華大學版(2024)B版初中信息技術(shù)七年級上冊
- Starter 第4課時Hold a party 教學設(shè)計 2024-2025學年外研版英語七年級上冊
- Module 5 Unit 3 language in use 教學設(shè)計 2024-2025學年外研版八年級英語上冊
- 第18課《紫藤蘿瀑布》教學設(shè)計2023-2024學年統(tǒng)編版語文七年級下冊
- GB∕T 3836.31-2021 爆炸性環(huán)境 第31部分:由防粉塵點燃外殼“t”保護的設(shè)備
- 高新技術(shù)企業(yè)認定申請書樣例與說明
- 數(shù)據(jù)結(jié)構(gòu)英文教學課件:chapter6 Tree
- 高壓氧科工作總結(jié)高壓氧科個人年終總結(jié).doc
- 《政治學概論》教學大綱
- 橋梁缺陷與預(yù)防
- 食品生物化學習題謝達平(動態(tài))
- 新蘇教版小學科學三年級下冊全冊教案(2022年春修訂)
- 保安員工入職登記表
- 睿達RDCAM激光雕刻切割軟件V5.0操作說明書
- 機械設(shè)計基礎(chǔ)平面連桿機構(gòu)課件
評論
0/150
提交評論