Com o advento dos primeiros sistemas complexos de interpretação de instruções mecânicas, surgiu a nescessidade de criar linhas de comandos que essas mesmas máquinas pudessem interpretar e reproduzir funções de acordo com o comando que foi dado e/ou que já foi pré guardado (armazenado ou programado) para a máquina fazer.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// Definição de estruturas para representar processos e memória
typedef struct Processo {
int id;
int tempo_execucao;
int tempo_restante;
} Processo;
typedef struct Memoria {
int tamanho;
int espaco_livre;
int enderecos[100]; // Array para armazenar endereços de processos alocados
} Memoria;
// Função para simular a alocação de memória para um processo
void alocarMemoria(Processo *processo, Memoria *memoria) {
if (memoria->espaco_livre >= processo->tempo_execucao) {
// Encontra um espaço livre na memória
int endereco = 0;
for (int i = 0; i < memoria->tamanho; i++) {
if (memoria->enderecos[i] == 0) {
endereco = i;
break;
}
}
// Atualiza as informações de processo e memória
processo->endereco = endereco;
memoria->espaco_livre -= processo->tempo_execucao;
memoria->enderecos[endereco] = processo->id;
printf("Processo %d alocado na memória no endereço %d.\n", processo->id, endereco);
} else {
printf("Memória insuficiente para alocar o processo %d.\n", processo->id);
}
}
// Função para simular a execução de um processo
void executarProcesso(Processo *processo) {
printf("Processo %d em execução...\n", processo->id);
sleep(processo->tempo_execucao); // Simula o tempo de execução
printf("Processo %d finalizado.\n", processo->id);
}
// Função para liberar memória alocada para um processo
void liberarMemoria(Processo *processo, Memoria *memoria) {
memoria->espaco_livre += processo->tempo_execucao;
memoria->enderecos[processo->endereco] = 0;
printf("Memória liberada para o processo %d.\n", processo->id);
}
int main() {
// Inicialização da memória
Memoria memoria;
memoria.tamanho = 100;
memoria.espaco_livre = memoria.tamanho;
for (int i = 0; i < memoria.tamanho; i++) {
memoria.enderecos[i] = 0;
}
// Criação de alguns processos de exemplo
Processo processo1 = {1, 30};
Processo processo2 = {2, 20};
Processo processo3 = {3, 15};
// Simulação da alocação e execução de processos
alocarMemoria(&processo1, &memoria);
executarProcesso(&processo1);
liberarMemoria(&processo1, &memoria);
alocarMemoria(&processo2, &memoria);
executarProcesso(&processo2);
liberarMemoria(&processo2, &memoria);
alocarMemoria(&processo3, &memoria);
executarProcesso(&processo3);
liberarMemoria(&processo3, &memoria);
return 0;
}
Top comments (0)