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

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

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

7.1K20

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

虚拟地址 1.1 虚拟地址引入 先先来一个测试代码: 1 #include 2 #include 3 #include 4 #include...这个地址在系统层面上称之为虚拟地址。 1.2 虚拟地址理解 每一个进程除了要把代码和数据加载到内存之外,对于当前的操作系统来讲,系统当中会为每一个进程创建一个地址空间。 地址空间在操作系统里面。...其实PCB和地址空间都是在物理内存里面的,只不过要访问初始化全局数据的时候,不在地址空间上保存,地址空间只会提供线性连续地址,让用户之后通过虚拟地址的地址空间,将虚拟地址转化到为了物理内存中。...,页表的左侧也有它的虚拟地址,在页表右侧就有它对应的物理地址。...修改的只是子进程的物理地址和页表,而地址空间里面的依然是虚拟地址。子进程和父进程的虚拟地址是一样的,只是映射到物理内存到不同区域,所以对应看到的地址是一样的,但内容却不一样。

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

进程的虚拟地址空间

虚拟地址会通过硬件 MMU(内存管理单元)映射到实际的物理地址空间中,建立虚拟地址到物理地址的映射关系后,对虚拟地址的读写操作实际上就是对物理地址的读写操作,MMU 会将物理地址“翻译”为对应的物理地址...Linux 系统下,应用程序运行在一个虚拟地址空间中,所以程序中读写的内存地址对应也是虚拟地址,并不是真正的物理地址,譬如应用程序中读写 0x80800000 这个地址,实际上并不对应于硬件的 0x80800000...为什么需要引入虚拟地址呢?...针对以上的一些问题,就引入了虚拟地址机制。程序访问存储器所使用的逻辑地址就是虚拟地址,通过逻辑地址映射到真正的物理内存上。...所有应用程序运行在自己的虚拟地址空间中,使得进程的虚拟地址空间和物理地址空间隔离开来,这样做带来了很多的优点: ⚫ 进程与进程、进程与内核相互隔离。

2.4K30

Linux虚拟地址空间布局

这个沙盘就是虚拟地址空间(Virtual Address Space),在32位模式下它是一个4GB的内存地址块。...虚拟地址通过页表(Page Table)映射到物理内存,页表由操作系统维护并被处理器引用。内核空间在页表中拥有较高特权级,因此用户态程序试图访问这些页时会导致一个页错误(page fault)。...8 保留区 位于虚拟地址空间的最低部分,未赋予物理地址。任何对它的引用都是非法的,用于捕捉使用空指针和小整型值指针引用内存的异常情况。...在32位X86架构的Linux系统中,用户进程可执行程序一般从虚拟地址空间0x08048000开始加载。该加载地址由ELF文件头决定,可通过自定义链接器脚本覆盖链接器默认配置,进而修改加载地址。

3.3K40

Linux 进程虚拟地址空间布局

文章目录 1.虚拟地址空间简介 2.虚拟地址空间布局 参考文献 1.虚拟地址空间简介 虚拟地址空间(Virtual Address Space)是每一个程序被加载运行起来后,操作系统为进程分配的虚拟内存...每个进程所能访问的最大的虚拟地址空间由计算机的硬件平台决定,具体地说是由 CPU 的位数决定的。...比如 32 位的 CPU 决定了虚拟地址空间的大小为 0 - -1,即 0x00000000 - 0xFFFFFFFF,也就是我们常说的 4 GB 虚拟内存空间。...对于 Linux,4GB 的虚拟地址空间的默认分配状态如下: 2.虚拟地址空间布局 C/C++程序为编译链接后生成可执行的二进制文件,由多个段组成,一般包含代码段、数据段和 BSS 段等。...由于可执行文件段的数量较多,映射到虚拟地址空间时,由于段的大小往往并不是系统页大小的整数倍,多余部分也会占用一个页,这就会造成内存空间的浪费。

5K50

【Linux】虚拟地址空间 --- 虚拟地址、空间布局、内存描述符、写时拷贝、页表…

---- ---- 一、虚拟地址空间 1.虚拟地址的引出(看不到物理地址,只能看看虚拟地址喽) 1 #include 2 #include 3...虚拟地址还有另外两个名字,分别叫做线性地址和逻辑地址 2.虚拟地址空间布局(系统角度:六个段。语言角度:五个段。) 1....所以操作系统为了保证进程的独立性,通过虚拟地址空间,再到页表,让不同的进程使用的同一虚拟地址,能够映射到不同的物理内存处。 3....那其实就是在进行虚拟地址空间编址的选择呢,你是选择64比特位的方式进行虚拟地址空间编址呢?还是选择32位虚拟地址空间编址,一个是4GB一个是16GB,但也没啥用,因为都是虚拟的,仅仅只是空间范围而已。...编译器和进程一样也被画饼,所以CPU在读取加载到内存上的程序的时候,读取的就是程序的虚拟地址,背后通过操作系统在不断的切换虚拟地址和物理地址,以便使得CPU读取的地址始终是虚拟地址。 9.

1.4K20

Liunux内核内存管理之虚拟地址空间

虚拟地址空间 虚拟地址空间是一个非常抽象的概念,先根据字面意思进行解释: 它可以用来加载程序数据(数据可能被加载到物理内存上,空间不够就加载到虚拟内存中) 它对应着一段连续的内存地址,起始位置为 0。...虚拟地址空间的大小也由操作系统决定,32位的操作系统虚拟地址空间的大小为 2^32 字节,也就是 4G,64 系统的操作系统虚拟地址空间大小为 2^64 字节,这是一个非常大的数,感兴趣的可以自己计算一下...其实我们讲的每个进程都有4G虚拟地址空间,讲的都是“可以寻址”4G,意思是虚拟地址的0-3G对于一个进程的用户态和内核态来说是可以访问的,而3-4G是只有进程的内核态可以访问的。...其次,所谓“独立拥有的虚拟地址”是指对于每一个进程,都可以访问自己的0-4G的虚拟地址虚拟地址是“虚拟”的,需要转化为“真实”的物理地址。 好比你有你的地址簿,我有我的地址簿。...内核用的896M虚拟地址是直接映射的,意思是只要把虚拟地址减去一个偏移量(3G)就等于物理地址。同样,这里指的还是寻址,实际使用前还是要分配内存。而且896M只是个最大值。

1.1K20

物理地址和虚拟地址的分布

上一节内容的学习我们知道了CPU是如何访问内存的,CPU拿到内存后就可以向其它人(kernel的其它模块、内核线程、用户空间进程、等等)提供服务,主要包括: 以虚拟地址(VA)的形式,为应用程序提供远大于物理内存的虚拟地址空间...Linux内核空间虚拟地址分布 ? 在 Kernel Image 下面有 16M 的内核空间用于 DMA 操作。...Linux用户空间虚拟地址分布 ? 用户进程的代码区一般从虚拟地址空间的 0x08048000 开始,这是为了便于检查空指针。...Linux物理地址和虚拟地址的关系 ? Linux 将 4G 的线性地址空间分为2部分,0~3G 为 user space,3G~4G 为 kernel space。...到这里我们应该知道了 Linux 是如何用虚拟地址来映射物理地址的,最后我们用一张图来总结一下: ?

2.1K31

物理地址和虚拟地址的分布

上一节内容的学习我们知道了CPU是如何访问内存的,CPU拿到内存后就可以向其它人(kernel的其它模块、内核线程、用户空间进程、等等)提供服务,主要包括: 以虚拟地址(VA)的形式,为应用程序提供远大于物理内存的虚拟地址空间...Linux内核空间虚拟地址分布 ? 在 Kernel Image 下面有 16M 的内核空间用于 DMA 操作。...Linux用户空间虚拟地址分布 ? 用户进程的代码区一般从虚拟地址空间的 0x08048000 开始,这是为了便于检查空指针。...Linux物理地址和虚拟地址的关系 ? Linux 将 4G 的线性地址空间分为2部分,0~3G 为 user space,3G~4G 为 kernel space。...到这里我们应该知道了 Linux 是如何用虚拟地址来映射物理地址的,最后我们用一张图来总结一下: ?

2K111

根据crash学习ARM64虚拟地址空间布局

这就得说下ARM64的虚拟地址空间布局了。再说ARM64之前,需要说下32位的虚拟地址空间。 ?...那到64位机器上,虚拟地址空间应该如何分布? 在ARM64上目前还不完全支持64位的虚拟地址,那是如何分配的呢?ARM支持多种位数的虚拟地址宽度,如下图是支持48位的虚拟地址宽度 ?...,每个进程感觉自己都能看到整个虚拟地址空间,大小用TASK_SIZE表示 32位用户空间程序:TASK_SIZE=TASK_SIZE_32=0x100000000=4G (64位内核运行32位应用程序时...) 64位用户空间程序:TASK_SIZE=TASK_SIZE_64=1<<39 如果地址宽度是39位的话,虚拟地址空间分布如下: ?...这下清楚了ARM64位虚拟地址空间布局后,我们再回过头去看看我们出错的地址。

3K20

手动玩转虚拟地址到物理地址转化

我们这次来根据dump动手来实际转化一个虚拟地址到物理地址,此次的地址不是线性地址映射。...____________| | C:FFFFFF8008015000| A:C549F000 上面0xFFFFFF8008015000就是虚拟地址...= 0x1), 前期条件: 虚拟地址:0xFFFFFF8008015000 init_mm→pgd的值:0xFFFFFF9B4FCA7000 PGD_Index = 虚拟地址>>30位 = (0xFFFFFF8008015000...present的意思是页是否是有效的,无效代表虚拟到物理地址之间的转化无效,当访问虚拟地址的时候就会page fault protection :权限之类的,是否读写执行权限之类的。...如果你访问一段虚拟地址,页表中是无法执行的权限,但是你想执行这段代码就会出错 reference: 引用之类的 cache: cache是否有效。

2.3K20

【操作系统复习】物理地址虚拟地址

【操作系统复习】 物理地址虚拟地址 物理地址和虚拟地址的区别 物理地址 逻辑地址 线性地址 为什么要分成物理地址和虚拟地址 物理内存及虚拟内存定义 为什么要有虚拟内存 虚拟内存的实现(可以在页式或段式内存管理的基础上实现...(我回答虚拟地址就是逻辑地址。。)...虚拟地址转换为物理地址的过程 快表是存储在哪里的 物理地址和虚拟地址的区别 操作系统有物理地址、逻辑地址、线性地址(也叫虚拟地址)三种地址 物理地址 在存储器里以字节为单位存储信息,为正确地存放或取得信息...(我回答虚拟地址就是逻辑地址。。) 如果是没有使用虚拟内存的页式/段式系统,没有虚拟地址这一说法, 逻辑地址一定直接可以转换为物理地址,因为进程都在内存中存储。...Linux 线性地址,逻辑地址和虚拟地址的关系?

2.1K20

数据库PostrageSQL-启动数据库服务器

启动数据库服务器 在任何人可以访问数据库前,你必须启动数据库服务器数据库服务器程序是postgres,它必须知道在哪里能找到它要用的数据。这是用-D选项实现的。...通常,你会希望在计算机启动的时候启动数据库服务器。自动启动脚本是操作系统相关的。PostgreSQL在contrib/start-scripts目录中提供了几种。安装将需要 root 权限。...当服务器在运行时,它的PID被保存在数据目录中的postmaster.pid文件。这样做 可以防止多个服务器实例运行在同一个数据目录中,并且也可以被用来关闭服务器。 18.3.1....服务器启动失败 有几个常见的原因会导致服务器启动失败。通过检查服务器日志或使用手工启动的方法(不做标准输出或标准错误的重定向), 就可以看到出现什么错误消息。下面我们详细地解释一些最常见的错误消息。...并不表示服务器得到了你的连接请求并拒绝了它。

4.2K20

服务器数据库是什么?如何使用云服务器数据库

服务器是这两年非常火爆的一个概念,不管是机关单位还是企业公司等,都会使用云服务器这一服务,因为云服务器具有传统服务器所不具备的诸多优势,其中云服务器所具有的核心内容就是云数据库,那么云服务器数据库是什么呢...如何使用云服务器数据库呢? 云服务器数据库是什么 云服务器是一种超越了传统服务器的新型服务器,这种服务器主要可以帮助企业或者公司存储相关的数据信息,主要存储在数据库中。...如何使用云服务器数据库服务器数据库对于不少企业管理者来说是一个非常陌生的概念,所以他们也不知道如何使用云服务器数据库,想要正常使用云服务器数据库,首先需要进行云服务器的连接。...企业管理者需要进入到云服务器中,并点击配置,选择相应的安全管理防火墙等确保云服务器是安全的。 等待确认云服务器的安全环境后,再进入云服务器数据库,依次点击用户、数据库编辑权限等按钮。...以上分别为大家介绍了什么是云服务器数据库,以及如何使用云服务器数据库,使用云服务器数据库并没有太大的操作难度,只需要进行相应的链接即可正常使用。

19.1K10

服务器数据库丢失怎么办 云服务器数据库是什么

有时候在使用云服务器的时候,可能因为各种各样的原因而导致云服务器数据库丢失,在这种情况下,云服务器数据库是可以找回的,所以大家并不用太担心,下面就将为大家详细的介绍云服务器数据库丢失怎么办。...云服务器数据库丢失怎么办 云服务器数据库丢失怎么办?...如果遇见了这种情况,大家其实不用担心,因为可以使用备份来恢复云服务器,云服务器是可以支持数据库备份和恢复的,所以就算是数据库丢失了,也是可以进行恢复的。...云服务器数据库是什么 云服务器数据库主要用来存储数据,它能够将网站中的各种数据进行存储,而且还能够进行备份,用户可以对数据库中的文件进行查询,删除等等。...在面对访问压力的时候,云服务器数据库依旧能够非常稳定的运行,所以它应用的场景是非常广泛的,在很多的行业当中,都会使用云服务器数据库。 云服务器数据库的作用非常的多。那么,云服务器数据库丢失怎么办?

20.3K20

图文分析HA软件实现双机热备的工作(一)

一、系统架构为:数据库服务器双机+共享磁盘+浮动IP的方式。...客户端通过虚拟地址和工作主机通讯,无论系统是否发生切换,虚拟地址始终指向工 作主机。在进行网络服务时,RoseHA提供一个逻辑的虚拟地址,任何一个客户端需要请求服务时只需要使用这个虚拟地址。...正常运行时,虚拟地址及网络服务 由主服务器提供。当主服务器出现故障时,RoseHA会将虚拟地址转移到另外一台服务器的网卡上,继续提供网络服务。...对于数据库服务,当有主服务器出现故障时,另外一台服务器就会自动接管,同时启动数据库和应用程序,使用户数据库可以正常操作。...以上分析,Rose实现是基本心跳线来监控服务器的应用运行状态,而不是通过BMC口。

2.6K20

【Linux 内核 内存管理】虚拟地址空间布局架构 ⑤ ( Linux 内核中对 “ 虚拟地址空间 “ 的描述 | task_struct 结构体源码 )

文章目录 一、Linux 内核中对 " 虚拟地址空间 " 的描述 二、task_struct 结构体源码 一、Linux 内核中对 " 虚拟地址空间 " 的描述 ---- 进程 的 " 虚拟地址空间 "...由 mm_struct 和 vm_area_struct 两个数据结构描述 ; mm_struct 是 “最高层次 " 上描述 ” 整个虚拟地址空间 “ 的结构体 ; 该结构是对 ” 整个 “ ” 用户空间..." 进行描述 ; vm_area_struct 是 " 较高层次 " 上的描述 " 虚拟地址空间 " 的区间 的 ; 每个进程只有 1 个 mm_struct 结构体数据 , 用于描述 整个 "...虚拟地址空间 " ; 则 对应的 " 进程描述符 task_struct " 中 , 有 1 个指针指向 mm_struct 结构体 ; task_struct -> mm_struct -> vm_area_struct

3.7K20

Linux可执行文件与进程的虚拟地址空间

Linux可执行文件与进程的虚拟地址空间 一个可执行文件被执行的同时也伴随着一个新的进程的创建。...Linux会为这个进程创建一个新的虚拟地址空间,然后会读取可执行文件的文件头,建立虚拟地址空间与可执行文件的映射关系,然后将CPU的指令指针寄存器设置成可执行文件的入口地址,然后CPU就会从这里取指令执行...32位的虚拟地址空间 ? 64位的虚拟地址空间 ? Proc目录下的进程虚拟地址空间布局 Linux在装载可执行文件的时候,会将这些segment映射到进程的地址空间中。...Linux将进程虚拟地址空间中的一个段叫做虚拟内存区域(VMA)。在/proc目录下,可以查看一个进程的虚拟地址空间,通过命令 cat /proc/pid/maps ?...FileSiz表示segment在ELF文件中所占的大小,MemSiz表示segment在进程虚拟地址空间中所占的大小。

4.2K30
领券