Buscar

Semana03

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 3 páginas

Prévia do material em texto

⇒ EXERCÍCIO: faça os exercícios nº 1, 3, 4, 7 do livro-texto do autor TANENBAUM (4ª 
ed., pág. 120 do cap. 2). 
1. Na Figura 2.2, são mostrados três estados de processos. Na teoria, com três estados, poderia 
haver seis transições, duas para cada. No entanto, apenas quatro transições são mostradas. 
Existe alguma circunstância na qual uma delas ou ambas as transições perdidas possam 
ocorrer? 
R: As duas transições que faltam no diagrama de estados são “bloqueadas para em execução” e 
de “pronto para bloqueado”. Na primeira opção, supondo que um processo de entrada e saída 
de um dispositivo esteja bloqueado e esse processo termina, caso a CPU esteja ociosa, esta 
transição poderia acontecer. Já a segunda opção não é possível de acontecer, já que somente 
os processos em execução podem ser bloqueados. 
2. Em todos os computadores atuais, pelo menos parte dos tratadores de interrupções é escrita 
em linguagem de montagem. Por quê? 
R: Isso ocorre, pois, algumas ações como salvar os registradores e configurar o ponteiro da pilha 
não podem ser expressas em linguagens de alto nível, ou seja, essas linguagens não permitem 
acesso ao hardware da CPU. Normal mente a linguagem de montagem é a mesma para todas 
as interrupções, pois a forma de salvar os registros é idêntica, não importando a causa da 
interrupção. 
3. Quando uma interrupção ou uma chamada de sistema transfere controle para o sistema 
operacional, geralmente uma área da pilha do núcleo separada da pilha do processo 
interrompido é usada. Por quê? 
R: Isso pode ser explicado pela separação de privilégios e seguranças exigidas. O intuito é 
proteger o sistema já que um usuário malicioso pode tentar acessar dados e informações de 
outros processos caso o kernel deixe dados da pilha em um espaço na memória de um 
programa de usuário. Além disso, ajuda a cuidar contra interferências e falhas entre os 
processos. 
4. Múltiplas tarefas podem ser executadas em paralelo e terminar mais rápido do que se forem 
executadas de modo sequencial. Suponha que duas tarefas, cada uma precisando de 20 minutos 
de tempo da CPU, iniciassem simultaneamente. Quanto tempo a última levará para completar 
se forem executadas sequencialmente? Quanto tempo se forem executadas em paralelo? 
Presuma uma espera de E/S de 50%. 
R: Presumindo que o tempo de espera de E/S é de 50%, a última tarefa ter minará aos 60 minutos 
caso seja executada sequencialmente. Isso porque como cada tarefa corresponde a 50% de 
tempo da CPU (10 minutos x 2 tarefas = 20 minutos de espera para a execução das duas 
tarefas), logo, se cada uma for executada sequencialmente seria 30 minutos para a o término 
da primeira tarefa, e somente após esse tempo decorrido a segunda tarefa seria inicializada, 
terminando sua execução com 60 minutos. Para o caso da execução em paralelo, o tempo gasto 
seria de 30 minutos, já que as duas tarefas são executadas simultaneamente em 30 minutos, 
onde 20 minutos desse tempo correspondem ao tempo da CPU e os outros 10 minutos 
correspondem ao tempo de espera de cada processo. 
⇒ EXERCÍCIO: faça os exercícios nº 3.8, 3.9, 3.11 do livro-texto do autor SILBERSCHATZ 
(9ª ed., pág.s 150 -152 do cap. 3). 
1. (3.8) Descreva as diferenças entre o scheduling de curto prazo, de médio prazo e de longo 
prazo. 
R: O scheduling de curto prazo seleciona entre os processos que estão em estado de pronto 
que estão na memória, para serem executados pelo processador. Ele faz decisões de 
escalonamento muito mais frequentemente que os de médio e longo prazo. O scheduling de 
médio prazo, seleciona entre os processos que estão na memória virtual, reduzindo o grau de 
multiprogramação. Ele temporariamente remove o processo da memória principal e o coloca 
na memória secundária. O scheduling de longo prazo seleciona entre os processos novos, os 
que são limitados por E/S e os que são limitados pela CPU, dando prioridade aqueles 
limitados por E/S, já que utilizam menos tempo o processador. Este escalonador é o 
responsável pelo grau de multiprocessamento, ou seja, a quantidade de processos que o 
sistema irá trabalhar, além de ser o escalonamento menos frequente. 
2. (3.9) Descreva as ações executadas por um kernel para a mudança de contexto entre 
processos. 
R: Em geral, o sistema operacional deve salvar o estado do processo em execução corrente e 
restaurar o estado do processo definido para entrar em execução em seguida. Salvar o estado 
de um processo normalmente inclui os valores de todos os registradores da CPU, além da 
alocação da memória. 
3. (3.11) Explique o papel do processo init em sistemas UNIX e Linux no que diz 
respeito ao encerramento de processos. 
R: Um ponto a se saber é que todos os processos terminam a partir da syscall exit(), esta 
função simplesmente termina o processo e limpa todos os dados relacionados com ele da 
memória, deixando assim páginas livres para que o Kernel trate delas como quiser. A função 
exit() apenas recebe um parâmetro, que é o status de encerramento do programa (podem ser 
dois valores: 0 e 1, a linguagem C tem duas macros portáveis entre arquiteturas para tal que 
são EXIT_SUCESS e EXIT_FAILURE), este valor de retorno é relatado ao pai do processo 
"terminado". Referi-me a terminado entre aspas pelo simples motivo que neste ponto o 
processo ainda não foi terminado, mas sim encontra-se no estado "TASK_ZOMBIE", isto 
significa que o processo está morto, mas que o seu Process Descriptor ainda se encontra 
alocado no Kernel. Isto significa que a função do processo pai neste caso é usar uma syscall 
chamada wait() que coloca o processo que a executou (o pai) em pausa até um filho deste ser 
terminado por completamente (desalocando o process descriptor) ou ele mesmo receber o 
signal.

Outros materiais