Programação concorrente Flashcards
O que é bloco descritor de processo?
- É onde o processo é representado no sistema operacional
- Tem todas as informações do processo
- Pesado para o sistema operacional
O que faz o /proc
Salva as informações do Bloco descritor de processo (PCD) em um disco temporário, no diretório daquele processo
Quais informações guardadas em um bloco descritor?
- Prioridade
- Localização e tamanho na memória principal
– Identificação de arquivos abertos
– Informações de contabilidade (tempo de CPU, etc.)
– Estado do processador (apto, executando, etc.)
– Contexto de execução
– Apontadores para encadeamento dos próprios descritores
O que é programação concorrente? O que programação sequencial?
Programação concorrente é quando possuímos diversos fluxos de controlo, onde diversos processos trocam informações entre si e fazem interações. Já na programação sequencial temos apenas um processo sendo executado em um programa
Vantagens x Desvantagens da programaçao concorrente
Vantagens:
- É mais rápido que a sequencial
- Maior desempenho
- Pode utilizar de paralelismo real
Desvantagens:
- É mais complexo de programar
- Pode ocorrer erros por diferença de velocidade
- Race condition
O que é composto por um conjunto de processos
sequenciais que são executados
concorrentemente?
Programação concorrente
Na programação concorrente é muito importante que?
Os processos troquem informações entre si, se não teremos apenas instâncias rodando ao mesmo tempo
Cite pelo menos um problema da programação concorrente?
- Programação mais complexa
- É necessário cuidar com a sincronicidade dos processos, se um processo for mais rápido que outro, isso vira um problema (mesmo com esse problema ela é mais rápida que a sequencial)
O que é race condition?
É quando dois ou mais processos tentam alterar o mesmo conjunto de dados concorrentemente e o resultado será alterado dependendo da ordem que esses dados forem alterados
Programação concorrente é o mesmo que multithreading, cite um exemplo em que ela se faz útil?
Supondo que precisamos criar 100 processos que se relacionam entre si.
Se criamos eles de forma separada, eles vão ser muito pesados pq todos eles terão suas estruturas
Caso a gente crie em multithreading, ele ocupará muito menos recursos pq só será necessário um processo com várias threads.
Além disso, não é necessário alocar e inicializar estrutura de dados no sistema operacional para representar cada processo, só é necessário definir uma pilha e um novo contexto de execução dentro de um processo existente
Qual é o objetivo de Multhreading/Processos leves/ Programação concorrente?
Tentar reduzir o peso computacional, torná-los mais leves
Onde são guardadas as informações das threads?
As threads possuem um bloco descritor de processos, mas é um bloco descritor de threads que é mais leve
Quais são as formas de implementar threads?
Método 1:N, N:N. M:N
Diferenças entre o modelo 1:N, N:N e M:N
1:N (nível de usuário)
É um processo com vários fluxos de execução
Utiliza um CPU virtual, que é um biblioteca. Ele que faz o escalonamento
O sistema operacional não nota a existência de threads
É leve, porém uma chamada de sistema bloqueando pode bloquear todo processo
Ele tb não explora o paralelismo da máquina
O sistema operacional apenas se preocupa em dividir o tempo de processador
N:N (nível de sistema)
É o próprio sistema operacional que faz o escalonamento
Nível de kernel
O sistema operacional enxerga as threads
Explora o paralelismo mas a implementação é mais pesada que a 1:N
M:N
`É a junção dos outros dois
Por que utilizar threads?
Porque você consegue ter mais atividades acontecendo por unidade de tempo (throughput)
Permite o explorar o paralelismo
Criação/Destruição de threads é mais rápido que o de processos
Chaveamento de contexto é mais rápido
No entanto, não significa que vai ganhar muito desempenho