Created
May 15, 2018 19:48
-
-
Save gregori/72f9112b5897da4b23950bd2a4145299 to your computer and use it in GitHub Desktop.
Algoritmo first-fit em C
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#define MAX 20 | |
/** | |
* Algorítmo first-fit didático | |
* escrito em C ANSI | |
*/ | |
/* tipo para o obloco de memória */ | |
typedef struct memoria { | |
int tamanho; | |
int alocado; | |
int pid; | |
} memoria_t; | |
/* tipo para o processo */ | |
typedef struct processo { | |
int tamanho; | |
int alocado; | |
} processo_t; | |
int main(int argc, char **argv) { | |
memoria_t blocos[MAX]; /* memória(qtde de blocos) */ | |
processo_t processos[MAX]; /* processos */ | |
int numero_processos, numero_blocos; /* variaveis que conterão o no de processos e de blocos */ | |
int cproc, cblocos; /* contador para processos e blocos */ | |
int alocado; /* flag de alocação de processo */ | |
/* Obtem numero de blocos e seus tamanhos */ | |
printf("Entre o número de blocos de memória: "); | |
scanf("%d", &numero_blocos); | |
for (cblocos = 0; cblocos < numero_blocos; cblocos++) { | |
printf("Entre o tamanho do bloco de memória %d: ", cblocos); | |
scanf("%d", &blocos[cblocos].tamanho); | |
blocos[cblocos].alocado = 0; | |
blocos[cblocos].pid = -1; | |
} | |
/* Obtem número de processos e seus tamanhos */ | |
printf("Entre o número de processos: "); | |
scanf("%d", &numero_processos); | |
for (cproc = 0; cproc < numero_processos; cproc++) { | |
printf("Entre o tamanho do processo %d: ", cproc); | |
scanf("%d", &processos[cproc].tamanho); | |
processos[cproc].alocado = 0; | |
} | |
/* Aloca os processos */ | |
for (cproc = 0; cproc < numero_processos; cproc++) { /* para cada processo */ | |
alocado = 0; /* flag para verificar se o processo foi alocado */ | |
/* itera por todos os blocos de memória até que o processo seja alocado */ | |
for (cblocos = 0; !alocado && cblocos < numero_blocos; cblocos++) { | |
/* se o processo cabe no bloco */ | |
if (processos[cproc].tamanho <= blocos[cblocos].tamanho && !blocos[cblocos].alocado) { | |
printf("O processo %d, com %dk foi alocado ao bloco de memória %d de espaço %dk.\n", cproc, processos[cproc].tamanho, cblocos, blocos[cblocos].tamanho); | |
processos[cproc].alocado = 1; /* marca o processo como alocado */ | |
blocos[cblocos].alocado = 1; /* marca o bloco como alocado */ | |
blocos[cblocos].pid = cproc; /* indica a alocação do processo */ | |
alocado = 1; /* informa ao loop que precisa acabar, pois o processo foi alocado */ | |
} | |
} | |
} | |
/* imprime os processos não alocados */ | |
for (cproc = 0; cproc < numero_processos; cproc++) { | |
if (!processos[cproc].alocado) { | |
printf("O processo %d não foi alocado.\n", cproc); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment