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){ //防止重復設置
總結
以上是生活随笔為你收集整理的linux内存管理实验malloc,linux内存管理实验报告.doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 耳垂有硬块怎么治疗
- 下一篇: linux中bind9源码包安装使用,编