Sistemas Operativos Memória partilhada Endereços reais e virtuais ! Endereçamento real – o endereço indicado pelo programa é exactamente o que é acedido na memória física da máquina – – ! Endereçamento virtual – os endereços gerados pelos programas são convertidos (em tempo de execução) em endereços físicos (os endereços vistos pelo programador deixam de ter relação directa com a memória existente na máquina) – – 2 Único tipo de endereçamento suportado pelos primeiros computadores Uma, de várias, desvantagens é a dimensão dos programas ser limitada pela dimensão da memória física do computador A palavra referenciada pelo endereço virtual pode estar em memória primária ou memória secundária Resolve vários problemas do endereçamento real Luísa Jorge Sistemas Operativos 1 Memória partilhada ! ! ! Parte do espaço de endereçamento virtual de um processo pode corresponder a uma região de memória comum a vários processos – memória partilhada A utilização de memória partilhada não se restringe a processos com grau de parentesco directo A sincronização no acesso à zona de memória partilhada, pelos vários processos, tem que ser explicitamente programada (é comum controlar os acessos através de semáforos) 3 Luísa Jorge Sistemas Operativos Utilização de memória partilhada 1. 2. 3. Uso de uma primitiva que permite criar uma região de memória partilhada e que simultaneamente lhe atribui um identificador A primitiva de associação devolve um ponteiro, no espaço de endereçamentos virtual do processo, a partir do identificador O identificador pode ser usado por outro processo que pretenda usar a região de memória criada, utilizando a primitiva de associação – 4. 4 a primitiva de associação devolve um ponteiro, no espaço de endereçamentos virtual do processo, que corresponde à mesma região de memória física a que o 1º processo acede Uso de outra primitiva que permite eliminar a região de memória Luísa Jorge Sistemas Operativos 2 Sistemas Operativos Memória partilhada – primitivas em Unix Criar ou identificar uma zona de memória partilhada – primitiva shmget ! É necessário fornecer: – O valor da chave ! ! – O tamanho da zona de memória partilhada (em bytes) – Combinação (ou lógico bit-a-bit) : ! ! ! 6 A constante IPC_PRIVATE ou Outro nº inteiro – Geralmente fornecido em hexadecimal (ex: 0x1a2b3c4d) – Pode ser construído usando a função ftok do valor das permissões de acesso com a indicação de se pretender criar uma nova zona de memória ou a indicação de se pretender criar uma zona de memória, mas no caso de esta já existir, obter apenas a identificação Luísa Jorge Sistemas Operativos 3 Criar ou identificar uma zona de memória partilhada – primitiva shmget ! Obtém-se: – O identificador da zona de memória partilhada criada (nº inteiro que passa a ser usado para referir a zona criada) ! Este identificador pode diferir entre diferentes execuções do programa mesmo se for usada a mesma chave 7 Luísa Jorge Sistemas Operativos Permissões de acesso e outros valores ! Permissões de acesso de leitura/escrita, em octal – ! Combinadas com: – – – 8 Ex: 0400, 0200, 0600 permissão de leitura, escrita ou leitura/escrita pelo utilizador, respectivamente; 0440 permissão de leitura pelo utilizador e pelo grupo IPC_CREAT - criar uma zona de memória partilhada se ainda não existe, caso contrário fornece a identificação da zona de memória partilhada existente Ou com, IPC_CREAT e IPC_EXCL – se se pretende criar uma nova zona de memória partilhada (erro se já existir) Estes valores são ignorados se a chave usada for IPC_PRIVATE Luísa Jorge Sistemas Operativos 4