《proc文件系統(tǒng)》PPT課件.ppt
《《proc文件系統(tǒng)》PPT課件.ppt》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《《proc文件系統(tǒng)》PPT課件.ppt(28頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
操作系統(tǒng)課程設(shè)計(jì)proc文件系統(tǒng) proc proc文件系統(tǒng)是Linux中的特殊文件系統(tǒng) 提供給用戶(hù)一個(gè)可以了解內(nèi)核內(nèi)部工作過(guò)程的可讀窗口 在運(yùn)行時(shí)訪(fǎng)問(wèn)內(nèi)核內(nèi)部數(shù)據(jù)結(jié)構(gòu) 改變內(nèi)核設(shè)置的機(jī)制 保存系統(tǒng)當(dāng)前工作的特殊數(shù)據(jù) 但并不存在于任何物理設(shè)備中 對(duì)其進(jìn)行讀寫(xiě)時(shí) 才根據(jù)系統(tǒng)中的相關(guān)信息即時(shí)生成 或映射到系統(tǒng)中的變量或數(shù)據(jù)結(jié)構(gòu) proc被稱(chēng)為 偽文件系統(tǒng) 其掛接目錄點(diǎn)固定為 proc manproc 進(jìn)行了詳細(xì)說(shuō)明 proc proc的文件可以用于訪(fǎng)問(wèn)有關(guān)內(nèi)核的狀態(tài) 計(jì)算機(jī)的屬性 正在運(yùn)行的進(jìn)程的狀態(tài)等信息 大部分 proc中的文件和目錄提供系統(tǒng)物理環(huán)境最新的信息 盡管 proc中的文件是虛擬的 但它們?nèi)钥梢允褂萌魏挝募庉嬈骰蛳?more less 或 cat 這樣的程序來(lái)查看 當(dāng)編輯程序試圖打開(kāi)一個(gè)虛擬文件時(shí) 這個(gè)文件就通過(guò)內(nèi)核中的信息被憑空地 onthefly 創(chuàng)建了 得到有用的系統(tǒng) 內(nèi)核信息 proc文件系統(tǒng)可以被用于收集有用的關(guān)于系統(tǒng)和運(yùn)行中的內(nèi)核的信息 下面是一些重要的文件 proc cpuinfo CPU的信息 型號(hào) 家族 緩存大小等 proc meminfo 物理內(nèi)存 交換空間等的信息 proc mounts 已加載的文件系統(tǒng)的列表 proc devices 可用設(shè)備的列表 proc filesystems 被支持的文件系統(tǒng) proc modules 已加載的模塊 proc version 內(nèi)核版本 proc cmdline 系統(tǒng)啟動(dòng)時(shí)輸入的內(nèi)核命令行參數(shù)proc中的文件遠(yuǎn)不止上面列出的這么多 想要進(jìn)一步了解 可以對(duì) proc的每一個(gè)文件都 more 一下 一個(gè)系統(tǒng)的CPU信息 十分清楚地給出了這個(gè)系統(tǒng)的有用的硬件信息 有關(guān)運(yùn)行中的進(jìn)程的信息 proc文件系統(tǒng)可以用于獲取運(yùn)行中的進(jìn)程的信息 在 proc中有一些編號(hào)的子目錄 每個(gè)編號(hào)的目錄對(duì)應(yīng)一個(gè)進(jìn)程id PID 這樣 每一個(gè)運(yùn)行中的進(jìn)程 proc中都有一個(gè)用它的PID命名的目錄 這些子目錄中包含可以提供有關(guān)進(jìn)程的狀態(tài)和環(huán)境的重要細(xì)節(jié)信息的文件 讓我們?cè)囍檎乙粋€(gè)運(yùn)行中的進(jìn)程 見(jiàn)下頁(yè) 有關(guān)運(yùn)行中的進(jìn)程的信息 文件 cmdline 包含啟動(dòng)進(jìn)程時(shí)調(diào)用的命令行 cpu 僅在運(yùn)行SMP內(nèi)核時(shí)出現(xiàn) 里面是按CPU劃分的進(jìn)程時(shí)間 cwd 是指向進(jìn)程當(dāng)前工作目錄的符號(hào)鏈接 envir 進(jìn)程的環(huán)境變量 exe 指向運(yùn)行的進(jìn)程的可執(zhí)行程序 目錄 fd 包含指向進(jìn)程使用的文件描述符的鏈接 root 指向被這個(gè)進(jìn)程看作是根目錄的目錄 通常是 status 是進(jìn)程的狀態(tài)信息 包括啟動(dòng)進(jìn)程的用戶(hù)的用戶(hù)ID UID 和組ID GID 父進(jìn)程ID PPID 還有進(jìn)程當(dāng)前的狀態(tài) 比如 Sleelping 和 Running 每個(gè)進(jìn)程的目錄都有幾個(gè)符號(hào)鏈接 通過(guò) proc與內(nèi)核交互 上面討論的大部分 proc的文件是只讀的 而實(shí)際上 proc文件系統(tǒng)通過(guò) proc中可讀寫(xiě)的文件提供了對(duì)內(nèi)核的交互機(jī)制 寫(xiě)這些文件可以改變內(nèi)核的狀態(tài) 因而要慎重改動(dòng)這些文件 proc sys目錄存放所有可讀寫(xiě)的文件的目錄 可以被用于改變內(nèi)核行為 proc sys kernel 這個(gè)目錄包含反通用內(nèi)核行為的信息 proc sys kernel domainname hostname 存放著機(jī)器 網(wǎng)絡(luò)的域名和主機(jī)名 這些文件可以用于修改這些名字 通過(guò) proc與內(nèi)核交互 這樣 通過(guò)修改 proc文件系統(tǒng)中的文件 可以修改主機(jī)名或者文件系統(tǒng)的可分配文件句柄的最大數(shù)值等等 很多其他可配置的文件存在于 proc sys kernel 這里不可能列出所有這些文件 同學(xué)們可以自己去這個(gè)目錄查看以得到更多細(xì)節(jié)信息 作業(yè)1 編寫(xiě)一個(gè)程序 用來(lái)讀取和修改內(nèi)核參數(shù) 任意參數(shù)即可 不涉及到內(nèi)核編程 只需要使用標(biāo)準(zhǔn)C庫(kù)中的函數(shù) proc文件系統(tǒng)的編程接口 前面學(xué)習(xí)了proc文件系統(tǒng)的基本概念 本次實(shí)驗(yàn)將編寫(xiě)一個(gè)內(nèi)核模塊 通過(guò)加載模塊 在 proc目錄下增加若干個(gè)文件 用戶(hù)對(duì)文件的讀寫(xiě)都由模塊進(jìn)行處理 proc目錄下的文件屬于一種特殊的文件 必須用特定的方法創(chuàng)建和刪除proc文件系統(tǒng)的編程接口比較好記 大部分函數(shù)是VFS函數(shù)名前面加上一個(gè) proc 創(chuàng)建目錄函數(shù)proc mkdir 創(chuàng)建符號(hào)鏈接函數(shù)proc symlink 創(chuàng)建設(shè)備文件函數(shù)proc mknod proc文件系統(tǒng)的編程接口 介紹內(nèi)核函數(shù)之前 先來(lái)了解proc文件系統(tǒng)編程最主要的數(shù)據(jù)結(jié)構(gòu) proc dir entry structproc dir entry unsignedshortlow ino unsignedshortnamelen constchar name mode tmode nlink tnlink uid tuid gid tgid unsignedlongsize structinode operations proc iops structfile operations proc fops get info t get info structmodule owner structproc dir entry next parent subdir void data read proc t read proc write proc t write proc atomic tcount 使用計(jì)數(shù) intdeleted 刪除標(biāo)志 kdev trdev proc文件系統(tǒng)的編程接口 每一個(gè)這樣的數(shù)據(jù)結(jié)構(gòu)代表了一個(gè)節(jié)點(diǎn) 也就是一個(gè)proc文件 其中很多結(jié)構(gòu)成員的意義和普通文件的一樣 編程中用到的成員并不多 幾個(gè)常用到的成員如下 name 節(jié)點(diǎn)的名稱(chēng) 也就是該proc文件的名稱(chēng)mode 文件的類(lèi)型和權(quán)限nlink 該文件的鏈接數(shù)read proc 讀操作函數(shù)write proc 寫(xiě)操作函數(shù)owner 該文件的擁有者模塊 proc文件系統(tǒng)的編程接口 下面介紹幾個(gè)內(nèi)核函數(shù) 通過(guò)這些函數(shù) 可以請(qǐng)求內(nèi)核在proc文件系統(tǒng)中創(chuàng)建或者刪除文件或目錄 要注意這些函數(shù)都是內(nèi)核函數(shù) 只能在核心態(tài)被調(diào)用 需要編寫(xiě)一個(gè)內(nèi)核模塊去調(diào)用它們 proc文件系統(tǒng)的編程接口 創(chuàng)建文件create proc entry structproc dir entry create proc entry constchar name mode tmode structproc dir entry parent 該函數(shù)將創(chuàng)建一個(gè)proc文件 文件名為name 文件類(lèi)型和訪(fǎng)問(wèn)權(quán)限為mode 父目錄為parent 如果想在proc文件系統(tǒng)的根目錄下創(chuàng)建 則制定參數(shù)parent為NULL 和普通文件不同的是 proc文件系統(tǒng)允許在同一個(gè)目錄下創(chuàng)建多個(gè)同名的文件和子目錄創(chuàng)建的文件和目錄不能用常規(guī)文件系統(tǒng)的rm或rmdir刪除 proc文件系統(tǒng)的編程接口 創(chuàng)建只讀文件create proc read entry structproc dir entry create proc read entry constchar name mode tmode structproc dir entry base read proc t read proc void date 該函數(shù)將創(chuàng)建一個(gè)只讀的proc文件 其實(shí)它只是簡(jiǎn)單地調(diào)用create proc entry 并將返回結(jié)構(gòu)的read proc域的值置為read proc data域的值置為data proc文件系統(tǒng)的編程接口 創(chuàng)建目錄create mkdir structproc dir entry proc mkdir constchar name structproc dir entry parent 該函數(shù)將創(chuàng)建一個(gè)目錄 父目錄為parent proc文件系統(tǒng)的編程接口 刪除節(jié)點(diǎn) 文件或者目錄 remove proc entry voidremove proc entry constchar name structproc dir entry parent 該函數(shù)將刪除一個(gè)proc節(jié)點(diǎn) 按文件名刪除 proc文件系統(tǒng)的編程接口 創(chuàng)建符號(hào)鏈接proc symlink structproc dir entry proc symlink constchar name structproc dir entry parent char dest 該函數(shù)在parent目錄下創(chuàng)建一個(gè)名字為name的符號(hào)鏈接文件 鏈接的目標(biāo)是dest proc文件系統(tǒng)的編程接口 創(chuàng)建設(shè)備文件proc mknod structproc dir entry proc mknod constchar name mode tmode structproc dir entry parent kdev t rdev 該函數(shù)在parent目錄下創(chuàng)建一個(gè)名字為name的設(shè)備文件 文件類(lèi)型和權(quán)限為mode 設(shè)備號(hào)為rdev proc文件系統(tǒng)的編程接口 以上五個(gè)創(chuàng)建節(jié)點(diǎn)的函數(shù)在內(nèi)核中的實(shí)現(xiàn)流程 通過(guò)proc create為結(jié)構(gòu)申請(qǐng)空間 并進(jìn)行一些初始化工作 proc register則進(jìn)一步填寫(xiě)結(jié)構(gòu)中的域 并完成注冊(cè)工作刪除節(jié)點(diǎn)的函數(shù)在內(nèi)核中的實(shí)現(xiàn)流程 則是先調(diào)用clear bit和proc kill inodes 注銷(xiāo)inode結(jié)構(gòu) 如果引用數(shù)為0 則調(diào)用free proc entry釋放結(jié)構(gòu)對(duì)應(yīng)的空間 否則置一個(gè)刪除標(biāo)志 不釋放空間 proc文件系統(tǒng)的編程接口 以上函數(shù)只能創(chuàng)建一個(gè)文件 要想使創(chuàng)建的文件發(fā)揮作用 還有兩個(gè)域的值需要填寫(xiě) 它們是read proc和write proc 該兩個(gè)函數(shù)都是回調(diào)函數(shù) 當(dāng)對(duì)文件進(jìn)行讀寫(xiě)時(shí) 系統(tǒng)會(huì)自動(dòng)調(diào)用相應(yīng)的回調(diào)函數(shù) int read proc char page char start off toff intcount int eof void data int write proc structfile file constchar buffer unsignedlongcount void data 例子和作業(yè)2 學(xué)習(xí)下面的例子 這個(gè)例子是一個(gè)內(nèi)核模塊 請(qǐng)按照學(xué)過(guò)的編譯內(nèi)核模塊的方法進(jìn)行編譯 然后看看 proc目錄有什么變化 根據(jù)這個(gè)例子 在 proc目錄下用自己的學(xué)號(hào)創(chuàng)建一個(gè)目錄 如 proc 13081201 然后在學(xué)號(hào)目錄下創(chuàng)建兩個(gè)文件 一個(gè)用自己的姓作為文件名 如 proc 13081201 zhang 此文件是只讀的 用于顯示當(dāng)前進(jìn)程的PID信息 另一個(gè)文件用自己的名字作為文件名 如 proc 13081201 xiaoming 此文件是可讀寫(xiě)的 例子1 例子2 例子3 內(nèi)核為2 4下的編譯 加載與卸載 編譯gcc c I usr src linux 2 4 include Wallxxx c加載與卸載insmodxxx o加載模塊rmmodxxx卸載模塊 內(nèi)核為2 6下的編譯 加載與卸載 編譯前需要對(duì)源代碼做適當(dāng)更改去掉文檔前兩行宏定義 define KERNEL 和 defineMODULEMODULE INC USE COUNT替換為try module get THIS MODULE MODULE DEC USE COUNT替換為module put THIS MODULE 將current pgrp替換為process group current 詳細(xì)說(shuō)明見(jiàn)文檔- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- proc文件系統(tǒng) proc 文件系統(tǒng) PPT 課件
鏈接地址:http://m.hcyjhs8.com/p-6130986.html