程序是静态的,就是存在磁盘里的可执行文件,里面封装着一系列的指令集合。
进程是动态的,是程序的一次执行过程。同一个程序执行多次就会创建多个进程。
注意:一个应用程序启动一次可能创建多个进程。即一个程序可以包含多个进程。
每创建一个新的进程,操作系统就会为该进程分配一个唯一的、不重复的进程ID(Process ID,PID),同时还要记录基本的进程描述信息,如进程所属用户UID,实现操作系统区分各个进程。
操作系统还要为这个进程分配相应硬件资源,如CPU/内存/磁盘/网络,这样一来操作系统就可以通过进程实现对资源的管理。
这些信息都被保存到一个数据结构中,进程控制块(Process Control Block)。
下图是Linux进程截图:PCB是进程存在的唯一标识,当进程被创建时,操作系统为其创建PCB,当进程结束时,会回收其PCB。
Linux中PCB对应的源码struct task_struct,PCB包含信息:
进程id、用户id和组id
程序计数器
进程的状态(有就绪、运行、阻塞)
进程切换时需要保存和恢复的CPU寄存器的值
描述虚拟地址空间的信息
描述控制终端的信息
当前工作目录
文件描述符表,包含很多指向file结构体的指针
进程可以使用的资源上限(ulimit –a命令可以查看)
输入输出状态:配置进程使用I/O设备,如磁盘。
进程是动态的,某个时间点的进程叫进程实体,进程实体包括PCB、程序段、数据段。
相关文章: