多进程和多线程基础概念LINUX

进程和程序的区别

程序是静态的,它是保存在磁盘上的指令的有序集合,没有任何执行的概念进程是一个动态的概念,它是程序执行的过程,包括了动态创建、调度和销毁的整个过程

并行:在 cpu 多核的支持下,实现物理上的同时执行

并发:有限的 cpu 核芯的情况下 ,利用快速交替(时间片轮转)执行来达到宏观上的同时执行  

7094d965e38f4a4e8df3c761b2097e19.png

 

0a24a038de284c4a943240c28acd804f.png

每个任务执行的时间是由时间片来决定的

时间片:将一段时间分成多等份

eg:1s/1000=1微秒

 Linux 进程管理 :

  1. 在 Linux 系统中,管理进程使用树型管理方式。 
  2.  每个进程都需要与其它某一个进程建立父子关系,对应的进程叫做父进程。
  3. Linux 系统会为每个进程分配id ,这个id作为当前进程的唯一标识,当进程结束,则会被回收。
  4. 进程的id与父进程的id分别通过getpid()与getppid()来获取

进程空间的分配:

0e1cca853108480c9a4c44502f14fbc6.png

 用户空间的分配:

e478f1e472a84fd79a51b2da8c3b5645.png

 

  • stack : 存放非静态的局部变量
  • heap : 动态申请的内存.
  • bss : 未初始化过的全局变量(包括初始化为0的,未初始化过的静态变量(包括初始化为0).
  • data : 初始化过并且值不为0的全局变量,初始化过的不为0静态变量.
  • rodata : 只读变量(字符串之类).
  • text : 程序文本段(包括函数,符号常量)

内核态的转换: 

  1.  当用户进程需要通过内核获取资源时,会切换到内核态运行,此时当前进程会使用内核空间的资源
  2.  用户需要切换到内核态运行时,主要是通过系统调用(算法)

6fd8dd9ffce94dde8e298f8a4215777a.png

虚拟地址 : 虚拟地址并不代表真实的内存空间,而是一个用于寻址的编号

物理地址 : 是指内存设备中真实存在的存储空间的编号 

操作系统通过调用MMU式的虚拟地址与物理地址建立映射关系:

直接访问物理地址,会导致地址空间没有隔离,很容易导致数据被修改通过虚拟地址空间可以实现每个进程空间都是独立的,操作系统会映射到不用的物理地址区间,在访问时互不干扰.

1944ea96169c4794a090536b068c7297.png

进程的堆栈大小:

  1.  Linux下进程栈的默认大小是8M,可以通过 ulimit -s查看
  2.  堆的大小理论上大概等于进程虚拟空间大小-内核虚拟内存大小,Linux下,进程的高位1G留给内核,低位3G留给用户,所以进程堆大小小于3G。
  3.  最大进程数在Linux下,通过ulimit -u查看系统的最大进程数

e85c0ace78e14a12ac649b6ea60f4a4c.png

进程状态管理:

进程状态分为三个基本状态,即运行态,就绪态,阻塞态。在五态模型中,进程分为新建态、终止态,运行态,就绪态,阻塞态

三态模型:

  1.  运行(running)态:进程占有处理器正在运行。
  2.  就绪(ready)态:进程具备运行条件,等待系统分配处理器以便运行。
  3.  等待(wait)态:又称为阻塞(blocked)态或睡眠(sleep)态,指进程不具备运行条件,正在等待某个事件的完成

e1cb837cec4e44ea84c335423fcfcc96.png

 

  •  运行态(TASK_RUNNING) : 此时进程或者正在运行,或者准备运行,就绪或者正在进行都属于运行态
  • 睡眠态(TASK_SLEEP): 此时进程在等待一个事件的发生或某种系统资源可中断的睡眠(TASK_INTERRUPT) : 可以被信号唤醒或者等待事件或者资源就绪不可中断的睡眠(TASK_UNTERRUPT) : 只能等待特定的事件或者资源就绪
  • 停止态(TASK_STOPPED) : 进程暂停接受某种处理。例如:gdb调试断点信息处理。
  • 僵尸态(TASK_ZOMBIE):进程已经结束但是还没有释放进程资源

2854b4e15c28476984f8998b1c75a007.png

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux--网络层 IP协议

目录 0.往期文章 1.IP基本概念 2. IP协议报头格式 3.网段划分 两种网段划分的方式 为什么要进行网段划分 4.特殊的IP 地址 5.IP 地址的数量限制 6.私有 IP 地址和公网 IP 地址*** NAT技术 认识公网 运营商扮演的角色 7.路由 8.16位标识,3为标志和13位…

SpringCloud之一注册中心(Eureka)

一、Eureka概述 Eureka是Netflix公司开源的一个服务注册与发现的中间组件。 在微服务架构系统之中,我们经常提三个角色:注册中心 (Register)、服务提供者(Provider)、服务消费者(Consumer)。 1.注册中心:服务提供者可以将服务发布到注册中心…

ClkLog常见问题-埋点集成篇Sec. 1

本篇主要解答ClkLog使用过程中【埋点集成】阶段的常见问题。 1.【指标项数据统计】 问:数据概览无法看到数据。 答:如果数据概览所有指标项都没有数据,则需要先检查埋点数据是否接收成功;如果只是会话相关数据(访问次数…

《基于 Spark 的平替药品智能推荐方法》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

大型物流运输无人机技术详解

随着科技的不断进步和电子商务的蓬勃发展,大型物流运输无人机作为未来物流体系的重要组成部分,正逐步从概念走向实际应用。这类无人机以其超大的载重能力、高效的运输效率和广泛的覆盖范围,为解决远距离、大批量货物运输难题提供了创新方案。…

电机知识汇总

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言1、电机发展史2、电机入门①、书籍②、视频③、开发文档④、博客 3、什么是步进电机4、基本结构和工作原理4、负载…

深入探讨量子计算领域在发展过程中所遇到的难题及其解决方案。

一、引言 量子计算作为未来科技的重要方向,其潜力巨大,但同时也面临着诸多技术挑战。这些挑战不仅制约了量子计算的进一步发展,也考验着科学家和工程师们的智慧和毅力。本文将探讨量子计算面临的主要技术挑战,并分析其可能的解决…

【前缀和算法】--- 一维和二维前缀和模板

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: 算法Journey 本文开始,博主开始讲解有关前缀和的算法,本篇博客我们先来了解一下有关前缀和的两个模板。 🏠 一维前缀和模板 &…

【YashanDB知识库】共享集群YAC换IP

【标题】共享集群YAC换IP 【需求分类】安装部署,配置变更 【关键字】安装部署,更换IP,运维,配置变更,高可用,YAC 【需求描述】客户需要将已经部署的YAC集群更换IP,从测试网段切换生产网段 【…

【通信协议】I2C总线(一主多从)

目录 I2C简介 硬件电路 软件模拟初始化 基本单元 起始信号 停止信号 发送一个字节 接收一个字节 发送应答 接收应答 I2C基本单元代码 MyI2C.h MyI2C.c 完整数据帧 主机发送数据到指定从机 主机接收从机数据 主机发送后接收数据 学习资料分享 本博客使用软件模…

ARM工作模式

ARM ARM架构ARM七个工作模式寄存器异常向量表存储格式(内存大小端)汇编指令 ARM架构 RAM:随机访问存储器 ROM:只读访问存储器 AHB:先进高速总线 APB:先进外设总线 USB:统一串行总线 norflash&am…

Mac电脑遇到DNS解析失败,ip可以访问,域名无法访问

当Mac电脑遇到DNS解析失败的问题时,可以尝试以下几个解决方法‌: 1.检查网络连接‌:确保Mac已连接到可用的网络,并且网络连接正常。可以尝试重新连接Wi-Fi或使用有线连接来排除网络问题。 2.清除DNS缓存‌:打开终端应…

《通义千问AI落地—中》:前端实现

一、前言 本文源自微博客且已获授权,请尊重版权. 书接上文,上文中,我们介绍了通义千问AI落地的后端接口。那么,接下来我们将继续介绍前端如何调用接口以及最后的效果;首先看效果: 上述就是落地到本微博客以后的页面效果…

Java常用的网络IO模型与限流算法总结

什么是IO(Input/Output)? IO(输入/输出)指的是计算机系统中数据的输入和输出操作。它涉及从外部设备(如硬盘、网络、键盘、鼠标)读取数据(输入)和将数据发送到这些设备(输出)。IO操…

WPF如何获取DataGrid的选中行

在DataGrid中加入这一行 <MouseBindingCommand"{Binding OpenWindowCommand}"CommandParameter"{Binding ElementNameNewPlanDataGrid, PathSelectedItem}"Gesture"LeftDoubleClick" /> </DataGrid.InputBindings> 然后ViewModel中…

[每周一更]-(第111期):从零开始:如何在 CentOS 上源码编译安装 PHP 7.4

文章目录 系统信息&#xff1a;0、安装版本&#xff1a;1、下载/解压2、安装依赖3、配置autoconf4、配置参数5、编译和安装6、验证安装的插件6.1、配置php.ini6.2、配置opcache 7、错误7.1 Failed to connect to 2a03:2880:f10e:83:face:b00c:0:25de: Network is unreachable7.…

2024年最新Flink教程,从基础到就业,大家一起学习--Flink运行架构底层源码详解+实战

本文涉及到大量的底层原理知识&#xff0c;包括运行机制图解都非常详细&#xff0c;还有一些实战案例&#xff0c;所以导致本篇文章会比较长&#xff0c;内容比较多&#xff0c;由于内容太多&#xff0c;很多目录可能展示不出来&#xff0c;需要去细心的查看&#xff0c;非常适…

VS项目写完执行exe隐藏调试用的黑窗口(控制台)

在vs创建完项目&#xff0c;我们只希望运行显示界面&#xff0c;不显示控制台&#xff0c;控制台就是这样的黑色窗口&#xff0c;他可以在我们调试的时候打印一些东西来判断辅助编程。 1、首先修改为窗口模式 2、在你的main文件里最上面加入一行代码&#xff1a; #pragma comme…

【hot100篇-python刷题记录】【滑动窗口最大值】

R6-子串篇 目录 Max Sort 单调队列法&#xff1a; Max 完了&#xff0c;我好像想到python的max class Solution:def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:ret[]left,right0,kwhile right<len(nums):ret.append(max(nums[left:right]))ri…

信刻光盘摆渡系统安全合规实现跨网数据单向导入/导出

在当今信息化、数字化时代&#xff0c;各种数据传输和储存技术发展迅速&#xff0c;各安全领域行业对跨网数据交互需求日益迫切&#xff0c;数据传输的安全可靠性对于整个过程的重要性不可忽视。应如何解决网络安全与效率之间的矛盾&#xff0c;如何安全合规地实现跨网数据单向…