线程、进程和管程

2023-08-02 22:39:58

一、线程

1.1 定义

线程:线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程有时被称为轻量级进程,是程序执行流的最小单元。

线程的组成部分:
1. 线程ID:线程标识符
2. 当前指令指针(PC)
3. 寄存器集合:存储单元寄存器的集合
4. 堆栈:堆栈是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。

1.2 特点

  1. 线程不拥有系统资源,只有运行必须的一些数据结构;
  2. 它与父进程的其它线程共享该进程所拥有的全部资源。线程可以创建和撤消线程,从而实现程序的并发执行。
  3. 一般,线程具有就绪、阻塞和运行三种基本状态。
    线程的状态转换图如下所示:
    在这里插入图片描述

二、进程

2.1 定义

进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

进程的组成部分:
Ⅰ、程序段
存放要执行的代码。
Ⅱ、数据段
存放程序运行过程中处理的各种数据。
Ⅲ、进程控制块(PCB)
1、进程描述信息:①进程标识符②用户标识符。
2、进程控制和管理信息:①进程当前状态②进程优先级。
3、资源分配清单:①程序段指针②数据段指针③键盘④鼠标。
4、处理及相关信息:各种寄存器值(保存当前程序执行到哪一句)。

2.2 特点

  1. 动态性(最基本的特征)
    进程是程序的一次执行过程,是动态地产生、变化和消亡的。
  2. 并发性
    内存中有多个进程实体,各进程可并发执行。
  3. 独立性
    进程是能独立运行、独立获得资源、独立接受调度的基本单位。
  4. 异步性
    各进程按各自独立的、不可预知的速度向前推进,操作系统要提供“进程同步机制”来解决异步问题。
  5. 结构性
    每个进程都会配置一个PCB,结构上看,进程由程序段、数据段、PCB组成。
  6. 进程的状态
    ①运行态:占有CPU,并在CPU上运行。
    ②就绪态:已经具备运行条件,但没有空闲CPU,而暂时不能运行。(已经拥有了除CPU之外的所有需要的资源)
    ③阻塞态:因等待某一事件而暂时不能运行。(如等待分配打印机、等待读磁盘操作的结果)
    进程的状态转换过程图如下:
    在这里插入图片描述
    在这里插入图片描述

三、管程

3.1 定义

管程定义了一个数据结构和能为并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据。

管程的组成部分:
(1)一组局部变量;
(2)对局部变量操作的一组过程;
(3)对局部变量进行初始化的语句。

3.2 特点

  1. 任何进程只能通过调用管程提供的过程入口才能进入管程访问共享数据;
  2. 任何时刻,仅允许一个进程在管程中执行某个内部过程。

四、总结和扩展

4.1 总结

Ⅰ、进程和线程区别
根本区别:进程是系统进行资源分配(如地址和文件等)的基本单位;线程是CPU调度和分派的基本单位。
拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源(但线程有自己的堆栈和局部变量),但可以访问隶属于进程的资源。进程所维护的是程序所包含的资源(静态资源), 如:地址空间,打开的文件句柄集,文件系统状态,信号处理handler等;线程所维护的是线程运行相关的资源(动态资源),如:运行栈等。
包含关系:一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
切换:上下文切换包含了寄存器的存储和程序计数器存储的指令内容。进程切换与线程切换的一个最主要区别就在于进程切换涉及到虚拟地址空间的切换而线程切换则不会。因为每个进程都有自己的虚拟地址空间,而线程是共享所在进程的虚拟地址空间的,因此同一个进程中的线程进行线程切换时不涉及虚拟地址空间的转换。
Ⅱ、进程和程序的区别
进程是暂时的,是程序在数据集上的一次执行,程序是永存的。
进程是动态的观念,程序是静态的观念。
1个进程一般只能对应1个程序,1个程序可以对应多个进程。
Ⅲ、同一进程间的线程共享/独享哪些资源

共享的资源有

①堆:由于堆是在进程空间中开辟出来的,所以它是理所当然地被共享的;因此new出来的都是共享的(16位平台上分全局堆和局部堆,局部堆是独享的)。
②全局变量:它是与具体某一函数无关的,所以也与特定线程无关;因此也是共享的。
③静态变量:虽然对于局部变量来说,它在代码中是“放”在某一函数中的,但是其存放位置和全局变量一样,存于堆中开辟的.bss和.data段,是共享的。
④文件等公用资源:这个是共享的,使用这些公共资源的线程必须同步。Win32 提供了几种同步资源的方式,包括信号、临界区、事件和互斥体。

注意:每个进程都有自己的地址空间,即进程可以访问的虚拟地址范围。每个进程可以有多个线程,所以进程中的所有线程共享相同的虚拟地址空间。

独享的资源有

①栈:栈是独享的,线程默认栈大小为8M。
②寄存器的值:线程里存放的是副本,包括程序计数器PC。

4.2 扩展

问题:CPU包含的寄存器有哪些?哪些是程序员可以操作的?
以80386的CPU为例,寄存器分为6类,包括通用寄存器、段寄存器、标志和控制寄存器、系统地址寄存器、调试寄存器和测试寄存器。
其中,可供应用程序员使用的为通用寄存器(EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI)、段寄存器(CS、DS、SS、ES、FS、GS)以及标志和控制寄存器(EIP、EFLAGS)。可以指定任何通用寄存器的内容作为操作数的地址,以及在形成地址的过程中作如加法或减法这样简单的算术运算。

引用

[1]https://blog.csdn.net/Tir_zhang/article/details/125072294
[2]https://zhidao.baidu.com/question/247918947446298244.html
[3]https://blog.csdn.net/qq_44488586/article/details/119949954
[4]https://blog.csdn.net/TABE_/article/details/122417359
[5]https://www.pianshen.com/post/490724757039/

更多推荐

IPO解读丨Arm破解市场质疑的答案,仍在AI中?

时隔7年,移动设备芯片领域霸主Arm重回二级市场。IPO进程的推进,让这家全球芯片行业的基石公司,不得不面对来自市场的全方位的密集审视。而从股价来看,投资者对于Arm的态度始终处于摇摆中,从上市首日股价大涨25%,到截至发稿前的三个交易日股价累计下跌12.5%,可以看出,Arm在二级市场面临一定质疑。但不可否认Arm在

ChatGPT技术原理

Task03ChatGPT技术原理目录阶段一:有监督微调Supervisedfine-tuning(SFT)阶段二:训练回报模型(RewardModel,RM)阶段三:使用强化学习微调SFT模型ChatGPT是由GPT-3迭代来的,原有的GPT-3可能难以从文本中学会一些更高层次的表示,这就导致了GPT-3这样的语言模

指针和数组笔试题深度解析

学习之前我们将运用到sizeof和strlen函数sizeof和strlen函数认识和区别:1.strlen是一个库函数使用时需要引用#include<string.h>这个头文件,而sizeof是一个运算符号;2.strlen计算的是'\0'之前的字符个数,sizefo计算的是所占空间内存的大小,单位是字节;3.st

【系统架构】什么是集群?为什么要使用集群架构?

什么是集群?为什么要使用集群架构?1.什么是集群?2.为什么要使用集群?2.1高性能2.2价格有效性2.3可伸缩性2.4高可用性2.5透明性2.6可管理性2.7可编程性3.集群的常见分类3.1负载均衡集群3.2高可用性集群3.3高性能计算集群3.4网格计算集群4.常用的集群软硬件介绍及选型4.1企业中常见的集群软硬件产

JSON注解和异常处理的使用

一、JSON数据返回1.1.前言JSON是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。JSON的常用场景包括:前后端分离的项目中,后端向前端传送数据时。Ajax异步访问数据。RPC远程调用。除了JSON,还有其他的数据传输格式,如XML等。但是由于XML格式的特点,它在Web开发中使用较少。1.

【K8S系列】深入解析k8s网络插件—Canal

序言做一件事并不难,难的是在于坚持。坚持一下也不难,难的是坚持到底。文章标记颜色说明:黄色:重要标题红色:用来标记结论绿色:用来标记论点蓝色:用来标记论点在现代容器化应用程序的世界中,容器编排平台Kubernetes已经成为标准。Kubernetes是一个分布式系统,为了支持复杂的应用和微服务架构,网络是Kuberne

汽车充电桩浪涌保护器的应用方案和作用

随着电动汽车的普及,充电桩的建设也越来越多,但是充电桩也面临着雷电等自然灾害的威胁,如果没有有效的防雷措施,可能会造成充电桩的损坏,甚至引发火灾、爆炸等严重后果。因此,为了保证充电桩的安全运行,需要在充电桩中安装浪涌保护器,以减少雷电对充电桩的影响。浪涌保护器是一种用于限制瞬态过电压和泄放电涌电流的电子装置,它可以在雷

汽车电子相关术语

SOASOA(Service-OrientedArchitecture,面向服务的架构)是一种在计算机环境中设计、开发、部署和管理离散模型的方法。是由Garnter1996年提出的概念,将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的,目的是为

.Net Core中Host的作用和用法

Host简介在ASP.NETCore中,Host是一个托管应用程序的宿主环境。它提供了一种统一的方式来启动和运行应用程序,无论是在开发环境中还是在生产环境中。Host负责处理应用程序的生命周期、配置和依赖项管理等任务,使开发人员能够专注于应用程序的业务逻辑。Host是通过使用IHostBuilder接口和Host.Cr

计算机竞赛 深度学习 机器视觉 人脸识别系统 - opencv python

文章目录0前言1机器学习-人脸识别过程人脸检测人脸对其人脸特征向量化人脸识别2深度学习-人脸识别过程人脸检测人脸识别MetricLarning3最后0前言🔥优质竞赛项目系列,今天要分享的是🚩深度学习机器视觉人脸识别系统该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!🥇学长这里给一个题目综合评分(每项满分5分)

计算机毕设 opencv python 深度学习垃圾图像分类系统

文章目录0前言课题简介一、识别效果二、实现1.数据集2.实现原理和方法3.网络结构最后0前言🔥这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业

热文推荐