Exercícios - Sistemas Operacionais
Exames: Exercícios - Sistemas Operacionais. Pesquise 861.000+ trabalhos acadêmicosPor: andacr • 9/7/2014 • 2.403 Palavras (10 Páginas) • 5.505 Visualizações
UNIVERSIDADE FEDERAL DE SÃO PAULO
INSTITUTO DE CIÊNCIA E TECNOLOGIA
Sistemas Operacionais
Prof Dr. Ezequiel Roberto Zorzal
Lista 2 (Entrega até: 1ª Prova)
Qual a maior vantagem de implementar threads no espaço do usuário? Qual a maior desvantagem?
A maior vantagem de implementar threads no espaço do usuário é que elas são escalonadas pelo programador, tendo a grande vantagem de cada processo usar um algoritmo de escalonamento que melhor se adapte a situação, o sistema operacional neste tipo de thread não faz o escalonamento, em geral ele não sabe que elas existem. Neste modo o programador é responsável por criar, executar, escalonar e destruir a thread. A maior desvantagem é se um thread fizer uma chamada bloqueante, todo o processo estará bloqueado, pois o kernel não tem acesso ao mesmo.
Descreva as diferenças entre o scheduling de curto prazo, de médio prazo e de longo prazo.
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.
Incluindo o processo pai inicial, quantos processos são criados pelo programa mostrado abaixo?
#include<stdio.h>
#include<unistd.h>
int main()
{
fork();
fork();
fork();
return 0;
}
São criados 8 processos.
A sequência de Fibonacci é a série de números 0, 1, 1, 2 , 3, 5, 8, ... Formalmente, ela pode ser expressa como:
〖fib〗_0=0
〖fib〗_1=1
〖fib〗_n=〖fib〗_(n-1)+〖fib〗_(n-2)
Escreva um programa usando a chamada de sistema fork() que gere a sequência de Fibonacci no processo filho. O número da sequência será fornecido na linha de comando. Por exemplo, se 5 for fornecido, os cinco primeiros números da sequência serão exibidos pelo processo filho. Já que os processos pai e filho têm suas próprias cópias dos dados, será necessário que o filho exiba a sequência. Faça o pai invocar a chamada wait() para esperar o processo filho ser concluído antes de sair do programa. Execute a verificação de erros necessária para assegurar que um número negativo seja passado na linha de comando.
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
int main(){
int x = 0, y = 1, n = x + y, i;
scanf("%d ", &i); //numero inserido pelo usuário.
pid_t pid = fork();
if (pid == 0){
printf("Filho faz o Fibonacci.\n");
printf("0 %d\n ",n);
while (i>0) {
n = x + y;
printf("%d \n", n);
x = y;
y = n;
i--;
if (i == 0) {
printf("Fim do nó filho.\n");
}
}
}
else {
printf("Parent is waiting for child to complete...\n");
waitpid(pid, NULL, 0);
printf("Parent ends\n");
}
return 0;
}
Forneça dois exemplos de programação em que a criação de vários threads proporcione melhor desempenho do que uma solução com um único thread.
Um exemplo simples seria um jogo, que pode ser modelado com linhas de execução diferentes, sendo uma para desenho de imagem e outra para áudio. Neste caso, há um thread para tratar rotinas de desenho e outro thread para tratar áudio; No ponto de vista do usuário, a imagem é desenhada ao mesmo tempo em que o áudio é emitido pelos alto-falantes; Porém, para sistemas com uma única CPU, cada linha de execução é processada por vez. Outro exemplo que pode ser citado é a leitura de um arquivo pdf muito grande por exemplo, onde uma thread fica processando a abertura do programa, enquanto outra faz com que você continue tendo acesso à interface do programa, eliminando a espera necessária que seria criada caso os processos fossem gerados em uma única thread.
Cite duas diferenças
...