操作系统之 进程与线程

进程与线程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

进程组织

  1. 进程控制块 PCB
  2. 程序段
  3. 数据段

进程的状态

  • 阻塞 运行 就绪
  • 开始 结束

状态切换

  • 就绪状态 -> 运行状态 : 获得处理机时间片
  • 运行状态 -> 就绪状态 : 1. 时间片用完,让出处理机 2. 在可剥夺操作系统中,优先级高的先执行.
  • 运行状态 -> 阻塞状态 : 进程等待某一资源的使用或者分配或某一个事件发生,由运行变成阻塞.
  • 阻塞状态 -> 就绪状态 : 当进程等待的资源/事件到来. 进程就从阻塞状态变成就绪状态.

处理机调度的层次

  • 作业调度(高级调度): 按一定的原则,从外存上处于后备状态的作业中,挑选一个或多个,分配内存等资源.创建相应的进程.让他们获得竞争处理机的机会.
  • 内存调度(中级调度): 引入内存调度是为了提高内存利用率和系统吞吐量.那些暂时不能运行的进程,调至外存等待.将其线程状态设置为挂起状态.当内存空间宽松时,通过中级调度选择具备运行条件的进程,将其唤醒.
  • 进程调度(低级调度): 按照某种方法或策略,从就绪队列中选取一个进程,将处理机分配给它.

进程的调度算法

  • 先来先服务
  • 短作业优先
  • 优先级调度 (抢占式与非抢占式)
  • 时间片轮转
  • 高响应比
  • 多级反馈队列调度算法

什么是进程

  • 进程是运行起来的程序.
  • 进程是系统进行资源分配的最小单位. 每个进程拥有独立的地址空间
  • 一个进程无法访问另一个进程的数据.若要访问.需要进行进程间通信.

什么是线程

  • 进程是系统进行 资源调度 的基本单位.
  • 线程是轻量级的进程.它是CPU执行单元.
  • 线程是进程的一个实体,是被系统独立调度和分派的基本单位.线程自己不拥有系统资源.它与同属一个进程的多个线程之间共享进程拥有的所有资源.

线程与进程的区别

  • 调度上:
    • 线程是独立调度的基本单位. 进程是资源拥有的基本单位.
    • 同一个进程内的线程切换不会造成进程切换. 不同进程的线程切换会导致进程切换.
  • 拥有资源:
    • 进程是拥有系统资源的基本单元.而线程不拥有系统资源. 线程可以访问隶属进程的资源.
  • 并发性:
    • 引入线程后,不仅进程间可以并发执行,线程间也可以并发执行.操作系统拥有更好的并发性.提高了系统的吞吐量.
  • 系统开销:
    • 由于创建和销毁进程,系统需为之分配或回收资源.如内存.IO设备等. 远大于创建和撤销线程时的开销.
  • 地址空间和其他资源:
    • 进程间的地址相互独立. 同一个进程的各个线程间共享进程的资源.
    • 一个进程至少有一个线程.
  • 通信:
    • 进程间通信IPC需要 进程同步与互斥来辅助.
    • 线程间通信可以直接通过读写数据段来通信.

进程之间私有和共享的资源

  • 私有: 地址空间 堆 栈 全局变量 寄存器
  • 共享: 代码段 公共数据 进程目录 进程ID

线程之间私有和共享的资源

  • 私有: 线程栈 寄存器 程序寄存器
  • 共享: 堆 地址空间 全局变量 静态变量

进程间通信 的方式以及优缺点

管道

  • 无名管道 : 一种半双工的通信方式,只能用于有亲属关系的进程间(父子进程)
    • 优点: 简单方便
    • 缺点:
      • 局限于单向通信
      • 能创建在它的进程以及其有亲缘关系的进程之间
      • 缓冲区有限
  • 有名管道(FIFO) : 一种半双工的通信方式,可以在无亲属关系的线程间通信
    • 优点: 在任何进程间通信
    • 缺点:
      • 长期存于系统中.使用不当容易出错
      • 缓冲区有限

消息队列

  • 消息队列,是消息的连接表.存放在内核中.并由消息队列标识符标识.
    • 优点:
      • 可以实现任意进程间的通信,无需考虑同步问题.
      • 消息队列是面向记录的.其中个的消息具有特定格式与优先级.
    • 缺点:
      • 信息的赋值需要额外消耗CPU时间.不适宜信息量大或操作频繁的场合.

信号量

  • 信号量是一个计数器. 用于实现多个进程间的互斥与同步.而不是用于存储进程间通信的数据
    • 优点:
      • 可以同步线程. 与共享内存配合实现线程间数据传递
    • 缺点:
      • 信号量有限

共享内存

  • 共享内存,指的是多个线程共享的一个给定存储区.
  • 优点:
    • 无须复制. 最快的通信方式. 因为进程可以直接对内存进行存取.
    • 信息量大
  • 缺点:
    • 需要多个进程协作.需要进程同步.一般与信号量同步.
    • 只能同一个计算机内通信,不方便网络通信.

套接字

  • 套接字 : 用于不同计算机之间的进程通信
    • 优点 : 传输数据时间段.性能高. 可加密
    • 缺点 : 需要解析数据 转换

线程之间通信(同步) 方式

临界区 互斥对象 信号量 事件

  • 临界区
    • 在一个时刻只允许一个线程对共享资源进行访问.
  • 互斥量
    • 互斥对象和临界区很像! 只有拥有互斥对象的线程才能够对共有资源进行访问.
  • 信号量
    • 它允许多个线程在同一个时刻访问同一个资源.但是需要限制此类资源的最大数数目
  • 事件
    • 通过通知操作方式来保持线程的同步,HIA可以实现多个线程优先级比较的操作

锁机制

  • 互斥锁(mutex) / 读写锁(reader-writer lock) / 自旋锁(spin lock) / 条件变量 (condition)
    • 互斥锁 : 提供了排他方式防止数据结构被并发修改
    • 读写锁 : 允许多个线程同时读取数据,而对写操作是互斥的.
    • 自旋锁 : 与互斥锁类似,都是为了保护共享资源.互斥相当于资源被占用,申请者进入睡眠状态. 自旋锁则是循环检测保持着是否已经释放锁.
    • 条件变量 : 可以以原子的方式阻塞进程.知道某个特定条件满足.对条件的测试是在互斥锁的保护下进行的.条件变量始终与互斥锁一起使用.:

信号量机制

  • 无名线程信号量
  • 命名线程信号量

信号机制

  • 类似于进程间的信号处理

屏障

  • 屏障允许多个线程等待,直到所有的线程都到达某一点.然后从该点继续执行

线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制

协程

  1. 是一种 比线程更轻量级的存在. 一个线程可以有多个协程.
  2. 协程不被操作系统内核管理,完全由程序所控制.
  3. 协程开销远小于线程; 携程不需要线程切换的上下文开销;
  4. 协程拥有自己的寄存器上下文和栈. 携程调度切换时,将寄存器上下文和栈保存到其他地方. 切换回来,再进行恢复.
  5. 每个协程表示一个执行单元. 有自己的本地数据. 与其他共享全局数据和其他资源.
  6. 不需要多线程锁机制; [为什么?]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值