4.1-进程概念
基本概念
程序运行在并发环境中的问题
- 运行过程不确定
- 结果不可再现(程序运行被干扰)
- 解决方案:对运行进程加相互制约
新的概念:进程
- 描述和管理程序的“运行过程”--进程
进程定义
- 进程是程序在某个数据集合上的一次运动活动
- 数据集合:软/硬件环境,多个进程共存/共享的环境
进程的特征
- 动态性
- 进程是程序的一次执行过程,动态产生/消亡
- 并发性
- 进程同其他进程一起向前推进
- 异步性
- 进程按各自速度向前推进
- 独立性
- 进程是系统分配资源和调度CPU的单位
进程与程序的区别
动态与静态
- 进程是动态的:程序的一次执行过程
- 程序是静态的:一组指令的有序集合
暂存与长存
- 进程是暂存的:在内存驻留
- 程序是长存的:在介质上长期保存(硬盘)
程序和进程的对应
- 一个程序可能有多个进程
进程的类型
按使用资源的权限
- 系统进程:指系统内核相关的进程
- 用户进程:运行于用户态的进程
按对CPU的依赖性
- 偏CPU进程:计算型进程(计算密集型)
- 偏I/O进程:侧重于I/O的进程(IO密集型)
进程状态
运行状态
- 进程已经占有CPU,在CPU上运行
就绪状态
- 具备运行条件但无CPU可用,暂时不能运行
阻塞状态
- 因为等待某种服务完成或信号不能运行的状态
- eg:系统调用,I/O操作,合作进程信号...
Linux进程的状态
可运行态
- 就绪:TASK_RUNNING
- 在就绪队列中等待调度
- 运行:正在运行
阻塞(等待)态
- 迁都阻塞:TASK_INTERRUPTIBLE(可中断)
- 能被其他进程信号或时钟唤醒
- 深度阻塞:TASK_UNINTERRUPTIBLE(不可中断)
- 不能被其他进程通过信号和时钟唤醒
僵死态:TASK_ZOMBIE
- 进程终止执行,释放大部分资源
挂起态:TASK_STOPPED
- 进程被挂起
进程控制块
进程控制块(Process Control Block,PCB)
- 描述进程状态、资源、和与相关进程关系的数据结构。
- PCB是进程的标志
- 创建进程时创建PCB;进程撤销时PCB同时撤销。
进程 = 程序 + PCB
- 程序(代码,数据)
- 进程(代码,数据,PCB)
- eg:
- 进程1:(代码,数据,PCB1)
- 进程2:(代码,数据,PCB2)
- 进程3:(代码,数据,PCB3)
PCB中的基本成员
- name(ID):进程名称(标识符)
- status:状态
- next:指向下一个PCB的指针
- start_addr:程序地址
- priority:优先级
- cpu_status:现场保留区(堆栈)
- comm_info:进程通信
- process_family:家族
- own_resource:资源
Linux的进程控制块PCB:tack_struct
- 进程状态
- 调度信息
- 标识符
- 内部进程通信信息
- 链接信息
- 时间和计时器
- 文件系统
- 虚拟内存信息
- 处理器信息
Linux进程的标识
- PID
- PPID:父进程ID
- PGID:进程组ID
Linux进程的用户标识
- UID:用户ID
- GID:用户组ID
进程的上下文
- Context,进程运行环境,CPU环境
进程切换过程
- 换入进程的上下文进入CPU(从栈上来,出栈)
- 换出进程的上下文离开CPU(到栈上去,入栈)