一、虚拟内存分配和分页

在计算机系统中内存管理模块是最重要的模块之一,以linux来说,整个内核(kernel)源码中有近三分之一上的篇幅是与内存管理相关的。而作为应用程序来说,也离不开内存的分配和回收,不管是在静态的编译阶段还是在程序运行过程中的动态分配。内存是最重要的部分,同时也是最难掌握使用的一部分,用好了可以最少的内存消耗获得最大的性能,而反之就是内存的极度浪费。所以将此部分作为学习整个libc的第一部分来组织是必然的。学好并掌握了此部分,对其他的各部分会有较大帮助。

本文分四部分来说明整个和libc中的内存管理:

  • 进程地址空间
  • 内存的分配与回收
  • 常驻内存段
  • 锁页

 

  1. 进程地址空间

内存作为进程最基本的资源之一,存在多种不同的方式进行内存的组织,虚拟线性地址空间是其中的一种方式。每一个进程都有一个线性的虚拟内存空间,为什么说它为线性的呢?举个例子c语言中的指针,大家都知道指针就是内存的地址,是一个数值,这个数值从0开始到一个足够大的值,在32为的linux系统中应用程序可以使用的最大值是3G,也就是说指针值可以是0~3G中的任意值,所以说它为线性地址。在x86系列的cpu系列中,dos系统是属于分段的,这里要把段地址和线性地址区分开,而在linux中所用的地址为线性地址(其实这里的线性地址是经过分段单元将段地址转化而来的)。要弄清楚什么是段地址什么是现行地址可以参考intel技术手册和linux内核相关书籍。这里只要记住应用程序使用线性地址,而c语言指针就是一个虚拟地址值就行了。

在一般的情况下,虚拟内存被分成4k字节大小的块,叫做页,每页大小为4k。系统中引入页单元也是为了管理的需要。

 

 

  1. 内存的分配与回收
  2. 常驻内存段
  3. 锁页
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章