线程、进程和管程

news2024/12/23 13:31:20

一、线程

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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/828607.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【python】python求解矩阵的转置(详细讲解)

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

Linux服务器安装JDK20

一、下载安装包 访问官网,找到JDK20,复制下载链接 我复制的链接是:JDK20 二、Linux服务器操作 1.服务器根目录下创建一个新的文件夹 cd /mkdir jdkscd /jdks2.将下载好的jdk-20上传到jdks下 3.解压缩 tar -zxvf jdk-20_linux-x64_bin.tar…

ClickHouse目录结构

默认安装路径:/var/lib/clickhouse/ 目录结构: 主要介绍metadata和data metadata 其中的default、system及相应的数据库,.sql文件即数据库创建相关sql语句 进入default数据库(默认数据库): 可以看到数据库…

Java电子招投标采购系统源码-适合于招标代理、政府采购、企业采购、等业务的企业 tbms

功能描述 1、门户管理:所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含:招标公告、非招标公告、系统通知、政策法规。 2、立项管理:企业用户可对需要采购的项目进行立项申请,并提交审批&…

明星广告代言指南:遵循行业规范保持诚信

明星广告代言是一种常见的市场营销策略,通过邀请知名明星为品牌或产品代言,以增加品牌曝光和销售额。媒介拥有的3000多位一二线明星的合作资源,包括演员、歌手、主持人等各种类型的明星,可以为企业提供签售会、产品发布会、品牌推…

手写一个锁其实也很easy

懵逼的状态: 面试中经常被问到,如何手写一个锁,很多时候一脸懵逼,不知所措,多少年前深有体会,然而回过头来细细分析,只需使用AtomicReference类 即可以轻松搞定。首先咱们先来了解一下Atomi…

6.s081/6.1810(Fall 2022)Lab2: System calls

文章目录 前言其他篇章参考链接0. 前置准备1. System call tracing (moderate)简单分析Hint 1Hint 2Hint 3Hint 4Hint 5测试 2. Sysinfo (moderate)声明实现框架用户态与内核态交互计算空闲内存的大小计算非UNUSED进程的数量 测试 3. 总测试 前言 这个lab主要介绍了用户态到内…

【Java】Map<String,Object>中解析Object类型数据为数组格式(94)

背景&#xff1a; 前端&#xff1a;入参为字符串和数组类型&#xff1b;通过json字符串传给后台&#xff0c; 后台&#xff1a;后台通过工具解析为Map<String&#xff0c;Object>&#xff0c;然后需要解析出Map里面的数组值做操作&#xff1b; 需求&#xff1a; 入参&…

Vue源码学习 - 模版编译 和 组件渲染/更新过程

目录 前言一、什么是 模板编译&#xff1f;二、模板编译 到 render 函数字符串的流程三、深入模板编译源码baseCompile ()parse() - 解析阶段optimize() - 优化阶段generate() - 生成阶段&#xff08;1&#xff09;了解 render函数字符串 和 with 语法&#xff08;2&#xff09…

PHP手术麻醉信息系统的功能作用

手术麻醉信息系统源码 手术麻醉信息系统的使用&#xff0c;很大程度上方便了麻醉科医生的日常工作&#xff0c;使麻醉工作流程更规范&#xff0c;为麻醉医生工作提供了一个新平台。下面简述一下该系统在日常麻醉工作中的作用。 (一) 及时合理地安排手术 麻醉信息系统与医院现…

初识C++:类与对象

前言&#xff08;类的引入&#xff09; C语言结构体中只能定义变量&#xff0c;在C中&#xff0c;结构体内不仅可以定义变量&#xff0c;也可以定义函数。比如&#xff1a; 之前在C语言中&#xff0c;用C语言方式实现的栈&#xff0c;结构体中只能定义变量&#xff1b;现在以C方…

【第一阶段】编译时常量

1.编译时常量只能是常用的基本数据类型 String Double Int Float Long Short Byte Char Boolean 2.const用于定义编译时常量类似final,如果我们用在局部变量中将会报错&#xff0c;代码示例 fun main() {//使用const修饰为常量,编译时常量只能是常用的基本数据类型 String Dou…

学习C语言第三天 :分支语句(if - else if - else)

1.C语言语句结构 C语言是结构化的程序设计语言&#xff0c;这里的结构指的是顺序结构、选择结构、循环结构&#xff0c;C语言是能够实现这三种结构的&#xff0c;其实我们如果仔细分析&#xff0c;我们日常所见的事情都可以拆分为这三种结构或者这三种结构的组合。 我们可以使用…

python爬虫 获取简单的get请求

打印结果&#xff1a; 原博主写的很厉害额&#xff0c;写的比较全面&#xff0c;大家可以去学习看看 参考原文&#xff1a; Python调用get或post请求外部接口_python调用post接口_纯洁的小魔鬼的博客-CSDN博客

封装动态SQL的插件

最近根据公司的业务需要封装了一个简单的动态SQL的插件&#xff0c;要求是允许用户在页面添加SQL的where条件&#xff0c;然后开发者只需要给某个接口写查询对应的表&#xff0c;参数全部由插件进行拼接完成。下面是最终实现&#xff1a; 开发人员只需要在接口写上下面的查询SQ…

从零构建深度学习推理框架-3 手写算子relu

Relu介绍&#xff1a; relu是一个非线性激活函数&#xff0c;可以避免梯度消失&#xff0c;过拟合等情况。我们一般将thresh设为0。 operator类&#xff1a; #ifndef KUIPER_COURSE_INCLUDE_OPS_OP_HPP_ #define KUIPER_COURSE_INCLUDE_OPS_OP_HPP_ namespace kuiper_infer {…

websocket服务端大报文发送连接自动断开分析

概述 当前springboot版本&#xff1a;2.7.4 使用依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>现象概述&#xff1a; 客户端和服务端已经有心跳…

拿捏--->杨辉三角

文章目录 题目描述算法思路代码示例精简版优化版 题目描述 在屏幕上面打印杨辉三角。 算法思路 杨辉三角&#xff0c;是二项式系数在三角形中的一种几何排列。在欧洲&#xff0c;这个表叫做帕斯卡三角形。帕斯卡&#xff08;1623----1662&#xff09;是在1654年发现这一规律…

《金融数据保护治理白皮书》发布(137页)

温馨提示&#xff1a;文末附完整PDF下载链接 导读 目前业界已出台数据保护方面的治理模型&#xff0c;但围绕金融数据保护治理的实践指导等尚不成熟&#xff0c;本课题围绕数据保护治理的金融实践、发展现状&#xff0c;探索和标准化相关能力要求&#xff0c;归纳总结相关建…

AI算法图形化编程加持|OPT(奥普特)智能相机轻松适应各类检测任务

OPT&#xff08;奥普特&#xff09;基于SciVision视觉开发包&#xff0c;全新推出多功能一体化智能相机&#xff0c;采用图形化编程设计&#xff0c;操作简单、易用&#xff1b;不仅有上百种视觉检测算法加持&#xff0c;还支持深度学习功能&#xff0c;能轻松应对计数、定位、…