Linux多进程

news2024/9/22 23:21:01

进程的概述

进程是计算机科学中的一个基本概念,它指的是在操作系统中正在执行的程序的实例

在Linux操作系统中,进程是程序执行的实体,是资源分配的基本单位

在在Ubuntu中,通过使用ps命令可以查看当前的进程列表

ps aux

进程与程序的区别

  1. 定义

    • 程序:程序是一组指令的集合,它们被编写来执行特定的任务,存储在磁盘上的可执行文件中。程序是静态的,不包含关于执行状态的信息。
    • 进程:进程是程序的执行实例,是程序在执行时的动态实体。它不仅包含程序代码,还包括程序计数器、寄存器、堆栈、内存分配等执行状态信息。
  2. 存储位置

    • 程序通常存储在磁盘上,是持久的。
    • 进程存在于内存中,是暂时的,随程序的执行而动态变化。
  3. 执行

    • 程序本身不执行任何操作,它只是指令的集合。
    • 进程是程序在执行时的实体,具有执行能力。
  4. 生命周期

    • 程序的生命周期与文件系统相关,只要文件未被删除,程序就存在。
    • 进程的生命周期与执行过程相关,一旦执行结束或被终止,进程就会消亡。

程序是一组静态的指令集合,而进程是这些指令在执行时的动态实体,包含了程序计数器、寄存器、内存等执行状态信息。程序是进程执行的基础,而进程是程序执行的载体。

并发与并行

并发(Concurrency)

  1. 定义:并发是指在计算机系统中,多个任务(程序或线程)似乎同时执行的能力。实际上,这些任务可能是交替执行的,但它们在时间上被分割,使得从外部看起来像是同时进行。
  2. 多任务处理:并发通常通过时间分片或多任务处理实现,操作系统将CPU时间分配给不同的任务,快速地在它们之间切换。
  3. 单核处理器:即使在单核处理器上,也可以通过操作系统的调度实现并发执行。
  4. 目的:并发的主要目的是提高资源利用率和系统吞吐量

并行(Parallelism)

  1. 定义:并行是指在计算机系统中,多个任务或计算过程真正同时执行的能力。
  2. 硬件支持:并行需要硬件支持,如多核处理器、多处理器或分布式计算系统。
  3. 同时执行:在并行计算中,任务或数据被分割成多个小块,每一块都在不同的处理器或计算节点上同时执行。
  4. 目的:并行的主要目的是减少程序的执行时间,通过并行处理可以显著提高计算速度。

区别

  • 执行方式:并发是任务交替执行,给人一种同时执行的假象;并行是任务真正同时执行。
  • 硬件要求:并发可以在单核上实现,而并行需要多核或多处理器。
  • 性能提升:并行通常能提供更显著的性能提升,因为它减少了任务的总体执行时间。
  • 复杂性:并行编程通常比并发编程更复杂,因为它需要处理数据同步、通信和潜在的竞态条件。

进程的空间分配

进程的空间分配

进程建立之后,系统则要为这个进程分配相应的空间,32位Linux系统中,会为每个进程分配 4G 的空间。

4G的进程空间主要分为两部分,高位1G是内核空间,低位3G是用户空间

 用户空间又具体分为如下区间

stack : 存放非静态的局部变量

heap : 动态申请的内存

.bss : 未初始化过的全局变量(包括初始化为0的,未初始化过的静态变量(包括初始化为0)

.data : 初始化过并且值不为0的全局变量,初始化过的不为0静态变量

.rodata : 只读变量(字符串之类)

.text : 程序文本段(包括函数,符号常量)

Tips:1. 当用户进程需要通过内核获取资源时,会切换到内核态运行,此时当前进程会使用内核空间的资源

2. 用户需要切换到内核态运行时,主要是通过 系统调用

虚拟地址与物理地址 

  1. 物理地址(Physical Address)
    • 物理地址是内存单元在实际物理内存(RAM)中的实际地址。
    • 它们是直接被内存管理单元(MMU)和CPU用来访问物理内存的地址。
    • 物理地址的大小受限于系统的物理内存大小。
  2. 虚拟地址(Virtual Address)
    • 虚拟地址是程序在执行时使用的地址,它们通过内存管理单元(MMU)转换为物理地址。
    • 虚拟地址允许每个进程拥有自己的地址空间,这个地址空间不必与物理内存的实际布局相对应。
    • 虚拟地址的大小通常由CPU的地址宽度决定,例如32位或64位。
  3. 内存管理单元(MMU)
    • MMU是硬件组件,负责将虚拟地址转换为物理地址,这个过程称为地址转换。
    • 当程序访问内存时,MMU查找它的页表,找到虚拟地址对应的物理地址。
  4. 内存映射(Memory Mapping)
    • 内存映射是将文件或设备直接映射到虚拟地址空间的过程,这样可以使用虚拟地址来访问文件或设备。
  5. 地址转换过程
    • 当程序访问一个虚拟地址时,MMU使用页表来确定对应的物理地址。
    • 如果虚拟地址不在当前的页表中,将触发缺页异常(Page Fault),操作系统会处理这个异常,将缺失的数据加载到物理内存中。

 在操作系统中使用虚拟地址空间主要是基于以下原因:

1.直接访问物理地址,会导致地址空间没有隔离,很容易导致数据被修改

2.通过虚拟地址空间可以实现每个进程空间都是独立的,操作系统会映射到不用的物理地址区间,在访问时互不干扰

Linux的状态管理

进程状态描述了进程在操作系统中的生命周期中的不同阶段

三态模型

进程的三态模型是操作系统中描述进程状态及其转换的基本理论,包括以下三种状态:

  1. 运行态(Running):进程当前正在执行,占用CPU资源。在单核系统中,只有一个进程处于此状态;而在多核系统中,可以有多个进程同时处于运行态 。

  2. 就绪态(Ready):进程已经具备了运行的所有条件,包括所需的资源,等待CPU调度执行。处于就绪状态的进程可能存在多个,它们通常被组织在就绪队列中等待CPU时间 。

  3. 等待态(Waiting或Blocked):又称阻塞态或睡眠态,进程正在等待某个事件的发生,如I/O操作完成或某些资源的可用性。在这种状态下,即使分配CPU资源,进程也无法立即执行 。

进程状态转换的主要场景包括:

  • 运行态→等待态:进程可能因等待资源(如I/O操作)而从运行状态转换到等待状态。
  • 等待态→就绪态:当进程所等待的事件发生,如I/O操作完成,进程从等待状态转换到就绪状态。
  • 运行态→就绪态:由于时间片用完或出现更高优先级的进程,当前运行的进程可能会被挂起,转换到就绪状态。
  • 就绪态→运行态:当CPU空闲或调度策略选中就绪队列中的进程时,进程从就绪状态转换到运行状态 。

三态模型简洁地描述了进程在生命周期中的基本状态及其转换,是操作系统中进程管理的核心概念之一。

五态模型

五态模型是操作系统中描述进程状态及其转换的一种模型,它在传统的三态模型基础上增加了新建态(new)和终止态(exit),具体包括以下五种状态:

  1. 创建态(New)

    • 对应于进程被创建时的状态,此时进程已经拥有进程控制块(PCB),但其他资源尚未就绪,进程尚未进入就绪队列。创建进程需要两个步骤:分配所需的资源和建立管理信息,然后操作系统将该进程设置为就绪态并等待调度执行 。
  2. 就绪态(Ready)

    • 进程已经具备了除CPU以外的所有必要资源,一旦获得CPU即可运行。系统中可能存在多个处于就绪状态的进程,它们通常被组织在就绪队列中等待CPU时间 。
  3. 运行态(Running)

    • 进程当前正在执行,占用CPU资源。在单核系统中,只有一个进程处于此状态;而在多核系统中,可以有多个进程同时处于运行态 。
  4. 等待态(Waiting或Blocked)

    • 进程正在等待某个事件的发生,如I/O操作完成或信号量等资源的可用性,因此暂时无法执行。即使分配了CPU资源,进程也无法立即运行,故称该状态为阻塞状态 。
  5. 终止态(Exit)

    • 进程完成任务正常结束,或因错误异常终止,或被操作系统及有终止权的进程所终止时所处的状态。处于终止态的进程不再被调度执行,操作系统将进行善后处理,回收资源并最终从系统中删除该进程 。

五态模型通过引入新建态和终止态,更加细致地描述了进程从创建到结束的整个生命周期,为操作系统提供了更为丰富的状态管理和调度策略。

经常使用的进程状态:

(1)运行态(TASK_RUNNING) : 此时进程或者正在运行,或者准备运行,就绪或者正在进行都属于运行态

(2)睡眠态(TASK_SLEEP): 此时进程在等待一个事件的发生或某种系统资源

可中断的睡眠(TASK_INTERRUPT) : 可以被信号唤醒或者等待事件或者资源就绪

不可中断的睡眠(TASK_UNTERRUPT) : 只能等待特定的事件或者资源就绪

(3)停止态(TASK_STOPPED) : 进程暂停接受某种处理。例如:gdb调试断点信息处理。

(4)僵尸态(TASK_ZOMBIE):进程已经结束但是还没有释放进程资源

Linux下进程的相关命令

  1. ps:查看当前运行的进程

ps -aux 显示所有进程的详细信息

ps -ef 列出所有的进程,相比 ps -aux 信息要少一些

  1. top:实时显示进程的资源占用情况,类似于Windows的任务管理器。

top -i:不显示任何闲置 (idle) 或无用 (zombie) 的进程

top -n:更新的次数,完成后将会退出top
  1. pgrep:根据名称或其他属性查找进程。

pgrep -u username 查找特定用户的所有进程
  1. kill:向特定PID的进程发送信号

kill -9 PID 发送SIGKILL信号以杀死进程
  1. pstree:以树状图展示进程和它们的父进程关系

pstree -p 显示进程树并包括进程的PID

 结语:

无论你是初学者还是有经验的开发者,我希望我的博客能对你的学习之路有所帮助。如果你觉得这篇文章有用,不妨点击收藏,或者留下你的评论分享你的见解和经验,也欢迎你对我博客的内容提出建议和问题。每一次的点赞、评论、分享和关注都是对我的最大支持,也是对我持续分享和创作的动力。

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

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

相关文章

WSL2安装与使用

使用WSL2的前提条件: 1.开启CPU的虚拟化 打开任务管理器 ->性能->查看CPU虚拟化 2.开启Windows功能 任务栏输入“功能”,勾选下面选项,然后按照提示重新启动电脑。 3.搜索栏输入cmd,右键以管理员身份运行,输入…

对商品评论进行文本分析(NLP)的实战项目

文本分析技术是指使用计算机程序或算法处理、分析和理解文本数据的一系列方法。这种技术在自然语言处理(NLP)领域中非常重要,它可以应用于多种场景,包括但不限于情感分析、主题识别、信息提取、文本分类等。以下是一些常见的文本分…

SpringBoot+Vue3整合minio,实现分布式文件存储

文章目录 几种常用的文件存储安装和使用minioSpringBoot整合minio 基本所有的软件项目都会需要文件存储功能,图片、视频存储。 几种常用的文件存储 经常用的几种方案,直接存在本地文件夹,开发一个简单的系统当然没有问题。随机系统所需的资源…

90.WEB渗透测试-信息收集-Google语法(4)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:89.WEB渗透测试-信息收集-Google语法(3) • inurl • 搜索特殊 UR…

Leetcode JAVA刷刷站(55)跳跃游戏

一、题目概述 二、思路方向 在Java中,为了解决这个问题,你可以采用贪心算法的思想。贪心算法在这里的应用主要体现在,每一步都尽可能跳得远,以此来判断是否能够到达数组的最后一个下标。 算法的思路是,遍历数组nums&am…

ICWS 2024 _ 基于生成长度预测的大语言模型推理请求调度

随着技术的快速迭代,大语言模型(Larage Langugage Model, LLM )在各种场景下都展示出强大的文本处理能力,越来越多的业务期待通过接入大模型服务,提升业务效果。区别于传统RPC请求服务时间相近,大模型请求服…

《计算机操作系统》(第4版)第2章 进程的描述与控制 复习笔记

第2章 进程的描述与控制 一、前趋图和程序执行 1. 前趋图 (1)定义 前趋图是指一个有向无循环图,可记为DAG, 它用于描述进程之间执行的先后顺序。 (2)图形表示 前趋图如图2-1所示。 图2-1 前趋图 2. 程序的执行 (1)程序顺序执行时的特征 ①顺序性。 ②封闭性。 ③ 可…

Robot Operating System——创建可执行文件项目的步骤

大纲 初始化环境创建Package代码添加依赖(package.xml)修改编译描述find_package寻找依赖库指定代码路径和编译类型(可执行文件/动态库)链接依赖的库完整文件 编译测试总结参考资料 之前我们看到ROS2中,有的Node的实现…

案例 | 生产制造中的直线度测量

关键词:直线度测量仪,直线度 生产中不仅需要评价产品的外观尺寸,还需要对直线度(弯曲度)等尺寸加以测量。作为一种评价产品直度的重要指标——直线度,能够对其进行检测是非常重要的。 关于直线度,对于一些弯…

初学者使用WordPress可能会遇到的问题以及如何解决

WordPress 作为一个普及度相当广的内容管理系统 (CMS),对于刚刚开始建立自己第一个网站的初学者来说是非常合适的选择。它不需要你懂编写代码,且对 SEO 友好,管理起来也很方便。然而,许多初学者在使用 WordPress 时会犯一些错误&a…

各厂家BI对比

帆软BI、奥威BI、永洪BI、思迈特BI、亿信华辰BI是国内知名的BI产品,不少企业在选型BI软件时都需要对这些BI软件进行了解,从中选择适合自己的一款。经过过年的发展,这些BI(商业智能)软件各自在多个行业中都有广泛的应用…

Anti-Bandit Neural Architecture Search for Model Defense

模型防御的Anti-Bandit网络架构搜索 论文链接:https://arxiv.org/abs/2008.00698(ECCV2020) 项目链接:https://github.com/bczhangbczhang/ABanditNAS 模型防御的Anti-Bandit网络架构搜索Abstract1 Introduction2 Related Work3 Anti-Bandit网络架构搜…

前端项目重新打包部署后如何通知用户更新

前端项目重新打包部署后如何通知用户更新 前端项目重新打包部署后如何通知用户更新常用的webSocket解决方案纯前端方案路由拦截多线程main.ts中 创建多线程多线程逻辑处理 前端项目重新打包部署后如何通知用户更新 前端项目重新打包部署后,由于用户没及时更新页面&…

Vue 自定义文字提示框

目录 前言代码演示相关代码文字提示框组件定义组件调用前言 今天开发遇上了一个新的问题,要求写一个带着滑动动画的文字提示框。但是我经常使用的Element-UI组件库只有淡入淡出效果,并且想要修改样式只能全局修改,非常不利于后期的开发。因此,我最终选择直接自定义一个符合…

VAuditDemo文件漏洞

目录 VAuditDemo文件漏洞 一、首页文件包含漏洞 包含图片马 利用伪协议phar:// 构造shell.inc被压缩为shell.zip,然后更改shell.zip 为 shell.jpg上传 二、任意文件读取漏洞 avatar.php updateAvatar.php logCheck.php 任意文件读取漏洞利用 VAuditDemo文件…

Python中使用SQLite数据库的方法4-3

对于数据库的操作,主要包括“增”、“删”、“改”、“查”四种。在Python中使用SQLite数据库的方法4-1_python的sqlite怎么打开-CSDN博客和Python中使用SQLite数据库的方法4-2_python2 sqlite2-CSDN博客中实现增”、“删”和“查”三种操作。 1 带过滤条件的“查”…

C语言基础(七)

1、二维数组: C语言中的数组是一种基本的数据结构,用于在计算机内存中连续存储相同类型的数据。 数组中的每个元素可以通过索引(或下标)来访问,索引通常是从0开始的。数组的大小在声明时确定,并且之后不能…

在Linux下搭建go环境

下载go go官网:All releases - The Go Programming Language 我们可以吧压缩包下载到Windows上再传到Linux上,也可以直接web下载: wget https://golang.google.cn/dl/go1.23.0.linux-amd64.tar.gz 解压 使用命令解压: tar -x…

Leetcode JAVA刷刷站(57)插入区间

一、题目概述 二、思路方向 为了解决这个问题,我们可以遍历给定的区间列表 intervals,并同时构建一个新的列表来存储最终的合并结果。遍历过程中,我们检查当前区间是否与 newInterval 重叠或相邻,并根据需要进行合并。如果不重叠…

虚拟化平台kvm架构 部署kvm虚拟化平台

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…