DEV Community

Cover image for O que é concorrência em um sistema operacional?
Natália Oliveira
Natália Oliveira

Posted on

11 1

O que é concorrência em um sistema operacional?

Concorrência é a possibilidade do processador de um computador executar mais de uma instrução ao mesmo tempo. Para que isso funcione, a CPU precisa retomar a execução do programa no mesmo estado em que o deixou.

Para esclarecer um pouco sobre a diferença entre concorrência e paralelismo, vale a pena ler esse texto do Treinaweb. Pense que concorrência lida com várias coisas ao mesmo tempo, e paralelismo é fazer várias coisas ao mesmo tempo.

Na programação, concorrência é a composição de processos executando independentemente, enquanto paralelismo é a execução simultânea de computações possivelmente relacionadas.

Existem diversos mecanismos e técnicas para que a concorrência seja possível em um sistema operacional, como:

  • Interrupções e exceções
  • Operações de E/S (I/O)
  • Buffering
  • Spooling
  • Reentrância

Vamos descrever cada uma delas a seguir.

Interrupções e exceções

Interrupções e exceções acontecem quando ocorre um evento inesperado durante a execução de um programa, que desvia o fluxo da sua execução.

Quando o evento é externo ao programa é chamado de interrupção. Exemplo: um dispositivo avisando ao processador que uma operação de E/S está completa.

A interrupção é a base da concorrência de sistemas multiprogramáveis e é decorrente de eventos assíncronos.

O fluxo básico é o seguinte:

  1. Durante a execução do programa, encontramos uma interrupção/exceção;
  2. O conteúdo dos registradores é salvo na pilha de controle;
  3. Identifica-se a origem do evento;
  4. Obtém-se o endereço da rotina de tratamento;
  5. Executa-se a rotina de tratamento;
  6. Restaura-se o conteúdo dos registradores;
  7. Retorno a execução do programa;

A exceção, por sua vez, acontece com a execução de alguma instrução do programa atual. Exemplo: divisão por zero. Aqui, lembre-se da expressão tratamento de exceções, bastante comum quando estamos programando.

Operações de E/S (I/O)

Historicamente, operações de entrada e saída sempre foram custosas para o processador, pois o mantinham ocupado.

Com o surgimento do controlador, não era mais necessário o processador se comunicar diretamente com os periféricos. Além disso, o mecanismo de interrupção foi essencial para desafogar a CPU nesse sentido.

Na E/S controlada por interrupção, a CPU fica livre para processar outras tarefas depois de iniciar um comando de escrita ou leitura. Funciona da seguinte maneira:

  1. Ao, por exemplo, recebe um sinal de leitura, o controlador fica encarregado de ler e armazenar blocos do disco em memória ou em seus registradores;
  2. O controlador sinaliza uma interrupção para o processador;
  3. O processador atende a interrupção;
  4. Inicia-se uma rotina para tratar a interrupção, pegando dados dos registradores do controlador para a memória principal;
  5. Terminada a transferência, o processador pode executar o programa que foi interrompido

Apesar da eficácia do controlador com as interrupções, perde-se eficiência quando estamos falando de uma grande quantidade de dados.

Para resolver isso, temos o DMA (direct memory access), uma técnica que possibilidade um bloco de dados ser transferido entre memória principal e dispositivos de E/S sem que o processador precise intervir (somente no início e no final da transferência).

Além disso, temos o canal de entrada e saída, que eliminou a necessidade dos programas de entrada e saída serem carregados na memória principal, já que o mesmo possui memória própria e executa os programas de E/S.

Buffering

O buffering é um técnica que utiliza uma área na memória principal, chamada de buffer, para transferir dados entre dispositivos de E/S e a memória do computador.

Então, enquanto o processador está manipulando um dado no buffer, o dispositivo de E/S pode realizar outra operação.

Spooling

A técnica de spooling (simultaneous peripheral operation online) utiliza uma área do disco como um buffer, liberando para que outros programas sejam executados enquanto dados são lidos/gravados em disco.

Atualmente essa técnica é usada em sistemas operacionais para impressão, por exemplo. Quando uma impressão é comandada, o dado que será impresso fica gravado em disco num arquivo de spool.

Reentrância

A reentrância é a capacidade de um código reentrante, ou seja, executável, ser compartilhado entre usuários com apenas uma cópia do programa na memória.

Em outras palavras:

Na computação, um programa ou subrotina é chamada de reentrante se puder ser invocada múltiplas vezes de forma segura e concorrente.

Para ir mais a fundo nos tópicos, recomendo o livro Arquitetura de Sistemas Operacionais, do Francis Machado e Luiz Maia.


Fontes:
MACHADO, Francis Berenger; MAIA, Luiz Paulo. Arquitetura de Sistemas Operacionais: Incluindo Exercícios com o Simulador SOSIM e Questões do ENADE. Rio de Janeiro: LTC, 2013.
Wikipedia - Reentrancy
Treinaweb
Go Blog


Esse texto não tem intenção de esgotar o tema. Acrescente nos comentários, e também aponte erros quando os identificar.

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

Top comments (2)

Collapse
 
cescquintero profile image
Francisco Quintero 🇨🇴

Eu olvido, por favor, taggea seus artigos com a tag "portugues". Dessa forma eu puedo achar-los mais facilmente

Collapse
 
cescquintero profile image
Francisco Quintero 🇨🇴

Boãs definições e mui bons exemplos para um tema tão um poco complicado.

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

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

Okay