进程相关概念
程序和进程
- 程序:是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu/内存/打开的文件/设备/锁……)
- 进程:是一个抽象的概念,与操作系统原理联系紧密。进程是活跃的程序,占用系统资源。在内存中执行。(程序运行起来,产生一个进程)
- 打个比方 程序 -> 剧本(纸) 进程 -> 戏(舞台、演员、灯光、道具)
同一个剧本可以在多个舞台同时上演。同样,同一个程序也可以加载不同的进程(彼此之间互不影响)
如:同时开两个终端,各自都有一个bash但彼此ID不同
并发
- 并发:在os中,一个时间段中有多个进程都处于已启动运行到运行完毕之间的状态。但,任一个时刻点上仍只有一个进程在运行
- 例如,当下,我们使用计算机可以边听音乐边聊天边上网。若笼统的将它们均看作一个进程的话,为什么可以同时运行呢,因为并发
CPU
MMU (内存管理单元)(CPU内部)
进程控制块 PCB
- 每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是 task_struct 结构体
- /usr/src/linux-headers-4.15.0-45/include/linux/sched.h 可以查看 struct task_struct 结构体定义。其内部成员很多,我们重点掌握以下部分即可:
- 进程id。系统中每个进程有唯一的id,在c语言中用 pid_t 类型表示,其实就是一个非负整数
- 进程的状态,有就绪、运行、挂起、停止等状态
- 进程切换时需要保存和恢复一些CPU寄存器值
- 描述虚拟地址空间的信息
- 描述控制终端的信息
- 当前工作目录
- umask掩码
- 文件描述符表,包含很多指向file结构体的指针
- 和信号相关的信息
- 用户id 和 组id
- 会话(Session)和进程组
- 进程可以使用的资源上限(Resource Limit)(比如栈大小:ulimit -a)
进程状态
进程的基本状态有5种.分别为初始态、就绪态、运行态、挂起态和终止态。其中初始态为进程准备阶段,常与就绪态结合来看