資源簡介
操作系統實驗三,主存空間的分配與回收,包括首次適應算法、最佳和最壞適應算法,內含完整文檔和源碼,編譯即可執行。

代碼片段和文件信息
#include
#include
#include
#include
#define?getAREA()?(AREA*)(malloc(sizeof(AREA)))
#define?getJCB()?(JCB*)(malloc(sizeof(JCB)))
typedef?struct?area??//可用空閑分區鏈結點
{
int?num;?//分區序號
int?base;//首地址
int?size;//大小
int?state;?//狀態
struct?area?*first;?//前向指針
struct?area?*next;??//后向指針
}AREA;
AREA?*pm;//可用分區鏈的頭結點
AREA?*area[10]={NULL};?//該指針數組各個元素指向各個空閑分區,按容量從小到大排序
typedef?struct?JCB??//作業鏈結點
{
char?name[10];?????//作業名
int?size;??????????//所需空間大小
int?base;??????????//起始地址
????struct?JCB?*next;
}JCB;
JCB?*head=NULL;??//作業鏈的表頭
int?get()//讓用戶只能輸入正整數
{
int?n=-1;
scanf(“%d“&n);
while(n<0)
{
???? printf(“輸入只能為正整數,請重新輸入\n“);
scanf(“%d“&n);
}
return?n;
}
void?sort()??//對指針數組排序,按照下標的遞增順序,所指的空閑分區容量也遞增
{
AREA?*p*temp;
int?ij;
for(i=1p=pm->next;?p?;i++p=p->next)?//初始化,先讓每個指針指向一個不同分區
area[i]=p;
area[i]=NULL;
if(pm->next&&pm->next->next)?//排序
{
for(i=1;area[i];i++)
???? for(j=1;area[j+1];j++)
{
if(area[j]->size>area[j+1]->size)
{
temp=area[j];
area[j]=area[j+1];
area[j+1]=temp;
}
}
}
}
JCB?*check(char?*name)??//檢查作業是否存在,若存在則返回指向該作業的指針
{
????JCB?*p*q;
p=head;?q=p;
if(head)
{
while(p)
{
if(strcmp(head->namename)==0)
{
head=head->next;
return?p;
}
else?if(strcmp(p->namename)!=0)
{
q=p;
p=p->next;
}
else?
{
q->next=p->next;
return?p;
}
}
}
return?NULL;
}
void?release(int?base?int?size)??//釋放內存空間
{
AREA?*temp*p?=?pm;
while(p->next)??//尋找釋放區的前一個空閑區p
{
if(base?+?size?<=?p->next->base)
break;
p?=?p->next;
}
if(base?==?p->base?+?p->size)?//低地址相鄰
{
if(p?->next?&&?p->next->base?==?base?+?size)//釋放區上下都與空閑區相鄰
{
???? if(base==0)
{
p->next->base=0;
p->next->size?=?size?+?p->next->size;
sort();
}
else
{
p->size?+=?size?+?p->next->size;
????????temp?=?p->next;
???? p->next?=?p->next->next;
if(p->next!=NULL)
???????????? p->next->first=p;
sort();
???? for(;p->next;p=p->next)?//空閑分區序號整理
???? p->next->num-=1;
}
}
else?//僅與低地址相鄰
{
if(base==0)?//釋放區的首地址是0,插入空閑分區結點
{
temp?=?getAREA();
???????? temp->size?=?size;
???????? temp->base?=?base;
???????? temp->state?=?0;
???????? temp->num?=?p->num+1;
???????? temp->next?=?p->next;
if(p->next!=NULL)
???? p->next->first=temp;
????????? p->next?=?temp;
sort();
???????? for(p=temp;p->next;p=p->next)?//空閑分區序號整理
???????? p->next->num+=1;
}
else
{
???? p->size?+=?size;
sort();
}
}
}
else?if?(p->next?&&?p->next->base?==?base?+size)?//僅與高地址相鄰
{
p->next->base?=?base;
p->next->size?+=?size;
sort();
}
else??//釋放區上下與空閑區都不相鄰
{
temp?=?getAREA();
temp->size?=?size;
temp->base?=?base;
temp->state?=?0;
temp->num?=?p->num+1;
temp->next?=?p->next;
if(p->next!=NULL)
p->next-
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????568320??2013-06-21?17:15??主存空間的分配與回收\實驗報告.doc
?????文件??????16710??2012-11-26?18:35??主存空間的分配與回收\最佳適應算法\Debug\123.obj
?????文件??????41984??2012-11-26?20:32??主存空間的分配與回收\最佳適應算法\Debug\vc60.idb
?????文件??????53248??2012-11-26?20:32??主存空間的分配與回收\最佳適應算法\Debug\vc60.pdb
?????文件?????223776??2012-11-26?20:32??主存空間的分配與回收\最佳適應算法\Debug\最佳適應算法.ilk
?????文件??????18260??2012-11-26?20:32??主存空間的分配與回收\最佳適應算法\Debug\最佳適應算法.obj
?????文件?????221744??2012-11-25?20:32??主存空間的分配與回收\最佳適應算法\Debug\最佳適應算法.pch
?????文件?????435200??2012-11-26?20:32??主存空間的分配與回收\最佳適應算法\Debug\最佳適應算法.pdb
?????文件???????7257??2013-06-21?17:14??主存空間的分配與回收\最佳適應算法\最佳適應算法.cpp
?????文件???????4352??2012-11-26?19:21??主存空間的分配與回收\最佳適應算法\最佳適應算法.dsp
?????文件????????532??2012-11-25?14:22??主存空間的分配與回收\最佳適應算法\最佳適應算法.dsw
?????文件??????41984??2012-11-26?22:59??主存空間的分配與回收\最佳適應算法\最佳適應算法.ncb
?????文件??????48640??2012-11-26?22:59??主存空間的分配與回收\最佳適應算法\最佳適應算法.opt
?????文件????????925??2012-11-26?20:32??主存空間的分配與回收\最佳適應算法\最佳適應算法.plg
?????文件??????33792??2012-11-26?20:38??主存空間的分配與回收\最壞適應算法\Debug\vc60.idb
?????文件??????53248??2012-11-26?20:34??主存空間的分配與回收\最壞適應算法\Debug\vc60.pdb
?????文件?????185676??2012-11-26?20:34??主存空間的分配與回收\最壞適應算法\Debug\最壞適應算法.ilk
?????文件??????18260??2012-11-26?20:34??主存空間的分配與回收\最壞適應算法\Debug\最壞適應算法.obj
?????文件?????221744??2012-11-26?20:04??主存空間的分配與回收\最壞適應算法\Debug\最壞適應算法.pch
?????文件?????427008??2012-11-26?20:34??主存空間的分配與回收\最壞適應算法\Debug\最壞適應算法.pdb
?????文件???????7256??2013-06-21?17:13??主存空間的分配與回收\最壞適應算法\最壞適應算法.cpp
?????文件???????4358??2012-11-26?20:11??主存空間的分配與回收\最壞適應算法\最壞適應算法.dsp
?????文件????????532??2012-11-26?19:56??主存空間的分配與回收\最壞適應算法\最壞適應算法.dsw
?????文件??????41984??2012-11-26?23:02??主存空間的分配與回收\最壞適應算法\最壞適應算法.ncb
?????文件??????48640??2012-11-26?23:02??主存空間的分配與回收\最壞適應算法\最壞適應算法.opt
?????文件????????925??2012-11-26?20:34??主存空間的分配與回收\最壞適應算法\最壞適應算法.plg
?????文件??????33792??2012-11-26?23:07??主存空間的分配與回收\首次適應算法\Debug\vc60.idb
?????文件??????53248??2012-11-26?19:49??主存空間的分配與回收\首次適應算法\Debug\vc60.pdb
?????文件?????188476??2012-11-26?19:49??主存空間的分配與回收\首次適應算法\Debug\首次適應算法.ilk
?????文件??????16836??2012-11-26?19:49??主存空間的分配與回收\首次適應算法\Debug\首次適應算法.obj
............此處省略18個文件信息
- 上一篇:片上網絡NOC基本架構
- 下一篇:企業工資管理系統 數據庫課程設計源碼+課程設計
評論
共有 條評論