操作系统-第三章-进程
一、进程概念
1.定义
- 操作系统执行各种程序
- 批处理系统——作业(Job:被组装成一个整体运行的一组计算步骤)
- 分时系统——用户程序或任务(Task:进程或线程)
- 进程
- 执行中的程序
- 进程的执行必须以顺序方式进行
- 一个程序在一个数据集上的一次运行
2.内存中的进程
- 进程包括
- 代码(Text)
- 当前活动
- 程序计数器(PC)——指向当前要执行的指令(地址)
- 堆栈(Stack)——存放函数参数、临时变量等临时数据
- 数据(Data)——全局变量,处理的文件
- 堆(Heap)——动态内存分配
3.进程和程序
- 进程是程序的一个实例,是程序的一次执行
- 一个程序可对应一个或多个进程
- 一个进程可对应一个或多个程序
- 程序是进程的代码部分
- 进程是活动实体,程序静止(被动)实体
- 进程在内存,程序在外存
差别和联系
- 程序是指令的有序集合,其本身没有任何运行的含义,它是一个静态的概念;进程是程序在处理机上的一次执行过程,它是一个动态概念。
- 程序的存在是永久的,而进程则是有生命期的,它因创建而产生,因调度而执行,因得不到资源而暂停,因撤销而消亡。
- 程序仅是指令的有序集合。而进程则由程序、数据和进程控制块组成。
- 在传统的操作系统中,进程是资源分配和调度运行的基本单位,而程序不是。
- 进程与程序之间不是一一对应的,即同一程序同时运行于若干不同的数据集合上,它将属于若干个不同的进程;而一个进程至少对应执行一个程序。
4.进程状态
- 新建:在创建进程
- 运行:指令在执行
- 等待:进程等待某些事件发生
- 就绪:进程等待分配处理器
- 当发生中断时,CPU处理中断,中断是代码片,此时,n个进程最多有n个进程在就绪
- 终止:进程执行完毕
5.进程控制块(PCB)
- PCB包含同进程有关的信息
- 进程状态
- 程序计数器
- CPU寄存器
- CPU调度信息
- 内存管理信息
- 计账信息
- I/O状态信息
- 组织方式
- 线性
- 链接
- 索引
6.上下文切换
- 进程的并发执行需要PCB保存和恢复现场
二、进程操作
1.进程创建
- 父进程创建一个子进程,如此轮流创建进程下去,构成一个进程树
- 系统内的每一个进程都有一个唯一进程标识符(pid),可由它作为索引访问内核中的进程的各种属性
- 进程创建是原子操作
- 不会被打断的操作
- 一旦开始就一直运行到结束,中间不会有任何上下文切换
- 必须要硬件的支持
- 由若干条机器指令组成
- 资源共享模式
- 1.父进程子进程共享所有的资源
- 2.子进程共享父进程资源的子集
- 3.父进程和子进程无资源共享
- 执行模式
- 1.父进程和子进程并发执行
- 2.父进程等待,直到子进程终止
- 地址空间模式
- 1.子进程复制父进程的数据
- 2.子进程加载另一个新程序
2.进程终止
- 进程执行最后一项并退出(exit)
- 从子进程向父进程输出数据(通过wait)
- 操作系统回收进程的资源
- 父进程可中止子进程的执行(abort)
- 子进程超量分配资源
- 赋予子进程的任务不再需要
- 如果父进程结束
- 若父进程终止,一些系统不允许子进程继续存在,其所有子进程终止(级联终止)
- 父进程可以等待子进程结束
- 调用wait()系统调用
- 调用wait()系统调用
三、进程间通信(IPC)
1.进程分类
- 独立进程:不会影响另一个进程的执行或被另一个进程执行影响
- 协同进程:可能影响另一个进程的执行或被另一个进程执行影响
- 进程协同的优点:
- 信息共享
- 加速运算
- 模块化
- 方便
2.进程间通信模型
- 用于进程通信的机制,同步其间的活动
- 两种基本模式:共享内存、消息传递
共享内存
- 一块内存在多个进程间共享
- 通信由应用程序自己控制
- 一般用于大数据通信
- 实现手段:
- 文件映射
- 管道
消息传递
- 消息传递在微内核中的应用
- 远程通信无法采用共享内存
- 两个操作:
- 发送send(message):固定或可变大小消息
- 接收receicve(message)
- 若P与Q要通信,需要:
- 建立通信连接
- 通过send/receive交换消息
- 通信连接的实现
- 物理的(如,共享存储,硬件总线)
- 逻辑的(如,逻辑特性)
- 直接或间接通信
- 同步或异步通信
- 自动或显式通信
- 直接通信
- send(P,message):向进程P发消息
- receive(Q,message):从进程Q收消息
- 通信连接的特性:
- 连接自动建立
- 连接精确地与一对通信进程相关
- 在每一对通信进程间存在一个连接
- 连接可单向,但通常双向
- 间接通信
- 消息导向至信箱并从信箱接收
- 每一个信箱有一个唯一地ID
- 仅当共享一个信箱时进程才能通信
- 通信连接的特性
- 仅当进程共有一个信箱时连接才能建立
- 连接可同多个进程相关
- 每一对进程可共享多个通信连接
- 连接可是单向或多向的
- 操作
- 创建新的信箱(信箱可以为进程或系统拥有)
- 通过信箱发送和接收消息
- 销毁信箱
- 消息导向至信箱并从信箱接收
- 同步
- 消息传递可阻塞或非阻塞
- 阻塞(同步):
- 阻塞send:发送进程阻塞,直到消息被接收
- 阻塞receive:接收者进程阻塞,直到有消息可用
- 非阻塞(异步):
- 非阻塞send:发送进程发消息并继续操作
- 非阻塞receive:接收者收到一个有效消息或无效消息
- 不同组合的send()和receive都有可能
- 缓存
- 通信进程交换的消息总是驻留在临时队列中
- 队列的实现:
- 零容量:队列的最大长度为0,因此,链路中不能有任何消息处于等待
- 有限容量:队列长度为有限的n,因此,最多只能有n个消息驻留其中
- 无限容量:队列长度可以无限,因此,不管多少消息都可在其中等待
- 零容量情况称为无缓冲的消息系统,其他情况称为自动缓冲的消息系统
作者:方知有
Motto: 热爱可抵岁月漫长
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
所有评论和私信都会在第一时间处理,如有问题或建议,请多多赐教!
支持博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!