访问内存导致系统死机
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++)
【讨论】:
以上是关于访问内存导致系统死机的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 2008 R2 持续占用内存直到服务器死机,怎么解决?