进程控制块
linux的进程是由进程控制块PCB来描述,它包含了进程的描述信息、控制信息以及资源信息,他是进程的一个静态描述。
在 Linux 中,进程控制块中的每一项都是一个 task_struct 结构,它是在 include/linux/sched.h 中定义的。
找一下自己系统中的 task_struct 结构体:
grep struct\ task_struct\ { /usr/src/linux-headers-4.4.0-21/include/* -rn
-n 代表显示行号
分析
task_struct
结构体
内核中的结构体很长
1380 struct task_struct { //
描述我们的进程信息的对象
1381 volatile long state; /* 进程状态
-1 unrunnable, 0 runnable, >0 stopped */
1382 void *stack;
1383 atomic_t usage;
1384 unsigned int flags; /* per process flags, defined below */
1385 unsigned int ptrace;
1444 struct mm_struct *mm, *active_mm; /*虚拟地址
每个进程都有
4GB
独立的空间
*/
1452 int exit_state; /*退出状态
*/
1453 int exit_code, exit_signal;
1483 pid_t pid; /*进程号
*/
1496 struct task_struct __rcu *parent; /* 父进程
recipient of SIGCHLD, wait4() reports */
1497 /*
1498 * children/sibling forms the list of my natural children
1499 */
1500 struct list_head children; /* 子进程
list of my children */
主要的进程标识
进程号
(Process Identity Number
,PID) ,PID 唯一地标识一个进程,可以通过 pid_t getpid(void) 获取;
父进程号
(Parent Process ID,PPID),可以通过 pit_t getppid(void) 获取;
进程类型
交互进程: 该类进程是由 shell
控制和运行的。交互进程既可以在前台运行,也可以在后台运行。
例如:shell命令;
批处理进程:该类进程不属于某个终端,它被提交到一个队列中以便顺序执行。
例如:启动时shell脚本;
守护进程:该类进程在后台运行。它一般在
Linux
启动时开始执行,系统关闭时才结束。
例如:samba、http服务等;
进程查看工具
ps -axj 或 pstree -p
a
不仅列出当前用户的进程,也列出所有其他用户的进程
x
表示不仅列出有控制终端的进程,也列出所有无控制终端的进程。
j
表示列出与作业控制相关的信息
TPGID
一栏写着
-1
的都是没有控制终端的进程,也就是守护进程
进程相关概念
1、进程互斥
进程互斥是指当有若干进程都要使用某一共享资源时,任何时候最多允许一个进程使用,其他要使用该资源的进程必须等待,直到进程使用者释放了该资源。
2、进程同步
一组并发进程按一定的顺序执行的过程称为进程间的同步。具有同步关系的一组并发进程称为合作进程,合作进程间互相发送的信号称为消息或事件。
3、临界资源
操作系统中将以此只允许一个进程访问的资源称为临界资源。
4、临界区
进程中访问临界资源的那段程序代码称为临界区。为实现对临界资源的互斥访问,应保证诸进程互斥地进入各自的临界区。
5、进程调度
按一定算法,从一组待运行的进程中选出一个来占有 CPU
运行。内核在编译时已经确定了此系统的调度方式。常见的调度方式如下:
1、抢占式调度
2、非抢占式调度
3、先来先服务调度算法
4、短进程优先调度算法
5、高优先级优先调度算法
6、进程模式
进程的执行模式分为用户模式和内核模式
7、 进程管理
启动进程:
1、手工启动
2、由用户输入命令直接启动进程
3、前台运行和后台运行
4、调度启动
5、系统根据用户事先的设定自行启动进程
6、at 在指定时刻执行相关进程,
7、cron 周期性执行相关进程