进程相关知识

news2024/9/23 21:29:44

进程和程序的区别


程序

程序是静态的,是存储在硬盘、SSD等存储介质中的一个文件,通常由源代码(如 .c 文件)编译生成的二进制可执行文件(如 a.out)。程序包含了指令和数据,但在未被执行时,它只是一个静态的代码和数据的集合。

在编译过程中,源代码文件(如 .c 文件)通过编译器生成一个可执行文件(如 a.out)。这个可执行文件在磁盘上静静地存在,直到被操作系统加载和执行


进程

进程是程序的运行实例,它是动态的。进程不仅包括程序的代码,还包括在程序运行过程中创建的各种资源和状态,如内存地址空间、CPU寄存器、文件句柄等。

进程的生命周期包括创建、执行、调度、等待、终止等多个阶段。当一个程序被加载到内存中并开始执行时,它就成为一个进程,并被分配一个唯一的进程标识符(PID)。

程序执行的过程,包括进程的创建、调度、消亡
.c——> a.out——> process(pid)

在终端中运行 ./a.out 时,操作系统会加载 a.out 文件到内存中,分配必要的资源并生成一个进程。这个进程在操作系统中有一个唯一的 PID,它会占用 CPU 资源并执行 a.out 中的指令,直到程序结束或被终止。

区别总结

  • 静态 vs 动态:程序是静态的,它是代码和数据的集合,存储在磁盘上;而进程是动态的,它是程序在运行时的一个实例,具有自己的执行环境和状态。
  • 执行状态:程序本身并没有执行状态,它只是指令和数据;而进程包含了执行状态,比如当前的程序计数器(指示当前执行到的指令)、栈指针、内存地址空间等。
  • 唯一性:同一个程序可以被多次加载并运行,生成多个进程,每个进程都有自己的 PID 和独立的执行环境。

1)程序是永存,进程是暂时的
2)进程有程序状态的变化,程序没有
3)进程可以并发,程序无并发
4)进程与进程会存在竞争计算机的资源
5)一个程序可以运行多次,变成多个进程;一个进程可以运行一个或多个程序

内存的分布

地址空间大小

内存的分布32位:2^32

在32位系统中,地址空间的大小是 2^32 字节,等于4GB。这意味着32位系统中的每个地址可以指向一个从0到2^32−1(即4GB)的内存位置

用户空间和内核空间

  • 0-3G,是进程的空间

这个范围通常被分配给用户进程使用,即用户空间。每个进程都可以访问这部分虚拟地址空间,独立于其他进程。用户空间中的地址对每个进程来说都是独立的,彼此之间不会干扰

 3G的内存空间

  1. Code 段(只读)

    • 这个区域存储了程序的可执行代码部分(即指令)。这个段通常是只读的,以防止程序在运行时意外修改自己的代码。
  2. Data 段(静态全局变量)

    • Data段存储了程序中已初始化的全局变量和静态变量。这个区域的内容在程序开始时已经被初始化,并在程序运行期间保留其状态。
  3. Heap 段(堆)

    • 堆是一个用于动态内存分配的区域。程序运行时,当调用malloccallocrealloc等函数时,动态分配的内存块来自于堆。堆的大小可以在程序运行时增长或缩小,具体取决于内存分配和释放操作。
  4. Map/Share 段(共享内存映射区)

    • 这一部分用于内存映射文件(mmap)和共享内存。通过内存映射,文件可以直接映射到进程的地址空间中,这样可以更高效地访问文件数据。共享内存则允许不同的进程共享内存区域,便于进程间通信。
  5. Stack 段(栈,8MB)

    • 栈用于存储函数调用的局部变量、函数参数、返回地址等。栈的大小通常有一定限制(如8MB),它是从高地址向低地址增长的。

这些区域组成了进程的虚拟地址空间,并通过内存管理单元(MMU)映射到实际的物理内存。这种分段机制帮助操作系统有效地管理内存资源,并确保程序的安全性和稳定性

 堆申请上限2.9G

size xxx查看 

  • 3G-4G是内核的空间

这一部分地址空间是为操作系统内核保留的。内核空间是共享的,所有进程都可以访问,但通常只有在内核模式下才能进行访问,用户模式下的访问会导致访问违例(如段错误)

虚拟内存和物理内存

  • 虚拟地址:虚拟内存是操作系统提供的一种抽象,使得每个进程看到的内存都是连续且独立的,即使在物理上不是如此。虚拟地址是进程访问内存时使用的地址。

  • 物理内存:物理内存是计算机中实际的RAM。由于虚拟地址与物理内存之间并不直接对应,操作系统使用一种叫做页表(Page Table)的结构来管理这种映射。

地址映射和页表

  • 地址映射:操作系统通过页表将虚拟地址映射到物理地址。页表存储了虚拟页到物理页的映射信息。当进程访问某个虚拟地址时,内存管理单元(MMU, Memory Management Unit)会通过页表查找相应的物理地址,并将该访问操作重定向到实际的物理内存。

  • 页(Page):在32位系统中,内存通常被划分为多个固定大小的块,称为页(Page)。一个典型的页大小是4KB,即 4096 字节。当进程需要访问内存时,MMU 会通过页表找到该虚拟地址所属的页,并确定该页在物理内存中的位置。

内存管理单元(MMU)

  • MMU:内存管理单元是处理器中的一个硬件组件,负责将虚拟地址转换为物理地址。MMU 使用页表进行地址转换,并且能够处理各种内存管理任务,如内存保护、页交换(paging)等。

进程分类

1、交互式进程  用户与系统交互
2、批处理进程   shell脚本 
3、 守护进程      输入法、杀毒软件

进程的作用

实现多任务处理

并发并行区别

并发:同一时刻同时运行(同时完成多个任务)

并发:指在同一时间段内,多个任务都在推进,但不一定是同时进行。这些任务可能会交替执行,由于 CPU 切换速度非常快,给人一种多个任务同时进行的错觉。

并行:指在同一时刻,多个任务真正地同时执行。这通常需要多个 CPU 核心或者多个处理器来实现。

进程的状态

3个状态,就绪→执行态→阻塞(等待,睡眠)基本操作系统
linux中的状态,运行态,睡眠态,僵尸,暂停态

调度算法、时间片、20ms、缓存

hdd机械硬盘、ssd固态硬盘

进程的调度,进程上下文切换
内核主要功能之一就是完成进程调度, 硬件,bios,io,文件系统,驱动
调度算法, other,idle
rr,fifo

宏观并行
微观串行

从用户的角度来看,多个进程似乎是在并行运行的,但在微观层面上,CPU 只能依次执行每个进程的指令。这种看似矛盾的现象是通过操作系统的高效调度和快速的任务切换来实现的。

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

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

相关文章

【计算机操作系统】基本分页存储管理

文章目录 基本分页存储管理分页存储的概念重要的数据结构——页表页表项大小计算地址转换实现 基本地址变换机构具有快表的地址变换机构快表(TLB)的概念引入快表后的地址变换局部性原理 两级页表单级页表 vs 两级页表 基本分页存储管理 非连续分配&#…

使用Python编写AI程序,让机器变得更智能

人工智能(AI)是当今科技领域最热门的话题之一。随着Python编程语言的逐渐流行,它已经成为许多人工智能编程的首选语言。本文将介绍如何使用Python编写AI程序,让机器变得更智能。 首先,Python提供了大量的AI库和工具&a…

Easysearch 性能测试方法概要

(公众号用的是QQ音乐,可以随时听) INFINI Easysearch INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 衍生自基于开源协议Apache 2.0 的Elasticsearch 7.10 版本&#xff0…

4-1-2 直流电机(电机专项教程)

4-1-2 直流电机(电机专项教程) 4-1-2 直流电机主要参数尺寸参数额定电压额定电流空载转速 如何控制直流电机有刷直流电机转向控制H桥电路控制转向 如何控制电机转速PWM控制电机转速 4-1-2 直流电机 之前学习了有刷直流电机的基本结构个工作原理&#xff…

[数据集][图像分类]电力场景电力线固定处连接处腐蚀有鸟巢分类数据集1279张3类别

数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):1279 分类类别数:3 类别名称:["corrosion","nes…

SparkSQL遵循ANSI标准

ANSI简介 ANSI Compliance通常指的是遵循美国国家标准学会(American National Standards Institute, ANSI)制定的标准。在计算机科学和技术领域,这通常涉及到数据库管理系统(DBMS)对于SQL语言的支持程度。 ANSI为SQL…

FreeRTOS 快速入门(二)之内存管理

目录 一、概述二、FreeRTOS 中管理内存的 5 种方法1、Heap_12、Heap_23、Heap_34、Heap_44.1 内存申请4.2 内存释放 5、Heap_5 三、Heap 相关的函数1、pvPortMalloc/vPortFree2、xPortGetFreeHeapSize3、xPortGetMinimumEverFreeHeapSize4、malloc 失败的钩子函数 一、概述 在…

CDGA|数据治理,就像在厨房里炒一盘好菜

数据治理,就像在厨房里炒一盘好菜,是一门既讲究技巧又注重细节的艺术。在这个信息爆炸的时代,数据如同食材,是支撑企业决策、优化运营、驱动创新的基石。而数据治理,则是将这些纷繁复杂的数据“食材”精心挑选、清洗、…

使用NPS搭建socks5隧道 | 内网穿透

在看春秋云镜靶场的WP时碰到用NPS来做代理的,这里刚好看到这篇文章:https://www.cnblogs.com/cute-puli/p/15508251.html,学习一下。 GUI界面管理更加方便。 实验环境 网络拓扑: kali: VMnet1(公网&…

ORB-SLAM3演示及运行

ORB-SLAM安装完成后的运行案例 ros启动 1、修改双目部分文件,主要是图象订阅话题名称 因为我是用的双目灰度相机,需要修改ORB_SLAM3/Examples/ROS/ORB_SLAM3/src下的 ros_stereo.cc和 ros_stereo_intertial.cc. 把订阅的话题改为自己系统发布的图象…

盲盒小程序开发,创新市场收益渠道

对于年轻消费者来说,盲盒是一个具有超强惊喜感和刺激性的消费方式,盲盒也在各大社交平台迅速火爆,线下门店更是上演“大长龙”式的排队景观,盲盒成为了一个具有非常大发展前景的行业! 一、线上发展 盲盒的销售渠道除…

矩阵和神经网络的优雅与力量-《Python神经网络编程》读后感

《Python神经网络编程》是一本非常优秀的神经网络入门编程书,作者手把手从安装环境开始,每一行代码都是在树莓派上就能运行的,甚至可以说不需要什么第三方库,仅仅用了矩阵的优雅和力量,就能够在树莓派上顺利的运行。 …

并发编程 | CountDownLatch是如何控制线程执行流程

CountDownLatch 是 Java 并发编程中的一个同步工具类,这个工具经常用来用来协调多个线程之间的同步,下面我们就来一起认识一下 CountDownLatch。 CountDownLatch介绍 应用场景 CountDownLatch主要是用于让一个或多个线程等待其他线程完成某些操作后再…

鸿蒙Harmony实战开发知识:“UIAbility组件的3种启动模式”

UIAbility的启动模式是指UIAbility实例在启动时的不同呈现状态。针对不同的业务场景,系统提供了三种启动模式: singleton启动模式 singleton启动模式为单实例模式,也是默认情况下的启动模式。 每次调用startAbility()方法时,如…

windows下的redis7.0.11的下载

天,我找redis7.0.11的安装包就找了好久,终于给我找到了。市面上好多是linux版本的。 安装包:Release Redis 7.0.11 for Windows zkteco-home/redis-windows GitHub 解压之后是这样的。 然后你要测试能不能启动: 1、指定配置文…

复现DOM型XSS攻击(1-8关)

目录 第一关:​ 分析代码: 第二关: 分析代码: 第三关: 分析代码: 第四关: 分析代码: 第五关: 分析代码: 第六关: 分析代码&#xff1…

volatitle-线程并发-小白一文速通

目录 简而言之 专业术语解释 1、可见性 原理简介 原理图解 其他方式 2、原子性 原理简介 结合实例分析 3、有序性 原理简介 线程安全问题 Volatile效果 1、保证可见性 2、保证有序性 3、无法保证原子性 Volatile底层的实现机制(重点掌握) 经典案例 Java双重检…

朗致面试----Java开发、Java架构师

一共三轮面试。第一轮是逻辑行测,第二轮是技术面试(面试官-刘老师),第三轮是CTO面试(面试官-屠老师)。第三轮Coding做完之后共享屏幕讲一个你自己负责过的项目(请提前准备好架构图,开…

【AI趋势8】具身智能

随着科技的飞速发展,人工智能(AI)已经从概念走向实际应用,深刻影响着我们的生产和生活方式。在众多AI技术载体中,人型机器人凭借其独特的类人形态和全身自由度,成为人工智能领域的终极载体之一。本文将深入…

系列:水果甜度个人手持设备检测-产品规划汇总与小结

系列:水果甜度个人手持设备检测 -- 产品规划汇总与小结 背景 接上一篇,我们从假设的用户需求出发,规划输出软硬件结合的一体化产品。在产品中搭载近红外光谱(NIR)、超声检测的模块,并针对不同的瓜果类型&#xff0c…