LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2201|回复: 9

Linux的如何进行内存管理?

[复制链接]
发表于 2002-12-12 01:32:31 | 显示全部楼层 |阅读模式
每次在linux里运行了很长时间后用free命令查看剩余内存总是会变的很少,但是swap分区使用率总是0,这样的话swap分区有什么用呢???还有即时退出了所由程序可是内存还是跟刚进x是有很大差距,大家都来讨论一下怎么使linux释放多余的内存空间,就象windows下的内存优化软件那样?
发表于 2002-12-12 08:44:30 | 显示全部楼层
不要用windows管理内存的方法思考linux的内存管理。
linux的内存管理采用Slab算法,Slab算法可以理解为:

  1. 分配对象:
  2.     if(在对象对应的缓存区中还没有空闲对象的位置) {
  3.          获得此对象,不必再做作初始化
  4.     }
  5.     else {
  6.          分配内存
  7.          初始化对象
  8.     }
  9. 释放对象:
  10.     只需在缓冲中将相应位置标为空闲,而不需要作析构
复制代码

在系统资源不足时,slab算法也允许将一部分未用的缓冲空间释放,以缓解系统压力:

  1.   从缓冲中取得一些未使用的对象空间
  2.   对这些对象作析构
  3.   将对象所占的空间释放给系统
复制代码

因此,只有系统申请和释放空间时,对象的初始化和析构方法才被调用,考虑到操作系统中的大量对象的初始化与析构部分是个费时的 过程,故采用slab算法所获得的性能提升是相当可观的。如:运行了KDE系统后,KDE申请了大量的空间,但当KDE退出后,内核只在相应的空间对象并没有立即释放,而是直接在缓冲区中对空闲指针指向这个对象空间,并由此进行slab链表的结构变化。因此大家看到的内存并没有被释放。
采用slab算法,是2.4内核重大改进,slab的优点是可以大大提高内存的利用率以及硬件缓冲区级系统总线的利用率。从这点上看linux的内存管理要比windows优越的多。
发表于 2002-12-12 09:01:19 | 显示全部楼层
好,长知识。
 楼主| 发表于 2002-12-12 09:02:46 | 显示全部楼层
厉害
 楼主| 发表于 2002-12-12 09:10:33 | 显示全部楼层
我现在的问题是运行时间一长我的X就会莫名其妙的崩溃,退回到字符界面,所以我才会怀疑是内存消耗太多,那么照你们看这种情况是由于什么造成的呢?
发表于 2002-12-12 09:26:03 | 显示全部楼层
1.在bios里把系统内存自检打开,看内存是不是有问题。检查一下其它硬件,如CPU温度等。
2.检查显卡是否正常,如果可能的话,换另一个试试。
3.如果KDE有问题,试一下gnome,或者其它图形系统有没有相似的问题。
4.有可能是驱动不正常,更新或升级。
发表于 2002-12-14 20:16:41 | 显示全部楼层
原理明白了。
   jerboa兄,咱们是不是能自己写一个程序,然后来运行它。这样是不是可行?
我不会程序,请老兄指教
多谢`
发表于 2002-12-21 11:30:19 | 显示全部楼层
可以做,这样得修改2.4的内核。如果不修改核心,使用程序的话,必须得进入核心态,以进行slab链表指向的空间进行释放,因为系统内存管理是由核心管理的,但这样做的话,系统整体性能会下降的(前面已经说明slab算法的优点了),我感觉得不尝失。如果真要象windows那样的感觉话,采用以前2.2内核吧,这样符合windows转过来人的感觉。
发表于 2002-12-21 18:13:51 | 显示全部楼层
没有必要修改吧,slab是算法上的进步,不要在意free所看到的数字,Windows下看到那些内存空闲只是安慰心理上的感觉,实际上都没有充分利用,空着就空着,浪费!而有的时候用再用一些内存释放软件反而常常会拖累速度,在Windows下加大缓存的优化效果很明显,让那些空闲的内存充分用其来。
发表于 2002-12-21 23:23:02 | 显示全部楼层

厉害!

总感觉有的时候linux卸载内存的时候特慢~~~
嗷~~~原来是这么一回事呀!
我经过调整后留有115--123MB的内存空间.
那为什么每次启动系统的时候用FREE查看内存的容量总不一样呀?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表