从操作系统角度理解进程与线程

正在学习操作系统,记一些笔记

一、进程的定义

进程实体组成:程序段、数据段、PCB

PCB是进程存在的唯一标志

进程经典定义:

  • 进程是程序的一次执行过程
  • 进程是具有独立功能的程序在数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位
  • 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位

进程实体是静态的,进程强调动态性
在这里插入图片描述

二、进程的特征
  1. 动态性:进程是程序的一次执行过程,是动态地产生、变化和消亡的

  2. 并发性:内存中有多个进程实体,各进程可并发执行

  3. 独立性:进程是能独立运行、独立获得资源、独立接受资源调度的单位

  4. 异步性:各进程按照各自独立的、不可预知的速度向前推进,操作系统要提供“进程同步机制”解决异步问题

  5. 结构性:每个进程都会配置一个PCB。结构上看,进程由程序段、数据段、PCB组成

三、进程的状态
  1. 基本状态(前3种)
  • 运行态:占有CPU,并在CPU上运行

  • 就绪态:万事俱备,只欠CPU

  • 阻塞态:因为等待某一事件的发生,暂时不能运行(比如等待操作系统分配打印机,磁盘操作结果等)

  • 创建态:操作系统为进程分配所需的内存空间等系统资源,初始化PCB

  • 终止态:当进程无法继续运行,操作系统需要回收该进程相关资源,撤销PCB

  1. 进程状态转换
    在这里插入图片描述

注:

  • 不能由阻塞态直接转换为运行态(由于既缺乏资源,又缺乏CPU。一般而言两者是不可能同时获得的)
  • 不能由就绪态直接转换为阻塞态(进入阻塞态是进程主动请求的,必然需要进程运行时才能发出主动请求)
四、进程控制

主要由原语实现,原语主要做3类事情

  • 更新PCB中的信息
  • 将PCB插入合适的队列
  • 分配/回收系统资源
  1. 创建原语实现进程创建
    在这里插入图片描述

  2. 撤销原语操作实现进程终止
    在这里插入图片描述

  3. 切换原语实现进程切换
    在这里插入图片描述

  4. 阻塞原语和唤醒原语(一般成对使用)
    在这里插入图片描述

五、进程通信
1. 共享存储

操作系统为两个进程开辟一个共享空间用于传递数据,两个进程对共享空间的访问是互斥的

  • 基于数据结构的共享
    • 速度慢,限制多,是一种低级通信方式。比如只能往共享空间里放长度为10的数组
  • 基于存储区的共享
    • 共享区域的数据形式,存放位置都由进程控制,而不是操作系统。是一种速度快,高级的通信方式
2. 消息传递

利用发送和接收两个原语实现的

消息头:包含发送进程ID、接收进程ID、消息类型、消息长度等格式化信息

  • 直接通信方式
    在这里插入图片描述

  • 间接通信方式
    在这里插入图片描述

3. 管道通信

在这里插入图片描述

  • 管道只能实现半双工的通信

  • 各进程要互斥的访问管道

  • 数据以字符流的形式写入管道,管道写满时,写操作的系统调用会阻塞,等待读操作

  • 管道读空时,读操作的系统调用会阻塞,等待写操作

  • 若管道没写满则不允许读,管道不读空则不允许写

  • 管道中的数据一旦被读出,数据就从管道删除,这就意味着读进程最多只能有一个

六、什么是线程,为什么引入线程

没引进进程之前,系统中各个程序只能串行执行。引进进程之后,系统中各个程序可以并发执行。

进程是程序的一次执行,有的进程可能需要同时做很多事,例如QQ的语音通话和发送文件这些功能。而传统的进程只能串行地执行一系列程序(比如先完成发送文件,然后才能打电话),为此引入线程增加并发度

在这里插入图片描述
引入线程后:

  • 线程成为了程序执行流的最小单位,是一个基本的CPU执行单元
  • 进程只作为除CPU之外的系统资源的分配单元
七、引入线程机制后,有什么变化
  1. 资源分配和调度
  • 传统进程机制中,进程是资源分配、调度的基本单位
  • 引入线程后,进程是资源分配的基本单位,线程是调度的基本单位
  1. 并发性
  • 传统进程机制中,只能进程间并发
  • 引入线程后,线程间也可以并发,提升了并发度
  1. 系统开销
  • 传统进程间的并发,需要切换进程的运行环境,系统开销大
  • 若是同一进程内的线程间并发,则不需要切换进程环境,系统开销小
八、线程的重要属性
  1. 线程是CPU调度的单位
  2. 多CPU计算机中,各个线程可占用不同的CPU
  3. 每个线程都有一个线程ID、线程控制块(TCB)
  4. 线程也有阻塞、就绪、运行三种状态
  5. 线程几乎不拥有系统资源
  6. 同一进程内的不同线程共享进程资源
  7. 同一进程内的线程共享进程的资源,因此通信无需系统干预
  8. 没有独立的地址空间,不包含CPU线程,无法独立运行程序
  9. 耗时操作使用线程,提高应用程序响应
  10. 多CPU系统中,使用线程提高CPU利用率
九、线程的实现方式
1. 用户级线程

在这里插入图片描述

  • 用户级线程切换可以在用户态下完成,无需操作系统干预,开销小,效率高
  • 由于进程和内核级线程才是CPU调度的基本单位,所以当一个用户级线程被阻塞后,相当于整个进程被阻塞
  • 在用户看来,有多个线程。在操作系统看来,意识不到用户级线程
  • 用户级线程可以理解为用户角度能看到的线程
2. 内核级线程

在这里插入图片描述

  • 内核级线程的切换必须在核心态下,由操作系统完成
  • 内核级线程可以理解为从操作系统角度能看到的线程,管理工作由OS完成
  • 此时进程是资源分配的基本单位,内核级线程是CPU调度的基本单位,线程之间并发能力强
  • 内核级线程切换需要CPU从用户态切换到内核态,成本高,开销大
3. 用户级线程和内核级线程的映射

在这里插入图片描述

在同时支持用户级线程和内核级线程的系统中,将n个用户级线程映射到m个内核级线程(n>=m)

在上图中,有2个内核级线程,3个用户级线程

  • 在用户看来,这个进程中有3个线程
  • 由于只有2个内核级线程,即使在四核计算机上运行,该进程最多只能分配到2个核

总结:内核级线程才是处理机分配的单位

十、多线程模型
1. 多对一模型

在这里插入图片描述

  • 优点:用户级线程切换不会导致内核级线程切换,用户态下即可完成线程切换。线程管理开销小,效率高
  • 缺点:并发性差
2. 一对一模型

在这里插入图片描述

  • 优点:并发性强
  • 缺点:用户级线程切换会导致内核级线程切换,线程管理开销大
3. 多对多模型

在这里插入图片描述

集以上二者之所长

  • 克服并发度不高的缺点
  • 克服用户级线程占用太多内核级线程,开销大的缺点

参考资料:王道操作系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bugcoder-9905

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值