DEV Community

loading...
Cover image for O que é concorrência em um sistema operacional?

O que é concorrência em um sistema operacional?

nfo94 profile image Natália Oliveira ・4 min read

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.

Discussion (2)

pic
Editor guide
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.