Sistemas de Computação Gerenciamento Gerenciamento de de memória memória Localização de processos Sistemas de Computação • Um programa fica armazenado em disco como um arquivo executável binário e tem que ser colocado na memória para começar a ser executado • Os processos podem ser movidos entre a memória e o disco durante sua execução • Fila de entrada – coleção de processos no disco que estão esperando para serem colocados na memória para poderem ser executados • Processos podem ser carregados em qualquer endereço da memória Mapeamento entre espaços de endereçamento Sistemas de Computação • Endereços no programa fonte são simbólicos • Compiladores geram endereços relocáveis para os endereços simbólicos • O linker ou loader irão transformar este endereços relocáveis em endereços absolutos Definição de endereços para instruções e dados Sistemas de Computação • Tempo de compilação: Ocorre quando o endereço onde o processo irá ser carregado é conhecido. Um código absoluto com os endereços é gerado e caso o endereço mude, o programa tem que ser recompilado • Tempo de carga: Caso o endereço não seja conhecido, o compilador tem que gerar código relócavel • Tempo de execução: Caso um processo possa ser movido de um segmento de memória para outro durante a sua execução Processamento do programa do usuário Sistemas de Computação Espaço lógico versus físico Sistemas de Computação • O conceito de espaço de endereçamento lógico ligado a um espaço de endereçamento físico é o ponto principal nos mecanismos de gerenciamento de memória – Endereço lógico– gerado pela CPU: também conhecido como endereço virtual – Endereço físico – endereço recebido pela memória • Endereços lógicos (virtuais) diferem dos endereços físicos em tempo de execução Unidade de gerenciamento de memória Sistemas de Computação • Dispositivo de hardware que mapeia endereços virtuais para físicos • Um valor base armazenado no registrador de relocação é adicionado a cada endereço gerado pelo processo • O programa do usuário manipula endereços lógicos; nunca vê os endereços reais • A localização final de uma referência à memória só é definida quando a referência é executada. Relocação dinâmica utilizando registrador de relocação Sistemas de Computação Carregamento dinâmico Sistemas de Computação • Rotina só é carregada quando ativada • Melhor utilização do espaço de memória; rotina não utilizada nunca é carregada • Particularmente útil quando grande quantidade de código é utilizado para casos que ocorrem raramente • Não precisa de suporte do sistema operacional, mas S.O pode prover rotinas para que o programador possa realizá-lo Ligação dinâmica Sistemas de Computação • A ligação é adiada até o tempo de execução • Utilizada para otimizar uso de biblioteca de rotinas do sistema • Pedaço de código denominado stub é utilizado para localizar a rotina necessária residente na memória • O stub substitui o seu próprio código pelo endereço da rotina e a executa • O sistema operacional tem que verificar se a rotina já está no espaço de endereçamento de algum processo e se pode ser compartilhada Overlays Sistemas de Computação • Necessário quando o processo é maior que a quantidade de memória que pode ser alocada para ele • Mantém na memória somente as instruções e dados necessários em um dado momento • Implementado pelo usuário, não precisa de suporte do sistema operacional • Usuário programa leitura de arquivos do disco para a memória e força o programa a ir para a posição de memória • Complexo de utilizar Overlays para um montador em dois passos Sistemas de Computação Swapping Sistemas de Computação • Um processo pode ser trocado ( swapped) temporariamente da memória para um outro dispositivo de apoio (disco), e trazido de volta para a memória para continuar a sua execução • Roll out, roll in – variante do swapping utilizada para algoritmos de escalonamento baseados em prioridade; processo com menos prioridade vai para disco para processo de maior prioridade ser carregado e executado • Caso a definição dos endereços físicos seja feita em tempo de compilação ou carga, o processo que foi para o disco tem que voltar para o mesmo lugar na memória Swapping Sistemas de Computação • Caso a definição dos endereços físicos seja feita em tempo de execução, o processo que foi para o disco pode voltar para lugar diferente na memória • O dispositivo de apoio tem que ser um disco rápido com capacidade suficiente para acomodar cópias de todas as imagens de programas de todos usuários e deve prover acesso direto e estas imagens • Fila de prontos consiste dos processos que estão no dispositivo de apoio e na memória prontos para serem executados • O dispatcher é acionado e no caso do processo selecionado não estar na memória e não existir espaço livre na memória, um processo é tirado da memória e colocado no disco Esquema de swapping Sistemas de Computação Swapping Sistemas de Computação • A troca de contexto em um sistema com swapping é alta – Ex. 1M bytes devem ser transferidos para um disco que tem taxa de transferência de 5MB/s e tempo de latência médio igual a 8 ms. Tempo total = 208 milisegundos, time slice deve ser substancialmente maior que 416 milisegundos • A maior parte do tempo é utilizada para realizar a transferência entre a memória e dispositivo de apoio, então deve se fazer a transferência somente das posições de memória que estão sendo realmente utilizadas pelo processo Swapping Sistemas de Computação • Processos que utilizam alocação dinâmica de memória devem informar ao sistema operacional as suas necessidades de memória através de chamadas ao sistema (request memory e release memory) • Caso um processo vá para o disco e exista uma operação de E/S pendente para ele, podem ocorrer problemas, porque o dispositivo de E/S pode escrever na área de um novo processo que foi colocado no lugar dele Swapping Sistemas de Computação • Soluções: não permitir swapping para processos com E/S pendente ou só permitir acesso pelo dispositivo de E/S a buffer do sistema operacional, que atualiza buffer do processo quando ele estiver na memória • Mecanismo pouco utilizado e com algumas modificações • Unix inicia swapping quando sistema muito carregado – muitos processos no sistema – limite de memória livre é atingido Alocação contígua Sistemas de Computação • Geralmente a memória principal é dividida em duas partições: – Sistema operacional colocado nos endereços de memória mais baixos (memória baixa) junto com vetor de interrupções – Processos do usuário ficam na memória mais alta • Alocação contígua da memória – O sistema operacional tem que ser protegido do acesso dos processos do usuário, os quais devem ser protegidos de acesso entre eles – O registrador de relocação contém o valor do menor endereço físico e o registrador de limite contém a faixa de endereçamento lógico - cada endereço lógico tem que ser menor que o registrador limite Suporte de hardware para registradores limite e de relocação Sistemas de Computação Múltiplas partições Sistemas de Computação • Alocação de múltiplas partições – Hole (buracos)– bloco de memória disponível ; buracos de vários tamanhos ficam espalhados pela memória – Quando um processo chega no sistema, o sistema procura por um buraco que tenha uma quantidade de memória livre suficiente para acomodar o processo – O sistema operacional mantém informações sobre: • partições alocadas • partições livres (buraco) Múltiplas partições Sistemas de Computação OS OS OS OS process 5 process 5 process 5 process 5 process 9 process 9 process 8 process 2 process 10 process 2 process 2 process 2 Alocação dinâmica de memória Sistemas de Computação • Como satisfazer um pedido de tamanho n tendo uma lista de buracos livres ? – First-fit: Aloca o primeiro buraco da lista que seja grande o suficiente para o processo – Best-fit: Aloca o menor buraco que seja grande o suficiente para o processo; precisa procurar a lista toda, caso não esteja ordenada. Produz o menor buraco – Worst-fit: Aloca o maior buraco possível; precisa procurar toda a lista Produz o maior buraco First-fit e best-fit são melhores que worst-fit em termos de velocidade e utilização de armazenamento Fragmentação Sistemas de Computação • Fragmentação externa – existe a quantidade de memória que o processo precisa, mas não é contígua • Fragmentação interna – memória alocada é um pouco maior que a requerida pelo processo; esta diferença é memória interna a uma partição de tamanho fixo que não está sendo utilizada Fragmentação Sistemas de Computação • Redução de fragmentação externa por compactação – Arruma-se o conteúdo da memória de modo a colocar toda a memória livre junta em um único bloco – Compactação só é possível caso a relocação seja dinâmica e seja realizada em tempo de execução Paginação Sistemas de Computação • Gerenciamento de memória que permite que o espaço de endereçamento físico não precise ser contíguo • Divide a memória física em blocos de tamanho fixo denominados frames (tamanho é em potência de 2, entre 512 bytes e 8192 bytes). • Divide memória lógica em blocos de mesmo tamanho denominadas páginas. • Gerencia os frames livres Paginação Sistemas de Computação • Para executar um programa de tamanho igual a n páginas, precisa-se encontrar n frames livres e carregar o programa nestes frames • Possui uma tabela de páginas para traduzir o endereço lógico em físico • Não ocorre fragmentação externa, mas pode ocorrer interna Esquema de tradução de endereço Sistemas de Computação • O endereço gerado pela CPU é dividido em duas partes: – Número de página (p) – utilizada como um índice para a tabela de páginas que contém o endereço base de cada página na memória física – Deslocamento de página (d) – combinada com o endereço base da página para definir o endereço da memória física que será enviado para a unidade de memória Arquitetura para tradução de endereços Sistemas de Computação Exemplo de paginação Sistemas de Computação Exemplo de paginação Sistemas de Computação Frames livres Sistemas de Computação Antes da alocação Depois da alocação Implementação da tabela de páginas Sistemas de Computação • Tabela de páginas é mantida na memória • Registrador base da tabela de páginas (PTBR) aponta para a tabela de páginas • Registrador de tamanho de tabela de página (PRLR) indica o tamanho da tabela • Neste esquema, cada acesso à memória para obter dado ou instrução requer dois acessos à memória: um para acessar a tabela de páginas e outro para obter a instrução ou dado Implementação da tabela de páginas Sistemas de Computação • O problema de acessar a memória duas vezes pode ser resolvido utilizando-se uma memória cache denominada translation look-aside buffers (TLBs) Hardware de paginação com TLB Sistemas de Computação Tempo efetivo de acesso Sistemas de Computação • Procura na TLB = unidades de tempo • Assuma que o ciclo de memória é 1 microsegundo • Taxa de acerto – percentagem de vezes que o número de página é encontrado na TLB (depende do tamanho da TLB) • Taxa de acerto = • Tempo efetivo de acesso (EAT) EAT = (1 + ) + (2 + )(1 – ) =2+– Proteção de memória Sistemas de Computação • Proteção de memória é implementada utilizandose um bit de proteção para cada frame • Bit válido-inválido é adicionado a cada entrada da tabela de páginas: – “válido” indica que a página associada pode estar no espaço de endereçamento lógico do processo e portanto é uma página legal – “inválido” indica que a página não pode estar no espaço de endereçamento lógico do processo Bit válido (v) ou inválido (i) na tabela de páginas Sistemas de Computação Estruturação da tabela de páginas Sistemas de Computação • Paginação hierárquica • Paginação por hash • Tabela de página invertida Tabelas de páginas hierárquicas Sistemas de Computação • Divide o espaço lógico de endereçamento em múltiplas tabelas de páginas • Uma opção simples é dividir a tabela de ´páginas em dois níveis Exemplo de paginação em dois níveis Sistemas de Computação • Um endereço lógico (em uma máquina de 32 bits com tamanho de página de 4K) é dividida em: – um número de pagina consistindo de 20 bits – um deslocamento de página consistindo de 12 bits. • Com o tabela de página é paginada, o número de página é dividido em: – um número de página de 10 bits – um deslocamento de página de 10 bits Exemplo de paginação em dois níveis Sistemas de Computação • Formato do endereço lógico: número de página p1 10 deslocamento de página p2 d 10 12 onde p1 é um índice para a tabela de página mais externa e p2 é o deslocamento na página da tabela mais externa Esquema de tabela de páginas em dois níveis Sistemas de Computação Esquema de tradução de endereços Sistemas de Computação Tabelas de páginas com hash Sistemas de Computação • Comum em espaço de endereçamento > 32 bits. • O número da página virtual é mapeado por hashing na tabela de páginas. • A entrada da tabela de páginas pode conter uma cadeia de elementos que estão mapeados na mesma entrada • ´Procura-se nesta cadeia pelo número da página virtual desejada e caso ela seja encontrada, obtémse o frame físico correspondente Tabela de páginas com hashing Sistemas de Computação Tabela de páginas invertida Sistemas de Computação • Uma entrada para cada página real da memória • Cada entrada contém, para um determinado endereço real, o endereço virtual da página que está ali armazenada, com informações do processo que a possui • Diminui a memória necessária para armazenar cada tabela de páginas, mas aumenta o tempo necessário para a procura na tabela quando ocorre uma referência de página • Utiliza-se tabelas hash para limitar a procura para uma ou poucas entradas na tabela de páginas Arquitetura de tabela de páginas invertida Sistemas de Computação Páginas compartilhadas Sistemas de Computação • Código compartilhado – Uma cópia de código somente-leitura (reentrante) é compartilhada entre processos (editores de texto, compiladores, sistemas de janelas) – Código compartilhado deve aparecer no mesmo local no espaço de endereçamento lógico de todos os processos • Códigos e dados privados – Cada processo mantém uma cópia separada do código e dos dados – As páginas para o código e dados privados podem aparecer em qualquer local do espaço de endereçamento lógico Exemplo de páginas compartilhadas Sistemas de Computação Segmentação Sistemas de Computação • Esquema de gerenciamento de memória que suporta uma visão da memória física mais próxima à do usuário • Um programa é uma coleção de segmentos. Um segmento é uma unidade lógica, tal como um programa principal, procedimento, método, objeto, variáveis locais e globais, blocos comuns, pilha, tabela de símbolos, arrays Visão do usuário de um programa Sistemas de Computação Visão lógica da segmentação Sistemas de Computação 1 4 1 2 3 4 2 3 espaço do usuário espaço de memória física Arquitetura de segmentação Sistemas de Computação • Um endereço lógico consiste da tupla: <númerosegmento, deslocamento> • Tabela de segmentos – mapeia endereços físicos de duas dimensões • Cada entrada na tabela possui: – base – contém o endereço físico inicial onde o segmento reside na memória – limite – especifica o tamanho do segmento Arquitetura de segmentação Sistemas de Computação • Registrador base de segmento de tabela (STBR) aponta para a localização do segmento na memória • Registrador de tamanho do segmento da tabela (STLR) indica o tamanho do segmento Arquitetura de segmentação Sistemas de Computação • Relocação – dinâmica – realizada por tabela de segmentação • Compartilhamento – segmentos compartilhados – mesmo número de segmento • Alocação – first fit/best fit – fragmentação externa Arquitetura de segmentação Sistemas de Computação • Proteção é fornecida com associação a cada entrada da tabela de segmentos das seguintes informações: – bit de validação = 0 segmento ilegal – privilégios read/write/execute • Bits de proteção são associadas com segmentos; compartilhamento de código ocorre no nível de segmento • Como os segmentos variam em tamanho, a alocação de memória é um problema de alocação dinâmica de memória Hardware para segmentação Sistemas de Computação Exemplo de segmentação Sistemas de Computação Compartilhamento de segmentos Sistemas de Computação Tradução de endereços no Intel 30386 Sistemas de Computação