进程和线程详解

news2025/2/22 22:14:56

目录

前言:

操作系统定位

并发

并行

并发

进程

描述

PCB

管理

内存管理

进程间通信

线程

小结:


前言:

    当一个程序运行起来时,操作系统要为之分配一些资源,这样的运行起来的程序称之为一个进程。为了有效解决并发编程,多进程会对于系统的开销比较大,由之提出了多线程。

    进程包含线程,一个进程可有多个线程。多个线程是共享一块资源的,这样就可以大量减少系统的开销。

操作系统定位

    应用程序 --> 系统调用 --> 操作系统内核 --> 驱动程序 --> 硬件设备

    注意:系统调用会为应用程序提供api,操作系统的核心功能对上和对下进行管理。

并发

    由于cpu的资源有限,需要把多个进程进行合理的分配。让有限的资源可以执行多个进程。

并行

    微观上同一时刻,两个核心上的进程就是同时执行的。

并发

    微观上同一时刻,一个核心只能运行一个进程,但它对于进程间的切换是足够快的。

进程

    一个运行起来的程序称为一个进程,没运行起来就不算。每个进程都会对应一些资源,进程是重要的“系统资源”,由操作系统负责管理。以组织和描述的方式进行管理。

描述

    使用c语言中的结构体对进程的属性进行描述,每个这样的结构体称为“进程控制块”,简称:PCB。

PCB

1)pid

    进程的身份标识符,不同的进程有不同的pid(唯一的数字)。

2)内存指针

    指向了这个进程使用的内存空间。

3)文件描述符

    硬盘上的文件,等其他资源。

4)进程调度相关属性(这里写一些重要的属性)

   1. 进程的状态

       就绪状态,运行状态,阻塞状态(进程正在其他地方运行)

   2.优先级

       对进程划分优先级,先执行哪个再执行哪个。

   4.上下文

       操作系统再对进程进行切换的时候,记录进程的中间状态。下一次进程执行的时候就可以恢复原来的状态。

   5.记账信息

       操作系统统计每个进程在cpu上占用的时间和执行指令的条数,根据这个来决定下个阶段该如何调度。

管理

    通过一个双向链表对进程管理起来,把每个进程的pcb通过双向链表连接起来(这里不是一个单纯的双向链表)

内存管理

    如果有一个进程对内存的使用越界了,刚好影响到了另一个进程的内存空间,那么就有可能导致两个进程都崩溃。所以提出了虚拟内存的方法。

    针对进程使用的内存空间,进行隔离。代码里也不在使用物理内存,而使用虚拟内存。由操作系统专门的硬件设备负责虚拟内存到物理内存的转换。

 注意:操作系统中硬件设备一旦发现进程1的内存越界,就会反馈一个错误,使其进程崩溃。这样就不会影响其他进程了。

进程间通信

    这样对进程隔离起来,但是进程间需要数据交互。实现的核心思想:对进程间提供一个公共可以访问的空间,基于这个公共空间实现数据交互。

    这里列举一些主流操作系统提供的进程间通信机制:管理,共享内存,文件,网络,信号量,信号。

线程

    进程对于系统资源的开销比较大,因此提出了多线程,共用一个进程的资源。

    一个进程包含多个线程,多线程对一个进程间的资源进行共享(内存,文件描述符表等),这样就节省了资源,但是会引发线程安全问题。

    线程安全,多个线程争取同一块资源,一个进程间某个线程抛异常可能导致整个进程的崩溃。

注意:

   1)每个线程都对应不同的pcb,当pcb被cpu调度时,这个线程就启动了。

   2)操作系统调度时,是以线程为单位的。

   3)一个进程里面的线程,pid,内存指针,文件描述符表都是相同的。

   4)线程之间是同时进行的,我们看起来貌似没有规则。其实在操作系统内核中,是有一定的规律(取决于操作系统调度器策略的实现)。

   5)进程专门负责资源分配,线程接管和调度一切相关内容。

小结:

    这块的内容我们需要理解,这样会加深我们对其的记忆。

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

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

相关文章

huffman编译码

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 利用哈夫曼编码进行信息通信可以较大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码;在接收端将传来的数据进行译码(复原)。对…

Python期末复习题:文件

Python期末复习题:文件 文章目录Python期末复习题:文件一、二手房数据统计二、学生成绩统计一、二手房数据统计 附件文件house.csv 中存储一些二手房数据,中文编码为GBK,对文件中的数据进行统计分析。 文件中数据格式如下所示&…

理解Attention机制的query key value

背景 在Attention机制引入前,自然语言处理里的深度学习模型有以下缺点: 长序列的推理存在信息损失/梯度消失:输入序列越长,模型越难保存初始输入信息。运算量大并且不能并行:RNN的每一步推理都是基于上一个步的结果。…

Python小游戏自己动手编写,你能写出几个(分享版)

今天分享一个有趣的Python游戏库freegames,它里面包含经典小游戏,像贪吃蛇、吃豆人、等等。可以通过1行代码重温这些童年小游戏,后面还会分享源码,可以自己学习游戏编写,相信你会超有成就感! Paint 涂鸦 在…

Springboot Websocket一般封装方法

此方法不是唯一&#xff0c;只是自己对于Springboot中关于Websocket处理思路比较清晰的一种&#xff0c;在此记录下来。总共不过就四个文件而已。 一、创建Springboot项目&#xff0c;添加不可或缺的pom <dependency><groupId>org.springframework.boot</grou…

内存模块 --- 基础扫盲

SDRAM synchronous dynamic random-access memory 同步动态随机存储器 同步&#xff1a;需要同步时钟支持工作&#xff0c;内部命令的发送与数据的传输都是以这个时钟为基准 动态&#xff1a;内部的存储阵列需要不断地刷新来保证数据不丢失 随机&#xff1a;可以自由地在指定地…

MyBatis进阶版

本文有点难 目录 1.一些区分 1.1参数占位符#{}和${} 1.1.1SQL注入 1.1.2like查询 1.2resultType和resultMap 2.映射查询 2.1一对一表映射 2.2一对多表映射 3.动态SQL 3.1标签 3.2标签 3.3标签 3.4标签 3.5标签 1.一些区分 1.1参数占位符#{}和${} ①什么是#{}&a…

【CSS】表布局,浮动布局

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录表布局表层表标题(caption)border-collapse边框隐藏表大小table-layout(表宽度)vertical-align例…

你安全吗?丨虎云系统“后门”

作者&#xff1a;黑蛋 在电视剧《你安全吗&#xff1f;》中&#xff0c;马平川这个人物已经慢慢浮出水面&#xff0c;算是此部电视剧幕后的最大反派&#xff0c;他明面上是虎迫集团的技术总监&#xff0c;是虎云系统的负责人&#xff0c;开发者。背后却在泰曼达有着诈骗基地&a…

2022年11月21日13:32:00——T5——JS对象与Date日期函数

1、JavaScrip对象的使用&#xff1a; /** * 1、对象的声明赋值使用的是{}花括号&#xff0c;大括号 * 2、对象中的值以key:value的格式进行赋值&#xff0c;多个值中间使用【,】区分 * 3、获取对象中的值的方法需要通过[]并给与key名的方式获取&…

电脑怎么设置开机密码?简单几步给你的电脑“上锁”

在我们日常生活中&#xff0c;最常见的就是开机密码了&#xff0c;而电脑作为我们使用频率最高也是最复杂的设备&#xff0c;其安全性也是非常重要的&#xff0c;那么电脑怎么设置开机密码&#xff1f;那么今天我们就来说一说开机密码的设置方法&#xff01;为了更安全&#xf…

Essay写作字数怎么正确进行删减?

对于留学生来说&#xff0c;Essay写作伴随着整个留学生活。正因为留学生大量的Essay作业&#xff0c;不少留学生为了规定的Essay字数而发愁&#xff0c;毕竟既不能写得太少&#xff0c;又不能写得太多&#xff0c;所以很纠结。那么如何根据老师规定的字数进行删减呢&#xff1f…

Talk | 微软亚洲研究院宋恺涛南大余博涛:面向文本/音乐序列任务的Transformer注意力机制设计

本期为TechBeat人工智能社区第456期线上Talk&#xff01; 北京时间11月22日(周二)20:00&#xff0c;微软亚洲研究院研究员——宋恺涛与南京大学硕士研究生——余博涛的Talk将准时在TechBeat人工智能社区开播&#xff01; 他们与大家分享的主题是: “面向文本/音乐序列任务的Tra…

String类_Java(一)

作者&#xff1a;爱塔居的博客_CSDN博客-JavaSE领域博主 专栏&#xff1a;JavaSE &#x1f33c;作者简介&#xff1a;大三学生&#xff0c;希望跟大家一起进步&#xff01; 文章目录 目录 文章目录 前言 一、构造字符串 二、Sring对象的比较 2.1 比较是否引用同一对象 2.2 比较…

跨平台编译工具--CMake上手教程

文章目录一、引入二、基本关键字1.PROJECT2.SET3.MESSAGE4.ADD_EXECUTABLE5.ADD_SUBDIRECTORY(1)使用(2)CMakeLists执行顺序(3)输出文件的位置6.INSTALL(1)安装文件(2)安装非目标文件可执行文件(3)安装目录(4)安装指令7.ADD_LIBRARY8.SET_TARGET_PROPERTIES三、语法的基本规则四…

知识引擎藏经阁天花板——高性能Java架构核心原理手册

开场 本书是按照程序设计与架构的顺序编写的&#xff0c;共13章。 第1章介绍学习高性能Java应了解的核心知识&#xff0c;为前置内容。 第2章和第3章讲解在编写代码之前&#xff0c;如何高效地为My SQL填充亿级数据&#xff0c;并对My SQL进行基准测试&#xff0c;以便在之后…

Linux-awk和printf

printf printf ‘输出类型输出格式’ 输内容 输出类型&#xff1a; %ns 输出字符串&#xff0c;n是数字指代输出几个字符 %ni 输出整数&#xff0c;n是数字&#xff0c;指代输出几个数字 %m.nf 输出浮点数&#xff0c;m和n是数字&#xff0c;指代输出总位数和小数位数&#xf…

YOLO V1学习总结

图片大小&#xff1a;448 * 448 —> 7 * 7 *&#xff08;5 * B C&#xff09; 5&#xff1a;每个框的x,y,w,h,confidence; B2&#xff1a;在7*7的feature上&#xff0c;每个cell会生成2个预测框&#xff1b; C&#xff1a;类别数。 损失函数 坐标中心误差和位置宽高的误差…

卷积神经网络基本概念

卷积神经网络基本概念1. 感受野2. 卷积核3. 特征图【feature map】4. 通道【channel】5. 填充【padding】6. 步长【stride】7. 池化【pooling】8. dropout数字1处&#xff1a;一个圈表示一个神经元数字2处&#xff1a;一个圈表示一个神经元&#xff0c;圈的大小表示感受野的大小…

基于matlab的最小支配集CDS仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 支配集的定义如下&#xff1a;给定无向图G &#xff08;V , E&#xff09;,其中V是点集&#xff0c; E是边集&#xff0c; 称V的一个子集S称为支配集当且仅当对于V-S中任何一个点v, 都有…