持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情
进程
-
进程是程序执行过程中资源分配和调度的一个独立单位
-
os引入进程的目的是使程序可以并发执行,以提高资源的利用率和系统的吞吐量
PCB(记录进程的所有情况)
作用
- 作为独立运行的基本单位的标志(进程的pid等)
- 实现间断性运行方式(保存了cpu现场的信息)
- 提供进程管理所需要的信息(记录了程序和数据在内存和外存的地址)
- 提供进程调度的信息(记录进程的状态,只有在就绪态的进程才能运行)
- 实现与其它线程的通信
内容
-
进程标识符
- 外部标识符(创建者提供(字母+数字)描述进程的家族关系)
- 内部标识符(os提供的唯一编号)
-
处理机状态 (寄存器的一些信息使得进程可以暂停和继续执行)
-
进程调度信息(进程状态、优先级、等待cpu的时间⌛️····)
-
进程控制信息(程序和数据的地址、进程同步和通信机制、本进程所在队列下一个进程的pcb指针)
内存中pcb管理方式
线性方式 类似于数组 链表方式 索引方式
程序段(在内存中)
数据段(在内存中)
进程状态(三种,五种,七种)
三种状态
-
就绪态 : 进程已经获得除cpu以外的资源只要获得cpu就可以立即执行(按照一定的优先策略排列成一个队列)
-
执行状态: 正在执行
-
阻塞状态:指进程因为进程获取系统资源失败而产生阻塞,操作系统为了提高进程执行效率,会根据不同的阻塞原因设置多个阻塞队列,一旦获得了导致阻塞的相应资源后,就会立即切换到就绪状态等待执行。
五种状态(创建态,终止态)
-
创建态:申请一个空白的PCB资源,获取进程进程需要的操作系统资源,(如果资源不够用,就无法创建进程),并写入控制和管理信息后将进程推送到就绪队列
-
终止态:os保留一些进程相关的信息(便于其它进程获取信息使用),然后释放PCB空间。
七种状态(活动阻塞,静止阻塞,活动就绪,静止就绪
- 挂起状态:为了方便系统和用户观察分析进程的需要,可以将进程设置为挂起态,暂停执行。
各种状态间在什么情况下会转换
进程切换过程中发生了什么?
- 进程的创建过程
- 申请空白pcb
- 申请资源
- 初始化pcb内容
- 加入就绪队列
进程终止条件
-
正常结束
-
异常结束
- 越界错误:程序访问了超出进程所占存储空间的范围
- 保护错:访问了不允许访问的资源或者文件
- 指令错:执行了不存在的指令、用错指令
- 特权指令错:试图调用没有权限的指令
- 运行超时:运行时间超过设置的最大值
- 算数运算错:如除0
- I/O错:I/O操作失败
-
外界干预
进程终止过程:
- 根据要终止的进程标识符,找出进程的pcb
- 如果进程是正在执行进程 立即停止执行
- 如果进程有子孙进程立即停止执行
- 将进程所有资源归还父进程
- 将终止进程的pcb从队列中移除
进程的阻塞条件
向系统申请共享资源失败 等待某种操作完成(如I/O操作) 两个进程协作,进程产生的新数据未到达
进程调度算法
进程间通信
共享存储器
管道通信
互斥(同一时间只允许一个进程读或者写)
同步(只允许写完了再读,读完了再写)
消息传递系统
直接通信()
间接通信(信箱📪)
linux进程通信
管道 信号 消息队列 共享内存 信号量(共享内存资源占用计数器) 套接字
线程
线程概念:线程是调度和分派的基本单位
进程的三个状态
- 执行态
- 就绪态
- 阻塞态
线程的实现方式
内核线程KST(kernel supported thread)
优点
- 可以并行
- 如果一个进程被阻塞内核可以调度其它线程来执行
- 内核线程切换快,开销小
- 内核本身也可以采用多线程技术,提高系统执行的速度和效率
缺点
对于用户切换线程来说开销比较大(用户进程的线程在用户态运行,而调度和管理是在内核态进行,开销比较大)
用户线程(ULT)(user level thread)
用户态管理进程的调度
缺点:在基于进程机制的os中大多数系统调用都会使进程阻塞,在执行一个系统调用时候,不仅该线程会被阻塞,而且进程内的所有线程都会被阻塞。而在内核态执行线程阻塞时候,可以调度其它线程继续执行。
线程的组合模型
多对一模型
- 优点:线程管理在用户态,线程管理开销小,效率高
- 缺点:当一个线程阻塞时候会影响整个进程阻塞,只有一个线程能访问内核,多个线程不能并行在多个处理机上运行。
一对一模型
- 优点:当一个线程阻塞时候会不会影响整个进程阻塞,多个线程能访问内核,多个线程可以并行在多个处理机上运
- 缺点:每创建一个用户态线程就会相应的创建一个内核态线程,内核态线程创建开销比较大
多对多模型
-
既可以像一对一模型一样允许多线程并行的运行在多个cpu上,又可以像多对一一减少线程管理的开销