第 13 章 基于 proc 的 Linux 进程控制块 信息读取 山东科技大学操作系统教研组. 理解 proc 伪文件系统的基本概念和功能,掌握常见操作命令。 了解 Linux 进程控制块 task_strcut ,并理解其重要成员变量的含义。 理解基于 seq_file 机制的 proc 伪文件操作机制.

Slides:



Advertisements
Similar presentations
夯实教师教育 办好非师范教育 ---- 以外语专业为例 河北师范大学 李正栓. 1. 坚定不移地实施教师教育 A. 关键词:师范院校 师范院校是以培育师资为目的的教育机构,多属于高等教育 层级。 含 “ 师范大学 ” 或 “ 师范学院 ” 。另外,由师专升为本科的院校 多数更名为 “XX 学院 ”
Advertisements

中医内科 陈良金. 目的要求: 熟悉虚劳的证候特征。 了解虚劳的发病与气血阴阳及五脏的关系。 掌握虚劳和肺痨及一般虚证的区别与联系。 掌握虚劳的治疗要点。 熟悉虚劳各个证型的辨证论治。 了解虚劳的预后及调摄护理。
写作中的几点小技巧 金乡县羊山中学 张秀玲. 一、写外貌不用 “ 有 ” 作文如何来写外貌?同学们的作文里总会出现类 似这样的句子: “ XX 可漂亮了,她有一头卷卷的黄头 发,有一双乌黑的葡萄般的大眼睛,有高高的鼻子, 还有一张樱桃小嘴。 ” 如果试着去掉文中的 “ 有 ” ,把文字重新修改一遍,
十大写作技巧. 一、写外貌不用 “ 有 ” 作文如何写外貌?孩子的作文里总会看到类似这样的名 子: “XX 可漂亮了,她有一头卷卷的黄头发,有一双乌黑的 葡萄般的大眼睛,有一个高高的鼻子,还有一张樱桃小嘴。 ” 如果你试着让他们去掉文中的 “ 有 ” ,把文字重新串联一遍, 会发现作文顺了很多。 写上段文字的同学经蒋老师指导后修改如下:
© 2001 孟静制作 版权所有 第二章 CPU 管理和进程、线程管理 2.1 CPU 管理概述 2.2 进程管理 2.3 进程模型实例分析 :UNIX 早期版本的 CPU 管理 子系统 ( 进程模型 ) 2.4 处理机管理实例分析 (2):linux CPU 管理(进程 模型) 2.5 线程模型.
进 程. “ 程序 ” 和 “ 进程 ” 进程是 OS 对 CPU 执行的程序的运行过程的一种抽象。进程有自 己的生命周期,它由于任务的启动而创建,随着任务的完成(或 终止)而消亡,它所占用的资源也随着进程的终止而释放。 Linux 内核中通常把进程称为任务,每个进程主要通过一个称为进程描 述符(
招商谈判技巧 芝麻官营销. 技巧原则 孙子兵法云: “ 兵无常势,水无常形,能 因敌之变化而取胜者,谓之神。 ” “ 内功心法 ” 只有在真正实践中才能体会、 掌握。 谈判有没有具体的套路?有没有 “ 一招制 敌 ” 的擒拿手?
“ 十二五 ” 广东省科技计划项目 经费监管培训 广东省科技厅 一、专项经费管理法规 一、专项经费管理法规 二、经费监督检查 二、经费监督检查 三、项目预算调整管理 三、项目预算调整管理 四、课题经费预算执行管理 四、课题经费预算执行管理 五、项目(课题)财务验收 五、项目(课题)财务验收 2.
1 語音下單代表號 請輸入分公司代碼 2 位結束請按#字鍵 統一證券您好 ﹗ 請輸入分公司代碼結束請按#字鍵,如不知分公司代碼請按*號。 請輸入您的帳號後 7 位 結束請按#字鍵 請在聽到干擾音時輸入您的密碼結束請按#字鍵 主選單一覽表 委託下單請按 1 ; 取消下單請按 2 成交回報請按.
人權教育融入教學與 法治教育 彭巧綾 蔡永棠 閱讀理解 六頂思考帽 以概念圖整理閱讀理解 指導學生運用關鍵詞,繪製概 念圖,並分享修正。
义务教育课程标准实验教材 四年级下册 语文园地六 词语盘点 习作 口语交际 我的发现 日积月累 展示台.
被 江 泽 民 残 酷 迫 害 致 死 的 法 轮 功 学 员 李竟春,女,1954年3月16日出生,江西省九江市人。于2000年12月18日到北京证实大法,关押在北京市门头沟看守所遭受非人的迫害。在狱中李竟春绝食抗争被管教骗喝一瓶“可疑的豆浆”后一直咳嗽不断,发烧呕吐,吐出白色有强烈异味液体,于2000年1月4日死亡。
目录 如何职位分析调查表 职位分析的目的与意义 职位调查表内容与要点说明 职位分析注意事项 职位分析调查工作计划.
1 修辞手法 2 表现手法 3 表达方式 4 结构技巧 表达技巧.
个人简历 制作 天津民族中专 刘冬.
第八编 清代文学 清代文学绪论 第一章 清代诗词文 第二章 《长生殿》与《桃花扇》 第三章 《聊斋志异》 第四章 《儒林外史》
2015年衢州开化 事业单位备考讲座 浙江研究院 刘洁.
事业单位法人年度报告制度改革 业 务 培 训.
視力不良學(幼)童 篩檢與矯治常見問題 長庚醫院 兒童眼科 楊孟玲 醫師.
问卷调查法.
小一中文科 家長工作坊
二次函数图象特点的应用 结题报告 K-11 班研究性学习小组 李浚滨制作.
第三章 企业主要经济业务核算 学习目的和要求:通过对工业企业的主要经济业务的了解,要求学生掌握、巩固帐户与借贷记帐法的相关知识及其运用,并进一步了解和熟悉会计核算方法。 本章重点与难点问题是:企业在各阶段的业务核算 内容提要:本章首先介绍企业在各不同阶段(企业创立阶段、企业供应阶段、企业生产阶段、企业销售阶段等)的业务内容;然后介绍了各阶段业务核算所需设置的帐户及其帐户的功能与结构;最后举例说明各阶段业务的核算。
校本培训 常州市新北区新桥实验小学 金文英 团体活动助人成长 校本培训 常州市新北区新桥实验小学 金文英
2014年造价员资格考试 建设工程造价管理基础知识 徐建元.
教師權益─ 退撫制度變革修法 吳忠泰 退撫制度變革修法電子檔可在全教總網站下載分享
【 准 备 上 课 啦 】 心 境 —— 快 乐 源 泉 学习 — 悦于心 聚于魂 化于行.
第七章 无形资产.
《幼儿园模拟教学》(第一章 第二章) 呼伦贝尔学院 教育科学学院 学前教育教研室.
公文及公文处理 学校办公室 姚利民.
广州事业单位面试专项练习 主讲:蔡厚佳 微博:腰果公考菜菜爱做梦 2016年04月29日-05月05日.
(某同学作文选段) 这就是我 大家好,我的名字叫XX,我家在XX,但是小学的时候我在XX学校读书,我现在读书在永固中学,我现在说学校变化,但是我回校读书坐单车,还有学校很大,初中学习练几课,老师有很多,学校学生有很多,但是现在很重要学习,但是我家有很多工叫做,没有那么多时间学习。
青岛市农村实用人才高等学历教育 2013年秋季入学测试考前练兵 语文----写作部分辅导
高等学校会计制度的学习体会 (第二次征求意见稿).
房地产开发项目经营情况 (X204-1表).
幼儿园现代管理的思考与实践.
Memory Pool ACM Yanqing Peng.
第一章 C语言概述 计算机公共教学部.
香港普通話研習社科技創意小學 周順強老師.
编译原理上机实习
基于ARM和linux的开发 华中科技大学 武汉创维特 2017/3/20.
Chapter 6 時序.
Linux Further.
嵌入式操作系统 陈香兰 Fall 2009.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
第七章. 文件系统 (lab5).
第7章 Linux环境编程.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
程序设计期末复习 黎金宁
第4章 字串及資料的輸入/輸出格式.
Linux File System 文件系统 VFS VFS的作用 基于VFS的文件访问 VFS重要数据结构 文件系统的注册与安装
fp=fopen("CD2.dat","wb"); fwrite(&min,8,1,fp); fclose(fp);
如何生成设备节点 广州创龙电子科技有限公司
Linux的文件系统 课程目标: 操作系统的运行级别 文件系统架构 设备管理.
Linux 文件操作——系统调用和标准 IO 库
第五章 中断与异常 中断的基本知识 中断描述符表的初始化 中断处理 中断的下半部处理机制 中断的应用-时钟中断.
第2章 进程管理 2.1 进程概念 2.2 线程 2.3 进程管理 2.4 进程间通信 2.5 经典进程同步问题 2.6 管程
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
Linux Debugging ls,ps,top,etc. printk() /proc i386提供的调试机制(断点,信号,单步执行)
Linux内核源代码导读 中国科学技术大学计算机系 陈香兰(0551- )
面向非连接的 SOCKET编程 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
Chapter 7 掌控記憶體.
#include <iostream.h>
实验二:添加Linux系统调用及熟悉常见系统调用
2017 Operating Systems 作業系統實習 助教:陳主恩、林欣穎 實驗室:720A Lab4.
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
獨孤派作業系統 main memory 中正大學 作業系統實驗室 指導教授:羅習五.
C语言程序设计 第13章 文件操作.
Presentation transcript:

第 13 章 基于 proc 的 Linux 进程控制块 信息读取 山东科技大学操作系统教研组

理解 proc 伪文件系统的基本概念和功能,掌握常见操作命令。 了解 Linux 进程控制块 task_strcut ,并理解其重要成员变量的含义。 理解基于 seq_file 机制的 proc 伪文件操作机制 熟练掌握生成 proc 伪文件的 Linux 内核模块代码实现方法。  通过实验认识 Linux 的进程概念,并加深对操作系统进程概念的理解。  掌握 Linux 内核为用户提供服务的方式、方法,尤其是 proc 机制。  Proc 是 Linux 为用户提供内核和计算机运行状态的主要接口,是从事 Linux 运 维、管理工作所必须掌握的基本技能。

实验 1 :测试 proc 文件系统功能 (教材 P.168 ) 实验 2 :创建显示系统进程信息的 proc 模块 (教材 P.179 ) 拓展实验:显示 Linux 进程控制块中更多的信息 (教材 P.182 )

实验目的 理解 proc 伪文件系统的基本概念和功能,掌握常见操 作命令。 通过实验深入理解操作系统为用户提供服务的方式、 方法

实验内容 请运行以下命令并仔细观察实验结果,理解 proc 文件系统的功能、作用 $ 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 提示:请结合 Linux 源代码文档中的 proc.txt 或网上资料了解 proc 伪文件的机制和功能

原理 / 背景 Proc 是什么 首先, proc 是 Linux 系统根目录下名为 “proc” 的文件目录。 其次,它是一种伪文件系统。它只存在内存当中,不像普通文件 一样占用外存空间。它以文件系统的方式提供应用程序访问系统 内核数据的操作接口。 proc 伪文件系统动态地从系统内核读出所 需信息并提交给应用程序 Proc 文件系统提供哪些信息? 与进程相关的目录 通用系统信息 网络信息 系统控制信息

原理 / 背景 Proc 可以作为动态添加的 LKM 模块的输出接口。 应用程序可以通过读取 proc 中相应的模块信息来获取动态添加的 LKM 模块输出。 后续各章我们将采用 proc 作为 LKM 与应用程序的主要接口。 提醒: cat 是读取 proc 的一个命令;读者可以在编写程序,在程序中 通过函数调用直接读取 proc 信息。相关实现,可以参考 cat 程序。

实验目的 了解 Linux 进程控制块 task_strcut ,并理解其重要成员变量的 含义。 理解基于 seq_file 机制的 proc 伪文件操作机制 熟练掌握生成 proc 伪文件的 Linux 内核模块代码实现方法。  认识 Linux 的进程概念,深入理解操作系统的进程概念,

实验内容 1. 从教材提供的电子资源中找到或者按教材提示自己编写 Linux 内核模块 tasklist.c 及其对应的 Makefile 文件 2. 该模块创建 /proc/tasklist 文件,并且提取系统中所有进程 的 pid 、 state 和名称进行显示。 3. 编译、安装、删除该模块,查看该模块的安装位置、运 行情况

实验要求 1. 通过阅读、执行 tasklist.c 、对应的 Makefile 文件及其执行结果, 理解 Linux 中进程控制块的管理方式、以及进程控制块的基本 组成。 2. 通过阅读、执行 tasklist.c 、对应的 Makefile 文件及其执行结果, 深入理解 Linux 操作系统为用户提供服务的 proc 机制的工作原 理和方法,尤其是 proc 的创建方式和基于 seq_file 的操作机制。 3. 结合操作系统知识,通过实验深入理解计算机程序在内核空间 的运行方式。

原理 / 背景 Linux 进程控制块 LKM 模块操作 Proc 文件的方式

 Linux 的进程控制块 PCB 使用 task_struct 结构体进行 描述  进程概念  进程控制块概念  进程控制块中保存的信息是进程在执行过程的快照, 包含右图中用户进程在用户空间中的分布信息,但 不仅仅局限于这些信息。  进程控制块位于内核空间,只能被特权级别的进程, 即操作系统进程操作,而不能被用户程序操作  换句话说,用户程序不能直接获取进程信息,必须 通过 OS 。 图 13.4 一个用户进程的虚 拟地址空间分布示意图

* task_struct 结构体定义在 头文件中 struct task_struct { /*Linux 内核 */ volatile longstate; // 进程状态 void*stack; // 进程内核栈 unsigned longflags; // 进程标记 struct mm_struct*mm; // 进程内存结构体 struct thread_struct*thread; // 所包含的线程的结构体 pid_tpid; // 进程唯一标识符 pid_t tgid; // 线程组对应的进程标识符 char comm[TASK_COMM_LEN]; // 进程名称 /* 其他省略 */ };

* Linux 中的进程状态和转换 #define TASK_RUNNING0 // 表示运行或可运行 #define TASK_INTERRUPTIBLE1 // 进程正在睡眠或者说阻塞, 但可被唤醒 #define TASK_UNINTERRUPTIBLE2 // 进程正在睡眠或者说阻塞, 而且不能被唤醒 #define __TASK_STOPPED4 // 进程停止执行 #define __TASK_TRACED8 // 进程可以被追踪,比如处于调试状态 /* in tsk->exit_state */ #define EXIT_ZOMBIE16 #define EXIT_DEAD32

LKM 模块操作 Proc 文件的方式  Proc 文件只能由 Linux 内核代码创建。  Porc 文件有一套规定的操作函数和方法。  Linux 内核 3.x.x 版本中 proc 文件的访问方式与 2.x.x 版本相比发生 了重大改变。网络上很多 proc 的编程说明都只适用于老版本内核  Proc 文件包括两个级别的操作: 文件级别的操作:创建 proc 时指定操作函数结构体 记录级别的操作:打开 proc 文件时指定操作函数结构体

Proc 文件创建函数 一个创建示例 static inline struct proc_dir_entry *proc_create(const char *name, umode_t mode, struct proc_dir_entry *parent,conststruct file_operations *proc_fops) char modname[] = “tasklist” ; // 声明要创建的 proc 文件的名称,此处为 “/proc/tasklist” struct proc_dir_entry* my_proc_entry; my_proc_entry = proc_create(modname, 0, NULL, &my_proc); static const struct file_operations my_proc = {.owner = THIS_MODULE,.open = my_open,.read = seq_read,.llseek = seq_lseek,.release = seq_release }; // 先定义 proc 文件操作函数结构体,并实现自己定义的函数,如 my_open

* Proc 记录采用 seq_file 机制(序列文件机制)进行操作 * seq_file 机制的相关函数和定义说明包含在 头文件中 * 一个示例 首先定义记录操作函数结构体。 根据程序功能,实现所定义的函数 如 my_seq_start 等。 其次在定义的 proc 文件操作函数 my_proc 中的 open 函数中指明使用该结 构体 static struct seq_operations my_seq_fops = {.start = my_seq_start,.next = my_seq_next,.stop = my_seq_stop,.show = my_seq_show }; static int my_open(struct inode *inode, struct file *file) { return seq_open(file, &my_seq_fops); }

本实验代码为电子资源中 “/ 源代码 /ch13/vexp1” 目录下的 tasklist.c 和对应的 Makefile 文件。 编译: make 添加 LKM 模块 $ sudo insmod tasklist.ko 查看 LKM 运行结果: $ cat /proc/tasklist 删除 LKM 模块 $ sudo rmmod tasklist 请读者按着本节内容提示完成 tasklist 内核模块的添加和撤销实验, 并结合实验结果理解 tasklist 源代码以及本节内容。掌握 proc 的操作 方法以及进程控制块的读取方法。

– 请对照代码和实验结果,理解整个 tasklist 模块的运行流程

Linux 进程调度策略 Linux 进程优先级 /* * Scheduling policies */ #define SCHED_NORMAL0 #define SCHED_FIFO1 #define SCHED_RR2 #define SCHED_BATCH3 /* SCHED_ISO: reserved but not implemented yet */ #define SCHED_IDLE5 在 task_struct 结构体中有多个与进程优先级相关的成员变量,定义如下: int prio, static_prio, normal_prio; unsigned int rt_priority;

实验 3 :显示 Linux 进程控制块中更多的信息实验目 标为实现一个内核模块,该模块创建 /proc/tasklist 文 件,并且提取系统中所有进程的 pid 、 state 、名称、 优先级、运行时间、上下文切换等信息进行显示。本 实验代码为电子资源中 “/ 源代码 /ch13/vexp2” 目录下 的 tasklist.c 和对应的 Makefile 文件。

上述实验都是编写一个 LKM 模块,创建一个用于读取 进程控制快信息的 proc 文件 tasklist 。应用程序,如 cat ,访问 /proc/tasklist 从而获得系统中正在运行的进 程信息。 除了读取信息外,应用程序还需要向内核传递消息, 即写入。 从应用程序向内核写入信息,必须经过严格审查,否 则容易引起系统的崩溃。 Linux 不允许应用程序直接向系统写入数据。应用程 序必须向一个 LKM 模块传递消息,然后由 LKM 模块负 责将消息写入。

 LKM 调用两个系统函数实现用户空间和内核空间之间的数据传 递 copy_from_user 完成从用户空间拷贝数据到内核空间 copy_to_user 完成从内核空间拷贝数据到用户空间。  内核中的内存空间管理更为严格,必须进行内核内存的分配和 回收: kmalloc(size_t size, int flags) // 请注意该函数与应用程序使 用的 malloc 函数的差异 kfree

* strace 命令可以用于追踪系统调用的过程和返回结果。在使用 cat 读取 proc 文件时可以使用 strace 命令查看从应用程序到内核模块的系统调用。 特别是在完成课后练习 1 的情况下,请读者执行 strace 命令,加深对操 作系统系统调用概念和流程的理解 。 * 课后练习 1,2,3