Você está na página 1de 4

DISCIPLINA DE SISTEMAS OPERACIONAIS

ACADÊMICO: ERIK SANCHEZ NOGUEIRA

EXERCÍCIO DO CAPÍTULO 5 – LIVRO PROF. CARLOS MAZZIERO

Questão 1: Explique o que é, para que serve e o que contém um TCB - Task Control Block.
TCB, ou Task Control Block, é uma estrutura de dados fundamental em sistemas operacionais que
é usada para gerenciar e controlar tarefas ou processos em um ambiente multitarefa. O TCB
armazena informações importantes sobre uma tarefa específica e é usado pelo sistema operacional
para rastrear e gerenciar o estado e o contexto de execução de cada tarefa. Cada tarefa em execução
possui seu próprio TCB associado. Ele armazena informações essenciais que permitem ao sistema
operacional alternar eficientemente entre tarefas, salvar e restaurar o contexto de execução e
manter um registro do estado atual de cada tarefa. Entre as principais funções de um TCB estão:

• Manter informações sobre o estado da tarefa, como registradores, contador


de programa (PC), ponteiro de pilha, etc.
• Armazenar informações sobre a prioridade da tarefa, seu ID, status (ativo, em
espera, etc.) e recursos alocados.
• Rastrear informações de agendamento, como o tempo de CPU usado, tempo
de espera, tempo de início, etc.
• Possibilitar a troca eficiente entre tarefas pelo sistema operacional.
O TCB é uma parte crítica do funcionamento interno de um sistema operacional e é usado para
garantir que as tarefas sejam gerenciadas de maneira eficiente e que o sistema funcione de maneira
estável e justa, alocando recursos de forma apropriada e mantendo o controle sobre o estado de
cada tarefa.

Questão 2: Desenhe o diagrama de tempo da execução do código a seguir, informe qual a saída
do programa na tela (com os valores de x) e calcule a duração aproximada de sua execução:

Comentando o código:

int main()
{
int x = 0; // Declaração e inicialização de uma variável inteira 'x' com valor 0
fork (); // Criação do primeiro processo filho
x++; // Incrementa o valor da variável 'x' para 1 (executado por ambos, pai e filho)
sleep (5); // O processo atual entra em um estado de sleep (pausa) por 5 segundos
wait (0); // O processo pai espera que qualquer processo filho termine (com ID 0)

fork (); // Criação de um segundo processo filho


wait (0); // O processo atual (pai) espera que qualquer processo filho termine (com ID 0)
sleep (5); // O processo atual entra em um estado de sleep (pausa) por mais 5 segundos
x++; // Incrementa novamente o valor da variável 'x' para 2 (executado por ambos, pai e filho)

printf ("Valor de x: %d\n", x) ; // Imprime o valor de 'x' na tela com uma mensagem
}

Código, questão 2, executado:

Código, questão 2, executado, saída:

Tempo total aproximado para concluir o processamento: 25 segundos.

No caso dos sistemas UNIX, a criação de novos processos é feita em duas etapas: na primeira etapa,
um processo cria uma réplica de si mesmo, usando a chamada de sistema fork(). Todo o espaço de
memória do processo inicial (pai) é copiado para o novo processo (filho), incluindo o código da(s)
tarefa(s) associada(s) e os descritores dos arquivos e demais recursos associados ao mesmo.
A chamada de sistema fork() é invocada por um processo, mas dois processos recebem seu retorno:
o processo pai, que a invocou, e o processo filho, que acabou de ser criado e que possui o mesmo
estado interno que o pai (ele também está aguardando o retorno da chamada de sistema). Ambos os
processos acessam os mesmos recursos do núcleo, embora executem em áreas de memória distintas.

Exercício 3 – saída do código: Indique quantas letras “X” serão impressas na tela pelo
programa abaixo quando for executado com a seguinte linha de comando: a.out 4 3 2 1.

Respotas: foram impressos cinco X.

4. O que são threads e para que servem?

Uma thread é definida como sendo um fluxo de execução independente. Um processo pode conter
uma ou mais threads, cada uma executando seu próprio código e compartilhando recursos com as
demais threads localizadas no mesmo processo2 . Cada thread é caracterizada por um código em
execução e um pequeno contexto local, o chamado Thread Local Storage (TLS), composto pelos
registradores do processador e uma área de pilha em memória, para que a thread possa armazenar
variáveis locais e efetuar chamadas de funções.

5. Quais as principais vantagens e desvantagens de threads em relação a processos?

Vantagens:
1. De Processos: grande vantagem é a robustez - um erro ocorrido em um processo ficará
restrito ao seu espaço de memória pelos mecanismos de isolamento do hardware; os
processos podem ser configurados para executar com usuários (e permissões) distintas,
aumentando a segurança do sistema;
2. De Threads: tipo de implementação, todas as tarefas poder ficar em um único processo,
usando uma thread para cada tarefa. Neste caso, todas as threads compartilham o mesmo
espaço de endereçamento e os mesmos recursos (arquivos abertos, conexões de rede, etc),
tornando mais simples implementar a interação entre as tarefas. a execução é mais ágil, pois
é mais rápido criar uma thread que um processo.
Desvantagens:
1. Com Processos: o compartilhamento de dados entre os diversos processos que compõem a
aplicação irá necessitar de mecanismos especiais, como áreas de memória compartilhada,
pois um processo não pode acessar as áreas de memória dos demais processos.
2. Com Treads: um erro em uma thread pode se alastrar às demais, pondo em risco a robustez
da aplicação inteira.

Você também pode gostar