Thread #1
Published: 2023-10-04 11:14:27

Vamos explorar o conceito de Threads, mas antes de mergulharmos nesse tópico, é essencial discutirmos sobre Processos, pois eles representam o ponto de partida para entender Threads. 

---

## Definição de um Processo

No Sistema Operacional, um Processo é uma abstração de um programa em execução¹. Essa definição não ajuda compreender melhor o que é um Processo, então, vamos para uma compreensão mais detalhada, embora não nos aprofundemos muito, pois nosso foco é discutir Threads. 

O Sistema Operacional pode estar executando diversos processos, por exemplo, pode estar realizando atualizações de software, utilizando um navegador para acessar a internet e executando ferramentas para edição de imagens, entre outras tarefas. Embora possa parecer que todos esses processos estão sendo executados ao mesmo tempo, essa percepção é ilusória. Na realidade, a CPU troca _(figura 1.0)_ entre os processos em questão de milissegundos, permitindo a execução de vários processos em um intervalo de tempo muito curto. Isso cria a ilusão de paralelismo, mas na verdade se trata de um pseudoparalelismo². A verdadeira ocorrência de paralelismo nos processos ocorre quando se dispõe de multiprocessadores, isto é, sistemas com duas ou mais CPUs. 

Esse mecanismo de troca de processos é possível graças à multiprogramação, na qual o Sistema Operacional divide a memória principal em partições e permite a alocação de diversos processos, possibilitando a alternância entre a execução deles. Conforme mostrado na _figura 1.1_, onde a memória principal **(Memória RAM)** esta particionada em vários processos e cada processo é executado uma vez.








![Image figura 1.1](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vexumwyd2b5bhl4xqico.gif)
_figura 1.1_

---

Quando um processo é iniciado, ele pode requerer diversos recursos, tais como espaço de memória, instruções a serem executadas, arquivos abertos, dados de entrada, conexões de rede, entre outros elementos essenciais. Todos esses componentes são encapsulados dentro do próprio processo.

A utilização desses recursos, muitas vezes de alto custo computacional, é um dos motivos para a adoção de threads, embora detalhes a respeito desse tópico sejam deixados para uma discussão posterior. Vale ressaltar que o Sistema Operacional desempenha um papel crucial no gerenciamento desses recursos, supervisionando a alocação de memória, o acesso a dispositivos de armazenamento e a execução dos diversos processos em andamento. A cada novo processo iniciado, é atribuído um PID (Identificador de Processo) único, e tais informações são registradas de maneira estruturada em uma tabela de processos.

Um ponto de relevância que merece destaque é que, mesmo que um programa seja executado em múltiplas instâncias, os processos resultantes podem ser criados de forma distinta, cada qual sendo associado a um PID único. Além disso, os recursos alocados a um processo não são compartilhados com outros processos, mesmo que pertençam ao mesmo tipo ou categoria.

---

## Escalonador

O responsável por gerenciar essa troca de processos na CPU é o escalonador, que determina quais processos devem ser executados e quais devem ser suspensos. Essa troca ocorre de forma tão eficiente que se torna praticamente imperceptível, criando a sensação de execução simultânea. 

Em resumo, o escalonador é responsável por decidir qual processo será executado, quando isso acontecerá e por quanto tempo ele permanecerá ativo.

Os processadores com múltiplos núcleos (ou cores) têm a capacidade de executar diversos processos simultaneamente, mas o processo de escalonamento continua sendo fundamental para determinar quais processos serão executados em cada núcleo. 

É importante mencionar que existem vários algoritmos de escalonamento disponíveis, embora não entraremos em detalhes sobre eles neste contexto.


---

## Estados de um Processo

Os processos possuem estados que se modificam em resposta ao mecanismo de troca de execução entre eles. Esses estados podem ser classificados como "Em Execução," "Pronto," e "Bloqueado." Tais transições de estado são comumente denominadas "Mudanças de Contexto" ou "Trocas de Contexto". Portanto, quando ocorre a alternância de processos na CPU, é natural que haja uma correspondente alteração no estado do processo.

---

¹_Definição extraída do livro **'Sistemas Operacionais Modernos', de autoria de Tanenbaum, A. S. e Bos, H., na sua 4ª edição, publicada pela [Nome da Editora].**_

²_Termo utilizado no livro **'Sistemas Operacionais Modernos', de autoria de Tanenbaum, A. S. e Bos, H., na sua 4ª edição, publicada pela [Nome da Editora].**_