进程概念:
OS :程序的⼀一个执⾏行实例。
正在执⾏行的程序。
能分配处理器并由处理器执⾏行的实体。 内核观点:担当分配系统资源(CPU时间,内存)的实体。 进程的两个基本元素是程序代码(可能被执⾏行相同程序的其他进程共享)和代码相关联的 数据集。进程是⼀一种动态描述,但是并不代表所有的进程都在运⾏行。(进程在内存中因策 略或调度需求,会处于各种状态)
进程描述
广义上,所有的进程信息被放在⼀一个叫做进程控制块的数据结构中,可以理解为进程属性 的集合。
进程控制块
每个进程在内核中都有⼀一个进程控制块(PCB)来维护进程相关的信息,Linux内核的
进程控制块是task_struct结构体。现在我们全⾯面了解⼀一下其中都有哪些信息。
在Linux中,这个结构叫做task_struct。
task_struct是Linux内核的⼀一种数据结构,它会被装载到RAM⾥里并且包含着进程的信息。 每个进程都把它的信息放在task_struct 这个数据结构⾥里,task_struct 包含了这些内容:
标⽰示符 : 描述本进程的唯⼀一标⽰示符,⽤用来区别其他进程。
状态 :任务状态,退出代码,退出信号等。
优先级 :相对于其他进程的优先级。
程序计数器:程序中即将被执⾏行的下⼀一条指令的地址。
内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
上下⽂文数据:进程执⾏行时处理器的寄存器中的数据。
I/O状态信息:包括显⽰示的I/O请求,分配给进程的I/O设备和被进程使⽤用的⽂文件列表。
记账信息:可能包括处理器时间总和,使⽤用的时钟数总和,时间限制,记账号等。
(ps:关于task_struct谈到进程管理时再详说)
保存进程信息的数据结构叫做 task_struct,并且可以在 include/linux/sched.h ⾥里找到它。
所有运⾏行在系统⾥里的进程都以 task_struct 链表的形式存在内核⾥里。
进程的信息可以通过 /proc 系统⽂文件夹查看。要获取PID为400的进程信息,你需要查看 / proc/400 这个⽂文件夹。大多数进程信息同样可以使⽤用top和ps这些⽤用户级⼯工具来获取。