`

Linux内核中BM字符串查找算法的一个小BUG

阅读更多
本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,
严禁用于任何商业用途。
msn: yfydz_no1@hotmail.com
来源:http://yfydz.cublog.cn

在内核的lib/ts_bm.c文件中,实现了Boyer-Moore字符串查找算法, 但有一个小BUG:
 
static unsigned int bm_find(struct ts_config *conf, struct ts_state *state)
{
 struct ts_bm *bm = ts_config_priv(conf);
 unsigned int i, text_len, consumed = state->offset;
 const u8 *text;
 int shift = bm->patlen, bs;
...
 
shift的值应该初始化为:
 int shift = bm->patlen-1, bs;
 
 
否则的话如果text最前面就匹配了pattern的话,是找不到的, 如:
char text[]="patternsdfsfgsfsf";
char pattern[]="pattern";
 
按shift = bm->patlen就不能找到.
 
另外在较老内核版本(如2.6.15)的bm_init函数中, 复制bm->pattern放在compute_prefix_tbl(bm)之后,这也是不对的,应该先拷贝后计算, 不过新点的版本中已经改过来了.
分享到:
评论

相关推荐

    Linux内核设计与实现(第三版中文高清带目录)_linux_linux内核_

    2. **进程管理**:Linux内核通过调度算法管理进程的执行,如抢占式调度、实时调度策略等。此外,还包括进程间的通信(IPC)机制,如管道、信号量、消息队列等。 3. **内存管理**:内核负责物理和虚拟内存的分配、...

    Linux内核分析之调度算法.doc

    rq 结构体是 Linux 调度算法中的一个重要数据结构,每个 CPU 都有一个 rq 结构体,它主要存储一些基本的用于调度的信息,包括实时调度的和 CFS 调度的。rq 结构体中包括了 spinlock_t lock、nr_running、cpu_load 等...

    深入理解Linux内核 + Linux内核设计与实现 英文版

    《Linux内核设计与实现》侧重于介绍Linux内核的基本架构和主要功能,让读者对内核有一个整体的认识。书中的内容涵盖了进程管理、内存管理、文件系统、设备驱动、网络协议栈等方面,通过实例解析,让读者能够明白各个...

    深度:一文看懂Linux内核!Linux内核架构和工作原理详解

    理解Linux内核最好预备的知识点:懂C语言懂一点操作系统的知识熟悉少量相关算法懂计算机体系结构Linux内核的特点:结合了unix操作系统的一些基础概念Linux内核的任务:1.从技术层面讲,内核是硬件与软

    深入理解linux内核中文第三版(带目录)

    《深入理解Linux内核》是Linux系统开发领域的一本经典著作,中文第三版更是更新了大量与现代Linux内核相关的最新知识。这本书旨在帮助读者理解Linux内核的工作原理,为那些想要深入研究操作系统核心机制的人提供了...

    linux 内核精髓-精通linux内核必会的75个绝技

    《Linux内核精髓-精通Linux内核必会的75个绝技》是一本专为Linux爱好者和专业人员设计的深度学习指南。本书的核心目标是帮助读者深入理解Linux内核的工作原理,掌握其核心功能,并能熟练应用这些知识解决实际问题。...

    Linux内核中拥塞控制算法的比较分析.pdf

    Linux内核中拥塞控制算法可以分为两类:一种是基于窗口的拥塞控制算法,另一种是基于速率的拥塞控制算法。基于窗口的拥塞控制算法包括Cubic、Htcp、Hybla、Westwood和Veno等,而基于速率的拥塞控制算法包括TCP Vegas...

    linux内核完全注释,linux内核

    《Linux内核完全注释》是由著名Linux技术专家赵炯编著的一本深入解析Linux内核的书籍,它为读者提供了全面、详尽的Linux内核知识。这本书因其深入浅出的讲解方式,成为了初学者了解和研究Linux内核的重要参考资料。 ...

    Linux内核完全注释V3.0_linux内核_linux_

    Linux内核V3.0是2011年发布的一个重要版本,引入了许多改进和新特性,使得Linux更加适应现代计算环境。 在"Linux内核完全注释V3.0"这本书中,作者详细地解释了内核源代码的各个部分,这对于开发者、系统管理员以及...

    linux内核编译原理

    linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核...

    Linux内核设计的艺术

    2. 宏内核架构:Linux遵循宏内核(Monolithic kernel)架构,内核中的所有组件几乎都运行在同一个地址空间,这通常提供了比微内核更好的性能,但也可能导致更复杂的内核代码和管理难度。 3. 进程调度:Linux内核...

    Linux内核完全注释(修正版v5.0).zip

    3. 文件系统:文件系统是Linux内核中的一个重要组成部分,它负责组织和管理磁盘上的数据。Linux支持多种文件系统,如EXT2、EXT3、EXT4等,每种文件系统都有其特定的设计理念和优化策略。 4. 网络协议栈:Linux内核...

    深入理解Linux内核第3版.pdf

    这本书共计942页,旨在通过详细解析Linux内核的数据结构、算法及编程技巧,为读者提供一个深入探索Linux内部运作机制的平台。 ### 内存管理 Linux内核的内存管理是其最核心的部分之一。书中深入探讨了包括文件缓冲...

    Linux内核中的预取算法.docx

    如果一个页面已经很长时间没有被访问,那么它再次被访问的可能性就很小,因此可以将它从内存中删除。FIFO算法是一种基于先进先出的预取算法,它将新加载的页面放在内存队列的末尾,当内存队列满时,将最早加载的页面...

    伙伴算法在Linux内核中的应用及其改进.pdf

    总的来说,伙伴算法在Linux内核中的应用及其改进是一个持续的研究领域。通过深入理解伙伴算法的工作原理,以及针对实际环境的优化,可以显著提高内存管理的效率,从而提升整个系统的性能和稳定性。对于操作系统...

    linux内核分析.pdf

    内存管理是Linux内核中另一个重要的组件,负责管理系统中的内存资源,包括内存分配、内存释放和内存保护。Linux内核使用了分页机制来管理内存,提高了系统的性能和安全性。 文件系统管理: 文件系统管理是Linux...

    Linux内核编程.pdf

    在Linux中,还有一个非常重要的概念,那就是模块参数。模块参数是指在Linux内核中使用的参数,用于配置内核模块的行为。例如,在Linux中,我们可以使用模块参数来配置网络协议栈的行为。 在Linux中,还有一个非常...

    Linux内核的进程调度原理及改进算法研究.pdf

    在Linux系统中,就绪态的进程会组织成一个就绪队列,通过调度算法选择下一个运行的进程。 Linux内核的进程调度主要依赖于task_struct结构中的几个关键字段,如policy(调度策略)、priority(静态优先级)、counter...

Global site tag (gtag.js) - Google Analytics