《proc文件系統(tǒng)》PPT課件.ppt
《《proc文件系統(tǒng)》PPT課件.ppt》由會員分享,可在線閱讀,更多相關《《proc文件系統(tǒng)》PPT課件.ppt(28頁珍藏版)》請在裝配圖網上搜索。
操作系統(tǒng)課程設計proc文件系統(tǒng) proc proc文件系統(tǒng)是Linux中的特殊文件系統(tǒng) 提供給用戶一個可以了解內核內部工作過程的可讀窗口 在運行時訪問內核內部數(shù)據(jù)結構 改變內核設置的機制 保存系統(tǒng)當前工作的特殊數(shù)據(jù) 但并不存在于任何物理設備中 對其進行讀寫時 才根據(jù)系統(tǒng)中的相關信息即時生成 或映射到系統(tǒng)中的變量或數(shù)據(jù)結構 proc被稱為 偽文件系統(tǒng) 其掛接目錄點固定為 proc manproc 進行了詳細說明 proc proc的文件可以用于訪問有關內核的狀態(tài) 計算機的屬性 正在運行的進程的狀態(tài)等信息 大部分 proc中的文件和目錄提供系統(tǒng)物理環(huán)境最新的信息 盡管 proc中的文件是虛擬的 但它們仍可以使用任何文件編輯器或像 more less 或 cat 這樣的程序來查看 當編輯程序試圖打開一個虛擬文件時 這個文件就通過內核中的信息被憑空地 onthefly 創(chuàng)建了 得到有用的系統(tǒng) 內核信息 proc文件系統(tǒng)可以被用于收集有用的關于系統(tǒng)和運行中的內核的信息 下面是一些重要的文件 proc cpuinfo CPU的信息 型號 家族 緩存大小等 proc meminfo 物理內存 交換空間等的信息 proc mounts 已加載的文件系統(tǒng)的列表 proc devices 可用設備的列表 proc filesystems 被支持的文件系統(tǒng) proc modules 已加載的模塊 proc version 內核版本 proc cmdline 系統(tǒng)啟動時輸入的內核命令行參數(shù)proc中的文件遠不止上面列出的這么多 想要進一步了解 可以對 proc的每一個文件都 more 一下 一個系統(tǒng)的CPU信息 十分清楚地給出了這個系統(tǒng)的有用的硬件信息 有關運行中的進程的信息 proc文件系統(tǒng)可以用于獲取運行中的進程的信息 在 proc中有一些編號的子目錄 每個編號的目錄對應一個進程id PID 這樣 每一個運行中的進程 proc中都有一個用它的PID命名的目錄 這些子目錄中包含可以提供有關進程的狀態(tài)和環(huán)境的重要細節(jié)信息的文件 讓我們試著查找一個運行中的進程 見下頁 有關運行中的進程的信息 文件 cmdline 包含啟動進程時調用的命令行 cpu 僅在運行SMP內核時出現(xiàn) 里面是按CPU劃分的進程時間 cwd 是指向進程當前工作目錄的符號鏈接 envir 進程的環(huán)境變量 exe 指向運行的進程的可執(zhí)行程序 目錄 fd 包含指向進程使用的文件描述符的鏈接 root 指向被這個進程看作是根目錄的目錄 通常是 status 是進程的狀態(tài)信息 包括啟動進程的用戶的用戶ID UID 和組ID GID 父進程ID PPID 還有進程當前的狀態(tài) 比如 Sleelping 和 Running 每個進程的目錄都有幾個符號鏈接 通過 proc與內核交互 上面討論的大部分 proc的文件是只讀的 而實際上 proc文件系統(tǒng)通過 proc中可讀寫的文件提供了對內核的交互機制 寫這些文件可以改變內核的狀態(tài) 因而要慎重改動這些文件 proc sys目錄存放所有可讀寫的文件的目錄 可以被用于改變內核行為 proc sys kernel 這個目錄包含反通用內核行為的信息 proc sys kernel domainname hostname 存放著機器 網絡的域名和主機名 這些文件可以用于修改這些名字 通過 proc與內核交互 這樣 通過修改 proc文件系統(tǒng)中的文件 可以修改主機名或者文件系統(tǒng)的可分配文件句柄的最大數(shù)值等等 很多其他可配置的文件存在于 proc sys kernel 這里不可能列出所有這些文件 同學們可以自己去這個目錄查看以得到更多細節(jié)信息 作業(yè)1 編寫一個程序 用來讀取和修改內核參數(shù) 任意參數(shù)即可 不涉及到內核編程 只需要使用標準C庫中的函數(shù) proc文件系統(tǒng)的編程接口 前面學習了proc文件系統(tǒng)的基本概念 本次實驗將編寫一個內核模塊 通過加載模塊 在 proc目錄下增加若干個文件 用戶對文件的讀寫都由模塊進行處理 proc目錄下的文件屬于一種特殊的文件 必須用特定的方法創(chuàng)建和刪除proc文件系統(tǒng)的編程接口比較好記 大部分函數(shù)是VFS函數(shù)名前面加上一個 proc 創(chuàng)建目錄函數(shù)proc mkdir 創(chuàng)建符號鏈接函數(shù)proc symlink 創(chuàng)建設備文件函數(shù)proc mknod proc文件系統(tǒng)的編程接口 介紹內核函數(shù)之前 先來了解proc文件系統(tǒng)編程最主要的數(shù)據(jù)結構 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 刪除標志 kdev trdev proc文件系統(tǒng)的編程接口 每一個這樣的數(shù)據(jù)結構代表了一個節(jié)點 也就是一個proc文件 其中很多結構成員的意義和普通文件的一樣 編程中用到的成員并不多 幾個常用到的成員如下 name 節(jié)點的名稱 也就是該proc文件的名稱mode 文件的類型和權限nlink 該文件的鏈接數(shù)read proc 讀操作函數(shù)write proc 寫操作函數(shù)owner 該文件的擁有者模塊 proc文件系統(tǒng)的編程接口 下面介紹幾個內核函數(shù) 通過這些函數(shù) 可以請求內核在proc文件系統(tǒng)中創(chuàng)建或者刪除文件或目錄 要注意這些函數(shù)都是內核函數(shù) 只能在核心態(tài)被調用 需要編寫一個內核模塊去調用它們 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 文件類型和訪問權限為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文件 其實它只是簡單地調用create proc entry 并將返回結構的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的符號鏈接文件 鏈接的目標是dest proc文件系統(tǒng)的編程接口 創(chuàng)建設備文件proc mknod structproc dir entry proc mknod constchar name mode tmode structproc dir entry parent kdev t rdev 該函數(shù)在parent目錄下創(chuàng)建一個名字為name的設備文件 文件類型和權限為mode 設備號為rdev proc文件系統(tǒng)的編程接口 以上五個創(chuàng)建節(jié)點的函數(shù)在內核中的實現(xiàn)流程 通過proc create為結構申請空間 并進行一些初始化工作 proc register則進一步填寫結構中的域 并完成注冊工作刪除節(jié)點的函數(shù)在內核中的實現(xiàn)流程 則是先調用clear bit和proc kill inodes 注銷inode結構 如果引用數(shù)為0 則調用free proc entry釋放結構對應的空間 否則置一個刪除標志 不釋放空間 proc文件系統(tǒng)的編程接口 以上函數(shù)只能創(chuàng)建一個文件 要想使創(chuàng)建的文件發(fā)揮作用 還有兩個域的值需要填寫 它們是read proc和write proc 該兩個函數(shù)都是回調函數(shù) 當對文件進行讀寫時 系統(tǒng)會自動調用相應的回調函數(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 學習下面的例子 這個例子是一個內核模塊 請按照學過的編譯內核模塊的方法進行編譯 然后看看 proc目錄有什么變化 根據(jù)這個例子 在 proc目錄下用自己的學號創(chuàng)建一個目錄 如 proc 13081201 然后在學號目錄下創(chuàng)建兩個文件 一個用自己的姓作為文件名 如 proc 13081201 zhang 此文件是只讀的 用于顯示當前進程的PID信息 另一個文件用自己的名字作為文件名 如 proc 13081201 xiaoming 此文件是可讀寫的 例子1 例子2 例子3 內核為2 4下的編譯 加載與卸載 編譯gcc c I usr src linux 2 4 include Wallxxx c加載與卸載insmodxxx o加載模塊rmmodxxx卸載模塊 內核為2 6下的編譯 加載與卸載 編譯前需要對源代碼做適當更改去掉文檔前兩行宏定義 define KERNEL 和 defineMODULEMODULE INC USE COUNT替換為try module get THIS MODULE MODULE DEC USE COUNT替換為module put THIS MODULE 將current pgrp替換為process group current 詳細說明見文檔- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- proc文件系統(tǒng) proc 文件系統(tǒng) PPT 課件
裝配圖網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
相關資源
更多
正為您匹配相似的精品文檔
相關搜索
鏈接地址:http://m.zhongcaozhi.com.cn/p-6130986.html