linux内存管理实验malloc,linux内存管理实验报告.doc

linux内存管理实验报告

操作系统实验报告

院别:XXXXXX

班级:XXXXXX

学号:XXXXXX

姓名:稻草人

实验题目:内存管理实验

实验目的

通过本次试验体会操作系统中内存的分配模式;

掌握内存分配的方法(FF,BF,WF);

学会进程的建立,当一个进程被终止时内存是如何处理被释放块,并当内存不满足进程申请时是如何使用内存紧凑;

掌握内存回收过程及实现方法;

学会进行内存的申请释放和管理;

实验内容

附源代码:

/*宏定义*/

/* 内存分配算法 */

#define MA_FF 1

#define MA_BF 2

#define MA_WF 3

int mem_size=DEFAULT_MEM_SIZE; /*内存大小*/

int ma_algorithm = MA_FF; /*当前分配算法*/

int flag = 0; /*设置内存大小标志*/

static int pid = 0; /*初始pid*/

int algorithm;

/*描述每一个空闲块的数据结构*/

struct free_block_type{

int size;

int start_addr;

struct free_block_type *next;

};

/*指向内存中空闲块链表的首指针*/

struct free_block_type *free_block;

/*每个进程分配到的内存块的描述*/

struct allocated_block{

int pid;

int size;

int start_addr;

char process_name[PROCESS_NAME_LEN];

struct allocated_block *next;

};

/*进程分配内存块链表的首指针*/

struct allocated_block *allocated_block_head = NULL;

struct allocated_block *find_process(int id)

{

struct allocated_block *p;

p=allocated_block_head;

while(p!=NULL)

{

if (p->pid==id)

return p;

}

return NULL;

}

void swap(int *p,int *q)

{

int temp;

temp = *p;

*p = *q;

*q = temp;

return;

}

void do_exit()

{

exit(0);

}

/*初始化空闲块,默认为一块,可以指定大小及起始地址*/

struct free_block_type* init_free_block(int mem_size){

struct free_block_type *fb;

fb=(struct free_block_type *)malloc(sizeof(struct free_block_type));

if(fb==NULL){

printf("No mem\n");

return NULL;

}

fb->size = mem_size;

fb->start_addr = DEFAULT_MEM_START;

fb->next = NULL;

return fb;

}

/*显示菜单*/

display_menu(){

printf("\n");

printf("1 - Set memory size (default=%d)\n", DEFAULT_MEM_SIZE);

printf("2 - Select memory allocation algorithm\n");

printf("3 - New process \n");

printf("4 - Terminate a process \n");

printf("5 - Display memory usage \n");

printf("0 - Exit\n");

}

/*设置内存的大小*/

set_mem_size(){

int size;

if(flag!=0){ //防止重复设置

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值