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

Linux 内核 内存管理】虚拟地址空间布局架构 ① ( 虚拟地址空间布局架构 | 用户虚拟地址空间划分 )

文章目录 一、虚拟地址空间布局架构 二、用户虚拟地址空间划分 一、虚拟地址空间布局架构 ---- 在 64 位的 Linux 操作系统中 , " ARM64 架构 " 并 不支持 64 位的虚拟地址..., 最大只支持 48 位的虚拟地址 , 64 位地址太大 , 并不需要那么大的内存空间 ; " ARM64 架构 " 中 , Linux 系统的 " 内核虚拟地址 “ 与 ” 用户虚拟地址 "...0000 0000 ~ 0x FFFF FFFF FFFF FFFF , 48 位有效地址 ; 二、用户虚拟地址空间划分 ---- Linux 操作系统 进程 的 " 用户虚拟空间 " 起始地址...内核源码的 LINUX-4.12\arch\arm64\include\asm\memory.h#86 中 , 定义了 TASK_SIZE 与 TASK_SIZE_64 宏 ; VA_BITS 是编译内核时..., 选择的 " 虚拟地址空间 " 的地址位数 , TASK_SIZE 与 TASK_SIZE_64 宏 相关源码如下 : /* * PAGE_OFFSET - the virtual address

7K20

Linux地址空间&&虚拟地址

在32位和64位下的地址空间大小是不一样的,为了方便这里使用32位来表述。32位从低到高一个有4GB的地址空间范围,实际上这个地址空间当中打印出来的地址,是该空间内对应的地址。...其实PCB和地址空间都是在物理内存里面的,只不过要访问初始化全局数据的时候,不在地址空间上保存,地址空间只会提供线性连续地址,让用户之后通过虚拟地址地址空间,将虚拟地址转化到为了物理内存中。...地址空间 2.1 理解地址空间 地址空间本质是内核的一个struct结构体,结构体里面有各种各样的区域划分,内部有很多的属性都是表示start,end的范围。...来看看源码里面描写这个结构体: 并不是限定了某一个范围,而是这个范围之间它所对应地址空间都可以使用。这个范围可以根据页表映射到物理内存。 操作系统给每一个进程都划分一块进程地址空间。...所以虚拟地址相同而物理地址不同。 3. 进程调度 Linux中的nice值并不是能任意调度的,而是从-20到19,这40个数字之间变换。

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

Linux】进程地址空间

文章目录 一、前言 二、什么是进程地址空间 三、进程地址空间如何进行管理 四、为什么会存在进程地址空间 五、进程地址空间区域的严格划分 一、前言 学习Linux系统编程一共要翻越三座大山 – 进程地址空间...二、什么是进程地址空间 我们以前在学习 C/C++ 的动态内存管理的时候,通常把地址空间划分为如下几个区域: 但是我们上面的地址空间是真正的物理空间吗?...Linux 中 mm_struct 源码如下: 可以看到,进程地址空间其实也是进程属性的一种,我们可以通过进程的 task_struct 来找到/管理进程对应的地址空间。...进程地址空间如何进行区域划分以及区域调整 我们知道进程地址空间划分为很多个区域,其中我们熟知的有堆区、栈区、已初始化全局数据区、未初始化全局数据区、代码段,那么操作系统如何对这些区域进行划分和管理呢?...---- 五、进程地址空间区域的严格划分 我们上面讲的地址空间的区域划分其实是一种粗略的划分,严格的区域划分如下: 其中,我们之前熟悉的代码段、全局数据区、栈区、堆区、共享区,再加上一个命令行参数将变量被统称为用户空间

3.8K00

Linux】进程地址空间

显示相同地址,却是不同的值 下面在Linux上验证 创建test.c文件 st.c  ⮀...上小学的时候,小花和小胖是同桌,小胖特别调皮天天欺负小花,桌子共100cm,小花在桌子上画了一条线, 1-50是小花的地方,51-100是小胖的地方 ---- 小花画线的本质是 区域划分 把桌子看作一个线性结构...,对线性区域进行指定start和end即可完成区域划分 从而说明进程地址空间就是一个线性区域 地址空间上的虚拟地址,一个地址表示一个字节,即虚拟地址地址空间的宽度代表为字节 cpu与内存链接的线称之为系统总线...,每个地址对应一个字节 地址空间是线性结构的 4.确定地址空间 32位下地址空间默认为0-42亿多 假设空间范围为4GB 设置进程地址空间的结构 struct mm_struct { int code_start...,在地址空间中申请空间,在页表处只填写虚拟地址,物理地址处不填写,就不需要在物理地址处申请空间,过一会,进程尝试对空间写入,在重新申请空间把映射关系创建好,整体机制被叫做 缺页中断 8.

2.9K10

Linux系统-进程地址空间

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

3.8K30

Linux之进程地址空间

因此,这个地址只能是虚拟地址(线性地址)。在Linux中,特殊情况,我们将这种地址也成为逻辑地址。 2.感性的理解虚拟地址空间 从前有一个大富翁,他有10亿美元的资产。...对于磁盘内编译过的可执行程序中的地址不叫虚拟地址,而是叫做逻辑地址。当然对于Linux而言,虚拟地址、线性地址、逻辑地址都是一样的。...(PCB中的一个属性mm_struct) 区域划分和调整 地址空间有很多区域:栈区、堆区、数据段、代码段等,那么进程地址空间是如何进行区域划分的呢?...虚拟地址空间是连续的,因此将地址空间划分为不同区域的方法与上面例子的做法类似,我们用一个区域的起始地址start和终止地址end来调整和维护这一块区域。...补充说明: 对于区域划分,进程地址空间划分实际上是这样的: 0-3G是用户空间,命令行参数和环境变量是在用户空间,这也是为什么我们可以在main函数通过第三个参数env获取环境变量。

17020

计算机网络ip地址划分方法,ip地址怎么划分 ip地址划分方法【图文】

IP地址指的是互联网的协议地址,它的全称为IP Address,IP地址是IP协议当中的一种地址格式,互联网上的任意一个网络以及它们的主机使用的逻辑地址都是由IP地址分配的,那么你知道IP地址是怎样进行划分的吗...下面我们就一起来看看IP地址划分以及IP地址的查询方法吧。 一、IP地址划分: IP地址一个包括五大类,分别是A类IP地址、B类IP地址、C类IP地址、D类IP地址和E类IP地址。...其中A类IP地址的范围是0-127,在这个范围内的0表示的是任何地址,127表示的是回环测试相应的地址,由此我们可以看出A类IP地址的实际范围是1-126,255.0.0.0是A类IP地址的默认子网掩码...E类IP地址子网掩码的范围是从子网掩码240.0.0.0到子网掩码55.255.255.254,这两个子网掩码范围的IP地址一般用于地址的广播。...上面就是IP地址划分以及IP地址的查询方法,你学会了吗?

1.5K10

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

虚拟地址空间 2.1 感性理解虚拟地址空间 2.2 如何“画饼” 2.3 地址空间的区域划分 3. 进程地址空间与内存的关系 3.1 虚拟地址和物理地址 3.2 多进程的映射关系 4....深入学习进程地址空间并克服Linux学习的第一道险关:4.1中的3:统一性! 1....2.3 地址空间的区域划分 在此之前,大家要确定一个共识: 地址空间描述的基本空间大小是字节。 32位下,有2的32次方个地址。...那么我们所理解的虚拟地址空间的区域划分,实际上也就是根据这个结构体中的变量划分的: 2的32次方个地址,每一个都是虚拟地址,整个空间也都是虚拟空间。...**深思熟虑许久,我觉得可以同时从两个方面去理解:其一是因为在Linux系统中的指令,天然的CPU指令读取的自然是虚拟地址;其二是因为物理地址在这个过程中只有映射作用,也就是说程序加载到虚拟地址空间时,

99400

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

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

6910

Linux虚拟地址空间布局

与此相反,用户模式地址空间的映射随进程切换的发生而不断变化。 Linux进程在虚拟内存中的标准内存段布局如下图所示: ?...在Linux 2.4版本中,若可执行文件依赖共享库,则系统会为这些动态库在从0x40000000开始的地址分配相应空间,并在程序装载时将其载入到该空间。...在上面给出的进程地址空间经典布局图中,共享库的装载地址为0x40000000,这实际上是Linux kernel 2.6版本之前的情况了,在2.6版本里,共享库的装载地址已经被挪到靠近栈的位置,即位于0xBFxxxxxx...③空间大小:栈顶地址和栈的最大容量由系统预先规定(通常默认2M或10M);堆的大小则受限于计算机系统中有效的虚拟内存,32位Linux系统中堆内存可达2.9G空间。...在32位X86架构的Linux系统中,用户进程可执行程序一般从虚拟地址空间0x08048000开始加载。该加载地址由ELF文件头决定,可通过自定义链接器脚本覆盖链接器默认配置,进而修改加载地址

3.2K40

IP地址与子网划分

IP地址分类 IP地址中一部分是网络ID,另一部分是主机ID,地址分类系统把IP地址划分为不同的地址类:‘ A类地址:IP地址的前**8**位表示网络ID,后24位表示主机ID B类地址:IP地址的前*...16 16 2^16-2=65536-2≈6万 C 255.255.255.0 24 8 2^8-2=256-2=254 子网划分 子网划分是从主机号字段借用若干位比特,把物理网络分解为更小的逻辑实体...主机号唯一地指定了子网内的某台主机 子网划分的几个步骤 1确定需要的**子网个数** 2确定一个**子网内可能的最多主机数量** 3确定从主机号字段**借用的比特数**,用于创建子网号字段 4确定主机号字段需要...**保留的比特数**(不能被子网字段借用的比特数) 5确定**原始**网络号字段和主机号字段的比特数 6检查以确保被借用的比特数**没有超过**被保留的比特数(即检查子网划分问题是可解的) 7设置**子网号字段的最佳长度...**,包括为未来增长预留空间 8创建一个修改(自定义)的**子网掩码** 9确定**有效的子网号** 10确定每个子网的**IP地址有效范围** 子网划分举例 问题:有一个C类地址193.200.35.0

1.4K30

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

环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【 Linux 】欢迎支持订阅 相关文章推荐: 【Linux】冯.诺依曼体系结构与操作系统 【Linux...】进程理解与学习Ⅰ-进程概念 浅谈Linux下的shell--BASH 【Linux】进程理解与学习Ⅱ-进程状态 【Linux】进程理解与学习Ⅲ-环境变量 ---- 前言...知道 内存空间划分是为了更好的管理和使用空间。就比如说栈区存放局部变量、静态区存放静态全局变量等。但是,我们这里的空间真的指的是 实际的物理空间吗?换句话来说,我们真的了解该空间吗?...进程地址空间 前文回顾 首先,我们先来回顾一下,在指针阶段我们学习了,内存被划分为一个一个内存单元,每一个单元的大小为1字节。而每一个内存单元都有自己的编号,从0-0xFFFFFFFF。...,并不是真正意义上的物理地址(因为假如是物理地址,就不会出现同一个地址却有不同的值)。 那么这种非物理的地址叫什么呢?在Linux中我们称之为虚拟地址/线性地址

1.1K20

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

这里的地址实际上是虚拟地址(线性地址),Linux也有可能叫做逻辑地址。 我们可以感性地理解虚拟空间。 进程会认为自己是独占系统资源的,然而实际上并不是。...;对于磁盘程序内部的地址称为逻辑地址,在Linux下,虚拟地址到线性地址、逻辑地址是一样的,但在其他地方,区分比较明确, ---- 二、为什么 了解了进程地址空间是什么了以后,那为什么存在进程地址空间呢...但是对于Linux而言,虚拟地址、线性地址、逻辑地址都是一样的。 ---- 三、怎么做 由操作系统管理进程地址空间。...区域划分和调整 地址空间有很多个区域,比如栈区、堆区、数据区、代码段,那进程地址空间是如何进行区域划分和区域调整的:把一个区域的end和start进行调整和维护内存区域 struct mm_struct...补充: 对于区域划分,进程地址空间划分实际上是这个样子: 0-3G是用户空间,而命令行参数和环境变量是在用户空间的,这也是为什么我们可以在main()函数通过第三个参数env获取环境变量的原因。

72030

Linux 进程虚拟地址空间布局

文章目录 1.虚拟地址空间简介 2.虚拟地址空间布局 参考文献 1.虚拟地址空间简介 虚拟地址空间(Virtual Address Space)是每一个程序被加载运行起来后,操作系统为进程分配的虚拟内存...比如 Windows 下的“进程因非法操作需要关闭” 和 Linux 下的 “Segmentation fault”,一般都是由于进程访问了非法的内存地址。...对于 Linux,4GB 的虚拟地址空间的默认分配状态如下: 2.虚拟地址空间布局 C/C++程序为编译链接后生成可执行的二进制文件,由多个段组成,一般包含代码段、数据段和 BSS 段等。...可执行文件载入内存运行时,在 Linux 环境下的虚拟地址空间由一般有代码段、初始化数据段、未初始化数据段、堆和栈构成,如果程序使用了内存映射文件(比如共享库、共享文件),那么包含映射段。...堆的地址空间“向上增加”,即当堆上保存的数据越多,堆的地址就越高。

5K50

IP地址分类以及网络地址的计算(子网划分、超网划分)

本次我将从以下5个方面介绍IP地址(由于篇幅的问题,本篇我只介绍分类编址,无分类编址将在下一篇介绍) 了解IP地址的用途和种类 了解分类编址和无分类编址区别 掌握子网划分及超网划分方法 网络号与主机号的计算...按照整数字节划分 net-id 字段和host-id 字段,就可以使路由器在收到一个分组时能够更快地将地址中的网络号提取出来。...3、子网划分以及超网划分 3.1、子网划分(基于每类的IP网络进一步分成更小的网络) 子网划分是通过借用IP地址的若干位主机地址来充当子网地址(从左面第一位不是网络号的位开始借,而且借位必须是连续的不能跳跃...划分子网时,随着子网地址借用主机位数的增多,子网的数目随之增加,而每个子网中的可用主机数逐渐减少。 3.1.1、划分目的 1、节约IP地址,避免浪费。 2、限定广播的传播。 3、保证网络的安全。...例2、给定一个C类地址 192.168.5.0,要求划分20个子网,每个子网5 个主机,求符合要求的子网掩码。

2.5K40

进程地址空间

全局变量的区域存放临时变量,常量区存储常量字符串等具有常量性质的代码 现在我们再把它具体化一点: 我们用一段代码来尝试一下到底符不符合这个图的规则: window系统会出现随机的状况,所以建议大家再linux...虽然打印出来的地址是一样的,但是这绝对不是真的地址,只是一个假的地址,说明打印出来的地址并不是在物理内存上的地址! 在Linux地址下,这种地址叫做 虚拟地址。...其实进程地址空间只是一个比较抽象的存在,它本质上是一种将各个区域划分的内核数据结构,分别与各自的特定进程关联起来,并且各个进程都有自己私有的一份进程地址空间 所以大家还得记住,大家印象当中的那张图不是真实的内存...为什么要有进程地址空间? 大家可能会有疑惑,为什么我要平白无故地创造出一个进程地址空间呢?这不是在在误导我们吗?...其实我们申请空间本质上是在虚拟地址空间上申请空间,等到真正需要对内存进行访问时,才在物理内存上申请空间,同时操作系统自动完成建立页表等任务。

6610
领券