操作系统之基础篇-(2)进程管理

目录

进程管理之进程实体

为什么需要进程

进程的实体

 进程管理之五状态模型

进程在系统中的五状态

进程管理之进程同步

为什么需要进程间同步

进程间同步的原则

线程同步


进程管理之进程实体

  • 为什么需要进程

  • 没有配置OS之前,资源属于当前运行的程序,计算机只能一个程序接着一个程序地运行
  • 在运行某个程序时所有资源都属于这个程序,资源会得不到合理利用
  • 配置OS之后,引入多道程序设计的概念
  • 有了OS后,进程就出现了
  • 进程的功能:
  • 合理的隔离资源、运行环境,提升资源利用率
  • 总结:
  • 1.进程是系统进行资源分配和调度的基本单位
  • 2.进程作为程序独立运行的载体保障程序正常执行
  • 3.进程的存在使得操作系统资源的利用率大幅提升
  • 进程的实体

  • 主存中的进程形态
  • 在主存里,进程也是一段连续存储的空间,这个空间称为进程控制块(PCB)
  • 其中含有很多重要的信息:
  • 标识符,状态,优先级,程序计数器,内存指针,上下文数据,IO状态信息,记账信息等等
  • 标识符
  • 标识符唯一标记一个进程,用于区别其它进程
  • 状态
  • 标记进程的进程状态,如运行态,阻塞态
  • 程序计数器
  • 指向进程即将被执行的下一条指令的地址
  • 内存指针
  • 程序代码,进程数据相关指针
  • 上下文数据
  • 存储的是进程执行时处理器存储的数据
  • IO状态信息
  • 存储的是被进程IO操作所占用的文件列表
  • 记账信息
  • 存储的是进程所使用的CPU时间,时钟数总和等
  • 以上的都能归为4类:
  • 1.进程标识符
  • 2.进程处理机状态
  • 3.进程调度信息
  • 4.进程控制信息
  • 进程控制块(PCB)是用于描述和控制进程运行的通用数据结构
  • 用于记录进程当前状态和控制进程运行的全部信息
  • PCB使得进程是能够独立运行的基本单位
  • 由于PCB是操作系统进行调度经常会被读取的信息
  • 所以PCB是常驻内存的,存放在系统专门开辟的PCB区域内
  • 进程(Process)与线程(Thread)
  • 一个进程可以有一个或多个线程
  • 线程是操作系统进行运行调度的最小单位
  • 操作系统对进程的调度实际上是对进程里的线程的调度
  • 线程包含在进程之中,是进程中实际运行工作的单位
  • 一个进程可以并发多个线程,每个线程执行不同的任务
  • 进程的线程共享进程资源
  • 区别

 进程管理之五状态模型

  • 进程在系统中的五状态

  • 就绪状态
  • 阻塞状态
  • 执行状态
  • 创建状态
  • 终止状态
  • 就绪状态
  • 当进程被分配到除CPU以外所有必要的资源后
  • 处于就绪状态只要再获得CPU的使用权,就可以立即运行
  • 当其它资源都准备好,只差CPU资源的状态为就绪状态
  • 在一个系统中多个处于就绪状态的进程通常排成一个队列,这个队列就称为就绪队列
  • 执行状态
  • 进程获得CPU,其程序正在执行称为执行状态
  • 在单处理机中,在某个时刻只能有一个进程是处于执行状态
  • 阻塞状态
  • 进程因某种原因如:其它设备未就绪而无法继续执行
  • 从而放弃CPU的状态称为阻塞状态
  • 同样也有一个阻塞队列的概念,与就绪队列相似
  • 以上3个状态关系:
  • 就绪状态与执行状态关系
  • 就绪状态进程在发生进程调度时就能变为执行状态
  • 同样的,当执行状态的进程的CPU资源用完了,又会重新切换为就绪状态,参入到就绪队列里去
  • 阻塞状态与执行状态关系
  • 当执行状态发生IO请求时就有可能变成阻塞状态
  • 阻塞状态与就绪状态关系
  • 当阻塞状态发生IO完成时,阻塞状态就可以切换回就绪状态
  • 创建状态
  • 1.分配PCB
  • 2.插入就绪队列
  • 创建进程时拥有PCB但其它资源尚未就绪的状态称为创建状态
  • 操作系统提供了fork函数接口创建进程
  • 终止状态
  • 1.进行系统清理
  • 2.归还PCB
  • 进程结束由系统清理或者归还PCB的状态称为终止状态

进程管理之进程同步

  • 为什么需要进程间同步

  • 生产者-消费者问题在生活中(宏观)没有问题
  • 在计算机微观角度看就有问题
  • 缓冲是在Cache上的
  • 操作缓冲需要3个步骤:
  • 代码中的count++,其实机器语言执行时需要三步
  • register=count //把内存中的值放入寄存器中
  • register=register+1 //寄存器进行自增操作
  • count=register //再把寄存器中的值写会内存中
  • 一个指令周期内不能一下子完成上面三条指令,那么在并发情况下就会出错
  • 问题在于进程并发地在执行,轮流操作缓存区,导致缓存区数据不一致
  • 所以要加锁,等这三条指令执行完毕,才让别的线程执行
  • 哲学家进餐问题也是一个例子
  • 过程:
  • 正常情况:拿起左边筷子,然后发现右边筷子被拿了
  • 等待右边筷子释放
  • 拿起右边筷子
  • 进餐
  • 特殊情况:5个哲学家同时拿起左边筷子
  • 发现右边筷子被拿了
  • 5个哲学家都等待右边筷子释放
  • 相互等待
  • 5个哲学家饿死
  • 解决:
  • 根源问题是:彼此相互之间没有通信
  • 需要生产者通知消费者我已经完成一件生产
  • 或是哲学家向旁边哲学家说我要进餐了,别拿我筷子
  • 也就是需要进程间的同步
  • 对竞争资源在多进程间进行使用次序的协调
  • 使得并发执行的多个进程之间可以有效使用资源和相互合作
  • 进程间同步的原则

  • 临界资源指的是一些虽作为共享资源却又无法同时被多个线程共同访问的共享资源
  • 4原则:
  • 1.空闲让进:资源无占用,允许使用
  • 2.忙则等待:资源有占用,请求进程等待
  • 3.有限等待:保证有限等待时间能够使用资源
  • 4.让权等待:等待时,进程需要让出CPU
  • 进程间同步的方法:
  • 消息队列
  • 共享存储
  • 信号量
  • 线程同步

  • 当多个线程并发使用进程资源时,也会引发如同生产者-消费者问题和哲学家进餐问题
  • 所以进程内多线程也需要同步
  • 线程同步的方法:
  • 互斥量:保证多线程可以互斥使用临界资源的一个锁
  • 读写锁:为应对多读少写或多写少读的情况而发明的一个锁
  • 自旋锁
  • 条件变量 

猜你喜欢

转载自blog.csdn.net/weixin_59624686/article/details/124919940