Linux多线程死锁及内存管理实验
需积分: 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语言程序中堆栈内存的使用有了更直观的认识。同时,实验提醒开发者在编写程序时要注意内存的合理分配和释放,防止因资源耗尽而导致的系统崩溃或性能问题。
2022-08-08 上传
2022-08-08 上传
2022-08-08 上传
2022-08-08 上传
2022-08-08 上传
2022-08-08 上传
2022-08-08 上传
2022-08-08 上传
2022-08-08 上传
StoneChan
- 粉丝: 31
- 资源: 321
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析