Decision Cache杀毒软件要扫描每一个即将被访问的文件,这对用户体验的影响很大。使用过 MacFee 等软件的用户一定感同身受。
假如一个文件被频繁使用,且没有修改,那么最好只在第一次访问的时候扫描它,之后便不再需要扫描了。类似一个 cache,扫描过的文件进入这个 cache,下次再访问同一个文件时,假如在 cache 中存在,那就不需要再次扫描文件内容了。
Fanotify 支持这种 cache,也叫做 ignore marks。它的工作原理很简单,假如对一个文件系统对象设置了 ignore marks,那么下次该文件被访问时,相应的事件便不会触发访问控制的代码,从而始终允许该文件的访问。
杀毒软件可以这样使用此特性,当应用程序第一次打开文件 file A 时,Fanotify 将通知杀毒软件 AV 进行文件内容扫描,如果 AV 软件发现该文件没有病毒,在允许本次访问的同时,对该文件设置一个 ignore mark。如下图所示:
图 4. 访问文件此后 File A 再次被访问的时候,Fanotify 将发现在 cache 中已经有相应的 Ignore Mark,因此不再通知 AV 软件进行访问控制而直接允许该文件的访问请求。
图 5. 直接允许该文件的访问请求当文件内容被修改时,Fanotify 将自动清除 Ignore mark。Ignore Mark 的数量缺省情况下有一定限制,但用户可以通过修改 init flag 设置无限的 mark 数目。将在后续 API 讲解中详细说明。 |