老師給的程式實驗,但是我c語言不太會,這個程式是有很多錯誤的,能不能有大佬幫忙把錯誤改正。感謝大佬們
二、實驗內容
實現下列記憶體分配演算法:首次適應演算法、最佳適應演算法、最壞適應演算法
三、實驗程式
#include
#define l10
typedef struct lnode
lnode;
lnode
p[l]=,,,,};
int n=5; int f=0;
void print()
{ int i;
printf(「起始位址 分割槽 狀態\n」);
for(i=0;iprintf(「%3d %8d %4d\n」,p[i].startaddress,p[i].size,p[i].state);
void first()
{ int i,l=0,m;
printf(「\n 輸入請求分配分割槽的大小:」);
scanf(「%d」,&m);
for (i=0;i{ if (p[i].sizecontinue;
else if (p[i].size==m)
{ p[i].state=1;
l=1;
break;
else
{ p[n].startaddress=p[i].startaddress+m;
p[n].size=p[i].size-m;
p[i].size=m; p[i].state=1;
l=1; n++;
break;
if (l==1||i{ printf(「位址成功分配\n\n」);
print();
else
printf(「沒有可以分配的位址空間\n」);
viod worst()
{ int i,t=0,l=0,m;
int a[l];
printf(「\n 輸入請求分配分割槽的大小:」);
sxanf(「%d」,&m);
for (i=0;i{ a[i]=0;
if (p[i].sizecontinue;
else if (p[i].size==m)
{ p[i].state=1;
l=1;
break;
else
a[i]=p[i].size-m;
if (l==0)
{ for(i=0;i{ if(a[i]!=0)
t=i;
for (i=0;i{ if(a[i]!=0 && a[i]>a[t])
t=i;
p[n].startaddress=p[t].startaddress+m;
p[n],size=p[t].size-m;
p[t].size=m; p[t].state=1;
l=1; n++;
if (l==1 || i{ printf(「位址成功分配\n\n」);
print();
else
printf(「沒有可以分配的位址空間\n」);
void best()
{ int i,t=0,l=0,m;
int a[l];
printf(「\n 輸入請求分配分割槽的大小:」);
sxanf(「%d」,&m);
for (i=0;i{ a[i]=0;
if (p[i].sizecontinue;
else if (p[i].size==m)
{ p[i].state=1;
l=1;
break;
else
a[i]=p[i].size-m;
if (l==0)
{ for(i=0;i{ if(a[i]!=0)
t=i;
for (i=0;i{ if(a[i]!=0 && a[i]t=i;
p[n].startaddress=p[t].startaddress+m;
p[n],size=p[t].size-m;
p[t].size=m; p[t].state=1;
l=1; n++;
if (l==1 || i{ printf(「位址成功分配\n\n」);
print();
else
printf(「沒有可以分配的位址空間\n」);
void main()
{ int k=0;
printf(「動態分割槽分配演算法:」);
while(k!=5)
{ printf(「\n********************主選單********************」);
printf(「\n1、首次適應演算法\n、」);
printf(「\n2、最壞適應演算法\n3、最佳適應演算法」);
printf(「\n4、退出\n」);
printf(「請選擇演算法:」);
scanf(「%d」,&k);
switch (k)
{ case 1:
printf(「\n 初始狀態為:\n」);
print();
first();
continue;
case 2:
printf(「\n 初始狀態為:\n」);
print();
cirfirst();
continue;
case 3:
printf(「\n 初始狀態為:\n」);
print();
worst();
continue;
case 4:
printf(「\n 初始狀態為:\n」);
print();
best();
continue;
case 5:
break;
default printf(「選擇錯誤,請重新選擇。\n」);
分割槽儲存管理
內零頭 與 外零頭 內零頭是指分配給作業的儲存空間中未被利用的部分。外零頭是指系統中無法利用的小儲存塊。固定分割槽的分配方式會產生內零頭,因為是找出乙個滿足作業要求的空閒分割槽分配給作業,大小不一定剛好合適,分割槽中有一部分儲存空間會被浪費。在可變式分割槽分配中,是按照作業的大小找出乙個分割槽來分配...
作業系統實驗三 可變分割槽儲存管理
一.實驗目的和要求 通過這次實驗,加深對記憶體管理的認識,進一步掌握記憶體的分配 演算法的思想。二.實驗目的和要求 編寫程式模擬實現記憶體的動態分割槽法儲存管理。記憶體空閒區使用自由鏈管理,採用最壞適應演算法從自由鏈中尋找空閒區進行分配,記憶體 時假定不做與相鄰空閒區的合併。假定系統的記憶體共640...
作業系統實驗三 動態分割槽儲存管理
一 目的與任務 目的 熟悉並掌握動態分割槽分配的各種演算法,熟悉並掌握動態分割槽中分割槽 的各種情況,並能夠實現分割槽合併。任務 用高階語言模擬實現動態分割槽儲存管理。二 內容 要求與安排 1 實驗內容 分割槽分配演算法至少實現首次適應演算法 最佳適應演算法和最壞適應演算法中的至少一種。熟悉並掌握各...