Conceitos Essenciais de Processos e Threads
Classificado em Computação
Escrito em em português com um tamanho de 5,42 KB.
2 - Indique a informação que faz parte de um processo, incluindo o PCB: A informação que existe num processo são os dados, o código e o PCB. O PCB é composto pelos estados, o program counter, o ID, os registos, os ficheiros, o Priben e o Tempherh, sendo estes últimos dois tipos de escalonamento.
3 - Compare, em termos de funcionamento, vantagens e desvantagens, threads de kernel versus threads de user level: As threads de kernel têm vantagem em relação às threads de user level porque as threads de user level são consideradas processos pelo sistema operativo. Assim, as threads de user level apenas podem correr em 1 CPU e não em N CPUs, e são bloqueantes. Ou seja, quando precisam de informação, supostamente o processo é obrigado a parar e ir para o estado blocked, o que faz com que a principal vantagem das threads deixe de existir. Em kernel, consigo aproveitar o paralelismo. As threads de user level têm vantagem em relação às de kernel porque a troca dos processos em user level é mais rápida que em kernel, pois não possui a interação do sistema operativo, enquanto que a ação de mudança de processos em kernel necessita da intervenção do sistema operativo.
4 - Dados partilhados e não partilhados das threads:
- Partilhados: Dinâmicos (variáveis globais), código, dados.
- Não partilhados: Ficheiros abertos, o que está no PCB, ID, estado, o program counter, variáveis locais, registo de ativação das funções.
6 - Identifique se, à priori, é garantida ou não a existência de um escalonamento para RMS: Como o espaço que os processos ocupam é 1, não sabemos ao certo se o algoritmo funciona ou não neste caso, visto que só sabemos que funcionava caso o valor ocupado fosse igual ou inferior a 0.78. (n*(2^(1/n)-1)) se n=3 então é igual a 0.78. Para que o algoritmo RMS funcione garantidamente, o espaço que os processos ocupam no CPU tem de ser igual ou menor a 0.78.
1 - RUN -> EXIT: Quando o processo termina.
RUN -> BLOCKED: Quando o processo precisa de uma informação, que pede ao disco, I/O, etc.
RUN -> WAIT: Ocorre devido ao escalonamento, quando está a correr há demasiado tempo ou porque chegou um processo mais prioritário.
O uso de threads só é vantajoso com CPUs múltiplos.
System mode -> User Mode: Pode-se ter uma instrução.
User Mode -> System Mode: Interfaces.
PCB -> gerido pelo sistema operativo. Apenas o código e os dados podem ser alterados, até por eles próprios, dependendo dos processos.
7 estados: Um processo, quando é criado, só vai para o estado wait se estiver pronto a correr. Os processos, para serem criados, precisam de ocupar espaço na memória. Se a memória estiver sobrecarregada, o processo pode ir para stand by, dessa maneira não irá ocupar memória por estar no estado wait. Só quando a memória estiver menos sobrecarregada é que os processos vão para o estado wait. Quando os processos são executados (RUN), o processo pode desaparecer ou pode ir para o estado exit, onde irão ficar até poderem desaparecer.
6 - RMS: Como a percentagem do CPU que os processos vão utilizar é 1 e como apenas vamos ter a garantia que o escalonamento RMS funciona se a percentagem de CPU utilizada for 0.78, então neste caso o escalonamento pode ou não resultar, mas não temos uma garantia se o escalonamento funciona. O processo que possui o período menor é o mais prioritário, por isso vai ser o primeiro a correr, neste caso é o PB.
Indique qual a informação guardada no PCB (process control block). A informação que é guardada no PCB são os estados, o program counter, o ID, os registos, I/O, os ficheiros, Priben e o Tempherh, sendo que o Priben e o Tempherh são 2 tipos de escalonamento. Um processo possui também código e dados.
Indique as situações em que é vantajoso o uso de threads face ao uso de processos clássicos. As vantagens das threads em relação aos processos são a utilização de menos recursos, porque as threads são processos que partilham uma parte do código, por isso a mudança de contexto e a criação das threads é mais rápida que a criação e a mudança de contexto dos processos. As threads são processos que possuem uma parte do mesmo código e que foram pensados para trabalhar em paralelo e em N CPUs, o que é uma vantagem em relação aos processos clássicos. Outra vantagem no uso de threads é quando é necessário uma informação, se o processo precisar de uma informação teria que parar de correr e tinha de ir para o blocked, mas nas threads isso não acontece, este não para nem vai para o blocked mas continua a correr enquanto espera a informação.
While(True) do{
N=N+1 O valor de N é sempre previsível? O valor de N só é
wait(x) - no x influenciado pelo wait e pelo signal
P=P+1 O valor de P é previsível? Não é previsível por estar
função() dentro de uma função
P=P-1
signal(x) + no x
N=N-1
}