进程相关知识
进程和程序的区别
程序
程序是静态的,是存储在硬盘、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的内存空间
Code 段(只读):
- 这个区域存储了程序的可执行代码部分(即指令)。这个段通常是只读的,以防止程序在运行时意外修改自己的代码。
Data 段(静态全局变量):
- Data段存储了程序中已初始化的全局变量和静态变量。这个区域的内容在程序开始时已经被初始化,并在程序运行期间保留其状态。
Heap 段(堆):
- 堆是一个用于动态内存分配的区域。程序运行时,当调用
malloc
、calloc
、realloc
等函数时,动态分配的内存块来自于堆。堆的大小可以在程序运行时增长或缩小,具体取决于内存分配和释放操作。Map/Share 段(共享内存映射区):
- 这一部分用于内存映射文件(mmap)和共享内存。通过内存映射,文件可以直接映射到进程的地址空间中,这样可以更高效地访问文件数据。共享内存则允许不同的进程共享内存区域,便于进程间通信。
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 只能依次执行每个进程的指令。这种看似矛盾的现象是通过操作系统的高效调度和快速的任务切换来实现的。
相关文章:

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

萝卜快跑和端到端的自动驾驶(1)
先看一篇论文 2311.18636 (arxiv.org) 这篇论文里有一个非常好的图 比较了一下模块化任务(级联任务)和端到端自动驾驶的区别 首先什么叫模块化任务(级联) 如上图所示,左边的方块中的子方块,是展示了自动驾驶获取数据的途径,这里包括&…...
通信原理学习笔记
一个手机通话需要经过下面三个网络 类别接入网(Access Network)承载网(Transport Network)核心网(Core Network)定义连接终端用户与电信网络的部分。在接入网和核心网之间传输数据的网络。处理、交换和管理…...
系统编程---day4
1. 链接文件 命令行: ln -s 文件名 softlink 1.1 symlink int symlink(const char *oldpath, const char *newpath); 功能:创建一个链接向oldpath文件的新符号链接文件 参数:oldpath:被链接向的文件的路径 newpath:新符号链接文件 返回值:成功返回0,失败返回…...

01:电容的什么,各类电容的优缺点
1.电容是什么? 电容是由两块不连通的导体,已经中间的不导电材料组成 电容结构: 1.2电容的容量计算公式 C ε s d \displaystyle\frac{εs}{d} dεs 1.3常见电容的种类 1.4各类电容的特点...

Android+Jacoco+code-diff全量、增量覆盖率生成实战
背景 主要是记录下Android项目使用jacoco生成代码覆盖率的实战流程,目前已完成全量覆盖方案,仅使用jacoco就能实现; 由于我们的Android端是使用Java和kotlin语言,目前增量的方案code-diff仅针对Java代码,卡在kotlin文件的分析&am…...

乌龟对对碰在线版
爆肝两天使用vue开发了一个在线版的乌龟对对碰小游戏之幸运对对碰。没有找到合适的乌龟素材,现在使用小兔子代替。 体验地址:幸运对对碰 | 乌龟对对碰小游戏 之前的python版本的乌龟对对碰:写文章-CSDN博客 乌龟对对碰-幸运对对碰...
如何更改select option边框颜色和选中的颜色
<!doctype html> <html> <head> <meta charset"utf-8"> <title>如何更改select option边框颜色和选中的颜色</title> </head><style>ul{border: 1px solid #000000;width: 500px;height: auto;background-color: aq…...

6. 数据结构—串的匹配算法
1.BF算法(暴力算法) //模式匹配(暴力算法) int Index(SString S,SString T){int i1,j1;while(i<S.length&&j<T.length){if(S[i]T[i]){i;j;}else{ii-j2; //最开始匹配的位置的后一个j1; //从头匹配 }}if(j>T.length)return i-T.length;return return 0…...

九大服务架构性能优化方式
来源:九大服务架构性能优化方式 目录 性能优化九大方式: 缓存 使用什么样的缓存 缓存常见问题 缓存淘汰 缓存数据一致性 并行化处理 批量化处理 数据压缩合并 无锁化 顺序写 分片化 避免请求 池化 异步处理 总结 最近做了一些服务性能优…...

【RabbitMQ】 相关概念 + 工作模式
本文将介绍一些MQ中常见的概念,同时也会简单实现一下RabbitMQ的工作流程。 MQ概念 Message Queue消息队列。是用来存储消息的队列,多用于分布式系统之间的通信。 系统间调用通常有:同步通信和异步通信。MQ就是在异步通信的时候使用的。 同…...
嵌入式学习 ——(Linux高级编程——进程)
目录 一、进程的含义 二、进程和程序的区别 三、进程的作用 四、进程的状态 五、进程的调度与上下文切换 六、查询进程相关命令 七、fork()函数 八、getpid()和getppid()函数 九、面试题解析: 十、应用场合及测试 一、进程的含义 进程指正在运行的程序&a…...

C++练习备忘录
1. 保留两位小数输出格式 #include <iostream> #include <iomanip> using namespace std; int main() {double S 0;S (15 25) * 20 / 2;cout << fixed << setprecision(2) << S;return 0; }2. 设置输出宽度 #include <iostream> #inclu…...
改善工作流
快捷键管理器 打开Editor->Shortcuts查看和编辑Unity中的快捷键 示例 ShiftSpace 窗口最大化 P 选择预制体 进入预制体编辑模式 单一检视窗口 选择组件,选择Properties打开一个窗口,显示组件信息;切换对象,窗口信息不会改变…...

迭代器失效
一、什么是迭代器失效 迭代器的主要作用就是让算法能够不用关心底层数据结构,其底层实际就是一个指针,或者是对指针进行了封装,比如:vector的迭代器就是原生态指针T* 。因此迭代器失效,实际就是迭代器底层对应指针所指…...
@RequestParam @RequestBody @PathVariable 这三个注解对应的前端使用vue的http请求时不同的调用方式
1. RequestParam 用途:用于提取请求参数,常见于GET请求或表单提交。 Vue HTTP 请求示例: // 使用axios发送GET请求 axios.get(/api/users, { params: { id: 1, name: John } }); 2. RequestBody 用途:用于提取请求体…...
SQL - 索引
索引本质上是数据库引擎用来快速查找数据的数据结构,可以显著提高查询的性能,为了加快运行较慢的查询。创建索引 默认索引 create index 索引名 on 表名 (列名); 通过对列名进行创建索引,在查询的时候,数据库就能通过索引找到匹配…...
Oracle23ai新特性FOR LOOP循环控制结构增强
在Oracle数据库中,FOR LOOP是一种常用的循环控制结构,它允许你重复执行一系列语句固定次数或直到满足特定条件为止。然而,标准的Oracle PL/SQL中的FOR LOOP主要用于遍历集合(如数组或游标的结果集),而不是像…...

DHU OJ 二维数组
思路及代码 #include<iostream> using namespace std; int main(){ //input 多组 //input M,N int 1< <20 //input M 行 N 列 数据 //initialize listint M, N;while (cin >> M >> N){int list[M][N];for (int i 0; i < M-1; i){for (int j 0; j…...

UDP/TCP --- Socket编程
本篇将使用 Linux 中的系统调用来实现模拟 TCP 和 UDP 的通信过程,其中只对 UDP 和 TCP 进行了简单的介绍,本篇主要实现的是代码,至于 UDP 和 TCP 的详细讲解将会在之后的文章中给出。 本篇给出的 tcp 和 udp 的代码中的 echo 都是测试连接是…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...

【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...
Python学习(8) ----- Python的类与对象
Python 中的类(Class)与对象(Object)是面向对象编程(OOP)的核心。我们可以通过“类是模板,对象是实例”来理解它们的关系。 🧱 一句话理解: 类就像“图纸”,对…...
window 显示驱动开发-如何查询视频处理功能(三)
D3DDDICAPS_GETPROCAMPRANGE请求类型 UMD 返回指向 DXVADDI_VALUERANGE 结构的指针,该结构包含特定视频流上特定 ProcAmp 控件属性允许的值范围。 Direct3D 运行时在D3DDDIARG_GETCAPS的 pInfo 成员指向的变量中为特定视频流的 ProcAmp 控件属性指定DXVADDI_QUER…...