山东科技大学学生课程设计
int free_mem(struct allocated_block *ab){ int algorithm = ma_algorithm;
struct free_block_type *fbt, *pre=NULL,*head;
fbt=(struct free_block_type*) malloc(sizeof(struct free_block_type)); pre=(struct free_block_type*) malloc(sizeof(struct free_block_type)); if(!fbt) return -1;
// 进行可能的合并,基本策略如下
// 1. 将新释放的结点插入到空闲分区队列末尾 // 2. 对空闲链表按照地址有序排列 // 3. 检查并合并相邻的空闲分区
// 4. 将空闲链表重新按照当前算法排序 head = pre;
fbt->start_addr = ab->start_addr; fbt->size = ab->size;
fbt->next = free_block; //新释放的结点插入到空闲分区链表的表头 free_block = fbt;
rearrange_FF(); //对空闲链表按照地址有序排列 //printf(\
pre->next = free_block; //求的pre为fbt的前一个结点 pre->size = 0;
while(pre->next->start_addr!=fbt->start_addr) pre = pre->next; //左右分区都存在
if(0!=pre->size&&NULL!=fbt->next) { //左右分区都可合并
if((pre->start_addr+pre->size)==fbt->start_addr && (fbt->start_addr+fbt->size)==fbt->next->start_addr) {
pre->size = pre->size + fbt->size + fbt->next->size; pre->next = fbt->next->next; free(fbt->next); free(fbt); }
//左分区可合并
else if((pre->start_addr+pre->size)==fbt->start_addr) { pre->size = pre->size + fbt->size; pre->next = fbt->next; free(fbt); }
//右分区可合并
else if((fbt->start_addr+fbt->size)==fbt->next->start_addr) { fbt->size = fbt->size + fbt->next->size; fbt->next = fbt->next->next; free(fbt->next); }
山东科技大学学生课程设计
}
//左分区不存在
else if(0==pre->size) {
if((fbt->start_addr+fbt->size)==fbt->next->start_addr) { fbt->size = fbt->size + fbt->next->size; fbt->next = fbt->next->next; free(fbt->next); } }
//右分区不存在
else if(NULL==fbt->next) {
if((pre->start_addr+pre->size)==fbt->start_addr) { pre->size = pre->size + fbt->size; pre->next = fbt->next; free(fbt); } }
//printf(\ rearrange(algorithm); free(head);
//请自行补充…… return 1; }
int dispose(struct allocated_block *free_ab){ struct allocated_block *pre, *ab;
if(free_ab == allocated_block_head) {
allocated_block_head = allocated_block_head->next; free(free_ab); return 1; }
pre = allocated_block_head;
ab = allocated_block_head->next;
while(ab!=free_ab){ pre = ab; ab = ab->next; } pre->next = ab->next; free(ab); return 2; }
int display_mem_usage(){
struct free_block_type *fbt=free_block;
struct allocated_block *ab=allocated_block_head; if(fbt==NULL) return(-1);
printf(\ printf(\
printf(\ while(fbt!=NULL){
printf(\ fbt=fbt->next; }
山东科技大学学生课程设计
printf(\
printf(\ while(ab!=NULL){
printf(\ ab=ab->next; }
printf(\ return 0; }
void do_exit() { }
三、快速文件系统源程序
#include
#include
void filter_nobuffer(char *source, char *sink, void (*func)(char *addr));
void filter_sequen(char *source, char *sink, void (*func)(char *addr));
void filter_overlp(char *source, char *sink, void (*func)(char *addr));
// five function operations void f1(char *addr); void f2(char *addr); void f3(char *addr); void f4(char *addr); void f5(char *addr); #define BUFFER_SIZE 1024 char *buffer;
void main() {
// allocate the buffer
buffer = new char[BUFFER_SIZE]; DWORD tick;
DWORD nobuffer_average_time = 0; DWORD sequen_average_time = 0; DWORD overlp_average_time = 0;
山东科技大学学生课程设计
cout<<\无文件高速缓存模式正在运行...\ DWORD nobuffer_start_time = GetTickCount();
tick = nobuffer_start_time;
filter_nobuffer(\
cout<<\ tick = GetTickCount();
filter_nobuffer(\
cout<<\ tick = GetTickCount();
filter_nobuffer(\
cout<<\ tick = GetTickCount();
filter_nobuffer(\
cout<<\ tick = GetTickCount();
filter_nobuffer(\
cout<<\ tick = GetTickCount();
filter_nobuffer(\
cout<<\ tick = GetTickCount();
filter_nobuffer(\
cout<<\ tick = GetTickCount();
filter_nobuffer(\
cout<<\ tick = GetTickCount();
filter_nobuffer(\
cout<<\ tick = GetTickCount();
filter_nobuffer(\
山东科技大学学生课程设计
DWORD nobuffer_end_time = GetTickCount();
cout<<\ms.\
cout<<\使用文件高速缓存模式正在运行...\ DWORD sequen_start_time = GetTickCount();
tick = sequen_start_time;
filter_sequen(\
cout<<\ tick = GetTickCount();
filter_sequen(\
cout<<\ tick = GetTickCount();
filter_sequen(\
cout<<\ tick = GetTickCount();
filter_sequen(\
cout<<\ tick = GetTickCount();
filter_sequen(\
cout<<\ tick = GetTickCount();
filter_sequen(\
cout<<\ tick = GetTickCount();
filter_sequen(\
cout<<\ tick = GetTickCount();
filter_sequen(\
cout<<\