⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 algorithm.c

📁 这是一个操作系统中模拟内存管理的程序。主要展示内存的三种分配算法
💻 C
字号:
// algorithm.c  设置内存分配算法
// 2007.12.15
extern int ma_algorithm;
extern struct free_block_type *free_block;
//设置内存分配算法
set_algorithm()
{
    int algorithm;
    page_c();
    printf("            设置内存分配算法\n");
    printf("--------------------------------------------\n");
    printf("\t1 - 最先适应算法(First Fit)\n");
    printf("\t2 - 最佳适应算法(Best Fit)\n");
    printf("\t3 - 最坏适应算法(Worst Fit)\n");
    printf("--------------------------------------------\n");
    printf("请选择:");
    scanf("%d", &algorithm);
    if(algorithm>=1 && algorithm <=3) ma_algorithm=algorithm;
    rearrange(ma_algorithm);   	//按指定算法重新排列空闲区链表
    return 0;
}
rearrange(int algorithm)
{
    switch(algorithm)
    {
        case 1:rearrange_FF();break;
        case 2:rearrange_BF();break;
        case 3:rearrange_WF();break;
        default:break;
    }
    return 0;
}
//最先适应算法
rearrange_FF(){
    struct free_block_type *tmp, *work;
    tmp = free_block;
    //把原来的空闲区链表按地址递增的顺序重新排列;
    while(tmp!=NULL)
     {
        work = tmp->next;
        while(work!=NULL){
        if( work->start_addr < tmp->start_addr)
        { /*地址递增*/
            swap(&work->start_addr, &tmp->start_addr);
            swap(&work->size, &tmp->size);
        }
        else
        work=work->next;
        }
      tmp=tmp->next;
     }
	return 0;
}
//最佳适应算法
rearrange_BF(){
    struct free_block_type *tmp, *work;
    tmp = free_block;
    //把原来的空闲区链表按空间大小递增的顺序重新排列;
    while(tmp!=NULL)
     {
        work = tmp->next;
        while(work!=NULL){
        if( work->size < tmp->size)
        { /*地址递增*/
            swap(&work->start_addr, &tmp->start_addr);
            swap(&work->size, &tmp->size);
        }
        else
        work=work->next;
        }
      tmp=tmp->next;
     }
	return 0;
}
//最坏适应算法
rearrange_WF(){
    struct free_block_type *tmp, *work;
    tmp = free_block;
    //把原来的空闲区链表按空间大小递减的顺序重新排列;
    while(tmp!=NULL)
     {
        work = tmp->next;
        while(work!=NULL){
        if( work->size > tmp->size)
        { /*地址递增*/
            swap(&work->start_addr, &tmp->start_addr);
            swap(&work->size, &tmp->size);
        }
        else
        work=work->next;
        }
      tmp=tmp->next;
     }
	return 0;
}
swap(int *a,int *b)
{
    int temp;
    temp=*a;
    *a=*b;
    *b=temp;
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -