Baixe o app para aproveitar ainda mais
Prévia do material em texto
SISTEMA OPERACIONAL II – PARTE 6 Elaborado por Luciana SA Amancio Página 1 33) RESUMO AULA PASSADA – PAGINAÇÃO Ilusão da Memória Lógica O processo acha que esta só memória porque existe a memória lógica. Esta ilusão é construída pela conversão que o HW MRU. Ele faz a conversão para cada endereço que o processo tem que usar ela converte o endereço que é um endereço lógico para um endereço físico. Assim cria a ilusão da memória lógica. Como é feita essa conversão? A conversão do Endereço Lógico em Endereço Físico é feita em três passos: 1º) Quebra do Endereço lógico em 2 partes: Página Lógica e Deslocamento feita por uma conta. 2º) Conversão Num_psg_logica em Num_pag_fisica (Tabela de Páginas do Processo) 3º) Cálculo do Endereço Físico. A Tabela de Páginas que faz a conversão da página lógica em página física tem campos o mais importante é o Num_pag_fisica e os bits de controle Válido (0 Página lógica não existe no mundo verdadeiro; 1 Existe no número verdadeiro), Executável (páginas que contém código são executáveis e não alteráveis) e Alterável (as páginas que contém variáveis são não executáveis e alteráveis). Se alguém tentar fazer o uso errado dessas paginas e não está autorizado o HW gera uma interrupção e o SO ao tratar esta interrupção tipicamente aborta o processo. Nessa conversão o passo 2 é o mais demorado porque consulta a TPP que está na memória. E consultar a memória não é uma coisa muito rápida. Para contornar essa situação existe um componente de HW que é um chip chamado TLB que faz parte da MRU. A TLB guarda o endereço de alguns registros da TPP. Na TLB tenho o campo Num_pag_Lógica que na TPP é um índice. Outra diferença é que na TLB não tem o bit valido, pois só vai para TLB conversões da pagina logica para pagina física que são válidas. Outro tipo é a TLB alternativa que tem o Num do processo como campo. Esse campo é importância porque a TLB é um componente de HW e ela guarda as conversões das paginas logicas para as paginas físicas do processo que está em execução. Quando o processo é bloqueado e o SO escalona outro processo o HW vai usar outra TPP e as conversões da TLB estão erradas e não podem mais serem usadas. A TLB convencional que não tem o campo Num do processo toda vez que o processo muda a TLB fica vazia. Na TLB alternativa que o HW guarda o Num do processo não precisa limpar a TLB quando um novo processo é escalonado. Esse campo permite que o HW diferencie de quem é a conversão. 1º Problema da Paginação Velocidade da Conversão Num_psg_logica em Num_pag_fisica (Resolvido pela TLB) SISTEMA OPERACIONAL II – PARTE 6 Elaborado por Luciana SA Amancio Página 2 34) 2º PROBLEMA DA PAGINAÇÃO TAMANHO DA TABELA DE PÁGINAS DO PROCESSO Figura 1 Para guardar as informações da conversão da memória lógica na memória física mostradas na Figura1 temos a Tabela de Páginas do Processo 1 mostrada na Figura 2. Figura 2 Temos n paginas logicas na memoria logica como mostra Figura 1. E precisamos de n registros na TPP conforme mostra a Figura 2. É vantajoso ter muitas paginas logicas sem uso entre a área de dados e a área de pilha porque isso permite crescer essas áreas sem muita preocupação em bater uma na outra. Também permite ter SISTEMA OPERACIONAL II – PARTE 6 Elaborado por Luciana SA Amancio Página 3 outros tipos de áreas no meio do caminho. Não gasto memória verdadeira para paginas que não tem informação nenhuma. É muito comum colocar toda capacidade de endereçamento em registradores de 32 bits. A Intel trabalha assim por exemplo. Uma Máquina de 32 bits usa registradores de 32 bits. O que é guardado nesses registradores? Em um deles é guardado o endereço de memória de 32 bits. Capacidade de endereçamento de memória: 232 bytes = 4 GB (230*22) A vantagem de ter milhares de páginas lógicas na memória lógica do processo é crescer a área de dados e de pilha e poder incluir outro tipo de área no espaço livre. A desvantagem é o tamanho da TPP, pois consume memória porque cada pagina logica tem um registro na TPP. Como cada processo tem a sua TPP temos um desperdício de memória com página logicas não utilizadas. Embora os registradores sejam de 32 bits podemos não utilizar todos esses registradores, mas é utilizado porque é mais vantajoso. Não podemos utilizar mais do 32 bits. Observação 1: 210 = 1 KB 220 = 1 MG 230 = 1 GB 240 = 1 TB 250 = 1 PB 34.1) CALCULANDO A QUANTIDADE DE PÁGINAS LÓGICAS Capacidade de endereçamento/ Tamanho_Pags = 4 GB/4 KB = 1 MB páginas Qtd_pag_logica = Qtd_registradores (Entradas) na tabela de pags = 1 MB entradas Tam_Tab_Pags = Qtd_Entradas_Tabela * Tam_Entrada = 1 MB * 4 B = 4 MB 4 MB Gasto para guardar a Tabela de Páginas do Processo. Este é o problema. Não é muita coisa para a memória hoje em dia, porém tenho uma TPP por processo. Sendo assim, este valor fica significativo se temos mais de um processo em execução nas maquinas hoje em dia que tem em média 15 a 20 processos. A máquina possui muitos processos sem interface com o usuário. No Windows são chamados de Serviço e no Unix de Daemon. Então se 1 processo gasta 4 MB para guardar a TPP na memória. 20 processos vão gastar 100 MB. Que é um gasto considerável de memória. Isto não é legal. Nenhum fabricante trabalha com este tipo de TPP. Todo tem alguma técnica para reduzir o tamanho da TPP. 34.2) 1ª TÉCNICA(SOLUÇÃO) – QUEBRA DA TABELA DE PÁGINAS EM PEDAÇOS Conforme mostra a Figura 3 temos uma tabela com milhões de paginas. Se o tamanho da página lógica for reduzido ele priora o tamanho da TPP, pois ele é o divisor do cálculo para encontrar o tamanho da TPP. O que melhora é a fragmentação interna. O desperdício com o tamanho de pagina logica é em media de meia pagina logica, ou seja, 2 bytes por pagina logica. SISTEMA OPERACIONAL II – PARTE 6 Elaborado por Luciana SA Amancio Página 4 Figura 3 Qual é a vantagem de quebrar em pedaço? É que muito desses pedaços não tem nenhum pagina logica valida. No exemplo da Figura 3 somente o primeiro e o ultimo pedaço guardam informação, ou seja, paginas logicas validas. Todo o meio da memoria logica da Figura 1 não tem nenhum informação (não tem página logica valida). A ideia é não gastar memoria com estes pedaços da TPP que não tem nenhum pagina logica valida. Então a TPP fica reduzida ao pedaço de cima e de baixo da TPP original conforme mostra a Figura 3. Logo o gasto com a memória será muito menor. Como saber quais são os pedaços que tem paginas logicas validas? Onde estão estes pedaços? Através do Diretorio de páginas. Ele guarda o endereço de um pedaço da TPP. Para estimar o tamanho da TPP preciso saber quantos registros tem no Diretório de paginas que é fácil saber. Para cada pedaço se tem 1024 entradas. Para calcular temos: Tamanho do Pedaço da Tabela de Páginas = Qtd_Entradas_Pedaço * Tam_Entrada = 1024*4 = 4 KB No exemplo da Figura 3 foram gastos com a Tabela de Páginas 8 KB (2 pedaços) + 4 KB (Diretório). Totalizando 12 KB. Um processo maior vai ter mais paginas validas e vai dar um valor maior de memória gasto, mas mesmo assim o gasto é menor do que a tabela simples (TPP). Cada processo tem uma estrutura parecida com a da Figura 3. Ao invés de ter o registrador que aponta para a TPP que está em uso. Nesse caso, o registrador aponta para o diretório. E é o diretório que diz qual é a TPP que será utilizada. Quando o SO escalona outro processo o registrador aponta para outro diretório. Isto funciona bem, mas tem uma pequena coisa ruim. Existe um gasto maior de tempo para fazer a conversão do endereço da página lógica no endereço da página física porque agora a informação não existe de forma simples na tabela. Na TPP simples o índice da tabela é o numero da pagina logica. Para saber onde está a pagina física da pagina lógica 3. O HW vai à posição 3 da tabelae vê em que pagina física está a pagina logica 3. Nesse caso para saber em qual a pagina física está a pagina logica 3 primeiro o HW tem que ir no diretório e vê qual o endereço do pedaço da entrada 0 da TPP da Figura 3. SISTEMA OPERACIONAL II – PARTE 6 Elaborado por Luciana SA Amancio Página 5 Então é feito o acesso ao registro desse diretório e em seguida para saber o endereço da pagina logica o HW faz o acesso ao registro do primeiro pedaço. Nesse caso para fazer a conversão serão gastos dois acessos a memoria: um para acessar o diretório e outro para encontrar a pagina logica 3. O acesso a memoria da conversão introduz uma lentidão na conversão que é resolvida pela TLB. Nesse tenho mais lentidão, pois fiz dois acessos à memória física. Esta solução resolve um problema e criar outro um pouco menor que é o problema de desempenho (desvantagem dessa técnica). A Intel utiliza esta técnica. Como o SO preenche o conteúdo da tabela? Uma área de controle do arquivo executável diz o tamanho do código, o tamanho inicial da área de dados e o tamanho inicial da área de pilha. E o SO escolhe na memoria física pagina que estão livres para guardar área de paginas lógicas do processo. Depois que ele escolhe ele preenche a tabela com as informações. Em uma tabela de níveis ele faz a mesma coisa, ou seja, ele vê quantas páginas validas tem na memoria logica? É mais ou menos 1024?Se for menos de 1024 será utilizado só um pedaço da memoria. Se for mais de 1024 será utilizado 2. A quantidade de pedaços que terei tem haver com a quantidade de páginas físicas na memória. A tabela simples não é criada, mas sim a tabela de dois níveis. Como ele sabe qual pedaço que tem que usar? Tem uma logica para o SO saber qual entrada será consultada. O passo 1 para conversão da página logica no endereço físico é quebrar o endereço em duas partes. Quantos bits tem o lado direito que é o deslocamento? Depende do tamanho da página. Se a pagina for de 4 KB é 212 então são 12 bits para o deslocamento. Os 20 bits restantes que ficam no lado esquerdo correspondem o numero da pagina logica Conforme mostra a Figura 4. O Num_pag_logica é pego para consultar o número da página física. Assim é feito na Tabela Simples. Figura 4 – Para Tabela Simples Na Tabela de dois níveis isto é feito um pouco mais complicado. O endereço da página logica é quebrado em dois e dois pedaços. Conforme mostra a imagem a seguir: Figura 5 – Para Tabela de Dois níveis SISTEMA OPERACIONAL II – PARTE 6 Elaborado por Luciana SA Amancio Página 6 A Parte 1 da Figura 5 identifica uma entrada no diretório. A parte 2 identifica uma entrada no pedaço da Tabela de Páginas. Cada pedaço vai de 0 a 1023. E a parte 3 identifica o byte da página na memória lógica do processo 1. A Figura 5, mostra o como exemplo a representação da página logica igual a 3. O deslocamento significa o numero do byte dentro da página logica que tem 4 KB. Essa solução fica bem pior quando se trata de uma máquina de 64 bits. Esta máquina quer dizer que o End_logico tem 64 bits com a capacidade de endereçamento 2 64. A Figura 6 mostra a divisão dos 64 bits. Figura 6 Isto é um tamanho gigantesco. Muitas vezes os fabricantes limitem este endereço. A Figura 6 ilustra um fato não real. Sabemos que 26 bits é igual a 2 26 = 64 MB Entradas. Logo, o diretório teria este tamanho de entradas. Sendo 4 Bytes por entrada temos 256 MB. Isto só para um processo. Portanto a lógica aplicada para 32 bits não pode se mantem para 64 bits porque o diretório e a tabela de páginas ficam gigantescos. Como funciona para 64 bits? A ideia é quebrar em mais níveis porque assim o diretório não terá apenas dois níveis. A jogada é a seguinte tenho uma quebra em duas sub paginas porque tenho dois níveis. A ideia é quebrar em mais níveis e assim cada diretório será menor. Como funciona? O 1º nível que seria o diretório ele aponta para tabela de pagina do 2º nível. Conforme mostra a Figura 7. Desse jeito a coisa funciona. Conforme mostra a Figura 8 temos uma entrada para tabela de pagina para cada nível. SISTEMA OPERACIONAL II – PARTE 6 Elaborado por Luciana SA Amancio Página 7 Figura 7 Figura 8 SISTEMA OPERACIONAL II – PARTE 6 Elaborado por Luciana SA Amancio Página 8 A parte 1 da Figura 8 identifica uma entrada no 1º nível. A parte 2 identifica uma entrada no 2º nível. A parte 3 identifica uma entrada no 3º nível. A parte 4 identifica uma entrada no 4º nível. A parte 5 identifica uma entrada no 5º nível. O 6º nível é referente ao pedaço da tabela de paginas. Esse caso é um caso bem teórico a Intel não usa todos os 64 bits de endereço ela simplifica e usa um endereço menor. A tabela de páginas da Intel tem 5 níveis sendo 4 de diretório e 1 referente ao pedaço da tabela de paginas. A solução funciona, mas é insuficiente na hora da conversão, pois tem que ser feito 6 acessos a memoria. A desvantagem A solução não é boa para 64 bits. 34.3) 2ª TÉCNICA (SOLUÇÃO) TABELA DE PÁGINAS INVERTIDAS (TPI) O índice da tabela de pagina é o numero da pagina real, ao invés da virtual, e o conteúdo da entrada será o numero da pagina virtual. Alem disso, há um campo indicando a que processo pertence a pagina real. Tabela Hash. Vantagem: economia de espaço, pois há menos paginas reais que virtuais, uma tabela para todos os processos. Desvantagem: Toda pagina real é mapeada, tendo conteúdo ou não, mapeamento muito lento, pois é necessário um acesso a memória para cada entrada, até achar a pagina virtual desejada e depende do funcionamento da TLB. Como a tabela é classificada por endereço virtual, o SO pode calcular onde na tabela está a entrada de endereço físico associada e usar esse valor diretamente. Uma das vantagens desse método é que cada tabela de pagina pode consistir em milhões de entradas. Essas tabelas consomem grande quantidade de memória física, que é necessária apenas para controlar como a outra memória física esta sendo usada. Para resolver esse problema, podemos usar uma tabela de pagina invertida. Uma tabela de pagina invertida tem uma entrada para cada pagina real de memória. Cada entrada consiste no endereço virtual da pagina armazenada naquela posição de memória real, com informações sobre processo que é proprietário da pagina. Assim, só existe uma tabela de pagina no sistema, e ela so tem uma entrada para cada pagina de memória física. Esse esquema aumenta o tempo necessário para pesquisara tabela quando ocorre uma referencia de pagina. Como a tabela de pagina invertida é classificada por endereços físicos, mas as pesquisas são feitas com endereços virtuais, a tabela inteira talvez precise ser pesquisada para encontrar uma correspondência. Essa pesquisa pode demorar muito. Para aliviar o problema, usamos uma tabela de hashing para limitar a pesquisa para uma entrada ou, no Maximo, algumas poucas entradas na tabela de paginas. É claro que cada acesso a tabela de hashing acrescenta uma referencia de memória ao procedimento, por isso uma referencia de memória virtual requer pelo menos duas leituras de memória real: uma para a entrada na tabela de hashing, outra para a tabela de pagina. Para melhorar o desempenho, utilizamos os registradores de memória associativa para manter entradas recentemente localizadas. Esses registradores são pesquisados em primeiro lugar, antes que a tabela de hashing seja consultada. SISTEMA OPERACIONAL II – PARTE 6 Elaborado por Luciana SA Amancio Página 9 Figura 9 Figura 10 Na Tabela de Paginas convencional ele é um array que tem um índice que é o numero da pagina logica e o campo contém o endereço da pagina física. Na Tabela de Páginas Invertida é ao contrário. Conforme mostra a Figura 10. O campo é o numero da página logica e o índice a pagina física. Então quem está na pagina física 0? A página logica 2. Quemestá página física 1? A página física 3. E assim por diante conforme mostra a Figura 9. Observamos na Figura 9 que a pagina logica 0 pode ter dois endereços de página físicas diferentes. Logo tem que ter mais informação na tabela invertida. Que é o numero do processo. E o bit de páginas válidas sendo 0 para página não válidas e 1 para páginas válidas. Essa tabela invertida tem uma grande vantagem importantíssima em relação às tabelas convencionais que o fato de ser única para toda maquina. Na tabela convencional tem uma para cada processo. A SISTEMA OPERACIONAL II – PARTE 6 Elaborado por Luciana SA Amancio Página 10 Invertida não, pois contem os dados de todos os processos. Embora possa ser uma tabela muito grande sua vantagem é ser única e o gasto é único. Instrução do processo 1 MOV X, 1200. Esse endereço 1200 é um endereço logico que o processo 1 está utilizando e tem que ser convertido para o endereço físico. Fazendo a conversão encontramos página logica 2 e deslocamento 1. Então esse cara tem que virar endereço físico. Os 12 bits de deslocamento não mudam. Mas, para fazer a conversão tem o passo 2 que é descobrir qual é a página física que corresponde a pagina logica em questão. O dado que não tenho é justamente o endereço da página física. O dado que tenho é o endereço da pagina logica e é o conteúdo da tabela. Então para saber qual é a página física em principio terei que procurar. Em qual página física esta o Num_pag_logica = 1 do processo 1? Procura na tabela invertida de baixo para cima até encontrar. Nesse caso para fazer a conversão exibida na Figura 11 foram feitos 5 acessos a Tabela invertida para encontrar o End_fisico da página logica 1 do processo 1. Figura 11 Nesse exemplo o cenário é muito bom poderia ser pior a página poderia estar lá em cima da TPI. O problema (desvantagem) da Tabela invertida é conseguir fazer a conversão do Endereço da Página Lógica para Endereço da Página Física. Esse problema de procurar um dado em uma tabela é comum. Por exemplo, o caso de banco de dados consultar o dado do funcionário João da Silva tem um monte de empregados. Terá que procurar na tabela de empregados até encontrar esse sujeito. Existe uma coisa no banco de dados que é a indexação da tabela. Você pode escolher campos que vão ser utilizados para indexar a tabela. 1ª SOLUÇÃO: TABELA DE PÁGINAS EM NÍVEIS: - A tabela de paginas é dividida em pedaços, pelo gerenciador de memória, em tamanhos iguais (diretórios), onde cada pedaco é apontado por uma entrada de diretório de paginas. - Desvantagem: Ocupa mais espaço, pois usa mais uma tabela. Se a pagina não estiver mapeada na TLB, são necessários 2 acessos a memória para encontrar a pagina real. - Vantagem: Somente diretórios contendo pelo menos uma pagina ativa são mapeados. Como a maioria das paginas virtuais fica ociosa, o numero de paginas mapeada é relativamente pequeno. Somente mapeando paginas virtuais com bit de presença 1. Implementado pelo hardware, mais precisamente pela Intel. Estruturas esparsas contêm informações irrelevantes, onde a maioria de seus valores são nulos, por exemplo, uma tabela de página que tem 1 milhão de entradas, a maior parte delas terá o bit de validade igual zero, poucas tem bit de validade igual a 1. Se nessa matriz a maior parte dos elementos for igual a 0 e se algum for diferente de 0, então existe uma jogada que resolve esse SISTEMA OPERACIONAL II – PARTE 6 Elaborado por Luciana SA Amancio Página 11 problema da memória, ao invés de fazer a matriz como um array direcional, fará um array de ponteiros para o array, nas poucas linhas que tem espaço relevante essas linhas tem um array de linhas alocadas. As demais linhas que tem sempre 0 não precisam de um array para guardar. Estruturas Esparsas linhas Fuction getElem (i,j : Integer) : byte; Begin If linhas [i] = nil then getElem:=vazio Else getElem = linhas[i]^[j]; End A função acima verifica se a linha existe ou não. Se não existir fica com valor 0, isso acontece nos casos em que a linha é igual a nil. Se existe, ou seja, linha diferente de nil, então será obrigado a percorrer o ponteiro que aponta para esse array. O espaço será muito menor. Esse é um mecanismo que existe no Windows NT. Ao invés de gastar 100MB, devido o array ter 1000 linhas e 1000 colunas (1000 x 1000 é igual a 100MB), estará gastando 70KB. A tabela de páginas é dividida em partes iguais e só irão existir as que tiverem páginas válidas. Para isso haverá uma tabela que é chamada de diretório de páginas que essas partes iguais e só conterá as informações de páginas válidas. As demais páginas da tabela voltam para o nil. A estrutura desta tabela será o mesmo que o array de array mostrado acima. DIRETÓRIO DE PÁGINAS 0 0 3 4 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 3 1002 1001 1000 1000 0 0 0 3 4 0 0 1 K entradas 1 K entradas 2 1 0 0 0 504 1 502 1 500 1 0 0 0 1 4 1 2 1 1000 0 0 0 2 0 0 1 0 0 3 SISTEMA OPERACIONAL II – PARTE 6 Elaborado por Luciana SA Amancio Página 12 Só duas páginas válidas, representadas pelos dois arrays acima, terão espaço fisicamente, os demais não irão existir, no caso da Intel terá 1K entradas e em cada pedaço de página também tem 1000 entradas. De 4 MB (1MB X 4bytes) teremos 12 KB, já a tabela de páginas será maior se tiver várias páginas com valor válido, mas nunca será tão grande quanto 4 MB. É uma solução que funciona, pois a tabela de páginas fica muito menor, porém a conta do começo é inválida, quando a conversão de virtual para real é feita via tabela de páginas, são gastos dois acessos a tabela de páginas, um para acesso ao diretório e outro para a operação da tabela de páginas. Quando a conversão não está na TLB terá dois acessos a tabela de páginas, deixando o acesso bem maior. Cálculo: Acesso a memória via TLB = 10+100*p Via Tabela de páginas = (10 + 100 + 100 +100)*(1-p) = 210p + 310 (1-p) = 310 – 200p= 310-180=130. Considerando 90% de perda, pois são dois acessos a tabela de páginas, um para o diretório de páginas e o 2 º acesso é o pedaço da tabela de páginas. 2ª SOLUÇÃO: TABELA DE PÁGINAS INVERTIDAS: Com uma tabela tão grande a solução em níveis não funciona porque o diretório de páginas fica muito grande, a solução é colocar mais níveis, mas isso deixaria mais lento o tempo de conversão via tabela de páginas, isso não é muito bom. Quando a máquina tenta fazer um mapeamento tão grande o que normalmente se adota é a tabela de páginas invertidas. É uma derivação da tabela de páginas. O que é a tabela de páginas? Têm mais bits de controle, nº da página física e o índice da tabela de páginas, não são armazenas pois são índices de arrays, mais o índice da página lógica. A tabela de páginas é muito grande pois o espaço lógico é muito grande, por exemplo, com 32 bits de endereçamento como é o caso da Intel. 11 10 9 7 1 0 1 0 1 0 1 4 1 1 0 2 1 1 0 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Nº da página lógica Nº da página física E x ec u tá v el A lt er áv el n ú cl eo SISTEMA OPERACIONAL II – PARTE 6 Elaborado por Luciana SA Amancio Página 13 Não tem mais a questão da quantidade de tabelas de páginas por processo, mas tem um PID que identifica o processo. Tenho uma tabela só para todos os processo. Ocupa muito menos espaço para armazenar a tabela. Poderia se pensar que essa é uma solução excelente, pois, gasta muita menos memória, porque não é memória lógica é memória física e, além disso, é uma tabelasó para todos os processos, mas tem um grande problema: O que é feito pelo hardware quando executa a seguinte instrução: mov ax, [4100], tem que converter o endereço que é lógico para o endereço correspondente, divide o hardware em dois pedaços, o pedaço que é o deslocamento da página e faz a conversão para o nº da página lógica para o número da página física. Na tabela de página normal já se sabe qual o endereço lógico, pois, está no array, neste caso não, terá que procurar, não é só ir direto na posição e saber qual o número que está lá. Por exemplo: Qual a página física onde está a página lógica 1 do processo 1? Ao invés de fazer um acesso a memória, tem que fazer vários acessos para saber qual a página física. Essa conversão tem que ser feita para cada instrução que está na memória. A procura é feita através da tabela Hash, para ganhar velocidade de acesso. Por causa disso, a TLB é bem mais eficiente, ou seja, a conversão será melhor se for feita via TLB ao invés da tabela de páginas invertida. SO dados código 12 11 10 9 8 7 6 5 4 3 2 1 0 SO Espaço Virtual Espaço Real Espaço Virtual 2 12 11 10 9 8 7 6 5 4 3 2 1 0 Nº da página física Tabela de página invertida 2 2 3 1 0 2 1 1 1 2 0 1 2 2 SISTEMA OPERACIONAL II – PARTE 6 Elaborado por Luciana SA Amancio Página 14 Vantagem : Eficiente por gastar pouca memória Desvantagem : Ficará mais lento 3ª SOLUÇÃO: GERAÇÃO DE UMA INTERRUPÇÃO (SEM SPARC): A conversão entre o endereço lógico e físico tem que ser feito, mas quem faz é o software, então na 3ª solução ela é a geração de uma interrupção o HW faz a conversão do endereço lógico para o endereço físico, antes passa pela TLB para ganhar velocidade, todo o hardware de paginação tem TLB para ganhar velocidade, no caso dessa solução eles tentam fazer a conversão na TLB se conseguir é ótimo, se a conversão não tiver na TLB então o hardware gera uma interrupção. Essa conversão de lógico para físico é uma coisa complicada então as estruturas de controle estão amarradas ao hardware. A idéia dessa solução é deixar livre a escolha da estrutura de controle. Quem vai decidir qual o melhor mecanismo será o programador do SO. Onde está o SO? 1) Em outro espaço de endereçamento lógico 2) Nos espaços de endereçamento de todos os processos Tabela (SPARC) Nº da página lógica Nº da página física Validade Id do Espaço lógico 1 4 1 1 3 7 1 1 0 5 1 2 DIFERENÇAS ENTRE TABELA DE PÁGINA NORMAL E TABELA DE PÁGINA INVERTIDA: Estado Civil 1 – Solteiro 2 – Casado 3 – Viuvo 4 – Divorciado var Est_Civil: array[1..4] of String; begin Est_Civil[1] := „Solteiro‟; . . . Function StringEstCivil(i: integer) : String; // ISTO É UM LOOK UP TABLE,ou // seja tabela de página normal, que é //mais eficiente que uma tabela de //página invertida begin StringEstCivil := Est_Civil[i]; End; Function GetNomePai( s: String) : String; // Exemplo de uma tabela de página invertida, SISTEMA OPERACIONAL II – PARTE 6 Elaborado por Luciana SA Amancio Página 15 // pois possui procura e tem perda de // performance devido a esta procura. var i: integer; begin for i = 1 to 100 do if A[i].Nome = s then // ISTO É UMA PROCURA! Devido ao teste //de igualdade que se repete. return A[1].NomePai; end; Type Pessoa = Record; Nome, NomePai : String; End; var Pessoas: array[1..100] of Pessoa; begin Pessoa[1].Nome := “Joao”; Pessoa[1].NomePai := “Antonio”; Pessoa[2].Nome := “Maria”; Pessoa[2].NomePai := “Pedro”; end. 2º PROBLEMA: TAMANHO DA TABELA A) Tabela de páginas em níveis (Intel 80386, 80486, Pentium): O problema desta solução é que a cada chamada externa tiver trocar o espaço do processo tem que zerar a TLB. B) Tabela de páginas invertidas (IBM: Power PC). É uma tabela para todos os processos, para não ocupar muito espaço. Não precisa zerar a TLB quando faz uma chamada ao sistema operacional sob a forma de uma interrupção, porque o espaço do endereçamento lógico é o mesmo. A interrupção ou chamada ao sistema ocorre e o espaço do processo também tem no sistema operacional, eles compartilham o espaço. Então a vantagem desta solução é de não zerar a TLB; Observação: O Solaris com processador Intel usam esta solução. C) Geração de Interrupção (Sun: UltraSparc): não é implementado em hardware, quando a tradução endereço lógico e endereço físico não pode ser feito via TLB. Neste caso, o hardware gera uma interrupção e o sistema operacional trata esta interrupção, fazendo a conversão, usando estrutura de dados feita em software e não hardware, o programador do software que escolhe a estrutura de dados usada para conversão. Diferente das duas soluções acima que utiliza estrutura de dados que o hardware conhece, então o hardware consulta a estrutura de dados e faz a conversão. Localização do Sistema Operacional: A) O SO tem seu próprio espaço de endereço lógico. B) O SO está presente no espaço lógico de todos os processos(Windows 95, NT, Linux); SISTEMA OPERACIONAL II – PARTE 6 Elaborado por Luciana SA Amancio Página 16 35) TABELA HASH – FUNÇÃO HASH A Tabela Hash é sempre associada a uma função hash. A Figura 12 apresenta a Tabela Hash. F(campos) Nº Inteiro Indexa a Tabela Hash Nesse caso quero procurar o numero do processo e o numero da página logica. Logo, terei a seguinte função hash: F(Nº da Página Lógica, Nº do Processo) Inteiro Quando cada processo é criado o SO preenche a tabela invertida e também preenche a Tabela Hash. Então vamos supor que começou o processo 1. O SO preencheu a TPI e a TH com os dados do processo 1. Mas, para preencher a tabela hash vai ter usar a função hash para cada pagina logica do processo 1. F(Nº da Página Lógica, Nº do Processo) (Nº da Página Lógica + Nº do Processo) % Tamanho da Tabela Hash Figura 12 Fazendo o cálculo da função hash para cada página logica do processo 1. O resulta dessa função é o numero da página física onde está à página logica do processo. Onde está a página lógica do processo 1? Na pagina física 1 (encontrada através da F(0,1)) é esse valor que é colocado na página física da TH. O campo da TH é o numero da página física. Cálculo das funções de hash para o processo 1: F(0,1) = (0+1) % 14 = 1 F(1,1) = (1+1) % 14 = 2 F(2,1) = (1+2) % 14 = 3 F(3,1) = (3+1) % 14 = 4 SISTEMA OPERACIONAL II – PARTE 6 Elaborado por Luciana SA Amancio Página 17 Então o SO preencheu a Tabela Hash mostrada na Figura 12 e a Tabela Invertida mostrada na Figura 13. A Tabela Hash é única assim como a Tabela Invertida. 36) TABELA INVERTIDA A Tabela de páginas é igual à Tabela de Páginas comum exceto pelo fato de que a Invertida aponta para endereços lógicos (relação endereços físicos x endereços lógicos). Ex.: No. Pág. Lógica correspondente à Pág. Física Tabela de Páginas Invertida 2 4 7 7 4 9 0 0 9 8 7 6 5 4 3 2 1 0 0 2 1 2 0 1 2 1 1 2 PID do Processo 9 8 7 6 5 4 3 2 1 0 Espaço de Endereçamento Lógico (EEL) do Processo 1 PILHA P 2 PILHA P1 CÓD P 2 DADOS P1 1 DADOS P2 CÓD P 1 CÓD P 1 CÓD P 2 CÓD P 1 DADOS P1 PILHA P 1 CÓD P 1 9 8 7 6 5 4 3 2 1 0 Espaço de Endereçamento Físico (EEF) 9 8 7 6 5 4 3 2 1 0 Espaço de Endereçamento Lógico (EEL) do Processo 2 CÓD P 2 DADOS P2 PILHA P 2 CÓD P 2 A Tabela de Páginas Invertida é muito menor que a Tabela de Páginas pois o tamanho daquela é exatamente o tamanho da memória física. Se a máquina tem 512MB de memória, haverá 128K entradas em vez de 1 M entradas(se fosse usada a Tabela de Páginas). Só existe uma Tabela de Páginas Invertida para todos os processos em vez de uma Tabela de Páginas para cada processo. Para que o HW saiba a qual processo pertence cada página física/lógica, há a necessidade de se utilizar um campo PID. No. Pág. Física SISTEMA OPERACIONAL II – PARTE 6 Elaborado por Luciana SA Amancio Página 18 O problema é que é necessário varrer toda a Tabela de Páginas Invertida até encontrar a Página Física que tem como referência uma determinada Página Lógica usada por um determinado processo. O HW que usa Tabela de Páginas Invertida precisa usar uma tabela de hash que aumenta a velocidade na procura de uma página lógica. É mais lenta que a Tabela de Páginas em cerca de 5 vezes. A TLB precisa ser muito eficiente para compensar a lentidão da Tabela de Páginas Invertida. Figura 13 Durante a execução o HW tem que fazer a conversão de página logica para pagina física. Agora com a TH como o HW faz? Ele aplica a função hash, por exemplo, F(1,1) = 2. Ele usa esse valor para ir à hash na posição 2 e encontra a página física que é 4. Para ter certeza ele vai na posição 4 da TPI e verifica se de fato a página que está procurando é do processo 1. Nesse caso são gastos dois acessos a memoria. Agora vou criar o processo 2 o SO preenche a TI e a TH com os dados do processo 2. Ao aplicar a F(0,2) = (0+2) % 14 = 2 Na Tabela Hash esse campo já está em uso. Temos um problema que chamamos de colisão. Como resolver a colisão? Tem várias soluções uma solução é criar uma lista encadeada de colisão. Tem mais um campo na TI para tratar o caso da colisão que se chama próximo elemento da lista de colisão. Esse campo é um numero inteiro. Então nesse caso deu 4 o hash. Quem colidiu com ele? A pagina logica 0 do processo 2. É colocado no campo próximo elemento da lista de colisão o número da página logica que ele colidiu. Quem não colidiu não tem próximo e este campo fica sinalizado com -1. Conforme mostra a Figura 13. Cálculo da função hash para o processo 2: SISTEMA OPERACIONAL II – PARTE 6 Elaborado por Luciana SA Amancio Página 19 F(1,2) = 3 F(2,2) = 4 Colisão F(10,2) = 12 Digamos que temos a instrução do processo 2 CALL 500. Esse endereço logico 500 tem que ser quebrado em duas partes conforme mostra a Figura 14. Figura 14 Agora para descobrir o endereço físico temos que saber o número da página física. O HW: 1º) Aplica-se F(0,2) = 2; 2º) Vai na posição 2 da Tabela Hash e vê o valor que está lá, 4; 3º) Vai na posição 4 da Tabela Invertida e pergunta ai está a página logica 0 do processo 2? Não. 4º) Verifica o campo Próximo elemento da lista de colisão e vai na posição informada por este campo e pergunta se ai está a pagina logica 0 do processo 2? Sim. Então ele descobre o que queria que é o endereço físico da pagina logica 0 do processo 2 que é 3. Nesse caso a quantidade de acessos à memória será menor do que a quantidade de acesso da tabela de níveis. A tabela invertida a pesar de ser muito mais complicada ela vai gerar tipicamente menos acesso a memória do que uma tabela de níveis. No exemplo, temos 3 acessos. Se tiver 2 colisões serão 4 acessos a memoria. A ideia é ter poucas colisões. Portanto, para 64 bits é mais vantagem usar uma tabela invertida do que usar uma tabela com níveis. Porque tem menos acesso a memoria do que tem em uma tabela de níveis. ESPAÇO GASTO COM A TABELA INVERTIDA Qtd de entrada * Tamanho entrada = 1 MB * 8 B = 8 MB Qtd de entradas de Tabela Invertida = Qtd Páginas Físicas Qtd Páginas Físicas = Tamanho da Memória Física / Tamanho da Página = 1 MB É uma solução complicada utilizada pela IBM nas suas máquinas de 64 bits é uma solução interessante para estas máquinas de 64 bits. Mainframe utiliza a solução em níveis.
Compartilhar