Você está na página 1de 10

comUFES/CT Departamento de Informtica PROVA FINAL DE SISTEMAS DE PROGRAMAO II 13/12/2010 Prof. Jos Gonalves P. Filho Aluno(a): ............................................................................................................................................................................. 1.

1. (1,0) Considere o seguinte trecho de um programa. Quantas vezes so impressas as palavras "Engenharia" e "Computao"? Justifique e monte a rvore de processos. Considere que a funo fork() nunca devolve valores menores que zero.
main () { ... for(i=0; i<2: i++) { pid1=fork(); pid2=fork(); if (pid1 > 0) printf("Engenharia\n"); if (pid2 == 0) printf("Computao\n"); } ... }

2. (2,0) Suponha um S.O. com escalonador de filas multinveis em que h cinco nveis. O quantum do primeiro nvel de 0,5 segundos. Cada nvel mais baixo tem um quantum de tamanho duas vezes maior que o quantum do nvel anterior. Um processo no pode sofrer preempo at o seu quantum terminar. O sistema executa processos em lote (cpu bound) e interativos (I/O bound). Analise a eficincia desse escalonador. Caso julgue procedente, que mudanas mnimas voc proporia para tornar o esquema mais aceitvel para o mix de processos que pretende? 3. (2,0) Mostre como implementar um monitor a partir de semforos. Defina e inicialize as variveis e os semforos necessrios. Descreva o procedimento de entrada (enter()), o procedimento de sada (leave()) e as operaes sobre variveis de condio signal.cond() e wait.cond(). Siga a abordagem de Hoare (o processo sinalizador espera). 4. (2,0) Preencha as lacunas e os comentrios e descreva o que faz este trecho de programa. Use a numerao das linhas para facilitar a sua explicao, caso julgue necessrio. L1. struct sigaction act; /*___________________________________*/ L2. struct sigaction oact; /*___________________________________*/ L3. if (sigaction(SIGINT, NULL, &oact) == -1) /*___________________________________*/ L4. perror ("_______________________________________________"); L5. else if (oact.sa_handler == SIG_DFL) { /*___________________________________*/ L6. act.sa_handler = SIG_IGN; /* ___________________________________*/ L7. if (sigaction(SIGINT, &act, NULL) == -1) /*___________________________________*/ L8. perror ("____________________________________________"); L9. else { L10. printf("___________________________________________\n"); L11. sleep(35); L12. if (sigaction(SIGINT, &oact, NULL) == -1) /*___________________________________*/ L13. perror("_________________________________________"); L14. printf("____________________________________________\n"); 5. (2,0) Dois mtodos comuns de paginao so paginao por demanda e paginao antecipada. Quais as vantagens e desvantagens potenciais da paginao antecipada? Qual a relao com o mecanismo de working set (conjunto de trabalho)? 6. (1,0) Considere um sistema de arquivos UNIX com organizao do tipo inode cujo mapa de disco contenha 13 ponteiros para blocos de disco: 10 diretos, 1 indireto (single indirect block), 1 duplamente indireto (double indirec block) e 1 triplamente indireto (triple indirect block) . Assuma que cada bloco do disco de 4KB (4096 bytes) e que um ponteiro para um bloco do disco ocupa 4 bytes. Quantas operaes de disco so requeridas para ler o byte de nmero 100.000 de um arquivo? Assuma que o inode esteja na memria. Explique a sua resposta.

UFES/CT Departamento de Informtica PROVA FINAL DE SISTEMAS OPERACIONAIS I 16/12/2010 Profa. Roberta Lima Gomes Aluno(a): ............................................................................................................................................................................. 1. (2,0) Considere o trecho de programa abaixo. Quantas vezes so impressas as palavras "Sopa" e "Macarro"? Justifique a sua resposta montando a rvore de processos gerada. Voc deve mostrar os valores de pid1 e pid2 ao final de cada iterao, em cada um dos processos da rvore, explicitando qual das duas palavras cada um deles imprime. Considere que a funo fork() nunca devolve valores menores que zero.
main () { ... for(i=0; i<2: i++) { pid1=fork(); pid2=fork(); if (pid1 > 0) printf("Sopa\n"); if (pid2 == 0) printf("Macarro\n"); } ... {

2. (1,5) Considere uma extenso do problema do produtor-consumidor definida da seguinte forma: (a) h dois processos consumidores e um processo produtor. Os processos executam concorrente e assincronamente; (b) o produtor no pode escrever no buffer at que ambos os consumidores tenham lido dele. aberta uma exceo para a primeira escrita; (c) nenhum consumidor pode ler o contedo de um buffer indefinido; (d) Nenhum consumidor pode ler o mesmo contedo duas vezes sucessivamente; (e) Ambos os consumidores podem executar seus eventos simultaneamente. Defina semforos e use primitivas P e V para impor a excluso mtua e sincronizar os processos. Processo Produtor ... repeat ... coloca_dados_buffer ... until forever Processo Consumidor1 ... repeat ... l_dados_do_buffer ... forever Processo Consumidor2 ... repeat ... l_dados_do_buffer ... until forever

3. (2,0) Descreva a tcnica de escalonamento mostrada na figura abaixo. Apresente vantagens e desvantagens desta tcnica com relao aos diversos tipos de processos. Que mudanas voc proporia para melhor-la?

4. (1,5) Preencha as lacunas e explique o que faz o trecho de programa abaixo.

... #define KEY _________ #define MSG "______________________________" int main() { int shmid ; int size = _________ ; char *path="____________________________" ; char *mem ; int flag = 0;

/* _________________________________ */ /* _________________________________ */ /* _________________________________ */ /* _________________________________ */

/* ___________________________________________ */ if (( ________ = shmget(ftok(path,(key_t)KEY), size,0)) == -1) { perror("Erro1") ; exit(1) ; } printf("Chave unica: %d\n",_________________________); /* ___________________________________________ */ if ((mem = shmat (shmid, 0, flag)) == (char*)-1){ perror("Erro2") ; exit (1) ; } /* ___________________________________________ */ strcpy(_______, ________); exit(0); } 5. (2,0) O que swapping e para que utilizada esta tcnica? Por que importante o uso de um loader com relocao dinmica para que a tcnica de swapping possa ser implementada? Compare-a com a paginao. O uso de uma das tcnicas exclui o uso da outra no mesmo sistema de gerncia de memria? Por qu? 6. (1,0) Considere um sistema de arquivos UNIX com organizao do tipo inode cujo mapa de disco contenha 13 ponteiros para blocos de disco: 10 diretos, 1 indireto (single indirect block), 1 duplamente indireto (double indirec block) e 1 triplamente indireto (triple indirect block) . Assuma que cada bloco do disco de 4KB (4096 bytes) e que um ponteiro para um bloco do disco ocupa 4 bytes. Quantas operaes de disco so requeridas para ler o byte de nmero 200.000 de um arquivo? Assuma que o inode esteja na memria. Explique a sua resposta com o auxlio de um diagrama.

QUESTES DE S.O.

ESCALONAMENTO/PROCESSOS 1. Descreva duas solues de hardware para o problema da excluso mtua. Quais as suas vantagens e desvantagens? 2. Imagine girar o mostrador de quantum q de um sistema operacional que contm apenas processos orientados a E/S. Aps um ponto q = c, aumentar o valor do quantum resulta em pouca ou nenhuma alterao no desempenho do sistema. O que o ponto c representa e por que no h nenhuma alterao do sistema quando q > c? 3. (1,0) Como o valor do quantum pode afetar o grau de multiprogramao em um sistema operacional? 4. (1,0) Qual o propsito das system calls (SVCs) e como elas se relacionam com o conceito de operao dual-mode (kernel mode e user mode)? 5. (1,5) Justifique a afirmativa: Facilitar a programao e gerenciar recursos so dois dos principais objetivos de um sistema operacional. 6. (1,0) Em algumas implementaes do UNIX, o kernel no-preemptivo. O que isto significa? Quais as vantagens e desvantagens desta abordagem? 7. Com relao ao escalonador tradicional do Unix, porque ele no favorece processos CPU bound? Esses processos podem sofrer starvation? Justifique. 8. Dado o trecho de programa abaixo, desenhe a rvore que representa a hierarquia dos processos criados a partir da sua execuo. ... c2 = 0; c1 = fork(); if (c1 > 0) c2 = fork(); if (c2 == 0) fork(); exit(); 7. (1,0) Considere um sistema operacional com escalonamento por prioridades onde a avaliao do escalonamento realizada em um intervalo mnimo de 5ms. Neste sistema, os processos A e B competem por uma nica UCP. Desprezando os tempos de processamento relativo s funes do sistema operacional, a tabela a seguir fornece os estados dos processos A e B ao longo do tempo, medido em intervalos de 5 ms (E=execuo, P=pronto e W=espera). O processo A tem menor prioridade que o processo B.

a) Em que tempos A sofre preempo? b) Em que tempos B sofre preempo? 9. O que um estado zombie? o estado no qual um processo fica quando, sendo um processo-filho, ele termina suas tarefas, mas possui um pai que ainda no est recebendo seus dados de retorno (ainda est ocupado com sua prpria execuo). Nesse caso, o processo-filho chamado de zombie pelo sistema operacional, pois fica espera de uma chamada wait ou waitpid do pai.

1) Responda sucintamente: (a) O que uma condio de corrida? (b) Quais os requisitos para uma boa soluo para o problema da regio crtica? (c) Como funciona a soluo de hardware Test-and-Set? (d) O que o problema da inverso de prioridade? 10. Considere um sistema que deva executar muitos tipos de processos. Considere ainda os seguintes algoritmos de escalonamento: FIFO, Round Robin, Prioridades, Multinvel. Dada a lista de requisitos a seguir, explique porque cada um desses algoritmos satisfaz ou no satisfaz todos os requisitos simultaneamente. a) O nmero de processos interativos relativamente pequeno. Eles devero ter alta prioridade, mas so aceitveis pequenos atrasos. b) Processos com uso intensivo de E/S devem ter prioridade alta para manter ativos os processadores de E/S. c) Processos com uso intensivo da UCP devem retardar processos com uso intensivo de E/S, mesmo que esses j estejam esperando h muito tempo. d) Quando os processos com uso intensivo da UCP so os nicos que esto prontos, a sobrecarga do sistema operacional deve ser minimizada. 11. (1,0) Descreva a tcnica de escalonamento mostrada na figura abaixo. Apresente os mritos relativos dessa tcnica no escalonamento de processos de tipos variados (curtos, longos, interativos, CPU bound, I/O bound, tempo real, etc.).

12. (1,0) Suponha um S.O. com escalonador de filas multinveis na qual h cinco nveis. O quantum do primeiro nvel 0,5 segundos. Cada nvel mais baixo tem um quantum de tamanho duas vezes maior que o quantum do nvel anterior. Um processo no pode sofrer preempo at o seu quantum terminar. O sistema executa processos em lote (cpu bound) e interativos (I/O bound). Analise a eficincia desse escalonador. Caso julgue procedente, que mudanas mnimas voc proporia para tornar o esquema mais aceitvel para o mix de processos que pretende? 13. (4,0) O sistema operacional Linux utiliza dois algoritmos de escalonamentos, um de tempo compartilhado e outro baseado em prioridades, para tratar tarefas de tempo real. Cada processo associado a uma classe de escalonamento. No algoritmo de escalonamento para processos de tempo compartilhado, o Linux usa um algoritmo por prioridades, baseado em crditos. Cada processo possui um determinado nmero de crditos (inicialmente, o nmero de crditos igual prioridade do processo); o processo com o maior nmero de crditos na fila de prontos selecionado pelo escalonador. A cada interrupo do temporizador (1ms), o processo em execuo perde um crdito; quando seu crdito chega a zero, o escalonador ativado para selecionar outro processo para ganhar o processador. Se nenhum processo na fila de prontos tiver crditos, o algoritmo faz nova atribuio de crditos a todos os processos (inclusive aos processos bloqueados), de acordo com a seguinte regra: crditos := crditos /2 + prioridade. Avalie o algoritmo de escalonamento por prioridade usado pelo Linux quanto ao tempo mdio de execuo dos processos (calcule o turnaround de cada processo e faa a mdia). Para tanto, considere o seguinte volume de trabalho (processos de A a D chegam no sistema ao mesmo tempo):

14. Explique porque o escalonar tradicional do Unix no adequado a processos de tempo real. Por que ele no escalvel?

SINCRONIZAO 15. Escreva um programa concorrente formado por dois processos - um produtor e um consumidor - e por um monitor. O monitor possui dois procedimentos, get e put. O procedimento put chamado pelo processo produtor para depositar um elemento no buffer (de 1 posio). O procedimento get chamado pelo processo consumidor, e retorna o elemento do buffer. 16. Um problema clssico o problema dos fumantes. Trs fumantes se encontram em um sala com um vendedor de suprimentos para fumantes. Para preparar e usar um cigarro, cada fumante precisa de trs ingredientes: tabaco, papel e fsforo, coisas que o vendedor tem a vontade no estoque. Um fumante tem o seu prprio tabaco, o segundo tem seu prprio papel, e o outro tem seu prprio fsforo. A ao se inicia quando o vendedor coloca a venda dois ingredientes na mesa, de forma a permitir que um dos fumantes execute esta prtica no muito saudvel. Quando o tal fumante termina, ele acorda o vendedor, que escolhe ento outros dois ingredientes (aleatoriamente) e coloca venda, portanto desbloqueando outro fumante. Escreva programas para os fumantes e para o vendedor. 17. Descreva o erro na implementao do produtor-consumidor mostrada abaixo. Crie uma seqncia de eventos que termina em algum comportamento indesejado para o programa. struct tipo_dado buffer[N]; int proxima_insercao = 0; int proxima_remocao = 0; ... semaphore exclusao_mutua = 1; semaphore espera_vaga = N; semaphore espera_dado = 0; ... void produtor( void) { ... P( exclusao_mutua ); P( espera_vaga ); buffer[ proxima_insercao ] = dado_produzido; proxima_insercao = ( proxima_insercao + 1 ) % N; V( espera_dado ); V( exclusao_mutua ); ... } ... void consumidor( void) { ... P( espera_dado ); P( exclusao_mutua ); dado_a_consumir = buffer[ proxima_remocao ]; proxima_remocao = ( proxima_remocao + 1 ) % N; V( exclusao_mutua ); V( espera_vaga ); ... } 18. O cdigo seguinte foi retirado do problema dos leitores e escritores: GLOBAL VARIABLES: mutex, wrt : semaphores initialized to 1; readcount : integer initialized to 0; READER: ...... P(mutex); readcount := readcount+1; if readcount=1 then P(wrt); V(mutex) read P(mutex); readcount := readcount-1; if (readcount=0) then V(wrt); V(mutex); .... WRITER:.......

P(wrt); write V(wrt); .... Modifique este programa de modo que o WRITER tenha precedncia sobre o READER, isto , se o WRITER estiver esperando e algum READER estiver lendo, nenhum outro READER poder entrar na sua regio crtica at que o WRITER tenha entrado e executado a sua respectiva RC. 19. Considere uma extenso do problema do produtor-consumidor definida da seguinte forma: a. H dois processos consumidores e um processo produtor. Os processos executam concorrente e assincronamente. b. O produtor no pode escrever no buffer at que ambos os consumidores tenham lido dele. aberta uma exceo para a primeira escrita. c. Nenhum consumidor pode ler o contedo de um buffer indefinido. d. Nenhum consumidor pode ler o mesmo contedo duas vezes sucessivamente. e. Ambos os consumidores podem executar seus eventos simultaneamente. 20. Monitores so tipos abstratos de dados que podem ser compartilhados por processos concorrentes. Segue abaixo alguma informao sobre a sua implementao atravs de semforos. Explique a funo de cada varivel e dos trechos de cdigo Prlogo e Eplogo. Variveis Globais mutex: semaphore initialized to 1; next: semaphore initialized to 0; next_count: integer variable initialized to 0; Prlogo, executado quando iniciada a execuo de uma operao do monitor: P(mutex); .... ... Eplogo, executado quando termina a execuo de uma operao do monitor: If next_count > 0 then V(next) else V(mutex);

1. (2,0) Mostre como implementar um monitor a partir de semforos. Defina e inicialize as variveis e os semforos necessrios. Descreva o procedimento de entrada (enter()), o procedimento de sada (leave()) e as operaes sobre variveis de condio signal.cond() e wait.cond(). Siga a abordagem de Hoare (o processo sinalizador espera). Podemos usar um semforo mutex para garantir a excluso mtua, um semforo sinalizadores que servir para um sinalizador esperar, um semforo para cada varivel de condio, e variveis contadoras, uma que contar o nmero de sinalizadores esperando no semforo sinalizadores (sin_esperam) e uma para cada semforo que representa uma varivel de condio. A implementao seria assim: As variveis descritas acima sero inicializadas da seguinte forma: mutex: semaphore initially 1 sinalizadores: semaphore initially 0 condicao[n]: semaphore initially 0 sig_esperam: integer initially 0 cont_condicao[n]:integer initially 0 Todo procedimento do monitor inicializado com um prlogo (Enter) e finalizado com um eplogo (Leave): Enter: P(mutex) <Corpo_procedimento> Leave: if sig_esperam > 0 then V(sinalizadores) else V(mutex) //se tiver sinalizador esperando //sinalizador entra no monitor //seno acorda quem estiver esperando //pelo monitor ou libera monitor ` //garante excluso mtua

Cada condicao[i].wait ser implementada como: cont_condicao[i] := cont_condicao[i]+1 // incrementa contador que indica nmero de processos // esperando nessa varivel if sig_esperam > 0 //se tiver sinalizador esperando then V(sinalizadores) //sinalizador entra no monitor else V(mutex) // seno acorda quem estiver esperando pelo //monitor ou libera monitor P(condicao[i]) //dorme no semforo da varivel de condio desejada cont_condicao[i] := cont_condicao[i]-1 //decrementa contador Cada condio[i].signal ser implementado como: sig_esperam := sig_esperam + 1 //incrementa contador do nmero de sinalizadores esperando if cont_condicao[i] >0 then //se tiver algum esperando pela //condio begin V(condicao[i]) //acorda quem est esperando pela condio P(signaler) //espera na fila de sinalizadores end sig_esperam := sig_esperam-1; //decrementa contador Essa implementao segue a abordagem de Hoare (o processo sinalizador espera).

THREADS

IPC 21. O que faz este trecho de programa? Use a numerao das linhas para facilitar a sua explicao. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. struct sigaction act; struct sigaction oact; if (sigaction(SIGINT, NULL, &oact) == -1) /*________________________________*/ perror("______________________________"); else if (oact.sa_handler == SIG_DFL) { /*________________________________*/ act.sa_handler = SIG_IGN; /* ________________________________*/ if (sigaction(SIGINT, &act, NULL) == -1) /*________________________________*/ perror("__________________________"); else { printf("_________________________________\n"); sleep(35); if (sigaction(SIGINT, &oact, NULL) == -1) /* _________________________________*/ perror("________________________"); printf("____________________________\n");

22. Disserte sobre os seguintes mecanismos de IPC: (a) Pipes; (b) Sinais 23. O programa abaixo permite a comunicao de um processo filho com o seu pai via pipe. Complete-o.
#include ourhdr.h int main(void) { int n, fd[2]; pid_t pid; char line[MAXLINE]; if (pipe(fd) < 0) { err_sys("pipe error");} if (pipe(fd) = fork() < 0) { err_sys(fork error");}

else if _______ ) { /* ________________________ */ close(_________); __________ (_________, "hello world\n", 12); error ("write error"); } else { /* _________________________ */ ___________ n = ______(_________, line, MAXLINE); write(STDOUT_FILENO, line, n); } exit (0); }

MEMRIA 24. Considere um sistema operacional que trabalha com paginao simples. As pginas so de 1Kbyte. O endereo lgico formado por 16 bits. O endereo fsico formado por 20 bits. 15. (a) Qual o tamanho do maior programa possvel? (b) Qual o tamanho do espao de endereamento fsico? (c) Qual o tamanho da entrada da tabela de pginas, sem considerar bits de proteo e demais bits de controle? (d) Qual o nmero de entradas necessrias na tabela de pginas no pior caso? 16. Qual a limitao da alocao particionada esttica absoluta em relao a alocao esttica relocvel? A grande diferena entre a alocao particionada esttica absoluta e a alocao esttica relocvel o local na memria principal onde programa carregado. Na alocao absoluta, um programa pode apenas ser carregado a partir de um nico endereo, conseqentemente em uma nica partio. Na alocao relocvel, um programa pode ser carregado a partir de qualquer endereo ou partio. 17. Considere um sistema de memria que suporta paginao em dois nveis, com endereamento virtual de 16 bits e endereamento real de 12 bits. Um endereo virtual constitudo de 3 campos: a, b e c. Os dois primeiros so usados para a paginao de 2 nveis. O terceiro campo o deslocamento. O campo a utiliza os 2 bits mais significativos, b outros 4 bits e o campo c utiliza os 10 bits menos significativos. Responda (explicando): i) Qual o tamanho de pgina virtual? ii) Qual o tamanho do endereamento lgico? iii) Quantas molduras (pginas fsicas) existem neste sistema? iv) Qual o tamanho de endereamento fsico? v) Quantas pginas virtuais so suportadas? 18. Considere um sistema com pginas de 4K, endereamento lgico de 16 pginas, e que a memria fsica tenha 32 Kbytes. Considere a seguinte tabela de pginas para o processo em execuo:
No. da pgina Bit de validade Frame 0 1 3 1 1 1 2 1 6 3 0 2 4 1 0 5 0 7 6 0 7 0 8 0 9 1 4 10 0 11 1 5 12 0 13 0 14 0 15 0 -

19.

20.

21. 22.

a. Desenhe uma tabela de pginas invertida para este sistema, usando o mesmo mapeamento. b. Explique o funcionamento de uma tabela de pginas invertida. Use como exemplo a traduo do endereo lgico 10.500 (mostre para qual endereo fsico ele traduzido). Dois mtodos comuns de paginao so paginao por demanda e paginao antecipada. Quais as vantagens e desvantagens potenciais da paginao antecipada? Qual a relao com o mecanismo de working set (conjunto de trabalho)? O que swapping e para que utilizada esta tcnica? Por que importante o uso de um loader com relocao dinmica para que a tcnica de swapping possa ser implementada? Compare-a com a paginao. O uso de uma das tcnicas exclui o uso da outra no mesmo sistema de gerncia de memria? Por qu? A tcnica de swapping foi introduzida para contornar o problema da insuficincia de memria principal. Essa tcnica aplicada gerncia de memria para programas que esperam por memria livre para serem executados. Nesta situao, o sistema escolhe um processo residente, que transferido da memria principal para a memria secundria (swap out), geralmente disco. Posteriormente, o processo carregado de volta da memria secundria para a memria principal (swap in) e pode continuar sua execuo como se nada tivesse ocorrido. O loader com relocao dinmica permite que os programas possam ser retirados da memria principal para a memria secundria e trazidos novamente para a memria principal em qualquer posio. No. Fale sobre o modelo de Working Set. Em sistemas de gerncia de memria, o que o fenmeno de trashing? Cite (comente) duas maneiras usuais de solucionar ou prevenir esse problema.

SISTEMA DE ARQUIVOS 23. Considere um sistema de arquivos UNIX com organizao do tipo inode cujo mapa de disco contenha 13 ponteiros para blocos de disco: 10 diretos, 1 indireto (single indirect block), 1 duplamente indireto (double indirec block) e 1 triplamente indireto (triple indirect block) . Assuma que cada bloco do disco de 4KB (4096 bytes) e que um ponteiro para um bloco do disco ocupa 4 bytes. Quantas operaes de disco so requeridas para ler o byte de nmero 100.000 de um arquivo? Assuma que o inode esteja na memria. Explique a sua resposta. 24. O espao livre em disco pode ser monitorado usando uma lista de blocos livres ou mapa de bits. Os endereos de disco requerem D bits. Para um disco com B blocos, F dos quais esto livres, declare a condio sob a qual a lista de livres utiliza menos espaos que mapas de bits. Para D tendo o valor de 16 bits, expresse a sua resposta como uma porcentagem do espao em disco que deve estar livre. 25. O que so hard links e symbolic links fornecidos pelo Unix? O uso de i-nodes facilita a implementao de hard links? E de symbolic links? O que acontece ao se apagar um arquivo com mais de um hard link? E com mais de um symbolic link? possvel criar um symbolic link para um arquivo que no existe? E um hard link? Justifique sua resposta. 26. Dado o sistema de arquivos tradicional do Unix, escreva detalhadamente a seqncia de passos necessrios para ler o arquivo provafinal.doc, armazenado no diretrio /usr/jose/. Suponha que apenas o diretrio raiz esteja na memria.