读写者问题(5)

2019-02-20 20:34

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

printf(\}

二、内存管理源程序

//内存空闲分区的描述 #include #include #include //常量定义

#define PROCESS_NAME_LEN 32 #define MIN_SLICE 10

#define DEFAULT_MEM_SIZE 1024 #define DEFAULT_MEM_START 0 #define MA_FF 1 #define MA_BF 2 #define MA_WF 3

int mem_size=DEFAULT_MEM_SIZE; int ma_algorithm = MA_FF;

static int pid = 0; int flag = 0; 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 free_block_type* init_free_block(int mem_size); void display_menu(); int set_mem_size(); void set_algorithm();

void rearrange(int algorithm); int rearrange_FF(); int rearrange_BF();

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

int rearrange_WF(); int new_process();

int allocate_mem(struct allocated_block *ab); void kill_process();

int free_mem(struct allocated_block *ab); int dispose(struct allocated_block *free_ab); int display_mem_usage(); void do_exit();

struct allocated_block *find_process(int pid);

int main(){

char choice; pid=0;

free_block = init_free_block(mem_size); //初始化空闲区 while(1) {

display_menu(); //显示菜单 fflush(stdin);

choice=getchar(); //获取用户输入 switch(choice){

case '1': set_mem_size(); break; //设置内存大小 case '2': set_algorithm();flag=1; break;//设置算法 case '3': new_process(); flag=1; break;//创建新进程 case '4': kill_process(); flag=1; break;//删除进程

case '5': display_mem_usage(); flag=1; break; //显示内存使用 case '0': do_exit(); exit(0); //释放链表并退出 default: break; } }

return 1; }

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(\ return NULL; }

fb->size = mem_size;

fb->start_addr = DEFAULT_MEM_START; fb->next = NULL; return fb; }

void display_menu(){ printf(\

printf(\

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

printf(\ printf(\

printf(\ printf(\ printf(\}

int set_mem_size(){ int size;

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

printf(\ return 0; }

printf(\ scanf(\ if(size>0) {

mem_size = size;

free_block->size = mem_size; } flag=1; return 1; }

void set_algorithm(){ int algorithm; while(1) {

printf(\ printf(\ printf(\ scanf(\

if(algorithm>=1 && algorithm <=3) { ma_algorithm = algorithm; break; } else

printf(\输入有误,请重新输入!\\n\ }

//按指定算法重新排列空闲区链表 rearrange(ma_algorithm); }

void rearrange(int algorithm){ switch(algorithm){

case MA_FF: rearrange_FF(); break; case MA_BF: rearrange_BF(); break; case MA_WF: rearrange_WF(); break; }

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

}

int rearrange_FF(){

struct free_block_type *temp;

//使用头插法,thead为临时头,p为最小地址的数据块的前一个结点 struct free_block_type *thead=NULL,*p=NULL; //当前的最小地址

int min_addr = free_block->start_addr; temp = free_block;

while(temp->next!=NULL) {

if(temp->next->start_addrnext->start_addr; p = temp; }

temp = temp->next; }

if(NULL!=p) { temp = p->next;

p->next = p->next->next; temp->next = free_block; free_block = temp; }

//printf(\

//printf(\

thead = free_block; p = free_block;

temp = free_block->next; while(thead->next!=NULL) {

min_addr = thead->next->start_addr; while(temp->next!=NULL) {

if(temp->next->start_addrnext->start_addr; p = temp; }

temp = temp->next; }

if(p->next!=thead->next) { temp = p->next;

p->next = p->next->next; temp->next = thead->next; thead->next = temp; }

thead = thead->next; p = thead;

temp = thead->next; }

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

//请自行补充 return 1; }

int rearrange_BF(){

struct free_block_type *temp;

//使用头插法,thead为临时头,p为最小内存的数据块的前一个结点 struct free_block_type *thead=NULL,*p=NULL; //当前的最小内存

int min_size = free_block->size; temp = free_block;

while(temp->next!=NULL) {

if(temp->next->sizenext->size; p = temp; }

temp = temp->next; }

if(NULL!=p) { temp = p->next;

p->next = p->next->next; temp->next = free_block; free_block = temp; }

thead = free_block; p = free_block;

temp = free_block->next; while(thead->next!=NULL) { min_size = thead->next->size; while(temp->next!=NULL) {

if(temp->next->sizenext->size; p = temp; }

temp = temp->next; }

if(p->next!=thead->next) { temp = p->next;

p->next = p->next->next; temp->next = thead->next; thead->next = temp; }

thead = thead->next; p = thead;

temp = thead->next; }


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

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

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

马上注册会员

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