为了提高系统的吞吐量和资源利用率,引入了进程的概念,独立运行的单位指进程。进程是一个十分重要的概念
前驱图和程序执行早期的操作系统是顺序执行的,仅当前一个程序执行完,才执行下一个操作。
前驱图
I代表输入,C代表计算,P代表输出,输入计算再输出,一直重复。
并发执行的前驱图
这样,I2与C1就可以同时执行。
由于引进了并发执行,程序的并发执行具有以下特征:
即间断性,失去封闭性,不可再现性。
进程描述 进程定义:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
进程控制块(PCB):
专门的数据结构,与进程一一对应。
即一个进程,就有一个PCB。管理进程实际上就是管理PCB来实现。
例如,下图就是windowsXP的进程
其是,操作系统的特征就是来自进程的特征
- 动态性(生命周期)
- 并发性(一段时间同时运行)
- 独立性(基本单位)
- 异步性(按照各自的速度向前推进)
进程是活动的,程序是静态的,实际上进程就是程序的一次执行,进程是在内存中,程序是在外存中。
进程的状态
- 就绪状态
- 执行状态
- 阻塞状态
状态之间的转换
PCB是进程存在的唯一标记,
PCB的作用
- 作为独立运行的标志
- 实现间断运行方式
- 提供进程管理所需要的信息
- 提供调度所需要的信息
- 实现与其他进程的通信与同步
PCB的信息:
- 进程标识符
- 处理机状态
- 进程调度信息
- 进程控制信息
PCB的组织方式
- 线性方式
- 链接方式
- 索引方式
线性方式
管理方便,查找不便
链接方式
比较常见,实际上就是指针管理
索引表组织方式
也称为成为进程操作,是进程管理的最基本功能,一般有os内核的原语实现
原语执行期间不允许被中断,要么执行,也么不执行。
进程控制包括
- 进程创建
- 进程终止
- 进程阻塞与唤醒
- 进程激活与挂起
进程具有层次结构,是一颗有向树
进程创建过程
- 申请空白PCB
- 分配所需资源
- 初始化PCB
- 插入就绪队列
引起进程终止的事件
- 正常结束
- 异常结束
- 外界干预
进程终止的步骤
- 检索PCB,读取状态
- 根据状态,进行调度标志修改
- 子进程终止
- 归还资源给系统或者父进程
- 将PCB从所在队列移除
进程阻塞
- 向系统请求资源失败
- 等待IO操作
- 等待新任务的到达
进程阻塞是自身的行为,具体过程是先停止执行,状态改为阻塞,将PCB插入阻塞队列
阻塞原语:Block
唤醒的原语Wakeup,是阻塞的逆过程,可能不是自身的行为。
具体过程是先从阻塞队列中移除,将状态改为就绪,将PCB插入就绪队列
必须成对出现Block跟Wakeup
进程的挂起跟激活挂起原语:Suspend()
激活原语:Active()
进程通信,就是进程之间的信息交换。
低级进程通信- 效率低,交换量少
- 效率高,普遍应用
- 通过共享内存(高级)
- 共享数据结构(效率低)
- 特性:一头进,一头出
- 管道实际上是一个pipe文件,是一个共享文件
- 直接通信方式
- 发送原语:send(receive,missage)
- 接收者原语:receive(sender,missage)
- 间接方式(通过邮箱)
- 信箱结构,首先要定义信箱结构
- 发送原语:send(mailbox,message)
- 接受原语:receive(mailbox,message)
- 套接字(Socket)
- 远程过程调用,以及Java的远程方法调用
Linux的通讯方式比较多样,简写为Linux IPC,一般有六种,包括管道,共享内存,信号,信号量,消息队列,套接字
线程的基本概念比进程更小的概念:线程,提高系统效率
当初引入进程的目的是让多个程序并发执行,提高资源利用率
进程的属性:
- 是一个CPU调度单位
- 是一个处理的资源独立单位
- 将进程一分为二,使线程作为调度和分派的基本单位,进程是拥有资源的基本单位,减少程序执行时的时空开销,线程是依附于进程而存在的。
- 线程是调度的基本单位,不仅进程之间可以并发执行,并且一个进程的多个线程也可以并发执行。
- 线程本身不拥有系统资源,仅有一点保证独立运行的资源,并且允许多个线程共享父进程所拥有的资源。
- 同一个进程之间的不同线程独立性要比不同进程之间的独立性低
- 线程比进程更支持多处理机系统
- 线程的切换及撤销不涉及到资源分配,开销代价小于进程
线程三个基本状态
- 执行态
- 就绪态
- 阻塞态
线程控制块(TCB)
线程的实现实现方式:
- 内核支持级KST
- 用户级线程(例如数据库管理系统)ULT
内核支持的优点
- 同时调度一个进程的多个进程
- 调度算法进程专用
- 实现与OS平台无关
ULT与KST的组合方式
- 多对一模式
- 一点一模型
- 多对多模型
多个用户级线程映射到一个内核线程
一对一具有更好的并发性,但效率差,每个用户级线程映射到一个内核线程
多对多多个用户级线程映射为等于或小于数目的内核线程,允许操作系统常见足够的KST。
【文章原创作者:阿里云代理 http://www.558idc.com/aliyun.html 复制请保留原URL】