《proc文件系统》PPT课件.ppt

上传人:w****2 文档编号:6130986 上传时间:2020-02-17 格式:PPT 页数:28 大小:473KB
返回 下载 相关 举报
《proc文件系统》PPT课件.ppt_第1页
第1页 / 共28页
《proc文件系统》PPT课件.ppt_第2页
第2页 / 共28页
《proc文件系统》PPT课件.ppt_第3页
第3页 / 共28页
点击查看更多>>
资源描述
操作系统课程设计proc文件系统 proc proc文件系统是Linux中的特殊文件系统 提供给用户一个可以了解内核内部工作过程的可读窗口 在运行时访问内核内部数据结构 改变内核设置的机制 保存系统当前工作的特殊数据 但并不存在于任何物理设备中 对其进行读写时 才根据系统中的相关信息即时生成 或映射到系统中的变量或数据结构 proc被称为 伪文件系统 其挂接目录点固定为 proc manproc 进行了详细说明 proc proc的文件可以用于访问有关内核的状态 计算机的属性 正在运行的进程的状态等信息 大部分 proc中的文件和目录提供系统物理环境最新的信息 尽管 proc中的文件是虚拟的 但它们仍可以使用任何文件编辑器或像 more less 或 cat 这样的程序来查看 当编辑程序试图打开一个虚拟文件时 这个文件就通过内核中的信息被凭空地 onthefly 创建了 得到有用的系统 内核信息 proc文件系统可以被用于收集有用的关于系统和运行中的内核的信息 下面是一些重要的文件 proc cpuinfo CPU的信息 型号 家族 缓存大小等 proc meminfo 物理内存 交换空间等的信息 proc mounts 已加载的文件系统的列表 proc devices 可用设备的列表 proc filesystems 被支持的文件系统 proc modules 已加载的模块 proc version 内核版本 proc cmdline 系统启动时输入的内核命令行参数proc中的文件远不止上面列出的这么多 想要进一步了解 可以对 proc的每一个文件都 more 一下 一个系统的CPU信息 十分清楚地给出了这个系统的有用的硬件信息 有关运行中的进程的信息 proc文件系统可以用于获取运行中的进程的信息 在 proc中有一些编号的子目录 每个编号的目录对应一个进程id PID 这样 每一个运行中的进程 proc中都有一个用它的PID命名的目录 这些子目录中包含可以提供有关进程的状态和环境的重要细节信息的文件 让我们试着查找一个运行中的进程 见下页 有关运行中的进程的信息 文件 cmdline 包含启动进程时调用的命令行 cpu 仅在运行SMP内核时出现 里面是按CPU划分的进程时间 cwd 是指向进程当前工作目录的符号链接 envir 进程的环境变量 exe 指向运行的进程的可执行程序 目录 fd 包含指向进程使用的文件描述符的链接 root 指向被这个进程看作是根目录的目录 通常是 status 是进程的状态信息 包括启动进程的用户的用户ID UID 和组ID GID 父进程ID PPID 还有进程当前的状态 比如 Sleelping 和 Running 每个进程的目录都有几个符号链接 通过 proc与内核交互 上面讨论的大部分 proc的文件是只读的 而实际上 proc文件系统通过 proc中可读写的文件提供了对内核的交互机制 写这些文件可以改变内核的状态 因而要慎重改动这些文件 proc sys目录存放所有可读写的文件的目录 可以被用于改变内核行为 proc sys kernel 这个目录包含反通用内核行为的信息 proc sys kernel domainname hostname 存放着机器 网络的域名和主机名 这些文件可以用于修改这些名字 通过 proc与内核交互 这样 通过修改 proc文件系统中的文件 可以修改主机名或者文件系统的可分配文件句柄的最大数值等等 很多其他可配置的文件存在于 proc sys kernel 这里不可能列出所有这些文件 同学们可以自己去这个目录查看以得到更多细节信息 作业1 编写一个程序 用来读取和修改内核参数 任意参数即可 不涉及到内核编程 只需要使用标准C库中的函数 proc文件系统的编程接口 前面学习了proc文件系统的基本概念 本次实验将编写一个内核模块 通过加载模块 在 proc目录下增加若干个文件 用户对文件的读写都由模块进行处理 proc目录下的文件属于一种特殊的文件 必须用特定的方法创建和删除proc文件系统的编程接口比较好记 大部分函数是VFS函数名前面加上一个 proc 创建目录函数proc mkdir 创建符号链接函数proc symlink 创建设备文件函数proc mknod proc文件系统的编程接口 介绍内核函数之前 先来了解proc文件系统编程最主要的数据结构 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 使用计数 intdeleted 删除标志 kdev trdev proc文件系统的编程接口 每一个这样的数据结构代表了一个节点 也就是一个proc文件 其中很多结构成员的意义和普通文件的一样 编程中用到的成员并不多 几个常用到的成员如下 name 节点的名称 也就是该proc文件的名称mode 文件的类型和权限nlink 该文件的链接数read proc 读操作函数write proc 写操作函数owner 该文件的拥有者模块 proc文件系统的编程接口 下面介绍几个内核函数 通过这些函数 可以请求内核在proc文件系统中创建或者删除文件或目录 要注意这些函数都是内核函数 只能在核心态被调用 需要编写一个内核模块去调用它们 proc文件系统的编程接口 创建文件create proc entry structproc dir entry create proc entry constchar name mode tmode structproc dir entry parent 该函数将创建一个proc文件 文件名为name 文件类型和访问权限为mode 父目录为parent 如果想在proc文件系统的根目录下创建 则制定参数parent为NULL 和普通文件不同的是 proc文件系统允许在同一个目录下创建多个同名的文件和子目录创建的文件和目录不能用常规文件系统的rm或rmdir删除 proc文件系统的编程接口 创建只读文件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 该函数将创建一个只读的proc文件 其实它只是简单地调用create proc entry 并将返回结构的read proc域的值置为read proc data域的值置为data proc文件系统的编程接口 创建目录create mkdir structproc dir entry proc mkdir constchar name structproc dir entry parent 该函数将创建一个目录 父目录为parent proc文件系统的编程接口 删除节点 文件或者目录 remove proc entry voidremove proc entry constchar name structproc dir entry parent 该函数将删除一个proc节点 按文件名删除 proc文件系统的编程接口 创建符号链接proc symlink structproc dir entry proc symlink constchar name structproc dir entry parent char dest 该函数在parent目录下创建一个名字为name的符号链接文件 链接的目标是dest proc文件系统的编程接口 创建设备文件proc mknod structproc dir entry proc mknod constchar name mode tmode structproc dir entry parent kdev t rdev 该函数在parent目录下创建一个名字为name的设备文件 文件类型和权限为mode 设备号为rdev proc文件系统的编程接口 以上五个创建节点的函数在内核中的实现流程 通过proc create为结构申请空间 并进行一些初始化工作 proc register则进一步填写结构中的域 并完成注册工作删除节点的函数在内核中的实现流程 则是先调用clear bit和proc kill inodes 注销inode结构 如果引用数为0 则调用free proc entry释放结构对应的空间 否则置一个删除标志 不释放空间 proc文件系统的编程接口 以上函数只能创建一个文件 要想使创建的文件发挥作用 还有两个域的值需要填写 它们是read proc和write proc 该两个函数都是回调函数 当对文件进行读写时 系统会自动调用相应的回调函数 int read proc char page char start off toff intcount int eof void data int write proc structfile file constchar buffer unsignedlongcount void data 例子和作业2 学习下面的例子 这个例子是一个内核模块 请按照学过的编译内核模块的方法进行编译 然后看看 proc目录有什么变化 根据这个例子 在 proc目录下用自己的学号创建一个目录 如 proc 13081201 然后在学号目录下创建两个文件 一个用自己的姓作为文件名 如 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 详细说明见文档
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!