記憶體管理模擬

2021-08-18 16:58:16 字數 2375 閱讀 8785

#define _crt_secure_no_warnings

#include#include#include#define process_num 100 //隨機生成的程序數量

#define similize_time 10000 //**時長

#define total_size 1024 //儲存大小

#define process_max_size 200 //程序占用最大記憶體大小

#define process_max_time 1000 //程序占用的最長時間

#define error_address total_size+1 //無效位址

typedef struct process process;

typedef struct memlist memlist;

struct process ;

struct memlist ;

process* undo;

memlist free_head; //儲存沒有被占用的記憶體塊,鍊錶形式

memlist using_head; //儲存正在占用的記憶體塊,鍊錶形式

void random_process();

void similize_process();

void sim_free();

unsigned int sim_alloc(process a);

memlist*best_fit(unsigned int size);

memlist*worst_fit(unsigned int size);

int main()

void random_process()

k = undo_size;

while (k >= 0 && k >= j)

undo[j] = tmp;

undo_size = undo_size + 1;

} while (i < process_num)

if (fp) fclose(fp);

return;

}void similize_process()

break;

}else

i++;

}} printf("%d\n", sim_time);

test_p = free_head.next;

use = 0;

while (test_p != null)

if (total_size - use > max_use)

max_use = total_size - use;

} fprintf(fp, "total deny time %d\ntotal accept time %d\nuse max %dmb", deny_time, accept_time, max_use);

fclose(fp);

system("pause");

return;

}void sim_free()

if (p_f->next != null && p_u_insert->addr + p_u_insert->size == p_f->next->addr)

}else if (p_f != &free_head&&p_f->addr + p_f->size == p_u_insert->addr)

else

tmp = p_u; //刪除usinglist中的當前節點,防止重複釋放

p_u = p_u->next;

free(tmp);

p_u_back->next = p_u;

} else }}

unsigned int sim_alloc(process a)

tmp = &using_head;

while (tmp->next != null && tmp->next->addr < p_u->addr)

p_u->next = tmp->next;

tmp->next = p_u;

return p_u->addr;

} else

}/*以下為兩個確定應該使用哪乙個記憶體塊的選擇演算法*/

memlist*best_fit(unsigned int size)

p_f = p_f->next;

} return result;

}memlist*worst_fit(unsigned int size)

p_f = p_f->next;

} return result;

}/*test program 測試是否正確生成了隨機程序列*/

//int main()

基於JAVA的記憶體管理模擬

一 需求分析 為了更好地理解作業系統記憶體分配和管理的過程和機制,決定通過程式設計模擬作業系統記憶體分配的過程,以更好的理解作業系統記憶體分配過程中的具體執行流程。題目描述如下 編寫乙個程式,包括兩個執行緒,乙個執行緒用於模擬記憶體分配活動,另乙個用於跟蹤第乙個執行緒的記憶體行為,要求兩個執行緒之間...

基於JAVA的記憶體管理模擬

一 需求分析 為了更好地理解作業系統記憶體分配和管理的過程和機制,決定通過程式設計模擬作業系統記憶體分配的過程,以更好的理解作業系統記憶體分配過程中的具體執行流程。題目描述如下 編寫乙個程式,包括兩個執行緒,乙個執行緒用於模擬記憶體分配活動,另乙個用於跟蹤第乙個執行緒的記憶體行為,要求兩個執行緒之間...

動態記憶體管理 模擬實現memcpy,memmove

memcpy 和memmove 都是c語言中的庫函式,在標頭檔案string.h中,作用是拷貝一定長度的記憶體的內容,原型分別如下 void memcpy void dst,const void src,size t count void memmove void dst,const void sr...