访问内存导致系统死机

Posted

技术标签:

【中文标题】访问内存导致系统死机【英文标题】:Accessing memory causes system to freeze 【发布时间】:2021-04-18 00:37:56 【问题描述】:

我正在尝试根据进程的vma's 从内存中读取值。但是,每当我尝试集体访问这些位置时,系统都会挂起然后崩溃。

void print_mmap(struct vm_area_struct *mmap)
 
        while (mmap != NULL)
        
            printk(KERN_INFO "vm_start: %lu vm_end: %lu difference: %lu\n", mmap->vm_start, mmap->vm_end, (mmap->vm_end-mmap->vm_start));
            int i;
            for (i=0;mmap->vm_start<mmap->vm_end;i++)
            
                (unsigned long*) (mmap->vm_start+i);
            
            mmap = mmap->vm_next;
        

为什么会发生这种情况?我在调用函数之前使用了 rcu_read_lock() 和 task_lock()。如果我从内存中只打印一个值或几个值,那么驱动程序运行得很好,它似乎只有在我从头到尾访问时才会挂起。有更好的方法吗?

【问题讨论】:

【参考方案1】:

我造成了一个无限循环。

对于 (i=0;mmap->vm_startvm_end;i++)

需要

for (i=0;i vm_end-mmap->vm_start);i++)

【讨论】:

以上是关于访问内存导致系统死机的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式/X86下linux系统死机及内存优化

新手求救:ABAP中编辑select语句导致系统死机

SQL Server 2008 R2 持续占用内存直到服务器死机,怎么解决?

WPF 绘图效率的问题 如何速度快而且又避免卡顿

ROS 下运行gazebo 和rviz gazebo吃了很多内存,导致电脑死机

系统经常死机,有时候到滚动条时会卡住