1.4 linux用户程序的内存管理(90分钟).doc.doc

1.4 linux用户程序的内存管理(90分钟).doc.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1.4 linux用户程序的内存管理(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 stdlib.h 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 unistd.h # 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; ; p

文档评论(0)

xvli2 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档