进程是资源封装管理的单位,资源指占用的内存,文件系统,信号及处理方法。线程是调度的单位,进程的区别是资源,资源是隔离的,进程把资源描述清楚就可以了
Process Control Block(PCB) 进程控制块, 在不同操作系统中用于描述进程,在 Linux 的 PCB 就是用 task_struct 来描述。描述来 task_struct 的部分成员
mm 内存资源: 进程的内存
fs 文件系统资源: 根路径和当前路径指针
files 文件系统资源: 进程打开的文件,文件描述符数组
signal 信号资源: 不同进程可以针对同一信号挂不同的处理方法
pid 属性资源: 描述进程的属性, 进程的 PID 是有限的
当前路经是在 fs_struct 中的
struct fs_struct {
int users;
spinlock_t lock;
seqcount_t seq;
int umask;
int in_exec;
struct path root, pwd;
};files 进程打开的文件描述符 fd_array
/*
* Open file table structure
*/struct files_struct {
/*
* read mostly part
*/
atomic_t count;
struct fdtable __rcu *fdt;
struct fdtable fdtab;
/*
* written part on a separate cache line in SMP
*/
spinlock_t file_lock ____cacheline_aligned_in_smp;
int next_fd;
unsignedlong close_on_exec_init[1];
unsignedlong open_fds_init[1];
struct file __rcu * fd_array[NR_OPEN_DEFAULT];
};
Linux 进程的生命周期状态图
进程运行时的 3 个基本状态:
操作系统包括实时系统对应进程一般都有 3 个状态,进程在有 CPU 时对应运行态,无 CPU 时对应就绪态和睡眠态。就绪态指所有资源都准备好,只要有 CPU 就可以运行了。睡眠指有资源还未准备好,比如读串口数据时,数据还未发送。此时有 CPU 也无法运行,需要等资源准备好后变成就绪态,然后得到 CPU 后才能变成运行态,其转换关系