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 10: Linha 10:
int main(){
int main(){
int p,m;
int p,m;
printf("Enter number of processes:");
printf("Entre o numero de processos:");
scanf("%d",&p);
scanf("%d",&p);
printf("Enter number of Memory blocks:");
printf("Entre o numero de blocos de memoria:");
scanf("%d",&m);
scanf("%d",&m);
int parr[p];
int parr[p];
struct mem{
struct memoria{
int id;
int id; // identificador
int size;
int tamanho;
}marr[m];
}marr[m];


Linha 25: Linha 25:
for(i=0;i<p;i++)
for(i=0;i<p;i++)
{
{
printf("Enter size of process %d:",i+1);
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("Enter size of memory %d:",i+1);
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 size = 0;
int tamanho = 0;
for(i; size <= marr[i].size; i++ )
for(i; tamanho <= marr[i].size; i++ )
size = marr[i].size;
tamanho = marr[i].size;
int old_size = size ;
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].size>=parr[i]) && (marr[j].size < size) ){
if((marr[j].tamanho>=parr[i]) && (marr[j].tamanho < tamanho) ){


im = j;
im = j;
size = marr[j].size;
tamanho = marr[j].tamanho;
marcador = true ;
marcador = true ;
Linha 57: Linha 57:
if(marcador){
if(marcador){
marcador = false ;
marcador = false ;
marr[im].size-=parr[i];
marr[im].tamanho-=parr[i];
size = old_size ;
tamanho = tamanho_velho ;
printf("Allocating process %d to memory %d\n Size remaining in it after allocation %d\n\n",i+1,marr[im].id,marr[im].size);
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("Not enough memory for process %d",i);break;}
}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.