操作系统学习 - 进程与线程

1. 进程基本概念

在这里插入图片描述

2. 进程的状态及状态转换

在这里插入图片描述

2.1 五种状态

运行状态:占有CPU,并在CPU上运行

单核CPU,每个时刻下只能有一个进程处于运行态。

就绪状态:已经具备运行条件,但由于CPU在忙,而暂时不能运行。

万事俱备,只欠CPU

阻塞状态:因等待某一事件而暂时不能运行

比如,进程进行了一次“系统调用”,等待系统的服务结果,此时进程就处于阻塞状态,也可以说等待状态。

创建状态:进程正在被创建。

操作系统需要完成创建进程。操作系统为该进程分配各种资源,并为其创建、初始化PCB。这一段事件,进程就处于创建状态。

终止状态:进程运行结束(正常、异常)后,进程正在从系统中撤销。

操作系统需要完成撤销进程相关的工作。回收各种分配给它的资源,撤销PCB等。

2.2 状态之间的转换

在这里插入图片描述

小结

在这里插入图片描述

3. 进程控制

在这里插入图片描述
进程控制:简单理解就是要实现进程状态的转换。
在这里插入图片描述
如果,某个状态的队列当中的进程,和本身所在队列的状态不一致,这是很危险的,所以,引入了“原语”。

原语实现进程的有关控制。

原语的特点是执行期间不允许中断,只能一气呵成。这种不可被中断的操作即原子操作。
原语,有点类似线程锁。它采用“关中断指令”和“开中断指令实现”。原语是在操作系统内核当中的一种特殊的程序,是最接近硬件的部分,原语运行在核心态。

执行了关中断指令后,再有外部中断发生的话,不会立即处理。等到执行了开中断指令,系统才恢复对中断的处理。
在这里插入图片描述
进程控制所使用的原语,要做的只有三件事情:

  • 更新PCB中信息(如修改进程状态、保存运行环境到PCB、从PCB恢复运行环境)
  • 将PCB插入合适的队列
  • 分配和回收系统资源

小结

在这里插入图片描述

4. 进程通信

在这里插入图片描述

4.1 概述

进程通信:就是进程之间的信息交换。

进程是系统分配资源的基本单位,并且有内存保护机制,各个进程只能访问自己拥有的内存空间。但是各个进程之间的信息交换又是必须要实现的,为了保证进程之间的安全通信,操作系统提供了一些方法。

进程间通信有三种方式:

  • 共享存储
  • 消息传递
  • 管道通信

方式1. 共享存储

操作系统为两个进程开辟一个“共享空间”,进程1和进程2都可以访问,但是,两个进程对该空间的访问必须是互斥的(不能同时访问)。操作系统只负责提供共享空间和同步互斥工具(如P、V操作)。

  • 基于数据结构的共享

    比如共享空间里只能放一个长度为10的数组,数据结构是固定的!这种方式速度慢,限制多,是低级的。

  • 基于存储区的共享

    操作系统只划出一个共享存储区,数据的形式、存放位置,都由进程来控制,而不是操作系统。这种方式速度快,是高级的。

方式2. 管道通信

管道:是指用于连接读写进程的一个“共享文件”,又叫pipe文件。其实就是一个大小固定的缓冲区。
在这里插入图片描述

  • 通道是半双工的。要想实现全双工,就必须用两个管道。
  • 各个进程对管道的访问也必须是互斥的。
  • 进程1在写的时候,若管道写满了,则进程1的write()系统调用将被阻塞,等待管道数据被取走。当进程2把管道数据全都取走之后,进程2的read()系统调用将被阻塞。
  • 写满才可以读,全都取走才可以写。
  • 管道内的数据没有备份,一旦取走,管道就不管了,这就意味着,读进程最多只能有一* 个,否则可能会有读错数据的情况。

方式3. 消息传递

以“格式化的消息(有点类似报文)”为单位,进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。

直接通信方式:消息直接挂到目标进程的消息缓冲队列上。
间接通信方式:消息先放到一个“信箱”里。

5. 线程概念与多线程模型

在这里插入图片描述

线程概念

传统的进程是程序执行流的最小单位。引入“线程”来增加并发度。
在这里插入图片描述
引入线程以后,CPU服务的对象不再是进程本身,而是进程内的多个线程。

线程是一个基本的CPU执行单元,也是程序执行流的最小单位。

  • 引入了线程以后,除了CPU这个资源以外,其他的资源(比如内存、打印机)等,依然是以进程为单位进行分配。

引入线程机制后有什么变化

  • 资源分配、调度(CPU的调度)
    • 进程机制,进程是资源分配、调度的基本单位。
    • 引入线程后,进程依然是资源分配的基本单位,而调度的进本单位变为了线程。
  • 并发性
    • 进程机制,只能进程间并发
    • 线引入线程后,各个线程间也可以并发
  • 系统开销
    • 进程机制,进程间并发时,需要切换进程的运行环境,系统开销大。(因为各种资源都要切换)
    • 线程间并发,如果是同一进程内的线程切换,则不需要切换进程环境,系统开销小。

  • 同一个进程内的线程共享进程的资源,所以同一进程中的各个线程之间通信无需系统干预。

线程的实现方式

在这里插入图片描述

  • 用户级线程:用户级线程由应用程序通过线程库实现,线程切换在用户态下就可以完成。(简单来说,用户级线程就是从用户角度可以看到的线程)

    在用户看来,是有多个线程,但是在操作系统内核看来,并意识不到这些线程的存在,操作系统只能看到进程。

在这里插入图片描述

  • 内核级线程:内核级线程的管理由操作系统内核负责,切换也必须在核心态下才能完成。

    内核级线程就是“从操作系统内核视角能看到的线程”,上边图中,对操作系统来说,只有3个线程。

在这里插入图片描述

因为操作系统只看得见内核级线程,所以只有内核级的线程才是CPU调度的基本单位

多线程模型

  • 多对一

    多个用户级线程由一个内核级线程来维护。
    在这里插入图片描述

  • 一对一模型

    一个用户级线程由一个内核级线程维护。
    在这里插入图片描述

  • 多对多模型

    n个用户级线程由m个内核级线程维护(n >= m)
    在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值