主要内容:
1、进程的概念;
2、进程在内存中的存储;
3、task_struct结构 ;
进程
从操作系统的层面,简单理解起来的话 ,有这么几种的说法:
1、一个运行的程序 ;
2、程序执行的一个实例 ;
3、能分配处理器并由处理器执行的实体。
但是从 计算机内核层面理解的话:
进程 表示的是 担当分配系统资源(CPU时间,内存)的实体;
进程的两个基本元素是程序代码(可能被执行相同程序的其他进程共享)和代码相关联的数据集。
进程是一种动态描述,但是并不代表所有的进程都在运行。(进程在内存中因策略或调度需求,会处于各种状态)
所以,我们需要在内存中表示这么一个进程。。
广义上,所有的进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
进程控制块
进程控制块,简称是 PCB(英文的额缩写)。
每一个的进程在内存中 都有这么一个 进程控制块(PCB) 用来维护进程在 内存中的相关信息。
简单理解一下,就是
每当我们打开一个进程的话 ,操作系统会为我们 创建一个 这么一个进程控制块。用来表示当前的创建的进程 。。。
而在Linux内核中,进程控制块的表现形式就是 task_struct结构体,在这个结构体内部存储一个进程的相关信息
task_struct
task_struct是Linux内核的一种数据结构,它会被装载到RAM里并且包含着进程的信息。
每个进程都把它的信息放在 task_struct 这个数据结构里
task_struct 包含了这些内容:
标示符
: 描述本进程的唯一标示符,用来区别其他进程。
状态 :任务状态,退出代码,退出信号等。
优先级 :相对于其他进程的优先级。
程序计数器 :程序中即将被执行的下一条指令的地址。
内存指针 :包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
上下文数据 :进程执行时处理器的寄存器中的数据。
I/O状态信息 :包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
记账信息 :可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等
保存进程信息的数据结构叫做 task_struct,并且可以在 include/linux/sched.h 里找到它。
所有运行在系统里的进程都以 task_struct 链表的形式存在内核里。