Linux多线程死锁及内存管理实验

需积分: 0 0 下载量 120 浏览量 更新于2024-08-04 收藏 366KB DOCX 举报
"操作系统实验,涉及多线程、多进程、死锁、堆内存分配和栈空间测试" 在本次操作系统实验中,主要关注了多线程、多进程间的死锁问题,以及C语言程序中堆和栈内存的使用和管理。实验以破坏性测试的方式进行,以了解系统的实际行为和限制。 首先,实验通过创建两个线程,每个线程分别申请一个互斥锁,并按照相反的顺序尝试获取对方的锁,从而模拟经典的死锁场景。这种情况下,线程1持有锁1并请求锁2,而线程2持有锁2并请求锁1,导致两者都无法继续执行,形成死锁。这是操作系统中典型的资源争夺导致的系统僵局,对于理解和避免实际系统中出现死锁问题具有重要意义。 接着,实验利用`malloc`函数持续申请1KB的堆内存,直至系统崩溃,以此探测堆内存的大小。实验结果显示,在分配超过5.41GB的堆内存后,虚拟机的Ubuntu系统卡死,重启后通过`free`命令观察到分配的堆空间大小与系统剩余内存基本一致,这说明了在Linux环境中,堆内存的分配会受到系统总内存的限制。 此外,实验还通过定义一个包含1KB局部数组的递归函数来测试栈空间的大小。当递归深度足够大时,栈空间会被耗尽,实验结果显示栈空间的大约是8MB。这表明在C语言环境中,每个线程的栈空间是有限的,过大的局部变量或者深度递归可能导致栈溢出。 实验还鼓励扩展目标,比如实现自定义的堆内存管理,设计自己的`malloc`和`free`函数,以更好地理解和控制内存分配的过程。 通过这些实验,不仅加深了对多线程、多进程死锁的理解,也使参与者对C语言程序中堆栈内存的使用有了更直观的认识。同时,实验提醒开发者在编写程序时要注意内存的合理分配和释放,防止因资源耗尽而导致的系统崩溃或性能问题。