DEV Community

Caio Vidal
Caio Vidal

Posted on • Edited on

Multiprogramming, Multiprocessing e multitasking

Comecei a estudar sobre o assunto e resolvi escrever um pouco sobre o entendimento que tive durante esse tempo. Então, tentarei explicar de maneira simples e clara sobre esses conceitos.

Multiprogramming

Multiprogramming é um dos aspectos mais importante nos sistemas operacionais modernos, ele funciona da seguinte forma:

Sabemos que os sistemas operacionais atuais possuem múltiplos processos a serem executados, como a memória principal é muito pequena para armazenar todos eles, esses processos são inicialmente armazenados numa fila chamada job pool.

O CPU, então, seleciona um desses jobs (processos), armazena na memória principal e começa a executá-lo até que esse processo seja interrompido por algum fator externo ou inicie alguma tarefa de I/O.
No momento da interrupção, o CPU então seleciona outro job no job pool e executa até que o mesmo seja interrompido, fazendo assim uma espécie de rodízio.
Dessa forma o CPU não fica ocioso aguardando os jobs executarem seus trabalhos de I/O (leitura e escrita no disco, comunicação em rede).

Alt Text

Como podemos ver na imagem acima, em nenhum momento o processador ficou ocioso

Multiprocessing

Como vimos, com um CPU, apenas um processo executava por vez.
Hoje em dia, a maioria dos computadores possuem processadores com múltiplos cores permitindo assim que vários processos sejam executados de forma paralela.

Supondo um processador dual-core, dois processos serão executados simultaneamente. Um quad-core executaria 2x mais rápido que um dual-core e 4x mais rápido que um processador com um único core.

Dessa forma podemos concluir que quando falamos de paralelismo, estamos tendo como referência o hardware. Em resumo é a capacidade do CPU executar mais de um processo de forma simultânea através dos múltiplos cores.

Multitasking

Multitasking como o próprio nome já diz, seria a capacidade de executar múltiplas tarefas ao mesmo tempo.
Multitasking é uma extensão lógica de multiprogramming. A maior diferença entre eles é que em multiprogramming havia uma mudança de contexto entre os processos através de uma interrupção, já multitasking é baseado em tempo de compartilhamento (time slicing ou time sharing)

  • Num modelo de compartilhamento de tempo, o CPU separa um quantum de tempo para cada processo. Por exemplo, 4 processos (A, B, C e D) executam de forma alternada a cada 4 nanosegundos.
  • Quando o tempo do processo expira, o CPU faz a troca de contexto para outro processo.
  • Nesse modelo, a troca de contexto acontece de uma forma tão rápida que dá a ilusão que os processos estão sendo executados de forma paralela. Dessa forma o usuário consegue interagir com os processos de forma separada.

Podemos então concluir que os processos estão sendo executados de forma concorrente.

Concorrência vs Paralelismo

Baseado nos conceitos apresentados, vamos então montar uma tabela comparativa entre os dois:

Concorrência Paralelismo
Definição Execução de vários processos em um único core usando compartilhamento de tempo (time slicing) Execução de múltiplos processos de forma simultânea usando múltiplos cores
Objetivo Simular paralelismo usando menos recurso de hardware Paralelismo real e mais performático
Perspectiva Software Design Hardware

Bom, é isso. Espero que tenha conseguido explicar da melhor forma esses conceitos tão usados no mundo da programação.

Até a próxima

Top comments (0)