O que é paginação no gerenciamento de memória?


4

Eu estava lendo Operating System Principles by Silberschatz et al quando me deparei com paginação no gerenciamento de memória. Estou um pouco confuso sobre isso.
Afirma que Memória física (Eu suponho que é RAM) é dividido em quadros e memória lógica é dividido em Páginas . CPU gera endereços lógicos contendo número de página e um offset . Este número de página é usado para recuperar o número do quadro de um tabela de páginas que dá a endereço base
então o endereço físico é calculado como base + offset.
Minha pergunta é:

  • a tabela de páginas é mantida para todos os processos?
  • Eu logicamente acho que a resposta seria yes como todo processo precisará mapear suas próprias páginas para quadros. Eu posso estar errado. Por favor, esclareça.

    Além disso:

  • paginação e segmentação (onde 'buracos' são criados na memória) são duas técnicas totalmente diferentes que não são usadas em combinação. Corrigir?

  • 3
    Wikipedia é seu amigo.
    martineau

    @martineau Wikipedia também é um amigo muito técnico que pode ter todos os fatos e detalhes que você precisa, mas não é tão bom em explicar nada para você.
    Vian Esterhuizen

    Eu suspeito que a resposta a ambas as perguntas do OP depende do sistema operacional.
    martineau

    @martineau ... depende do sistema operacional e da arquitetura de hardware
    artistoex

    Um SO no qual você não possui uma tabela de páginas de nível superior individual para cada processo é chamado de sistema operacional "Single Address Space". Singularidade é afaik um exemplo recente de tal escolha.
    sylvainulg

    Respostas:


    0

    Segmentação produz endereços lineares, Paging produz endereços físicos

    Quanto aos endereços lógicos e físicos, da Bovet & amp; Cesati (Entendendo o Kernel Linux), eu tenho isto:

    how logical addresses map to physical

    Como você pode ver, paginação e segmentação são realizadas por unidades separadas do hardware. Embora possam ocorrer ao mesmo tempo, o SO pode desabilitar a unidade de segmentação (para que os endereços sejam efetivamente tratados não como lógicos, mas lineares).

    Generalidades

    Você pode já saber disso, mas eu o coloco aqui de qualquer maneira para completar.

    Páginas ocupam quadros: trocas

    No que diz respeito a Silberschatz, capítulos 8, f, quadros consulte o layout da memória física. O sistema operacional divide a RAM em áreas de quadros iguais e convenientemente dimensionados (por exemplo, 4K). Páginas são pedaços de dados em tamanho de quadro, a unidade básica de substituição de página.

    Pode haver mais páginas do que quadros disponíveis. Algumas páginas ocupam quadros, algumas páginas são trocadas no disco.

    Se uma página for trocada do disco, ela estará alinhada com um determinado quadro na memória (qualquer que seja o algoritmo de substituição de página que seja adequado).

    Sistemas Operacionais e o Hardware cooperam

    Como acontece com muitos objetivos do sistema operacional, o gerenciamento de memória sempre funciona em conjunto com o hardware: tanto o sistema operacional quanto o hardware cooperam para realizar o trabalho. Como eles fazem isso em um cenário realista depende

    1. o conjunto de primitivas de gerenciamento de memória que o hardware fornece (paginação, segmentação e o que existe lá), e
    2. qual subconjunto o SO realmente usa na arquitetura e situação particular (o Linux @ zArchitecture é diferente do Linux @ Intel é diferente do Windows @ Intel é diferente do Windows @ Intel @ Boot-up)

    Por exemplo, apenas algumas arquiteturas fornecem segmentação e a figura acima se aplica ao x86. O Linux, por razões de portabilidade, não o explora muito. Se bem me lembro do Tanenbaum, o OS / 2 era o único sistema operacional que explorava a segmentação da Intel em toda a sua extensão.

    Até agora esta resposta.

    Dependendo de por que você precisa saber isso, a seguinte abordagem pode ajudá-lo (isso me ajudou).

    Eu sugiro que você primeiro se familiarize com o hardware e as primitivas individuais. Se Silberschatz é vago sobre este ponto, tente Tanenbaum (Sistemas Operacionais Modernos) ou Hennessy & Patterson (Arquitetura de Computação, Uma Abordagem Quantitativa). Se sua curiosidade não estiver satisfeita até então, veja como um sistema operacional específico o utiliza em várias situações em uma plataforma específica.


    0

    a tabela de páginas é mantida para todos os processos?

    Se o sistema tiver que fornecer um espaço de endereço virtual seguro para cada processo, então sim.

    paginação e segmentação (onde 'buracos' são criados na memória) são duas técnicas totalmente diferentes que não são usadas em combinação. Corrigir?

    Não, existe um esquema de memória virtual chamado segmentação paginada. (Eu me recordo desse conceito causando exasperação por meus colegas de classe quando apresentados pelo professor. Se Silberschatz et al não mencionou isso, então esse livro está incompleto.) O objetivo original da memória virtual paginada era fornecer um grande espaço de endereço para executar um programa grande em um computador com RAM limitada. Em uma memória virtual paginada simples com multiprocessamento, não haveria nenhuma restrição em ter dois processos compartilhando uma página. Mas uma memória virtual segmentada destina-se ao multiprocessamento e isolaria cada processo a seus próprios segmentos.

    Embora possa parecer redundante, o esquema típico de memória virtual usado em um sistema operacional seguro usa páginas e segmentos, em que os segmentos são as imagens binárias dos processos. O HW típico provavelmente suportará apenas páginas de tamanho fixo. A segmentação é implementada no sistema operacional. O conceito de segmentos facilita o gerenciamento de múltiplos processos na memória. O conceito de páginas facilita um mínimo de memória ocupada por cada processo. Uma biblioteca de tempo de execução compartilhada seria um caso especial de um segmento somente para gravação protegido, que fosse compartilhável entre os processos.

    Esteja ciente de que "segmento" em esquemas de memória virtual normalmente se refere a um pedaço de memória que é logicamente coeso e tem um comprimento arbitrário. Esse tipo de "segmento" não deve ser confundido com o "segmento" Intel 8086/88 (x86) que inicia em um limite de endereço de 16 bytes (ou seja, um "parágrafo") e é restrito a 64 KB de tamanho. Segmentos X86 são uma variação do banco de memória em vez de memória virtual.

    Os esquemas de banca de memória são para sistemas que têm um tamanho de endereço pequeno (por exemplo, 16 bits) mas um espaço de memória física maior (por exemplo, até 1 MB de memória endereçável). A memória virtual é (ou foi planejada para) a situação oposta: o tamanho do endereço é grande (por exemplo, pelo menos 32 bits) e a memória instalada é menor que o espaço de endereço (nem sempre é verdade atualmente). A memória virtual é normalmente completamente invisível para os programas do usuário, enquanto o programador Intel 8086/88 deve estar ciente dos modelos de memória pequena / média / grande e longe versus perto ponteiros. BTW essa palestra onde eu aprendi de memória virtual e "segmentação paginada" ocorreu antes A Intel projetou o i8086.

    Como texto de apoio, Wikipedia também menciona que segmentação e paginação podem ser combinadas (em hardware).


    o linux usa segmentos somente quando precisa
    artistoex

    @artistoex - Você está se referindo a segmentos x86? Veja a resposta editada.
    sawdust

    Sim, exatamente, segmentos intel.
    artistoex

    Eles apenas disseram no livro que os dois podem ser usados ​​em combinação também.
    Fasih Khatib
    Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
    Licensed under cc by-sa 3.0 with attribution required.