Escolar Documentos
Profissional Documentos
Cultura Documentos
Termos:
Kernel - Kernel é uma palavra inglesa usada na computação para apontar o núcleo do
sistema operacional, como se fosse o “cérebro” de um computador.
User Thread - “User” como a própria palavra já diz, vem de usuário, e é usada pelos
programadores para lidar com vários fluxos de controles dentro de um programa, para
controlar um programa que pode ter vários caminhos.
pedro 2°
Thread Synchronization - A sincronização de threads é um aspecto crucial da programação,
utiliza técnicas e mecanismos para coordenar e controlar o acesso concorrente a recursos
compartilhados entre threads, como o nome diz, é a sincronização das threads, e isso é
usado a fim de evitar condições de corrida e inconsistências de dados.
Semáforo (Semaphore):
● O semáforo é um contador inteiro que é usado para controlar o acesso
concorrente a um conjunto de recursos.
● Ele pode ser usado para permitir que um número específico de threads
acessem um recurso simultaneamente.
● Exemplo: Suponha que você tenha um conjunto de 5 conexões de banco de
dados disponíveis. Você pode usar um semáforo com um contador inicial de
5 para controlar o acesso a essas conexões. Cada vez que uma thread
adquire uma conexão, o contador do semáforo é decrementado, e quando a
conexão é liberada, o contador é incrementado.
Imutabilidade:
● Isso significa que uma vez que algo é criado, não pode ser alterado. Se algo parece
mudar, na verdade estamos criando uma nova versão em vez de modificar o
original, deixando assim muito mais seguro.
Bloqueio:
● Isso é como uma porta que só pode ser aberta por uma pessoa de cada vez.
Garante que apenas uma thread possa acessar um recurso compartilhado de cada
vez, para evitar bagunça, ou seja, se uma thread acessar um recurso, as outras não
vão poder acessar até que essa thread pare de acessar esse recurso.
Atomicidade:
● Isso significa que uma operação é feita de uma vez só, sem ser interrompida no
meio. Como um movimento único que não pode ser dividido, ou seja, se você
começar a criar uma operação, você tem que ir até o fim, não pode parar e depois
continuar, começou, tem que terminar.
Compartilhamento de Memória:
● É como se todas as pessoas em uma equipe compartilhassem um quadro branco
gigante. Cada pessoa pode escrever ou ler informações nesse quadro para que
todos saibam o que está acontecendo.
Troca de Mensagens:
● É como enviar notas ou cartas para outras pessoas na equipe. Cada pessoa pode
enviar uma mensagem para outra e receber mensagens de volta.
Essas são as formas básicas de comunicação entre threads. É importante que as threads
se comuniquem de forma clara e organizada para garantir que o trabalho em equipe seja
eficiente e que não ocorram problemas de coordenação.
Exemplo: Imagine que você tem uma padaria. Seu macroprocesso seria tudo o que você faz
para fornecer pães frescos aos clientes. Isso inclui comprar ingredientes, assar o pão,
embalar e vender. As funções organizacionais seriam como você organiza sua equipe para
fazer tudo isso de forma eficiente.
Estudo Threads - Faculdade ADS 11/03/24
Introdução.
Os primeiros sistemas operacionais suportavam apenas uma tarefa por processo, o que se
tornou uma complicação quando as aplicações foram se tornando cada vez mais
complexas, por exemplo: um editor de texto geralmente executa várias tarefas
simultaneamente, como formatação, paginação e verificação ortográfica. Essas demandas
demonstraram a necessidade de suportar mais de uma tarefa operando sobre os mesmos
recursos, ou seja, dentro do mesmo processo.
O que é?
Thread, traduzindo para o portugues significa fio ou linha e é uma forma como um
processo/tarefa de um programa de computador é dividido em duas ou mais tarefas que podem
ser executadas de forma simultânea.
O modelo de thread seria um espaço de endereço e múltiplas linhas de controle e de
execução, porém, uma thread compartilha um espaço de endereçamento pertencente a um
processo. As linhas de execução de uma thread compõem a execução de um processo.
Há outros fatores que podem ser mencionados para se distinguir um processo de um thread
e evidenciar a importância desses para os sistemas operacionais e o gerenciamento de
processos. Dentre eles está o fato de que, para cada processo criado, além da alocação de
recursos, a comunicação entre os processos é essencial para a otimização do tempo. Logo,
há os seguintes mecanismos que servem para realizar o envio de sinais:
● pipe: permite o tráfego unidirecional de informações entre processos e utiliza a
estrutura de dados array com apenas duas posições, que indicam 0 para leitura e 1
para gravação;
● semáforos: servem para testar e incrementar a sincronização de processos;
● troca de mensagens: este também pode ser descrito como uma forma de
sincronização e comunicação entre processos, uma vez que esses podem estar
localizados em outro endereço na memória e, por esse motivo, será mais demorada
a comunicação.
Com isso, é possível dizer que um thread é uma sub-rotina de um programa que é
executado de forma concorrente e assíncrona, portanto, aos processos em execução.
Essas definições de ações de threads devem ser estabelecidas no momento do
planejamento da arquitetura do sistema operacional e são implementadas por
desenvolvedores que associam cada ação de um thread ao respectivo tipo de processo ou
comportamento que o sistema deve ter. Em função dessas características, threads também
passam pelas mesmas mudanças de estados que os processos. Da mesma forma que há o
bloco de controle de processos, há um bloco de controle de threads conhecido como TCB
(Thread Control Block).
Threads também são utilizadas para implementar fluxos de execução dentro do núcleo do
Sistema Operacional, recebendo o nome de threads de núcleo, incluindo atividades internas
do núcleo, como rotinas de drivers de dispositivos ou tarefas de gerência.
A figura abaixo ilustra o conceito de threads de usuário e de núcleo, onde o processo A tem
várias threads, enquanto o processo B é sequencial, ou seja, possui uma única thread.
Para que serve? 1°
O conceito de thread foi criado com o intuito de reduzir o tempo que se leva para criar um
novo processo, que pode ser tanto um monothread ou multithread.
Em resumo, monothread e multithread são execuções de processos em um sistema
operacional, onde um processo Monothread executa apenas uma thread de cada vez, onde
a execução das tarefas ocorre de maneira sequencial, sendo menos eficiente na questão de
aproveitamento de recursos, em comparação com sistemas multithread, que por sua vez é
um sistema que permite a execução simultânea de várias threads, sendo essas threads
unidades independentes de execução dentro de um processo, possibilitando a execução
concorrente de diferentes partes de um programa, melhorando o desempenho e
responsividade de aplicativos. Quando falamos em thread, especialmente em multithreads,
podemos dizer que um processo, ou os seus subprocessos, estão ocupando o mesmo
endereço em memória, reduzindo o tempo de comunicação entre processos.
Quando é necessário?
Sistemas mais recentes e sofisticados usam de forma conjunta processos e threads,
buscando realizar múltiplas tarefas simultaneamente. Algumas situações em que o uso de
threads pode ser benéfico:
É importante notar que o uso de threads também apresenta desafios, como a necessidade
de sincronização para evitar problemas de concorrência. Portanto, é fundamental considerar
cuidadosamente a utilização de threads em um programa e garantir uma implementação
adequada para evitar possíveis problemas.
Conclusão 3°
Em resumo, o uso de threads em sistemas operacionais oferece flexibilidade, melhora o
desempenho, permite a execução concorrente de tarefas e contribui para uma melhor
utilização dos recursos do sistema, desempenhando um papel fundamental na otimização
dos sistemas. No entanto, é crucial ter em mente os desafios associados à sincronização e
à comunicação entre threads para evitar problemas de concorrência e garantir a
consistência dos dados. Por último, as threads oferecem uma poderosa ferramenta para os
desenvolvedores de sistemas, permitindo a criação de aplicativos mais rápidos, responsivos
e escaláveis em uma variedade de plataformas e ambientes operacionais.