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