DEV Community

Reinan Br.
Reinan Br.

Posted on

1

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

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay