一.概念
提供可以动态操作Linux内核信息的接口,实现内核空间与用户空间进行数据交换的途径。
二.观察文件内容
//crtl+alt+t 快速打开Linux终端
//输入一下内容
cd /proc //进入proc文件夹
ls //观察proc文件夹下的内容
cd 2414 //任意打开一个带数字的文件夹观察
cd self //打开self文件夹观察
观察发现,两者的文件夹下的内容是相同的。
这些文件夹作用是什么呢?
以proc/self/maps文件夹为例子进行介绍,使用cat进行查看
cat /proc/self/maps
第一列代表本部分映像文件所对应的虚拟地址范围 。
第二列代表本部分映像文件所能进行的操作,x-执行,p-私有,r-读取,w-写。
第三列代表偏移量。本部分映像文件在进程空间的偏移量。
第四列代表映像设备的主设备号和次设备号。
第五列代表映像文件的结点号。
第六列代表映像文件的绝对路径。
三.proc伪文件系统介绍
(1)只存在于内存当中
(2)动态改变的
(3)数字命名的文件夹是进程的PID,存储着各个进程的信息。
(4)还有一些文件夹是包括通用系统信息,网络信息,系统控制信息
四.PCB--进程控制块
包含每一个进程生存过程中的全部重要信息,管理进程资源使用
Linux中的进程控制块--task_struct,包含的信息如下,可以在sched.h的头文件中找到。
进程的状态在linux操作系统中分为6种,宏定义如下
#define TASK_RUNNING 0
#define TASK_INTERRUPTIBLE 1
#define TASK_UNINTERRUPTIBLE 2
#define __TASK_STOPPED 4
#define __TASK_TRACED 8
/* in tsk->exit_state */
#define EXIT_DEAD 16
#define EXIT_ZOMBIE 32
另外,每个进程还有两个独立的状态标志
task->exit //关于进程退出状态的
task->state//关于进程运行状态的
可以使用如下的函数获取进程的状态,返回值为task_struct中的state,共五种状态
get_task_state()
课本上进程的状态有五种,分别是就绪、运行、阻塞、睡眠、退出。
TASK_RUNNING对应--就绪、运行(ready)(running)
TASK_INTERRUPTTIBLE、TASK_UNINTERRUPTTIBLE对应着阻塞(waiting)
_TASK_INTERRUPTTIBE对应着睡眠(sleep)
_TASK_STOPPED对应着退出(exit)