
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,越来越多的人都在学习计算机编程开发技术,而本文我们就通过案例分析来简单了解一下,软件开发内存管理都有哪些方法。
一、物理地址和虚拟内存
计算机系统中主存被组织为一个由M个连续字节大小的单元组成数组。每字节都有一个的物理地址(PhysicalAddressPA)。虚拟地址是虚拟的,CPU通过MMU(内存管理单元——利用主存中的查询表动态翻译虚拟地址)硬件将虚拟地址->物理地址,流程如图:图现代处理器使用的一种虚拟寻址的寻址形式。
二、地址空间
主存中的每个字节都有一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址。虚拟内存作为缓存的工具,虚拟内存被组织为一个由存放在磁盘上的N个连续字节大小的单元组成数组。
三、Linux虚拟内存系统
liunx为每个进程维护一个单独的虚拟地址空间,如下图虚拟内存,包括代码、数据、堆、共享库以及栈。这部分虚拟内存位于用户栈上。
内核虚拟内存包含内核中的代码和数据结构。内和虚拟内存的某些区域(内核的代码和全局数据结构)被映射到所有进程共享的物理页面。Linux将一组连续的虚拟页面(大小等于系统中DRAM总量)映射到响应的一组物理页面。例如当需要访问页表或在一些设备上执行内存映射的IO操作,这些设备被映射到特定的物理内存位置。内核虚拟内存其他区域(页表,内核在进程上下文执行代码时用的栈,记录虚拟地址空间的数据结构)包含每个进程都不相同的数据。
四、Linux虚拟内存区域
内核为系统中的每个进程维护一个单独的任务结构(源代码中的task_sturct)。任务结构中的元素包含或者指向内核运行该进程的所需要的所有信息(例如,PID、指向用户栈的指针、可执行目标文件的名字以及程序计数器)
五、内存映射
Linux通过将一个虚拟内存区域与一个磁盘上的对象关联起来,以初始化这个虚拟内存区域的内容,这个过程叫做内存映射。
虚拟内存区域可以映射到两种类型的对象中的一种:
Linux文件相同中的普通文件:一个区域可以映射到一个普通磁盘文件的连续部分,例如一个可执行目标文件。这些虚拟页面并没有加入物理内存,知道CPU一次引用。匿名文件:一个区域也可以映射到一个匿名文件,匿名文件是由内核创建的,包含的都是二进制零。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。