首页 > 系统相关 >Linux多进程

Linux多进程

时间:2024-08-20 20:51:26浏览次数:9  
标签:状态 就绪 虚拟地址 Linux 进程 执行 CPU

进程的概述

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

在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

 结语:

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

标签:状态,就绪,虚拟地址,Linux,进程,执行,CPU
From: https://blog.csdn.net/2301_79695216/article/details/141366153

相关文章

  • Linux中MySQL安装与升级中的相关知识
    Linux中MySQL安装与升级中的相关知识1.MySQL的RPM安装通常分为不同的包,包括Server、Common、Client、Devel、Libs、Libs-compat、Test、Source,上述每个包的功能。Server:包含MySQL服务器的主要组件。Common:提供通用的功能和文件。Client:提供客户端工具用于连接服务......
  • Linux 控制系统帐户过期
    linux下控制帐户过期的方法:方法一:添加用户时useradduser1-e05/01/23#05/01/23:从后面读取其实就是2023年5月1号或修改下面文件的参数:[root@localhost]#grepEXPIRE/etc/default/useraddEXPIRE=实例7:指定参数执行useradd-D-e[root@localhost~]#date+%F2023-......
  • 推荐一款好用的SSH工具,再也不用手动敲Linux命令了
    前言对于仅支持终端命令形式操作的Linux系统,用户可能会遇到以下痛点和局限性:学习曲线陡峭:新手需要花费时间学习各种命令易出错:键入命令容易出错,某些命令会出现不可逆的影响效率问题:复杂任务需要多个组合命令,增加出错率可访问性不足:界面不友好,操作不直观资源管理复杂:查看......
  • Linux(CentOS7)安装MySQL8全过程
    下载官方地址:https://dev.mysql.com/downloads/mysql/选择版本前需先看一下服务器的glibc版本ldd--version  上传将下载好的tar包上传到服务器上,这里演示上传到了/usr/local/文件夹下 解压tar -Jxvfmysql-8.0.36-linux-glibc2.17-x86_64.tar.xz ......
  • Linux之磁盘分区
    Linux中设备的文件名linux秉持着万物皆是文件的思想,各类硬件设备也被当成文件对待,以下是常用设备的文件名中括号[]表示设备的序列名,比如/dev/sd[a-p],就表示有多个同类型的设备,他们的文件名分别是/dev/sda,/dev/sdb,.......dev/sdp总之,我们可以先理解为,访问这些文件就等......
  • python ssh上传文件到linux并解压
    importparamikoimportosdefupload_and_unzip(local_file,remote_file,zip_dir):#创建SSH客户端ssh=paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())private_key_path=r'F:\mysite.pem'#加载私钥文件......
  • linux sudo提权
    方法一、1.创建普通用户usernameuseraddusername2.执行以下命令以编辑sudoers文件,实际是vi/etc/sudoersvisudo找到该行内容rootALL=(ALL)ALL,添加username用户,保存退出:wqrootALL=(ALL)ALLusernameALL=(ALL)ALL方法二、1.创建普通用户u......
  • 多任务进程与线程
    多任务进程与线程一、多任务介绍​ 我们生活中有很多事情是同时进行的,比如开车的时候手和脚共同来驾驶汽车,再比如唱歌跳舞也是同时进行的;用程序来模拟:fromtimeimportsleepdefsing():foriinrange(3):print("正在唱歌...%d"%i)sleep(1)defda......
  • Liya Linux:Arch 的又一尝试,提供 Cinnamon 和 MATE 桌面,底层为 Btrfs
    LiyaLinux是一个相对较新的Linux发行版,基于广受欢迎的ArchLinux构建。LiyaLinux的出现,为那些希望体验ArchLinux强大功能但又不想从头构建系统的用户提供了一个更为简单的选择。它默认提供Cinnamon和MATE两种桌面环境,并且采用Btrfs文件系统作为底层支持。......
  • AlmaLinux release 9.4 安装docker环境
    1.安装docker环境1.1查看系统环境[root@AlmaLinux-9~]$cat/etc/redhat-release;uname-rs移除旧版本的Docker(如果有):sudoyumremovedocker\docker-client\docker-client-latest\docker-common\......