读写者问题(7)

2019-02-20 20:34

山东科技大学学生课程设计

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 // three partterns

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<<\


读写者问题(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:(北师大版)五年级数学上册知识点归纳讲解

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: