Escolar Documentos
Profissional Documentos
Cultura Documentos
Faculdade de Computação
Sistemas Operacionais
Lista de Exercícios 02 - Processos
Profª Valéria Q. Dos Reis
Figura 1 Figura 2
R: Processo é a atividade que cada nucleo (ou parte dele) do processador está executando. Programa é representado pelo
software onde direciona as instruções para quais processos precisam ser executados.
5. Na Figura 2, não há transições do estado pronto (ready) para bloqueado (waiting) e nem do estado
bloqueado para o estado executando (running). Por que? Há alguma situação em que alguma delas
pudesse ocorrer?
R: Na primeira situação, ready para block, não pode contecer porque para o processo estar bloqueado
ele precisa ser executado primeiro. E do bloqueado para o running não pode porque ele precisa estar
pronto primeiro para poder ser executado, ou seja precisa ir do block pro ready antes de ir pro
running
6. Descreva as ações executadas pelo kernel durante as trocas/mudanças de contexto.
R: Quando existe uma troca de contexto, o estado do primeiro processo precisa ser armazenado como está
para que quando o escalonador precise retornar a este, ele retorne onde parou. Este estado vai armazenar
todos os registradores que estão vinculados ao processo, um desses é contador de programa fisico do
nuleo que atualiza com o contador de programa de cada processo (cada um tem seu proprio contador
logico). E o contador fisico apenas atualiza de acordo com o estado que o contador logico do processo foi
armazenado. E então o novo processo pode se iniciar. Essa estrutura que armazea todas as informações,
nomeamos de bloco de controle de processos.
7. O que é uma tabela de processos? Para que ela é utilizada? Que informações ela armazena?
R: É a mesma coisa que mencionei na questão 6, o bloco de controle de processos ou tabela de
processos e armazena as informações necessárias para execução de cada processo.
8. Incluindo o processo pai inicial, quantos processos são criados pelo programa a seguir?
int main () {
fork();
fork();
fork();}
9. Usando o programa a seguir, identifique os valores de pid nas linhas A, B, C e D. (Suponha que os
pids reais do pai e do filho sejam 2600 e 2603, respectivamente.)
int main() {
pid_t pid, pid1;
pid = fork();
if(pid == 0) {
pid1 = getpid();
printf(“Child: pid = %d”, pid); /* A */
printf(“Child: pid1 = %d”, pid1); /* B */
}
else {
pid1 = getpid();
printf(“Parent: pid = %d”, pid); /* C */
printf(“Parent: pid1 = %d”, pid1); /* D */
}}
R:
Letra A – 0
Letra B – 0
Letra C – 2603
Letra D - 2603
10. Usando o programa a seguir, explique qual será a saída da linha A.
int value = 5;
int main() {
pid_t pid;
pid = fork();
if(pid == 0) {
value += 15;
return 0;
}
else {
if(pid > 0) {
wait(NULL);
printf(“PARENT: value = %d”, value); /* A */
return 0;
}
}}
R:
Saida:
PARENT: value = 15