可別分割槽儲存管理實驗

2021-08-21 00:19:10 字數 2971 閱讀 5146

老師給的程式實驗,但是我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 實驗內容 分割槽分配演算法至少實現首次適應演算法 最佳適應演算法和最壞適應演算法中的至少一種。熟悉並掌握各...