用等外卖的时间带你彻底搞懂·进程与线程

Posted kikokingzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用等外卖的时间带你彻底搞懂·进程与线程相关的知识,希望对你有一定的参考价值。

🌕写在前面


  • 🍊博客主页:kikoking的江湖背景
  • 🎉欢迎关注🔎点赞👍收藏⭐️留言📝
  • 🌟本文由 kikokingzz 原创,CSDN首发!
  • 📆首发时间:🌹2022年1月10日🌹
  • 🆕最新更新时间:🎄2021年1月10日🎄
  • ✉️坚持和努力一定能换来诗与远方!
  • 🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢感谢感谢!



目录

🌕写在前面

🔥1.进程的概念

🍊1.1 进程的定义

🍊1.2 为什么要引入进程?

🔥2.进程的组成 

🍊2.1 PCB

🍊2.2 程序段与数据段

🔥3.进程的特征

🔥4.进程的转换

📜典型例题

🔥5.进程的组织

🍊5.1 链接方式 

🍊5.2 索引方式

🔥6.进程控制

🍊6.1什么是进程控制?

🍊6.2如何实现进程控制?

🍓原语

🍓为什么使用原语实现? 

🍊6.3 进程的创建 

🍓如何引起进程创建?

🍓进程创建的过程

🍓父/子进程与主/子程序的区别

📜典型例题

🍊6.4 进程的终止

🍊6.5 进程的阻塞和唤醒

🍓进程运行的现场是什么?

🍊6.6 进程的切换

🔥7.进程通信

🍓为什么进程通信需要操作系统支持呢?

🍊7.1 共享存储

🍓 数据结构的共享

🍓存储区的分享

🍊7.2 消息传递

🍓直接通信方式 

🍓间接通信方式

🍊7.3 管道通信

📜典型例题

🔥8.线程概念和多线程模型

🍓为什么要引入线程?

🍊8.1 线程的概念 

🍊8.2 线程与进程的比较

🍓多线程与多任务的区别

🍊8.3 线程的属性

🍊8.4 线程的实现方式

🍓用户级线程

🍓内核级线程

🍊8.5 多线程模型

🍓多对一模型

🍓一对一模型

🍓多对多模型


🔥1.进程的概念


 可见同一个Edge程序可以形成多个进程


🍊1.1 进程的定义

  • 进程是程序的一次执行过程
  • 进程是一个程序及其数据在处理机上顺序执行时所发生的活动
  • 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位
  • 进程是进程实体的运行过程(进程实体在下文有详细介绍)

🍊1.2 为什么要引入进程?

在多道程序环境下,允许多个程序并发执行,此时它们将失去封闭性,并具有间断性及不可再现性的特征。为此引入了进程的概念,以便更好地描述和控制程序的并发执行,实现操作系统的并发性和共享性。

✨✨✨我是分割线✨✨✨

🔥2.进程的组成 


🍊2.1 PCB

为了使参与并发执行的程序能独立地运行,必须为之配置一个专门的数据结构,称为进程控制块(PCB),系统利用PCB来描述进程的基本情况和运行状态,进而控制和管理进程

PCB是提供给操作系统使用的操作系统对进程管理所需的信息都存在PCB中

PID:进程被创建时操作系统会为该进程分配一个唯一的、不重复的进程号(Process ID)

UID:进程所属用户ID

PCB:这些信息都被保存在一个数据结构PCB (Process Control Block)中,即进程控制块;操作系统需要对各个并发运行的进程进行管理,但凡管理时所需要的信息,都会被放在PCB中

·创建进程的实质:创建进程映像中的PCB

·撤销进程的实质:撤销进程映像中的PCB


🍊2.2 程序段与数据段

e.g.对于多个Edge进程来说,它们的PCB与数据段都是不同的,但程序段的内容是相同的,因为这些Edge进程运行的都是相同的Edge程序


·进程映像(实体)是静态的,进程则是动态的


✨✨✨我是分割线✨✨✨

🔥3.进程的特征


主要掌握:

·动态性:进程的最基本特征

·独立性:独立获得资源、独立接受调度的基本单位(凡是未建立PCB的程序,都不能作为一个独立的单位参与运行)

✨✨✨我是分割线✨✨✨

🔥4.进程的转换


这里再补充一些上图中的状态转换:
运行态——>就绪态:在可剥夺的操作系统中,当有更高优先级的进程就绪时,调度程序将正在执行的进程转换为就绪态,让更高优先级的进程执行


📜典型例题

✨✨✨我是分割线✨✨✨

🔥5.进程的组织


🍊5.1 链接方式 

按照进程状态将PCB分为多个队列,操作系统持有指向各个队列的指针


🍊5.2 索引方式

根据进程状态的不同,建立几张索引表,操作系统持有指向各个索引表的指针


✨✨✨我是分割线✨✨✨

🔥6.进程控制


🍊6.1什么是进程控制?

进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程撤销已有进程实现进程状态转换等功能


🍊6.2如何实现进程控制?

·通过原语来实现进程控制

🍓原语

原语的执行具有原子性,即执行过程只能一气呵成,期间不允许被中断。 可以用 “关中断指令”和“开中断指令”这两个特权指令实现原子性

🍓为什么使用原语实现? 

·因为原语的执行具有一气呵成的性质

因此该内核程序在做上述两件事的过程中,不可以被中断信号所中断,而满足此条件的实现方式就是通过原语来执行✅ 



🍊6.3 进程的创建 

允许一个进程创建另一个进程,此时创建者称为父进程,被创建的进程称为子进程。子进程可以继承父进程所拥有的资源,当子进程被撤销时,应将其资源归还给父进程当父进程被撤销时,所有子进程也被撤销了

🍓如何引起进程创建?

在操作系统中,终端用户登录系统、作业调度、系统提供服务、用户程序的登录请求等

🍓进程创建的过程

🍓父/子进程与主/子程序的区别

父进程创建子进程后,父进程与子进程可以宏观上同时执行(并发执行)。主程序调用子程序后,主程序暂停在调用点,子程序开始执行,直到子程序返回,主程序才开始执行。

📜典型例题


🍊6.4 进程的终止


🍊6.5 进程的阻塞和唤醒

需要注意!Block与Wakeup是一对作用恰好相反的原语,必须成对使用!

·Block原语是由被阻塞进程自我调用实现的(主动使用)

·Wakeup原语是由一个与被唤醒进程合作或其他相关进程调用实现的(被动使用)


🍓进程运行的现场是什么?

·一个进程的正常运行过程:

·一个进程发生进程切换的过程:

在PCB中保存运行环境即是保存一些必要的寄存器信息(PSW、PC、通用寄存器内的信息)

当原来的进程再次上CPU运行时,可以通过PCB恢复它的运行环境


🍊6.6 进程的切换

 ✨✨✨我是分割线✨✨✨

🔥7.进程通信


进程通信是指进程之间的信息交换。PV操作是低级通信方式;高级通信方式是指以较高的效率传输大量数据的通信方式主要有以下三类:共享存储、消息传递、管道通信

🍓为什么进程通信需要操作系统支持呢?


🍊7.1 共享存储

在通信的进程之间存在一块可直接访问的共享空间,通过这片共享空间进行读/写操作实现进程之间的消息交换。 

注意:在对共享空间进行读/写操作时,需要使用同步互斥工具(如P、V操作)

🍓 数据结构的共享

·比如共享空间里只能放一个长度为10的数组

·这种共享方式速度慢、限制多,是一种低级通信方式

🍓存储区的分享

·操作系统在内存中划出一块共享存储区数据的形式、存放位置都由通信进程控制,而不是操作系统。

·这种共享方式速度很快,是一种高级通信方式


🍊7.2 消息传递

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

🍓直接通信方式 

发送进程直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息

🍓间接通信方式

发送进程把消息发送到某个中间实体,接收进程从中间实体取得消息中间实体一般称为信箱,这种通信方式又称信箱通信方式。 


🍊7.3 管道通信

·管道:是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件;即管道的实质是一个(单向)共享文件

·原理:写进程以字符流形式将大量的数据写入管道;而读进程则从管道中接收数据

 最后注意:

·只要管道没空,读进程就可以从管道读数据

·只要管道没满,写进程就可以往管道写数据


📜典型例题

✨✨✨我是分割线✨✨✨

🔥8.线程概念和多线程模型


🍓为什么要引入线程?

🍊8.1 线程的概念 

可以把线程理解为“轻量级进程”。线程是一个基本的CPU执行单元,也是程序执行流的最小单位。引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度使得一个进程内也可以并发处理各种任务(如QQ 视频、文字聊天、传文件;线程是进程中的一个实体,是被系统独立调度和分派的基本单位,它不拥有系统资源,只拥有一点运行中必可不少的资源,但它可与同属一个进程的其他线程共享进程的全部资源一个线程可以创建和撤销另一个线程同一进程中的多个线程可以并发执行,由于线程之间

·进程只作为除CPU之外的系统资源的分配单元(如打印机、内存地址空间等都是分配给进程的)。
·线程则作为处理机的分配单元


🍊8.2 线程与进程的比较

🍓多线程与多任务的区别

·Multitasking System(多任务系统)

一个“任务”task可以对应一个程序/进程,或多个程序/进程。(多个进程合作完成一个“任务")

·Multithreading System(多线程系统)

可以理解为“基于多线程的多任务系统


🍊8.3 线程的属性


🍊8.4 线程的实现方式

🍓用户级线程

用户级线程(User-Level Thread)中,有关线程的管理(线程的创建、撤销和切换等)的所有工作都由应用程序完成内核意识不到线程的存在

🍓内核级线程

线程管理的所有工作由内核完成,应用程序没有进行线程管理的代码,只有一个到内核级线程的编程接口。内核为进程及其内部的每个线程维护上下文信息调度也在内核基于线程架构的基础上完成


🍊8.5 多线程模型

🍓多对一模型

🍓一对一模型

🍓多对多模型

以上是关于用等外卖的时间带你彻底搞懂·进程与线程的主要内容,如果未能解决你的问题,请参考以下文章

一文带你彻底搞懂Docker中的cgroup

一文带你彻底搞懂Docker中的cgroup

3分钟带你彻底搞懂 Kafka

高并发多线程环境下如何保证共享变量的安全性?冰河建议你使用ThreadLocal,一文带你彻底搞懂ThreadLocal

高并发多线程环境下如何保证共享变量的安全性?冰河建议你使用ThreadLocal,一文带你彻底搞懂ThreadLocal

高并发多线程环境下如何保证共享变量的安全性?冰河建议你使用ThreadLocal,一文带你彻底搞懂ThreadLocal