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

Billboard image

Imagine monitoring that's actually built for developers

Join Vercel, CrowdStrike, and thousands of other teams that trust Checkly to streamline monitor creation and configuration with Monitoring as Code.

Start Monitoring

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Engage with a sea of insights in this enlightening article, highly esteemed within the encouraging DEV Community. Programmers of every skill level are invited to participate and enrich our shared knowledge.

A simple "thank you" can uplift someone's spirits. Express your appreciation in the comments section!

On DEV, sharing knowledge smooths our journey and strengthens our community bonds. Found this useful? A brief thank you to the author can mean a lot.

Okay