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