A História do Linux [0/7]: As Primeiras Linguagens de Programação e a Origem dos Primeiros Sistemas Operacionais

RMAG news

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;
}

Leave a Reply

Your email address will not be published. Required fields are marked *