Programar em C/Algoritmo de alocação: diferenças entre revisões
[revisão pendente] | [revisão pendente] |
Conteúdo apagado Conteúdo adicionado
Linha 10: | Linha 10: | ||
int main(){ |
int main(){ |
||
int p,m; |
int p,m; |
||
printf(" |
printf("Entre o numero de processos:"); |
||
scanf("%d",&p); |
scanf("%d",&p); |
||
printf(" |
printf("Entre o numero de blocos de memoria:"); |
||
scanf("%d",&m); |
scanf("%d",&m); |
||
int parr[p]; |
int parr[p]; |
||
struct |
struct memoria{ |
||
int id; |
int id; // identificador |
||
int |
int tamanho; |
||
}marr[m]; |
}marr[m]; |
||
Linha 25: | Linha 25: | ||
for(i=0;i<p;i++) |
for(i=0;i<p;i++) |
||
{ |
{ |
||
printf(" |
printf("Entre o tamanho do processo %d:",i+1); |
||
scanf("%d",&parr[i]); |
scanf("%d",&parr[i]); |
||
} |
} |
||
for(i=0;i<m;i++) |
for(i=0;i<m;i++) |
||
{ |
{ |
||
printf(" |
printf("Entre o tamanho do bloco de memoria %d:",i+1); |
||
scanf("%d",&marr[i].size); |
scanf("%d",&marr[i].size); |
||
marr[i].id=i+1; |
marr[i].id=i+1; |
||
} |
} |
||
int j; |
int j; |
||
int |
int tamanho = 0; |
||
for(i; |
for(i; tamanho <= marr[i].size; i++ ) |
||
tamanho = marr[i].size; |
|||
int |
int tamanho_velho = tamanho ; |
||
int im ; |
int im ; |
||
bool marcador = false ; |
bool marcador = false ; |
||
Linha 45: | Linha 45: | ||
for(i=0;i<p;i++){ |
for(i=0;i<p;i++){ |
||
for(j=0;j<m;j++){ |
for(j=0;j<m;j++){ |
||
if((marr[j]. |
if((marr[j].tamanho>=parr[i]) && (marr[j].tamanho < tamanho) ){ |
||
im = j; |
im = j; |
||
tamanho = marr[j].tamanho; |
|||
marcador = true ; |
marcador = true ; |
||
Linha 57: | Linha 57: | ||
if(marcador){ |
if(marcador){ |
||
marcador = false ; |
marcador = false ; |
||
marr[im]. |
marr[im].tamanho-=parr[i]; |
||
tamanho = tamanho_velho ; |
|||
printf(" |
printf("Aloca o processo %d no bloco memoria %d\n Tamanho restante apos alocar%d\n\n",i+1,marr[im].id,marr[im].tamanho); |
||
}else {printf(" |
}else {printf("Memoria insuficiente para o processo %d",i);break;} |
||
Revisão das 04h47min de 18 de abril de 2014
first fist
best fit
Varre toda a memória e escolhe a página mais ajustada ao tamanho do processo.
#include <stdio.h>
#include <windows.h>
int main(){
int p,m;
printf("Entre o numero de processos:");
scanf("%d",&p);
printf("Entre o numero de blocos de memoria:");
scanf("%d",&m);
int parr[p];
struct memoria{
int id; // identificador
int tamanho;
}marr[m];
int i;
for(i=0;i<p;i++)
{
printf("Entre o tamanho do processo %d:",i+1);
scanf("%d",&parr[i]);
}
for(i=0;i<m;i++)
{
printf("Entre o tamanho do bloco de memoria %d:",i+1);
scanf("%d",&marr[i].size);
marr[i].id=i+1;
}
int j;
int tamanho = 0;
for(i; tamanho <= marr[i].size; i++ )
tamanho = marr[i].size;
int tamanho_velho = tamanho ;
int im ;
bool marcador = false ;
for(i=0;i<p;i++){
for(j=0;j<m;j++){
if((marr[j].tamanho>=parr[i]) && (marr[j].tamanho < tamanho) ){
im = j;
tamanho = marr[j].tamanho;
marcador = true ;
}
}
if(marcador){
marcador = false ;
marr[im].tamanho-=parr[i];
tamanho = tamanho_velho ;
printf("Aloca o processo %d no bloco memoria %d\n Tamanho restante apos alocar%d\n\n",i+1,marr[im].id,marr[im].tamanho);
}else {printf("Memoria insuficiente para o processo %d",i);break;}
}
system ("pause");
return 0;
}
worst fit
O algoritmo worst fit aloca o bloco de memória na região que tem o maior espaço livre.
Está técnica por procurar ocupar primeiro as partições maiores termina por deixar espaços livres que poderiam ser utilizados para que outros blocos de outros programas as utilizassem, diminuindo e/ou retardando a fragmentação.
Next Fit
Buddy System
Esta página é um esboço de informática. Ampliando-a você ajudará a melhorar o Wikilivros. |