- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1.4 Linu用户程序的内存管理(90分钟).doc
1.4 Linux用户程序的内存管理
实验估计时间:90分钟
背景知识
实验目的
工具/准备工作
实验内容与步骤
背景知识
现代操作系统允许多个程序同时运行,因此,内存中需要同时存放这些程序。操作系统采用的存储管理方案主要有分区式存储管理、分页式存储管理、分段式存储管理和段页式存储管理等。
本实验以一个Linux实例程序说明应用程序如何通过系统调用来管理自己用的空闲内存,目的在于加深读者对操作系统存储管理内容的理解。
本实验实例由my-malloc.h、my-malloc.c和test.c三个文件组成。为阅读程序方便,对其中的主要函数作了说明,读者可结合程序注释理解该程序。
实验目的
1 了解通过利用操作系统调用实现用户程序分配内存以及回收所用内存的程序过程,加深对操作系统存储管理机制的理解。
2 通过阅读和分析Linux实验程序,学习Linux程序设计、调试和运行的方法。
工具/准备工作
在开始本实验之前,请回顾教科书的相关内容。
需要准备一台运行Linux操作系统的计算机。
实验内容与步骤
本实验程序主要定义了一个描述自由存储块的结构,每一个自由块都包含块的大小、指向下一块的指针以及块区本身,所有的自由块以地址增加顺序排列,并用链表链接起来。这一链表是本程序维护的一个空闲区域,对于操作系统的当前记录来说是已分出去的区域。因为本程序是运行在用户态的程序。
步骤1:单击红帽子,在“GNOME帮助”菜单中单击“附件”-“文本编辑器”命令,在文本编辑中键入清单5-4程序并保存为my-malloc.h。 清单5-4 my-malloc.h文件 # include typedef long Align; /* for alignment to long boundary */ union header /* block header: */ struct union header *next; /* next block if on Free list */ unsigned int size; /* size of this block */ s; Align x; /* force alignment of blocks */ ; typedef union header Header; # define NALLOC 10 /* minimum #units to request */ static Header * morecore unsigned int nu ; void * Malloc unsigned int nbytes ; void Free void *ap ;
步骤2: 单击红帽子,在“GNOME帮助”菜单中单击“附件”-“文本编辑器”命令,在文本编辑中键入清单5-5程序并保存为my-malloc.c。 清单5-5 my-malloc.c文件 # include # include “my_malloc.h” static Header base; /* empy list to get started */ static Header * free_list NULL; /* start of free list */ /* Malloc: general-purpose storage allocator */ void * Malloc unsigned int nbytes Header *p, *prev; unsigned int nunits; nunits nbytes + sizeof Header -1 / sizeof Header + 1; if prev free_list NULL /* no free list yet */ base.s.next free_list prev base; base.s.size 0; for p prev - s.next; ; prev p, p p - s.next if p - s.size nunits /* big enough */ if p - s.size nunits /* exactly */ prev - s.next p - s.next; else p - s.size - nunits; p + p - s.size; p - s.size nunits; free_list prev; return void * p + 1 ; if p free_list /* wrapped around Free list */ if p morecore nuni
您可能关注的文档
最近下载
- 高一材料作文题目及范文(20篇).docx VIP
- 5.1质量+1.2测量:物体的质量(教案)沪科版(2024)物理八年级全一册.doc VIP
- 新标准大学英语(第三版)视听说教程4(智慧版)课件B4U6.pptx VIP
- 初中文学文本(小说)阅读理解含答案解析.docx VIP
- 四川盆地页岩气勘探开发现状与实践.pdf VIP
- 4.3 神奇的“眼睛”(教案)沪科版(2024)物理八年级全一册.doc VIP
- 电商商品发布操作指南(包括标题制作、文案设计、详情页制作)(原创整套完整版128页).pptx VIP
- 2025年一级建造师《港口与航道工程》真题卷(附答案).docx VIP
- 2025年高考(北京卷)英语真题及答案.docx VIP
- 4.2 探究:凸透镜成像的规律(教案)沪科版(2024)物理八年级全一册.doc VIP
文档评论(0)