Pré-requisito: diferença entre processo e thread , diferença entre thread de nível de usuário e thread de nível de kernel
Introdução:
Em um sistema operacional, há vários programas, e tanto o sistema operacional quanto o
usuário compartilham os recursos de hardware e software do sistema do computador. Para garantir que um programa incorreto não prejudique os outros programas ou o sistema operacional, ele distingue entre o código definido pelo usuário e o código do sistema operacional.
A abordagem é que apenas a tarefa que está sendo executada em nome do sistema operacional é fornecida com suporte de hardware, conhecido como modo kernel , enquanto a tarefa executada em nome de um
aplicativo de usuário não é, conhecida como modo de usuário .
- O modo kernel é um modo privilegiado, onde o processo tem acesso a todos os recursos, como hardware, dados do kernel, código do kernel do sistema operacional.
- A diferença básica é que, no modo kernel, o kernel pode acessar o hardware diretamente, mas não é o caso no modo usuário. No entanto, quando um aplicativo de usuário solicita um serviço do sistema operacional, o sistema deve fazer uma transição do modo de usuário para o kernel.
Uma maneira melhor de entender o conceito é observar o diagrama a seguir.
Um thread é uma unidade de execução, que faz parte de um processo. Ele compartilha os recursos do processo. É agendado pelo agendador. Existem duas maneiras de implementar um thread: elas estão no espaço do usuário ou no Kernel.
Threads podem ser implementados no espaço do usuário, sem o suporte do kernel. As seguintes coisas acontecem se implementarmos um thread no espaço do usuário -
- O código correspondente e as estruturas de dados utilizadas são armazenados no espaço do usuário.
- Se uma API for chamada, isso resultará em uma chamada de sistema local no espaço do usuário, em vez de uma chamada de sistema.
- Os threads são gerenciados inteiramente pelo sistema de tempo de execução, sem que o kernel saiba nada sobre isso.
Modelos de
thread no nível do usuário : um thread no espaço do usuário pode ser implementado usando qualquer um dos quatro métodos a seguir: -
- Um a um
- Muitos para um
- Muitos para muitos
- Dois níveis.
Em cada um dos modelos acima, o encadeamento no espaço do usuário é mapeado com o encadeamento do kernel ou melhor, com um processador virtual.
1. Um para
um:
neste tipo de modelo -
- Cada encadeamento de nível de usuário é mapeado com um encadeamento de nível de kernel separado.
- Cada thread no espaço do usuário é executado em um thread separado no nível do kernel.
- Aqui, o kernel deve fornecer uma chamada de sistema para criar um novo thread de kernel.
2. Muitos para um:
neste tipo
de modelo -
- Vários encadeamentos no espaço do usuário são mapeados com um único encadeamento no nível do kernel.
- Em outras palavras, todos os threads de nível de usuário são executados no mesmo thread do kernel.
- Como há apenas um thread do kernel, apenas um thread no nível do usuário é executado por vez.
- Cada thread do usuário faz uma chamada de sistema para criar uma nova thread do kernel.
3. Muitos para muitos:
neste tipo de modelo -
- Um número n de threads no nível do usuário é mapeado para execução em um número m de threads no nível do kernel.
4. Dois níveis:
neste tipo de modelo -
- Esta é uma versão híbrida dos modelos muitos para muitos e um para um.
- Apenas um conjunto limitado de threads de usuário podem ser vinculados a uma única thread do kernel.
Vantagens:
vimos o que são threads, como as threads no nível do usuário são diferentes do nível do kernel e diferentes tipos de threads do usuário. Mas qual é a motivação por trás do uso de um
thread no nível do usuário? Vejamos algumas de suas vantagens: -
- Como não há necessidade de uma chamada de sistema, o processo geral é rápido e eficiente.
- A organização simples, já que os threads são criados, trocados e gerenciados sem intervir no kernel.
- Ele pode ser implementado em um sistema, cujo sistema operacional não oferece suporte a threads no nível do kernel.
Desvantagens:
para todas as vantagens, existem desvantagens
correspondentes -
- Programação pobre, como alocar um processo com uma thread ociosa ou bloquear um processo, porque uma thread está travando.
- O desempenho pode ser inconsistente.
Aprenda todos os conceitos do GATE CS com aulas gratuitas ao vivo em nosso canal do youtube.