首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

进程地址空间

今天的博文可能会有点枯燥,由于博主的水平有限,希望大家指正博文的缺点 进程地址空间是什么?...其实进程地址空间只是一个比较抽象的存在,它本质上是一种将各个区域划分的内核数据结构,分别与各自的特定进程关联起来,并且各个进程都有自己私有的一份进程地址空间 所以大家还得记住,大家印象当中的那张图不是真实的内存...为什么要有进程地址空间? 大家可能会有疑惑,为什么我要平白无故地创造出一个进程地址空间呢?这不是在在误导我们吗?...我们知道进程有几个特性分别为: 竞争性,独立性,并发性和并行性 我们假设一种情况: 如果没有进程地址空间的存在,直接让给进程地址然后传递命令给CPU,如果给出的这个地址是个错误的地址呢?...写时拷贝支撑了进程地址空间的存在,保证了进程的正常运行!

6810

进程地址空间

文章目录 一.感性理解进程地址空间 二.理性认识进程地址空间 1.虚拟和物理地址空间 2.虚拟地址和物理地址联系 a.页表映射 b.写时拷贝 三.为什么要存在进程地址空间 在正式开始之前我们首先来看这样的一个现象...进程要被管理,进程地址空间也要被管理,进程地址空间通过先描述后组织的方法形成一个mm_struct被管理。...为了更有效的管理和少出错,现代系统提供了虚拟存储器,虚拟存储器为每个进程提供了一个大的,一致的,私有的地址空间,这个地址空间就是进程地址空间。...1.虚拟和物理地址空间 进程是操作系统中最成功的概念之一,每个进程都具有一个私有的虚拟地址空间,它提供一个假象使进程觉得自己独占内存空间。...但是每个进程都认为自己独享4GB的空间,一个进程的虚拟地址就是4GB的空间范围(我没说大小,因为这个空间是虚拟的),即2^32个地址,但对于32位的机器来说总共的物理地址也就是这么多。

65330
您找到你想要的搜索结果了吗?
是的
没有找到

【Linux】进程地址空间

文章目录 一、前言 二、什么是进程地址空间 三、进程地址空间如何进行管理 四、为什么会存在进程地址空间 五、进程地址空间区域的严格划分 一、前言 学习Linux系统编程一共要翻越三座大山 – 进程地址空间...此时,我们就能解释上面的现象了 – 子进程和父进程都拥有自己的单独的进程地址空间,且子进程地址空间是从父进程那里拷贝来的,所以最开始二者的 g_val 其实指向同一块物理内存; 现在子进程想要修改自己地址空间中...---- 三、进程地址空间如何进行管理 OS 如何管理进程地址空间 OS 会为系统中的每一个进程都创建一个进程地址空间,但是 OS 内部同时存在着许多进程,所以为了保证各个进程正常运行,OS 需要对每个进程地址空间进行管理...---- 四、为什么会存在进程地址空间 我们上面学习了什么是进程地址空间,以及进程地址空间如何进行管理,那么为什么会存在进程地址空间呢?我们直接将数据存入物理内存不好吗?...为什么还要耗费时间和空间创建虚拟地址空间以及页表呢?这时候就需要引入进程地址空间的优势了,进程地址空间主要有如下三方面的优势。 1、进程地址空间保证了数据的安全性。

3.8K00

【Linux】进程地址空间

地址空间是一段线性范围,从全0到全FFFF(16进制),因为数字是线性的,每一个数字表示一个地址,每个地址对应一个字节 地址空间是线性结构的 4.确定地址空间 32位下地址空间默认为0-42亿多 假设空间范围为...,CPU会自动根据页表将虚拟地址转化为物理地址 创建子进程,就要创建子进程的PCB,及地址空间和页表结构 子进程的相关内核数据结构的属性字段会继承父进程 大富翁 A有个儿子是E,A跟E说,我们家有10...,子进程对数据的修改,不影响父进程进程要对value修改时,在内存中重新申请一块空间,拷贝value值给新空间,重新映射指向新开辟的空间,导致不影响父进程的value值 ,最终将新开辟的空间value...,在地址空间中申请空间,在页表处只填写虚拟地址,物理地址处不填写,就不需要在物理地址处申请空间,过一会,进程尝试对空间写入,在重新申请空间把映射关系创建好,整体机制被叫做 缺页中断 8....进程地址空间+页表的意义: 1.防止地址随意访问,保护物理内存与其他进程 若没有地址空间的存在,则直接使用cPU调用物理地址,会有野指针的问题存在 2.将进程管理和内存管理进行解耦合 因为有虚拟地址和页表的存在

2.9K10

Linux系统-进程地址空间

Linux进程地址空间 零、前言 一、程序内存空间 二、进程地址空间 1、引入及概念 2、进程地址空间 3、相关问题 零、前言 本章主要讲解学习进程地址空间的知识 一、程序内存空间 在学习C/C...1、引入及概念 对于上述的程序地址空间,其实它的真实面貌为进程地址空间,对于进程地址空间本质上来说是一个虚拟地址空间,并非真实的物理空间 示例: #include #include...,同时也相应的分配了对应的mm_struct进程地址空间(PCB中储存了该进程对应的进程地址空间地址),也就是每个进程都认为自己独占内存资源 对于进程来说,进程控制块以及进程地址空间以及相应的资源...,随进程的创建而创建,随进程的退出而回收 进程地址空间的内容: 进程地址空间是由0x00000000到0xffffffff的线性地址空间,按照刻度被划分为各个区域,例如代码区、堆区、栈区等...PCB找到对应的进程地址空间,再由进程地址空间上的虚拟地址由页表找到物理空间上分配的数据 示图: 对于父子进程变量地址相同数据不同: 父进程创建子进程时,子进程以父进程为模板构建进程,代码数据父子共享

3.8K30

Linux之进程地址空间

一、是什么 进程地址空间是什么?...为了给进程画饼(让进程认为自己独占操作系统资源),操作系统为每个进程都创建了独立的地址空间地址空间的内容通过页表映射到物理内存中这样每个进程都能独立的运行。...3.现象的具体解释 父进程和子进程都有自己独立的进程地址空间,也有独立的页表结构。子进程由父进程创建,因此子进程进程地址空间是拷贝父进程进程地址空间。...三、怎么办 操作系统要为每一个进程分配地址空间,那么操作系统是否要管理这些地址空间呢?当然是要管理的。 那么,操作系统怎么管理进程地址空间?...3-4G是内核空间。 总结 以上就是今天要讲的内容,本文介绍了进程地址空间的相关概念。

17220

【Linux】进程理解与学习Ⅳ-进程地址空间

OS则是将虚拟地址转化为物理地址(如何转化后面会讲到) 如何理解进程地址空间? 首先我们要知道,什么是进程地址空间?...实际上进程地址空间就是操作系统喂给进程的一块“饼”,OS会跟每个进程说,你们有4G的内存空间(栈区、堆区、静态区...)可以使用,但实际上,只有当进程需要用的时候,OS才会分配空间进程。...接下来谈一谈OS如何管理我们所说的进程地址空间(即我们所说的栈区、堆区等)? 答:先描述,再组织。实际上我们所说的进程地址空间本质上是一个内核数据结构,struct_mmstruct{}。...而对进程地址空间中各个区域的调整,实际上就是转换为了调整各个区域对应的_start与_end。 物理空间与虚拟空间 既然我们所说的地址都是虚拟地址,那么真正的物理地址在哪里呢???...拓展:为什么存在进程地址空间? 一、防止地址随意访问,保护物理内存与其它进程 实际上,在最开始的时候,还没有虚拟地址这种概念。早期的进程是直接与物理内存打交道。

1.1K20

进程的虚拟地址空间

在 Linux 系统中,每一个进程都在自己独立的地址空间中运行,在 32 位系统中,每个进程的逻辑地址空间均为 4GB,这 4GB 的内存空间按照 3:1 的比例进行分配,其中用户进程享有 3G 的空间...内存空间不足时,就需要将其它程序暂时拷贝到硬盘中,然后将新的程序装入内存。然而由于大量的数据装入装出,内存的使用效率就会非常低。 ⚫ 进程地址空间不隔离。...所有应用程序运行在自己的虚拟地址空间中,使得进程的虚拟地址空间和物理地址空间隔离开来,这样做带来了很多的优点: ⚫ 进程进程进程与内核相互隔离。...一个进程不能读取或修改另一个进程或内核的内存数据,这是因为每一个进程的虚拟地址空间映射到了不同的物理地址空间。提高了系统的安全性与稳定性。 ⚫ 在某些应用场合下,两个或者更多进程能够共享内存。...因为每个进程都有自己的映射表,可以让不同进程的虚拟地址空间映射到相同的物理地址空间中。通常,共享内存可用于实现进程间通信。 ⚫ 便于实现内存保护机制。

2.4K30

【Linux】对进程地址空间的理解

一、关于进程地址空间的简单理解 进程地址空间其实是分了很多个区域的,区域划分的本质就是区域内的各个地址都是可以使用的。...进程地址空间不是真实的物理内存,叫做虚拟内存。每一个进程都有自己独立的PCB,也有自己独立的地址空间。在32位机器下,进程地址空间的大小为[0,4GB]。...其中,PCB会记录一个进程的起始地址或基地址,这其实就是进程地址空间的首地址。...当子进程要对数据做修改时会发生写实拷贝,给子进程要修改的数据重新开辟一块物理空间,再将重新开辟的这块物理空间地址填充入子进程的页表中,但此时页表中对应的虚拟地址并没有发生变化,所以可以看到父子进程访问同一个虚拟地址却打印出不同的内容...所以,进程地址空间就是数据结构,具体到进程中,就是特定数据结构的对象! 二、为什么要有进程地址空间和页表 1、将物理内存从无序变成有序,让进程以统一的视角看待内存。

7310

【Linux修炼】10.进程地址空间

进程地址空间 本节目标 1. 回顾C/C++地址空间 1.1 提出问题 1.2 见问题产生的现象 1.3 解释现象 2....虚拟地址空间 2.1 感性理解虚拟地址空间 2.2 如何“画饼” 2.3 地址空间的区域划分 3. 进程地址空间与内存的关系 3.1 虚拟地址和物理地址 3.2 多进程的映射关系 4....进程地址空间与内存的关系 3.1 虚拟地址和物理地址 1. 虚拟地址的排布 通过上述的描述,我们已经知道,我们所编写的代码的位置都是在进程地址空间上,也就是虚拟的地址。...如何理解进程地址空间 4.1 为什么存在地址空间 1:保证安全性 1. 如果让进程直接访问物理内存,万一进程越界非法操作呢?这其实是非常不安全的。...global_val,于是global的内存中的地址就会通过页表映射到虚拟空间的某一个地址中,于是父进程和子进程就可以通过虚拟空间中的地址去访问global,并且打印时父进程和子进程对应的global对应的虚拟地址也是相同的

1K00

【Linux】翻山越岭——进程地址空间

所以,对于我们刚开始的现象很好解释了: 父进程和子进程都有自己的独立的进程地址空间,且都有自己的页表结构,子进程由父进程创建,所以子进程地址空间是从父进程拷贝而来,刚开始的g_val经过映射指向同一个物理内存...;对于磁盘程序内部的地址称为逻辑地址,在Linux下,虚拟地址到线性地址、逻辑地址是一样的,但在其他地方,区分比较明确, ---- 二、为什么 了解了进程地址空间是什么了以后,那为什么存在进程地址空间呢...进程地址空间保证了数据的安全性 每个进程都有进程地址空间,所有的进程都要通过页表映射到物理内存,如果进程直接访问物理内存,万一进程越界非法访问、非法读写时,页表就可以进行拦截,而且直接访问物理内存对于账号信息是非常不安全的...,所以保证了内存数据的安全性 地址空间的存在,可以更方便的进行进程进程的数据代码的解耦,保证了进程独立性的特征 对于进程而言,都有独立的地址空间及页表,通过页表映射到不同的物理内存上,所以一个进程数据的改变不会影响到另一个进程...并且操作系统会为每个进程创建进程地址空间,但是对于操作系统来说,存在着比较多的进程,所以操作系统需要对进程地址空间进行管理。如何去管理?先描述,在组织。这是我们之前所说的。

72230

Linux 进程虚拟地址空间布局

文章目录 1.虚拟地址空间简介 2.虚拟地址空间布局 参考文献 1.虚拟地址空间简介 虚拟地址空间(Virtual Address Space)是每一个程序被加载运行起来后,操作系统为进程分配的虚拟内存...每个进程所能访问的最大的虚拟地址空间由计算机的硬件平台决定,具体地说是由 CPU 的位数决定的。...因为除了用户进程,操作系统会独占一部分虚拟内存空间,用户进程只能使用操作系统分配给进程地址空间,如果用户进程访问未经允许的地址空间,则会被操作系统判为非法请求,结果就是程序被操作系统强制结束。...堆的地址空间“向上增加”,即当堆上保存的数据越多,堆的地址就越高。...栈另外一个重要的特征是,它的地址空间“向下减少”,即当栈上保存的数据越多,栈的地址就越低。

5K50

Linux内核如何私闯进程地址空间并修改进程内存

进程地址空间的隔离 是现代操作系统的一个显著特征。这也是区别于 “古代”操作系统 的显著特征。 进程地址空间隔离意味着进程P1无法以随意的方式访问进程P2的内存,除非这块内存被声明是共享的。...类似Dos这样的操作系统就是这样的,内存地址空间并没有隔离。进程可以随意访问其它进程的内存。...在操作系统中,家庭类似于虚拟地址空间,而房子就是页表。 邻居不能闯入你的房子,但特权管理机构只要理由充分,就可以进入普通人家的房子,touch这家人的东西。...对于操作系统而言,这就是内核可以做的事,内核可以访问任意进程地址空间。 当然了,内核并不会无故私闯民宅,就像警察不会随意闯入别人家里一样。 但是,你可以让内核故意这么做,做点无赖的事情。...---- 虚拟地址空间是每进程的,而物理地址空间则是所有进程共享的。换句话说,物理地址是全局的。

3K20

逆向工程基础:从PE文件到进程地址空间

学过微机原理和单片机的知道,8051单片机有64KB的内存寻址空间,在8051上编写程序时我们的地址都是内存区域上的真实地址。...在32位的操作系统中,在保护模式下,每个进程都拥有4GB的地址空间,不必再考虑和别的程序共享一个地址空间的问题。 每个进程4GB地址空间是虚拟的,通过⻚式存储机制,进程可以安全的享用这些内存。...正是因为是4GB地址空间,也就解释了为什么指针需要4B了。 ? 看一下进程地址空间分布: ? 我们经常说程序运行后在内存中,需要强调的是进程的4GB内存空间不是位于真正的内存条上。...PE文件到进程地址空间的映射 PE文件按照⻚面大小映射到内存中,在硬盘上,文件对⻬粒度是512B(一个扇区大小),在内存中,⻚面粒度是4KB (32位的Windows系统上)。如下图所示: ?...关于PE文件到进程空间的对照关系,你弄懂了吗?

1K10

【Linux 内核】进程管理 ( 进程与操作系统 | 进程与程序 | 进程与线程 | 虚拟地址空间 )

文章目录 一、进程与操作系统 二、进程与程序 三、进程与线程 四、虚拟地址空间 一、进程与操作系统 ---- 操作系统与硬件的关系 : 操作系统 使用 硬件 提供的资源 , 如 CPU , 内存 , 磁盘...数据 的组合在一起的文件 , 在操作系统中运行起来之后 , 才叫做 进程 ; 进程 是 运行的 程序 ; 三、进程与线程 ---- 进程 与 线程 : 线程 是 运行的基本单位 , 进程 是 线程 的容器...; 四、虚拟地址空间 ---- 进程 与 内存管理 : 进程 是 内存管理 的基本单元 , 每个进程都是 独立的内存管理单元 ; 在 Linux 内核中 , 进程 又被称为 任务 ; 虚拟地址空间概念...: 每个 进程 作为 独立的内存管理单元 , 其内存单元 称为 虚拟地址空间 , 进程 的 虚拟地址空间 分为 用户虚拟地址空间 ( 每个进程独立拥有 ) 内核虚拟地址空间 ( 所有进程共享 ) 操作系统...中 运行的 所有进程 共享 内核虚拟地址空间 , 每个 进程 都 拥有 独立的 用户虚拟地址空间 ;

78310

Linux进程学习【进程地址

0; } 对于同一块空间,读取到了不同的值,是不可能出现这种情况的 因为真实地址都是 唯一 的,分析: 不同的空间出现同名的情况 父子进程使用的真实物理空间并非同一块空间!...原因: 当子进程尝试修改共享值时,发生 写时拷贝 机制 语言层面的程序空间地址不是真实物理地址 一般将此地址称为 虚拟地址 或 线性地址 结论: 语言层面的地址都是虚拟地址,用户无法看到真实的物理地址,...发生改写行为,此时会在真实空间中再开辟一块空间,拷贝变量值,让其中一个进程的虚拟地址空间映射改变,这种行为称为 写时拷贝 刚开始,父子进程共同使用同一块空间 当子进程修改共享值后 ----...进程地址空间 下面来好好谈谈 进程地址空间 (虚拟地址) ️虚拟地址 在早期程序中,是没有虚拟地址空间的,对于数据的写入和读取,是直接在物理地址上进行的,程序与物理空间直接打交道,存在以下问题: 假设存在野指针问题...,大佬们提出了 虚拟地址空间 这个概念,有了 虚拟空间 后,当进程创建时,系统会为其分配属于自己的 虚拟空间,需要使用内存时,通过 寻址 的方式,使用物理地址上的空间即可 多个进程互不影响,动态使用,做到

14420

【Linux】地址空间&&虚拟地址

1.2 虚拟地址理解 每一个进程除了要把代码和数据加载到内存之外,对于当前的操作系统来讲,系统当中会为每一个进程创建一个地址空间地址空间在操作系统里面。...进程是可以指向这个地址空间的。...每个进程都要有自己独立的地址空间,那么操作系统就得管理很多个进程地址空间,而地址空间本质上就是内核中的一个数据结构对象。...子进程地址空间也会有一个虚拟地址,子进程对应的页表也来自父进程,所以页表保存的地址,从而子进程也会指向那个g_val。...然后把修改之前的数据拷贝到新空间中,再把新的物理地址和之前的物理地址相比较,把新的物理地址放在子进程的页表中,重新构建映射,页表的右侧就指向新的物理地址空间,这个工作结束,才会就行让子进程执行写入操作,

10810

【Binder 机制】进程通信 | 用户空间与内核空间 | MMU 与虚拟内存地址

文章目录 一、进程通信 二、用户空间与内核空间 三、MMU 与虚拟内存地址 一、进程通信 ---- 进程隔离概念 : 系统中的进程存在 " 进程隔离 " , 出于对进程运行的保护 , 两个进程的内存是隔离的..." 用户态 " ; 三、MMU 与虚拟内存地址 ---- 每个 应用进程 的 内存空间 使用的地址都是 独立的 , 连续的 , 虚拟地址 ; 内存管理单元 ( MMU - Memory Management...Unit ) 的作用就是进行 内存映射的 ; MMU 的作用是将真实的 内存 物理地址 转为 虚拟地址 , 虚拟地址 又称为 逻辑地址 , 一般情况下虚拟地址大小远远大于物理地址 ; MMU 可以让每个进程都拥有独立的连续的内存空间...1 个 4 GB 大小的空间 , Linux 系统内核空间占 1 GB , 用户空间 3 GB ; 0 ~ 3 GB 是用户空间地址 , 3 ~ 4 是内核空间地址 ;..., 必须保证应用进程的内存从 0 开始 ; 这里将实际的物理内存地址映射为虚拟内存地址 , 这个虚拟内存地址可以保证每个程序都按照相同的初始地址运行 ; 汇编指令 需要直接操作 虚拟内存地址 ;

1.7K10

【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解

目录 一.什么是进程地址空间? 1.进程地址空间基本概念 2.mm_struct 基本概念 3.mm_struct/进程地址空间 实现“区域划分”的原理 二.什么是页表?...1.页表基本概念 2.进程是如何和“页表”进行联系? 3.每个进程都有页表,页表在“进程切换”如何跟踪 三.地址空间&页表的作用机理 1.地址空间&页表的基本原理 2....【页表实验5】缺页中断(进程地址空间建立“进程管理”与“内存管理”的联系)【全流程配图详解】(重点) 一.什么是进程地址空间?...1.进程地址空间基本概念 每一个 进程 运行之后,都会有一个进程地址空间 的存在 进程地址空间是操作系统OS 给进程花的大饼 , 欺骗进程他有足够的空间用——使每个进程都认为自己独占系统内存资源。...(即虚拟空间) 结论:进程地址空间并不是物理内存,而是 虚拟内存 的一部分(虚拟地址,不具备存储能力) 进程地址空间本质上是一种 抽象概念 ,用于描述进程如何看待和使用内存。

10010
领券