Sistemas Operacionais 13 gerenciamento de memória

Embed Size (px)

DESCRIPTION

Sistemas Operacionais 13 gerenciamento de memória

Citation preview

  • 1. Aula 7b: Gerenciamento de Memria Parte II

2. Realocao e Proteo: O uso da multiprogramao introduz os seguintes problemas: Realocao: garantir que as instrues de acesso direto memria iro acessar os endereos corretos: Proteo: garantir que um programa somente acesse a regio da memria que foi alocada a ele. Os endereos de um programa so determinados durante a vinculao do programa. Por exemplo, se um programa foi compilado a partir do endereo 0, e se for carregado a partir do endereo 400K (na partio 3), o programa far uma chamada dentro do sistema operacional, se possuir, por exemplo, uma instruo de salto para o endereo 100. Neste cado deveremos somar 400K a todos os endereos. 3. Os problemas da realocao e da proteo poderiam ser resolvidos pelo hardware, usando dois registradores especiais: Registrador da base (RB): contm o endereo inicial de uma partio. Todo o endereo relativo a este registrador. Registrador de limite (RL): contm o tamanho da partio. Os endereos no podem ser maiores do que este limite. O hardware informa ao sistema qualquer tentativa, por um processo, de acessar uma rea da memria no permitida. 4. Quando estes registrador esto disponveis, todos os programas podem ser compilados a partir do endereo 0, e, quando carregarmos um programa em uma das posies, basta alterar o valor de RB para o incio da partio, e valor de RL para o tamanho da partio. No exemplo anterior, basta o sistema copiar o valor 400K para RB, e copiar 300K, o tamanho da partio, para RL. Como os endereos so relativos a BP, a instruo de salto jmp100 saltar para o endereo 400K +100. 5. Troca: Gerenciamento de memria usado quando a memria no pode armazenar todos os processos do sistema: A memria tambm particionada, mas o nmero, o tamanho, e a posio das parties varia dinamicamente Quando o escalonador escolhe um processo: O processo em execuo copiado para o disco, e a partio usada pelo processo liberada. Uma nova partio criada na qual ser copiado, do disco, o novo processo escolhido pelo escalonador. 6. Inicialmente, a memria est vazia, e somente o sistema operacional est carregado na memria do computador. 7. Agora o processo A foi iniciado pelo sistema, o sistema criou uma partio na memria com o tamanho do processo A, e carregou o processo nesta partio, para que este possa ser executado. 8. Mais um processo, o B, foi tambm iniciado, e uma nova partio com o seu tamanho foi criada na memria. 9. Mais um processo, o C, foi carregado na memria, e mais uma partio, com o tamanho de C, foi criada. 10. O processo A foi retirado da memria, porque terminou sua a sua execuo, ou porque foi salvo no disco, pois A j ficou muito tempo na memria. Com isso, a parte da memria alocada partio foi liberada para ser usada para criar outras parties. 11. Agora, um novo processo, o D, foi criado, e com isso, o sistema criou uma nova partio. Esta partio foi criada na posio da memria em que o processo A tinha sido carregado, como o tamanho de D menor do que o de A, uma parte da memria liberada ao mover A para o disco no ser usada ao alocar a nova partio. 12. Agora o processo B ou terminou sua execuo, ou foi salvo no disco. A parte da memria ocupada pela sua partio foi ento liberada. 13. Agora um novo processo, o E, criado ou lido do disco. A partio alocada ao processo ocupa toda a rea da memria disponvel entre as parties dos processo D e C. 14. A grande vantagem da troca sobre o uso de parties fixas a de que otimizamos o uso da memria: As parties possuem o tamanho correto do processo, e com isso, no h desperdcio de espao dentro da partio. Porm, o gerenciamento da memria ser mais complicado, pois deveremos dinamicamente alocar e deslocar as parties. Um outro problema que esta alocao e desalocao dinmica pode ocasionar a fragmentao da memria. 15. Depois de algumas trocas de processos entre a memria e o disco, a memria fica dividida entre partes com parties, em que alguns processos dos sistema foram carregados, e partes livres, disponveis para a criao de novas parties. 16. Quando as reas disponveis na memria so pequenas e no contguas, podemos compactar a memria: as parties dos programas so deslocados para os endereos mais baixos da memria, at que a memria seja dividida em duas grandes reas uma com todas as parties criadas, e uma outra com toda a rea disponvel da memria. O problemas que o processo de compactao muito custoso. 17. Um detalhe de quanta memria ser alocada a um processo: Se o tamanho do processo fixo, ento o espao alocado igual a este tamanho. Se o tamanho do processo variar durante a execuo, ento deveremos alocar mais memria para este processo. 18. Suponha que dois processos, C e D, em duas parties da memria no contguas. Vamos ver agora os problemas que podem ocorrer se os processos puderem aumentar de tamanho, isto , os tamanhos das parties podem variar durante a execuo. 19. Suponha que o processo D precisou de mais memria. Como existe espao disponvel entre a partio D e a partio C, ento, se o processo precisar no mximo deste espao, a partio poder ser estendida sem problemas. No nosso exemplo , o processo D alocou todo o espao entre as duas parties. 20. Suponha que o processo D precisou alocar mais memria. Como agora no existe espao para estender a partio, ento um ou mais processos devero ser movidos na memria, para que seja possvel alocar uma partio suficientemente grande para armazenar D. Se no foi possvel, ento o processo esperar ou ser terminado. No exemplo, trocamos os endereos dos processos C e D na memria. 21. Suponha que o processo B foi carregado na ltima rea livre da memria. Agora, no temos nenhuma memria disponvel para estender ou para criar novas parties. Se, por exemplo, o processo C desejar alocar mais memria, este ou dever esperar at que exista memria disponvel, ou dever ser terminado. 22. Uma maneira de minimizar o tempo gasto ao mover os processos o de simplesmente alocar mais memria do que a necessria para copiar um processo do disco. Se um processo precisar de mais memria, ento este usar a memria adicional, e somente ser movido se a memria adicional completamente usada. Esta organizao til se o processo tiver uma nica rea de dados que pode crescer durante a execuo. 23. Se a partio deve dividida em uma regio com o programa, que ocupa o incio da partio, uma regio com os dados, que comea logo aps o programa, e que cresce em direo ao final da partio, e uma regio de pilha, que cresce em direo ao incio da partio, e que fica no final da partio, ento podemos alocar uma partio com mais espao, dividido de acordo com a figura. Entre as regies da pilha e de dados, existe uma regio livre, que pode ser usada para estender ambas as regies, se for necessrio. 24. A memria pode ser gerenciada atravs de uma mapa de bits: A memria divida em blocos de tamanho fixo, chamamos de unidades de alocao. Existe um bit no mapa para cada unidade de alocao, que igual a 1 se a unidade est sendo usada, e 0 em caso contrrio. O tamanho da unidade de alocao importante: O tamanho do mapa de bits depende deste tamanho. O tempo necessrio para ocupar por um conjunto destas unidades depende do tamanho do mapa de bits. 25. O grande problema do uso de mapa de bits o tempo gasto ao alocar uma partio para o processo copiado do disco: Se um processo ocupa k unidades de alocao, deveremos varrer o mapa at achar k unidades consecutivas disponveis; Uma outra soluo o gerenciamento da memria atravs de listas encadeadas, sendo que cada elemento da lista: Representa um conjunto consecutivo de unidades de alocao. Contm o endereo inicial do conjunto, o seu tamanho, e o seu tipo, e um ponteiro para o prximo elemento. 26. Lista encadeada para o exemplo anterior, para as 32 unidades de alocao iniciais da memria. O tipo P indica que as unidades esto alocadas a um processo, e o H indica que as unidades esto disponveis. 27. Memria Virtual: Nem todos os programas que so executados no computador podem ser totalmente armazenados na memria. Neste casos, podemos usar o conceito de overlays: O programa dividido em partes menores que so chamadas de overlays. O overlay 0 o primeiro a ser executado. Quando necessrio, um overlay chama outro overlay, que ser carregado na memria pelo sistema. O sistema gerencia a troca de overlays entre a memria e o disco, e permite que mltiplos overlays estejam na memria. 28. Neste conceito, os programas so divididos em partes menores, chamados de overlays, pelo programador. No exemplo, temos quatro overlays na memria: os overlays 0 e 2 do programa A, o overley 0 do programa B, e o overlay 1 do programa C. 29. Se o overley 0 do programa A chamar o overley 1 deste programa, ento algum outro overley ser salvo no disco, antes deste overley ser carregado. Suponha que o overley 2 de A foi o escolhido para ser salvo no disco. Ento, o overley 1 de A ser carregado na posio na memria de overley 2, e ser executado. 30. O problema do uso de overlays a complexidade da programao dos programas, pois a diviso feita pelo computador. Uma outra possibilidade o uso do conceito de memria virtual, criado por Fotheringhan em 1961: O tamanho do espao de endereamento do processo que executa o programa pode ser maior que a memria . As partes atualmente usadas do espao de endereamento so mantidas na memria, e as restantes, no disco. Ao contrrio dos overlays, o sistema que o responsvel pela diviso do espao de endereamento. 31. Os programas continuam sendo divididos em vrios pedaos, mas agora o sistema operacional gerencia a troca das partes entre o disco e a memria, e a diviso do programa nestas partes. Por exemplo, o sistema pode executar um programa de 16MB em uma memria de 4MB, se dividir o programa em quatro partes de 4MB, e escolher qual dos 4MB deve estar na memria em cada instante. 32. Algumas das instrues do processador acessam endereos da memria, que so chamados de endereos virtuais. O conjunto de endereos que um programa pode acessar atravs das instrues chamado de espao de endereamento virtual. Quando no usamos o conceito de memria virtual: Os endereos so copiados diretamente no barramento da memria pelo processador. O endereo fsico lido (ou escrito) da (na) memria o mesmo endereo virtual gerado pela instruo. 33. Quando o processador executa uma instruo, o endereo usado para obter o seu cdigo enviado diretamente para a memria. 34. Por exemplo, se o processador deseja executar a instruo cujo cdigo comea no endereo FEDC, o processador envia este endereo diretamente para o barramento da memria, e obtm o cdigo FE da instruo. 35. Quando usamos o conceito de memria virtual: Os endereos so passados a uma unidades especial, chamada de MMU (Memory Menagement Unit). A MMU converte o endereo virtual em endereo fsico da memria, que em geral diferente deste endereo virtual. Depois da converso, a MMU copia o endereo fsico gerado no barramento da memria. 36. No conceito de memria virtual, quando o processador executa uma instruo, o endereo virtual usado para obter o seu cdigo enviado para a MMU, que ento o converte para o endereo fsico com o cdigo da instruo. 37. Por exemplo, se o processador desejar executar a instruo cujo cdigo comea no endereo virtual AADC, o processador envia este endereo para a MMU, que o converte no endereo fsico 80DC com o cdigo FE da instruo. 38. Se usarmos a tcnica da paginao ao gerenciar a memria virtual: O endereo virtual dividido em um conjunto de unidades que so chamadas de pginas virtuais. A memria principal do computador tambm dividida nestas unidades, que so chamadas de molduras de pgina. A MMU mapeia as pginas virtuais em molduras de pgina, atravs do uso da sua tabela de pginas. 39. Exemplo de um processador com um espao de endereamento virtual de 64Kb. O tamanho da memria principal do computador de 32Kb, o tamanho de uma unidade de 4Kb. Com isso, temos 16 pginas virtuais e 8 molduras de pgina. O nmero dentro de uma pgina virtual indica a moldura de pgina na qual esta pgina est mapeada, sendo que o X indica que a pgina no est mapeada na memria. 40. Se o programa executa uma instruo que acessa o endereo virtual 0, como, por exemplo, a instruo MOV REG,0, ento a MMU, ao receber o endereo do processador, descobrir que este est na pgina virtual 0 (endereos de 0 at 4095). Como esta pgina est mapeada na moldura de pgina 2 (endereos de 8192 at 12287), o endereo fsico que a MMU ir gerar ser o 8192. 41. Se agora o programa executar uma instruo MOV REG, 20500, que acessa o endereo virtual 20500, ento o endereo fsico gerado pela MMU ser agora o 12308, pois o endereo 20500 est na pgina virtual 5 (endereos de 20480 at 24575), que mapeada para a moldura de pgina 3 (cujos endereos vo de 12288 at 16383), e est a 20 bytes do incio desta pgina. 42. Suponha que o programa executou uma instruo que acessa o endereo virtual 32780, que est dentro da pgina virtual 8. Como a pgina no est mapeada na memria (pois temos um X na entrada ), a MMU gera uma interrupo, chamada de falha de pgina, para que o sistema possa carregar na pgina acessada na memria. Em geral, o hardware possui um bit ausente/presente para indicar se a pgina est ou no mapeada. 43. Suponha que o sistema decidiu carregar a pgina virtual 8 na moldura de pgina 1, salvando o contedo da pgina virtual 1, que estava mapeada nesta moldura, no disco, se necessrio. Ento, alm de copiar a pgina virtual 8 para a moldura de pgina 1, o sistema dever atualizar a entrada 1 da tabela de pginas X (pois a pgina 1 agora no est mais mapeada), e a entrada 8 da tabela para a moldura de pgina 1. 44. Depois de copiar a pgina virtual 8 para a moldura de pgina 1, a instruo que acessou o endereo 32780 reiniciada, e este endereo convertido para o endereo fsico 4108, pois este est a 12 bytes do endereo inicial da pgina (que 32768), e o primeiro endereo da moldura de pgina 1 o 4096. 45. A converso de um endereo virtual para um endereo fsico pela MMU feita do seguinte modo: Funcionamento interno da MMU. O endereo virtual dividido e dois campos: o nmero de pgina e o deslocamento dentro desta pgina. O nmero da pgina usado como um ndice na tabela de pginas para obter o nmero da moldura de pgina com esta pgina. O endereo fsico enviado pela MMU memria ser composto por este nmero da moldura, e pelo deslocamento dentro desta pgina, que ser o mesmo dentro da moldura. Vamos ver como a MMU funciona mais de perto, vendo como o endereo virtual 8196 convertido no endereo fsico 24580, num computador com memria fsica de 32K, com 64K de espao de endereamento virtual, e com pginas com tamanho de 4K. 46. A converso de um endereo virtual para um endereo fsico pela MMU feita do seguinte modo: Passo 2: o nmero da pgina 2, usado como um ndice na tabela de pginas para obter a entrada desta pgina. Como o bit ausente/presente da entrada igual a 1 , o valor 6 (110 em binrio) da entrada indica que esta pgina foi copiada para a moldura de pgina 6. Se o bit ausente/presente fosse igual a 0, ento a MMU iria gerar uma falha de pgina, para que o sistema operacional possa escolher uma moldura em que colocar a pgina que acabou de ser referenciada. 47. A converso de um endereo virtual para um endereo fsico pela MMU feita do seguinte modo: Passo 3: o endereo fsico que a MMU vai enviar para a memria formado, sendo que este ser composto pelo deslocamento de 12 bits nos seus bits inferiores, e por 3 bits superiores, que indicam a moldura de pgina, pois o tamanho da memria de 32K, e o tamanho da moldura de 4K. No nosso exemplo, o valor 65 lido na tabela ir compor o endereo fsico, juntamente com o deslocamento de 4, o que formar o endereo fsico 24580, que est a 4 bytes do incio da moldura de pgina 6 (que comea no endereo 24576). 48. A converso de um endereo virtual para um endereo fsico pela MMU feita do seguinte modo: Passo 4: o endereo fsico 24580 colocado no barramento, para que a instruo que acessou o endereo virtual 8196 possa ser corretamente executada. 49. Para saber mais: pg. 106-117