博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux 虚拟内存和物理内存
阅读量:4164 次
发布时间:2019-05-26

本文共 707 字,大约阅读时间需要 2 分钟。

         操作系统为了屏蔽I/O底层的差异,创建了VFS(虚拟文件系统),为了屏蔽I/O层与内存之间的差异,产生了虚拟内存。为了屏蔽cpu与内存之间的差异,创建了进程。每个程序运行起来都会拥有一个自己的虚拟地址空间,32位cpu的操作系统,它是一个4GB的内存地址块,其地址线也为32位,所以虚拟地址空间为2^32 -1= 4G。

        在Linux系统中, 内核进程和用户进程所占的虚拟内存比例是1:3,而Windows系统为2:2(通过设置Large-Address-Aware Executables标志也可为1:3)。这并不意味着内核使用那么多物理内存,仅表示它可支配这部分地址空间,根据需要将其映射到物理内存。内核代码和数据总是可寻址,随时准备处理中断和系统调用。与此相反,用户模式地址空间的映射随进程切换的发生而不断变化。

       Linux虚拟内存空间布局如下:

在将应用程序加载到内存空间执行时,操作系统负责代码段、数据段和BSS段的加载,并在内存中为这些段分配空间。栈也由操作系统分配和管理;堆由程序员自己管理,即显式地申请和释放空间。  BSS段、数据段和代码段是可执行程序编译时的分段,运行时还需要栈和堆。

总结:

1、 每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构;

2、每个进程的4G内存空间只是虚拟内存空间,每次访问内存空间的某个地址,都需要把地址翻译为实际物理内存地址;

3、所有进程共享同一物理内存,每个进程只把自己目前需要的虚拟内存空间映射并存储到物理内存上;

4、可以认为虚拟空间都被映射到了磁盘空间中,(事实上也是按需要映射到磁盘空间上,通过mmap),并且由页表记录映射位置。

转载地址:http://kjqxi.baihongyu.com/

你可能感兴趣的文章
判断文件夹是否存在
查看>>
快速的内存分配器
查看>>
java中super 的两种用法
查看>>
bdb及其在php下扩展的安装
查看>>
bdb及其在php下扩展的安装
查看>>
android 小问题
查看>>
BerkeleyDB安装及配置
查看>>
标准的Activity Actions
查看>>
关于Android requires .class compatibility set to 5.0. Please fix project properties.的错误
查看>>
JAVA中implements实现多接口
查看>>
android中导入低版本project可能会遇到的编译问题
查看>>
showDialog
查看>>
Flex 拖拽范例
查看>>
flash builder 4 编译器参数
查看>>
包含库的问题
查看>>
flex 中 bindable的意义
查看>>
flex常用网站
查看>>
flex 页面跳转
查看>>
flex 3.0中关于两个.mxml文件之间链接的简单方法
查看>>
使用viewstack
查看>>