Programar em C/Algoritmo de alocação: diferenças entre revisões

Origem: Wikilivros, livros abertos por um mundo aberto.
[revisão pendente][revisão pendente]
Conteúdo apagado Conteúdo adicionado
Linha 7: Linha 7:
#include <stdio.h>
#include <stdio.h>
#include <windows.h>
#include <windows.h>

int main(){
int main(){
int p,m;
int p,m;
Linha 14: Linha 14:
printf("Entre o numero de blocos de memoria:");
printf("Entre o numero de blocos de memoria:");
scanf("%d",&m);
scanf("%d",&m);
int parr[p];
int parr[p];
struct memoria{
struct memoria{
Linha 20: Linha 20:
int tamanho;
int tamanho;
}marr[m];
}marr[m];

int i;
int i;

for(i=0;i<p;i++)
for(i=0;i<p;i++)
{
{
Linha 31: Linha 31:
{
{
printf("Entre o tamanho do bloco de memoria %d:",i+1);
printf("Entre o tamanho do bloco de memoria %d:",i+1);
scanf("%d",&marr[i].size);
scanf("%d",&marr[i].tamanho);
marr[i].id=i+1;
marr[i].id=i+1;
}
}
int j;
int j;
int tamanho = 0;
int tamanho = 0;
for(i; tamanho <= marr[i].size; i++ )
for(i; tamanho <= marr[i].tamanho; i++ )
tamanho = marr[i].size;
tamanho = marr[i].tamanho;
int tamanho_velho = tamanho ;
int tamanho_velho = tamanho ;
int im ;
int im ;
bool marcador = false ;
bool marcador = false ;
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].tamanho>=parr[i]) && (marr[j].tamanho < tamanho) ){
if((marr[j].tamanho>=parr[i]) && (marr[j].tamanho < tamanho) ){

im = j;
im = j;
tamanho = marr[j].tamanho;
tamanho = marr[j].tamanho;
marcador = true ;
marcador = true ;
}
}
}
}
if(marcador){
if(marcador){
marcador = false ;
marcador = false ;
Linha 60: Linha 60:
tamanho = tamanho_velho ;
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);
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;}
}else {printf("Memoria insuficiente para o processo %d",i);break;}
}
}
system ("pause");
system ("pause");
return 0;
return 0;
}
}

</syntaxhighlight>
</syntaxhighlight>



Revisão das 04h50min 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].tamanho);   
     marr[i].id=i+1;   
   }
   int j; 
   int tamanho = 0;
 
   for(i; tamanho <= marr[i].tamanho;  i++ )
           tamanho = marr[i].tamanho;
   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.