内存占用解析
前言:
物理内存是计算机的主存储设备,磁盘是副存储设备。也就是说,磁盘可以不要,但是内存不能没有。内存一部分是支持CPU运算的存储空间的扩展,直接与CPU通讯(相当于低速的cache),另一部分用来存储一些常用的数据(也就是一般而言的资源),这些资源对个人电脑而言都从磁盘读取(一些工作站可以通过其余I/O设备如光盘塔之类的输入),所以内存也与磁盘有相当多的通讯。当然这只是功能上的划分,本身这些数据并没有明确的界限。
内存一直在扮演一个中间人的角色,调和两个矛盾。一个是CPU高速运算需要的缓存不够。所以基本上最常用的数据,就放在速度快的cache上,不过由于CPU的体积和集成度的限制,集成不了足够的cache,所以用内存“滥竽充数”,随着内存体积倍增,cache一级一级加大,如今这部分功能对性能的影响可能越来越不明显了。
另一个矛盾是磁盘的随机数据读写效率低下,如今磁盘的连续数据传输能力越来越强大,不过由于物理结构的限制,随机数据读写一直是软肋。在这方面,如今市面上最好的磁盘甚至不如一个地摊上30元买来的普通U盘。这也就是为什么windows会支持用U盘、TF、CF卡来做readyboost加速补充内存而不是用磁盘。而内存无论是随机数据读写还是连续数据传输,速度都数十倍于磁盘,由于CPU运算可能需要大量的随机数据输入,不可能依赖速度蹩脚的磁盘,所以内存必不可少的在这里做一个代理人的角色。首先将磁盘上的数据提前输入内存,再由内存递交给cpu,由于cpu输出的数据只要输出到内存就可以呈现给用户,所以避免了磁盘性能低下造成的糟糕的用户体验。
正文:
一般我们所指的杀毒软件的用户体验,当然是在监控状态下的体验,估计也没人一天24小时扫描着磁盘吧。那么看看这时候杀毒软件在如何利用硬件资源。
首先,当我们读取或者写入文件的时候,杀毒软件会提前一点预读取我们可能用到的文件,这个时候显然是把数据读入内存了。同时既然要监控,肯定要特征码吧,于是特征库也被加载进内存,这个时候内存占用基本上是飙升的状态。然后,CPU开机根据特征库比对文件,CPU占用也飙升。如果还开启了启发,那么还要加载虚拟机引擎到内存,CPU还要模拟出一个简单的系统运行过程,这时候只有一个结果——卡!(暂时命名为卡机1),尤其对于单核的CPU来说,瞬间的90%以上占用基本上是肯定的。不过由于用户不可能一次调用大量文件,所以这个过程很快结束,如果过程非常短暂,用户就不会觉得卡机。
至于虚拟机引擎和特征库占用的那些内存是否马上回收,各个杀毒软件的内存管理机制不同,结果也就不同了。如果常驻内存,那么显然应对连续的文件操作时候,不需要反复加载这两个模块,效率是很高的,如果立刻回收,则下个监控周期(以开始监控扫描到回复静息状态为一个周期)要重复加载,效率十分低下。
网友评论