linux内核源代码学习(5)内存页面的换入换出
---flyli
关于物理页面的换入换出,其实其主要的目的也就是当物理内存不够使用的时候,将不常用到的内存页面交换到硬盘上,以保证程序能够正常运行。
在计算机理论里面时间资源和空间资源是一对矛盾的论题,我们经常可以见到以时间换空间,或者以空间换时间的算法,其不可单独评价那种更好,但是在相应的环境下,总有一种更适合我们。
linux中页面的交换就是一种典型的时间换空间的做法,当我们的内存不够用的时候,我将不用的内存移到硬盘上,然后增加我们的内存可用空间确实是一种不错的办法,虽然由于硬盘的读写速度较慢(这就是为什么同空间的内存别硬盘贵那么多的原因吧),但是慢点总比程序根本打不开要好的多,呵呵
今天读完了《linux内核源代码情景分析》关于这个内容的一章,说实话,现在我的内存都是2G,运行linux的时候从来都是将虚拟内存关掉的,因为我的内存使用量都很少超过1G。。。所以不大想对这一部分的内容进行深入分析,本想为了保证博客的连续性到网上找篇文章参考下的,最后想想,参考别人的文章复制过来实在没啥意思,还是自己写吧,顺便记录下,呵呵。
如同物理内存的管理一样磁盘交换区的管理也有着相应的数据结构对其进行管理,这就是swap_info_struct,该结构包含了一个交换区域的位置,大小,使用情况等信息,在源代码中其以数组的形式声明,通过这个结构体,对所有交换区间进行管理,其具体管理方法还是和内存的管理有一定区别的,比如被多个使用者使用的时候,假如对其进行释放,只会对其记录使用者数目的个数进行操作,当使用者减少到0的时候才会真正空闲,而内存的管理中,假如一个使用者对这段内存进行释放的,而另外使用者还在只用这段内存的话,那结果就会出现程序员们最头疼的问题“段错误”,也叫“内存溢出”。。。
基本对内存交换的方法就说到这了,多的也没啥说的了,今天到此为止,可以睡觉喽~~~
今天在公司对一个新的可能的项目进行了评估,效果还不错,感谢Wubq的帮助,还有zouj的帮助,不过做完的时候别个都下班走了。。。明天叫他们来看,可能的话要是我负责这个项目就好了,毕竟核心部分我已经做出来了嘛,呵呵,好好工作,多挣钱,早买房,不过理想还是要坚持的,呵呵