Linux虚拟内存

来源:互联网 发布:淘宝售前客服怎么做 编辑:程序博客网 时间:2024/05/18 01:27

Linux采用虚拟段页式存储方式来管理内存,程序的基本逻辑存储单元,也可以说是程序段。Linux中有四个段,代码段,数据段,BSS段,堆栈段。虚拟地址从低到高依次是:代码段,数据段,BSS段,堆栈段。其中代码段为程序本身(二进制指令),数据段为代码中初始化了的全局变量和静态变量,BSS段为为初始化的全局变量和静态变量,堆为程序员申请的内存空间,栈是编译器用来存放函数局部变量,参数等数据的位置。将程序的逻辑存储单元分配好后,每个段在内存中以页为基本单元进行存储。我们在程序中,用取地址符取的地址,叫做逻辑地址,也叫做虚拟地址。虚拟地址由段号和段内偏移量组成。MMU通过段机制查看段表来寻找该段号对应的页号,该页号和段偏移量组成的地址是线性地址;通过页机制查看页表,找到该页号对应的物理号,物理号和偏移量组成的地址,即为物理地址。
还有一种老的内存管理机制叫做内存分区,它分为固定分区和可变分区。固定分区指的是每次放入内存的作业大小是固定的。可变分区指的是放入内存中的大小随作业而变化。固定分区不可以运行较大程序,可变分区会生成内碎片。内存分区会用到一种覆盖技术,指掉入内存的页一般会覆盖掉不同时执行的部分。也就是页1已经在内存中了,现在页2也要掉入内存,系统判断,页1和页2不会同时执行,就将页1用页2覆盖掉。
交换技术是虚拟内存提出来的,在电脑磁盘中有一个交换分区,当内存中的某页当前不需要时,就将它交换出来,而将需要的交换进去。
若写不对,敬请指正。

2 0
原创粉丝点击