DEV Community

Reinan Br.
Reinan Br.

Posted on

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

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

Enter fullscreen mode Exit fullscreen mode

Top comments (0)