linux虚拟内存和物理内存

本文详细介绍了Linux系统的虚拟内存和物理内存的概念,包括虚拟地址空间、内核架构、虚拟内存的4GB空间划分、页表、分页、分段及段页式内存管理。通过对进程控制块、mm_struct、vm_area_struct结构的解析,阐述了虚拟地址到物理地址的转换过程,以及内存管理的相关机制。
摘要由CSDN通过智能技术生成

虚拟地址空间

参考:

https://sylvanassun.github.io/2017/10/29/2017-10-29-virtual_memory/

地址空间:非负整数地址的有序集合,如

{0,1,2,...}{0,1,2,...}

线性地址空间:如果地址空间中的整数是连续的,则称为线性地址空间

虚拟地址空间:在一个带虚拟内存的系统中,如果CPU用n位2进制数表示虚拟地址,则该连续的虚拟地址形成的范围

(0,1,..2^n-1)(0,1,..2n?1)称为“虚拟地址空间”

{0,1,2,...,2^n-1}{0,1,2,...,2n?1}

例如linux系统中用32位来表示虚拟地址,则虚拟地址空间为
{0,1,2,...,2^{32}-1}{0,1,2,...,232?1},大小为4GB.

虚拟内存:一种对物理内存的抽象概念,可以理解为一个连续的字节组成的数组,每个字节都用一个虚拟地址表示,一个系统所有的虚拟地址组成了虚拟地址空间。

虚拟内存为每个进程提供了一个一致的、私有的地址空间,它让每个进程产生了一种自己在独享主存的错觉(每个进程拥有一片连续完整的内存空间)

物理地址空间:真实物理内存单元的地址,是硬件电路通过地址总线去寻址的空间,物理上是高低电位,对应0/1表示。

------------------------------------------------------参考《深入理解计算机系统》

Linux整体架构图

linux内核控制并且管理硬件资源,包括进程的调度和管理、内存管理、文件系统管理、设备驱动管理、网络管理等等。并且提供应用程序统一的系统调用接口

Linux虚拟内存

Linux中每个进程都有自己独立的4G虚拟内存空间,各个进程的内存空间具有类似的结构。这4GB的虚拟地址空间划分成两个部分:内核空间和用户空间

Linux中每个用户进程都有自身的虚拟地址范围(用户空间),从0到TASK_SIZE。用户空间之上的区域(从TASK_SIZE到

2^{32}232)保留给内核专用(内核空间),用户进程不能访问。TASK_SIZE是一个特定于计算机体系结构的常数,把地址空间按给定比例划分为两部分。linux的用户空间为3GB(用户进程自己使用),内核空间为1GB(被所有进程共享)

一个新进程建立的时候,内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体,task_struct中有一个struct mm_struct指针,mm_struct结构体抽象了进程自己的虚拟地址空间。

参考:https://www.cnblogs.com/Rofael/archive/2013/04/13/3019153.html</

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值