PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ MESTRADO EM INFORMÁTICA APLICADA SISTEMAS OPERACIONAIS DISTRIBUÍDOS 20 QUESTÕES DOS CAPÍTULOS 1 A 12 DO LIVRO DE SISTEMAS OPERACIONAIS DE ABRAHAM SILBERSCHATZ ALUNOS : SILVIO BORTOLETO HUGO SIMIÃO JUNHO 2001 CAPÍTULO 3 3.1 ) Quais são as cinco principais atividades de um sistema operacional em relação ao gerenciamento de processos? 1 – Criação e remoção de processos, tanto do sistema quanto dos usuários; 2 – Suspensão e reativação de processos; 3 – Sincronização de processos; 4 – Comunicação entre processos; e 5 – Tratamento de impasses entre processos, os deadlocks. 3.5 ) Qual é o propósito do interpretador de comandos? Por que ele é normalmente separado do núcleo? O interpretador de comandos faz a interface entre o usuário e o sistema operacional. Tem o propósito de executar tarefas. As tarefas são especificadas por comandos ; a especificação dos comandos podem tratar da criação e gerenciamento de processos, tratamento de E/S, gerenciamento de memória secundária, gerenciamento da memória principal, acesso ao sistema de arquivos, proteção e conexão a rede. As interfaces disponíveis em ambiente gráfico, como as janelas dos sistemas operacionais Windows, facilitam, e abstraem o uso de comandos pelo usuário, criando uma representação gráfica de tarefas ou um conjunto de tarefas. Alguns sistemas operacionais preferem incluir o interpretador de comandos no seu núcleo. Porém, fora do núcleo o sistema operacional é mais confiável. É mais confiável por que em caso de problemas o núcleo ainda pode continuar trabalhando e possivelmente finalizando algumas operações importantes para o sistema. Em contrapartida, o sistema pode ser comprometido e travar totalmente. CAPÍTULO 4 4.2 ) Descreva as diferenças entre as funções do escalonador de processos, escalonador intermediário e escalonador de CPU. Escalonador de Processos: Escolhe dentre os processos, anteriormente armazenados em disco, e os carrega para a memória de execução/fila de prontos. Escalonador de CPU: Seleciona dentre os processos que estão na fila de prontos para serem executados e aloca a CPU para este processo. A diferença entre Escalonador de Processos e Escalonador de CPU é a freqüência de utilização. É comum o Escalonador de CPU ser executado pelo menos uma vez a cada 100 milesegundos. Enquanto com o Escalonador de Processos, podem-se passar alguns minutos entre a criação de um novo processo e outro. Escalonador Intermediário: Alguns sistemas de tempo compartilhado dispensam o Escalonador de Processos, simplesmente colocando cada novo processo na memória, para o Escalonador da CPU. Podendo então introduzir o Escalonador Intermediário, onde a idéia principal, é a de que pode ser vantajoso remover processos da memória de uma disputa pela CPU, reduzindo o grau de multiprogramação. Algum tempo depois, o processo pode ser recarregado, e a execução continuar de onde foi interrompida, esquema chamado de “swapping”. 4.6 ) Descreva as ações realizadas pelo núcleo de um sistema operacional para uma mudança de contexto a) Entre fluxos de execução. Mudança de contexto entre fluxos de execução, ainda que exija uma alteração no conjunto de registradores, não exige nenhum trabalho adicional ao gerenciamento de memória. Alguns sistemas implementam fluxos para usuários, em bibliotecas, em vez de chamadas ao sistema, de modo que a mudança de contexto em fluxos de execução não precisem causar interrupções , desviando o controle da execução para o núcleo do sistema operacional. A mudança de contexto pode ser feita independentemente do sistema operacional, de modo, muito mais rápido. Assim o servidor pode lidar com muitos recursos de maneira eficiente, graças ao bloqueio de fluxos de execução e à transferência de controles para outros fluxos. b) Entre processos. Para transferir o controle da Cpu de um processo para outro, é necessário armazenar o estado do processo antigo e carregar o estado do novo, anteriormente carregado. O tempo gasto em uma mudança de contexto é relativo ao trabalho adicional requerido pelo próprio sistema, varia de máquina para máquina, dependendo da velocidade de memória, do número de registradores que devem ser copiados e da existência de instruções especiais ( como uma instrução única para carregar ou para armazenar todos os registradores ). Uma mudança de contexto consiste simplesmente em mudar o apontador para o conjunto de registradores do processo a ser executado. Quanto mais complexo o sistema mais trabalho na mudança do contexto. Se houver mais processos ativos que registradores, o sistema transfere dados dos registradores para memória e vice-versa, como antes. CAPÍTULO 5 5.3) Considere os seguintes conjuntos de processos, com a duração da fase de uso da CPU dada em milissegundos : Processo P1 P2 P3 P4 P5 Duração da fase de uso da CPU 10 1 2 1 5 Prioridade 3 1 3 4 2 Supõe-se que os processos entrem na fila de processos prontos na ordem P1,P2,P3,P4 e P5, todos no mesmo tempo 0. a) Desenhe o diagrama de Gantt ilustrando a execução desses processos usando os algoritmos de alocação PCPS, MP, por prioridade de forma não-preemptiva ( um número de prioridade menor indica uma prioridade mais alta), e AC ( quantum = 1). PCPS (FIFO) a) 0 P1 0 P2 10 P3 11 P4 13 P5 14 19 b) Tempo de Processamento: P1=10, P2=11, P3=13, P4=14, P5=19 c) Tempo de Espera: P1=0, P2=10, P3=11, P4=13, P5=14 d) Tempo Médio: 9.6 PCPS (MP) a) 0 P2 0 P4 1 P3 2 P5 P1 4 9 19 b)Tempo de Processamento: P2=1, P4=2, P3=4, P5=9, P1=19 c) Tempo de Espera: P2=0, P4=1, P3=2, P5=4, P1=9 d )Tempo Médio: Menor 3.2 ALOCAÇÃO DE PRIORIDADE a) 0 P2 0 P5 P1 1 6 P3 P4 16 18 19 b) Tempo de Processamento: P2=1, P5=6, P1=16, P3=18, P4=19 c ) Tempo de Espera: P2=0, P5=1, P1=6, P3=16, P4=18 d ) Tempo Médio: 8.2 ALOCAÇÃO CIRCULAR a) 0 0 P1 P2 P3 P4 P5 P1 P3 P5 P1 P5 P1 P5 P1 P5 P1 P1 P1 P1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 b) Tempo de Processamento: P1=19, P2=2, P3=7, P4=4, P5=14 c) Tempo de Espera: P2=1, P4=3, P1=9, P3=6, P5=9 d) Tempo Médio: 5.4 P1 16 17 18 19 5.4 ) Suponha que os processos seguintes fiquem prontos para execução nos tempos indicados. Cada processo será executado pela CPU pelo tempo indicado. Na resposta às questões a seguir, use alocação nãopreemptiva e tome todas as decisões com base na informação disponível no instante em que a decisão deve ser feita. Processo P1 P2 P3 Tempo de Chegada 0,0 0,4 1,0 Duração da fase de uso da CPU 8 4 1 a) Qual o tempo de processamento médio para esses processos com o algorítmo de alocação PCPS ? PCPS (FIFO) 0 P1 0 P2 8 P3 12 13 Tempo de Processamento: 8.66 b) Qual o tempo de processamento médio para esses processos com o algorítmo de alocação MP? MP 0 0 P3 P2 1 P1 5 Tempo de Processamento: 13 6.33 c) O algoritmo MP deveria apresentar um bom desempenho, mas note que escolhemos executar o processo P1 no tempo 0 porque não sabíamos que dois processos menores chegariam a seguir. Calcule qual será o tempo de processamento médio se a CPU ficar ociosa durante a primeira unidade de tempo e então o algoritmo MP for usado. Lembre-se de que os processos P1 e P2 estão esperando durante esse tempo ocioso seus tempos de espera podem aumentar . Esse algoritmo poderia ser conhecido como alocação por conhecimento futuro. OCIOSO 0 0 P3 P2 1,4 P1 5,4 13,4 Tempo de Processamento: 6.73 CAPÍTULO 6 6.5 )Na seção 6.3 mencionamos que o funcionamento do relógio do sistema poderia ser afetado se as interrupções fossem frequentemente desabilitadas. Explique porque e como esses efeitos poderiam ser minimizados. O problema da região crítica poderia ser resolvido, em um ambiente com um processador, se existisse um mecanismo para evitar interrupções enquanto um valor está sendo atribuído a uma variável compartilhada. Dessa maneira evitaríamos uma interrupção no meio de uma sequência de instruções, que executariam em ordem, sem a possibilidade de modificações inesperadas contida em uma variável compartilhada. Para vários processadores é inviável, pois a inibição de interrupções pode gastar tempo quando a mensagem precisa ser enviada a todos os processadores. Esse tempo gasto atrasa a entrada e saída na região crítica, diminuindo a eficiência do sistema. Por causa disso muitos processadores incluem instruções de máquina especiais, que permitem testar e modificar o valor armazenado em uma determinada posição da memória ou trocar valores armazenados em duas posições da memória de forma atômica , ou seja, como uma única instrução, sem possibilidades de interrupção entre os componentes da instrução. Essas instruções especiais podem ser usadas para resolver o problema das regiões críticas, relativamente simples. Instrução Test-and-set, executa atomicamente, ou seja, duas instruções em duas Cpu’s diferentes, que modificam a mesma posição de memória, são utilizadas sequencialmente, em alguma ordem arbitrária. Instrução Swap, modifica valores armazenados em duas variáveis: variável global lock e para cada processo uma variável local key, e a exclusão mútua pode ser obtida. Algorítmo que satisfaz todos os requisitos para um protocolo a ser usado em um mecanismos de regiões críticas. Inicialmente false é armazenado em lock, para todos os demais waiting. O primeiro processo atribuirá false à key, todos os outros terão que esperar. O valor armazenado em waiting só pode se tonar igual a false se um outro processo sair da região crítica. O valor false é armazenado em apenas uma das posições de arranjo waiting, satisfazendo o requisito de exclusão mútua . O requisito de espera limitada é satisfeito , um processo deixa a região crítica e percorre o arranjo waiting na ordem circular (i+1, i+2,...i-1), e, o processo nesta lista cuja execução no código de entrada na região crítica é próximo a outras em sua região. 6.21) Mostre que o protocolo de duas fases garante execução equivalente a alguma execução sequencial de transações. O chamado two phase commit, é a execução sequencial de transações dando sincronismo no processo. Por exemplo, há uma atualização em ambiente distribuído onde a primeira fase é de alocação dos recursos necessários à atualização e a segunda é a disposição para a efetivação do commit, ou seja , de um lado há a confirmação de estar preparado e do outro também, após é efetivada em ambos os lados. ( caso clássico do IMS –Ibm que controla perfeitamente as transações em ambientes distribuídos) CAPÍTULO 7 7.4) Considere o impasse que ocorreu no trânsito, representado na figura 7.8 da página 256. a) mostre que as quatro condições necessárias para ocorrência de impasse são de fato satisfeitas nesse exemplo. A exclusão mútua - apenas uma via ( veículo ) pode passar ou trafegar. Uso-e-espera - passam veículos de uma via e depois da outra . Inexistência de preempção – a via é liberada após passagem de um veículo, alternadamente entre as vias. Espera circular - há vários processos (veículos) esperando pelo recurso (via) b) Cite uma regra simples para evitar impasses nesse sistema Semáforos ou mecanismos equivalentes. 7.8 ) Considere um sistema que consiste em quatro recursos da mesma classe, compartilhados por três processos, cada um dos quais precisa usar no máximo dois recursos. Mostre que não ocorre impasse. RECURSO 1 PROCESSO 1 RECURSO 2 RECURSO 3 PROCESSO 2 RECURSO 4 PROCESSO 3 Primeiro não há referência circular , e para cada recurso liberado outro processo captura a alocação do recurso não causando impasse. CAPÍTULO 8 8.13) Descreva um mecanismo no qual um segmento poderia pertencer ao espaço de endereçamento de dois processos diferentes. Outra vantagem do mecanismo de segmentação envolve o compartilhamento de código e dados. Uma tabela de segmentação é associada a cada processo e usada pelo escalonador da CPU para definir a tabela de segmentos do hardware enquanto a CPU é alocada a esse processo. Segmentos são compartilhados quando encontrados na tabela de segmento de dois processos diferentes apontam para a mesma posição de memória física . O compartilhamento ocorre para um determinado segmento. Portanto, qualquer informação pode ser compartilhada de maneira que um programa formado por diversos segmentos pode ser compartilhado. Exemplo, o uso de um editor de texto em um sistema de tempo compartilhado. Um editor completo pode ser um programa bastante grande, composto por vários segmentos. Esses segmentos podem ser compartilhados por vários usuários, diminuindo o uso da memória física necessária para as tarefas de edição de texto. É possível também compartilhar apenas partes de determinados programas. Segmentos com acesso apenas para leitura, que não contenham endereços físicos, podem ser compartilhados, assim com segmentos de código que não contenham referências diretas a si próprios ( referências indiretas podem ocorrer). 8.14) Explique por que é mais fácil compartilhar um código reentrante usando segmentação do que no caso em que o mecanismo de paginação puro é usado. Outra vantagem do mecanismo de paginação é a possibilidade de compartilhamento de código. Considere um sistema de 40 usuários, cada um usando um editor de textos. Se o tamanho do programa editor for 150k e usar um espaço de dados de 50k, necessitamos de 8000k . Se o código for reentrante ele poderá ser compartilhado. Um código é reentrante (também chamado de código puro) se não modifica a si próprio . Ele nunca é modificado durante a execução. Assim dois ou mais processos podem executar o mesmo código simultaneamente. Cada processo tem suas próprias cópias dos registradores e da memória, que armazenam os dados usados durante a execução do processo. Os dados de dois processos distintos são diferentes. Uma única cópia o editor de textos precisa ser armazenada na memória física. A tabela de páginas do processo corresponde a cada usuário que usa a mesma cópia do editor de páginas de dados, que usam blocos diferentes da memória. Portanto para 40 usuários precisamos de uma única cópia do editor, mais 40 cópias de 50k de dados, num total de 2150k, economia considerável. Outros programas também podem ser compartilhados, compiladores, sistemas de banco de dados e outros, basta ser reentrante. CAPÍTULO 9 9.13) Projetamos um novo algoritmo de substituição que supomos ser ótimo. Em alguns casos de teste particulares, ocorre a anomalia de Belady. Esse algoritmo é ótimo ? Explique a resposta. A anomalia de Belady não ocorre quando o algoritmo ótimo ou algoritmo MRU é usado . Para um algoritmo que não apresenta anomalia o conjunto de páginas armazenado em uma memória com n blocos é sempre um subconjunto daquele que estaria armazenado em uma memória com n+1 blocos. Ou seja, para MRU se o número de blocos aumenta , essas páginas continuam sendo as n últimas usadas e portanto continuam na memória . A estratégia do algoritmo ótimo é simples : substitui a página que não será usada pelo período de tempo mais longo, ou seja, garante o menor número possível de ocorrências de interrupções da página ausente, para um determinado número de blocos. 9.20) Qual a causa da paginação excessiva? Como o sistema pode detectar a ocorrência de paginação excessiva? Quando o sistema detecta a ocorrência de paginação excessiva , o que ele pode fazer para eliminar esse problema ? Quando a utilização de CPU é muito baixa, o sistema operacional aumenta o grau de multiprocessamento introduzindo novos processos aos sistema. Vamos supor que um processo entre numa fase de execução e necessite mais blocos ( algoritmo de paginação utiliza a substituição global, possibilitando a substituição de qualquer página, independente do processo a qual está alocada). Então , o processo começa a provocar interrupções de páginas ausentes e tirar da memória páginas de outros processos, mas este necessitam das páginas e também provocam interrupções de páginas ausentes. Estes processos precisam de um dispositivo de memória secundária para trocar suas páginas entre a secundária e a principal. A medida que eles entram na fila à espera deste dispositivo a fila de processos prontos para execução esvazia-se. Enquanto os processos esperam pelo dispositivo de paginação, a utilização da CPU diminui. O escalonador de processos percebe a diminuição e aumenta a multiprogramação, onde começa o ciclo de paginação excessiva e provoca queda abrupta de produtividade do sistema. O tempo médio torna-se maior, nenhum processamento é feito e os processos consomem todo o tempo paginando. Precisamos diminuir o grau de multiprogramação. Os efeitos da paginação excessiva pode ser limitados pela utilização do algoritmo de substituição local (prioridade) . Devemos alocar a um processo o número de blocos que ele precisa. Usa-se a estratégia do conjunto-de-trabalho, baseia-se no modelo de localidade, que é considerada uma coleção de páginas usadas ativamente pelo processo . Quando uma sub-rotina é chamada ela pode definir uma nova localidade, definida pela estruturas de códigos e dados. Ele carregará para sua localidade todas as páginas necessárias e não causará mais interrupções até que mude de localidade. CAPÍTULO 10 10.6 ) É possível simular uma estrutura de diretórios com vários níveis com um diretório com apenas um nível no qual os nomes arbitrariamente longos podem ser usados ? Se sua resposta for sim, explique como isso pode ser feito e compare o esquema que você propôs com o de um diretório com vários níveis. Se sua resposta for não , explique o que impede essa simulação. Como sua resposta seria alterada se os nomes de arquivos fossem restritos a apenas sete caractreres? Não. Se nomes longos pudessem ser usados, então isto possibilitaria simular estruturas de diretórios complexas. Isto pode ser feito, por exemplo, usando o caracter “.” para indicar o fim do sub-diretório. Assim por exemplo, o nome PAPA.pascal. F1 especifica que é um arquivo no sub-diretório pascal que por sua vez está no diretório raiz PAPA . Se os nomes dos arquivos forem limitados em sete caracteres então a regra não pode ser utilizado. 10.8) Alguns sistemas abrem automaticamente um arquivo quando ele é usado pela primeira vez, e o fecham quando o processo que o criou é concluído . Discuta as vantagens e as desvantagens desse esquema em comparação com o esquema mais tradicional, no qual o usuário precisa abrir e fechar o arquivo explicitamente. Abertura e fechamento automático de arquivos ajuda o usuário nas invocações destas funções, e assim pode ser mais conveniente para o usuário, contudo, ele requer mais sobrecarga que o caso onde a abertura e fechamento explicito é requerido. Alguns sistemas têm na estrutura do arquivo um espaço reservado para indicar o programa que gerou o arquivo. Outros como o UNIX não têm isso, mas podem utilizar as extensões dos arquivos como dicas para os programas que os utilizam ou para o entendimento do conteúdo por parte do usuário. CAPÍTULO 11 11.3) Que problemas poderiam ocorrer se um sistema de arquivos pudesse ser montado simultaneamente em mais de uma localização em uma estrutura de diretórios? Poderiam existir múltiplos caminhos para o mesmo arquivo, que poderia confundir usuários ou aumentar as chances de erros para as referências quanto aos processos a serem processados e as manutenções específicas a serem feitas (excluindo um arquivo com um caminho irá excluir o arquivo em todos os outros caminhos.) 11.9) Como as memórias cache ajudam a melhorar o desempenho ? Por que os sistemas não usam mais memória cache, ou memórias cache maiores, se elas são tão úteis? Memórias cache permitem a componentes de diferentes velocidades se comunicar de uma maneira mais eficientemente, por armazenar dados de um dispositivo lento, temporariamente, em um dispositivo mais rápido (o cache) . Cache são quase que por definição, mais caros que o dispositivo de quem está fazendo o armazenamento, assim, incrementando o número ou tamanho das memórias cache aumentará o custo do sistema. CAPÍTULO 12 12.8) Como os acesso diretos à memória aumentam a concorrência em um sistema ? Como o uso do DMA complica o projeto de hardware ? DMA aumenta a concorrência no sistema ao permitir à CPU realizar tarefas enquanto que o sistema DMA transfere dados através dos barramentos de sistema e memória. O projeto de hardware torna-se complicado devido ao controlador de DMA ser integrado ao sistema, e o sistema deve permitir que o controlador de DMA seja um barramento principal (master). 12.10) Por que é importante aumentar as velocidades de transmissão de sinais no barramento do sistema e de processamento das operações de E/S nos dispositivos, à medida que a velocidade da CPU aumenta ? Usar de forma equilibrada a CPU, subsistema de memória, barramento e dispositivos de E/S, uma vez que uma sobrecarga em qualquer um deste elementos causará ociosidade nos outros, por isso do balanceamento equitativo . Conclusão É de fundamental importância o conhecimento sobre os ambientes onde atuaremos não apenas superficialmente mas com entendimento mínimo para direcionar projetos, aplicar regras e tomar decisões quanto a tendências, capacidade, tipos de hardware, banco de dados, e, seleção de acordo com os critérios de conectividade definidos pelas escolhas anteriores.