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 é:
yes
como todo processo precisará mapear suas próprias páginas para quadros. Eu posso estar errado. Por favor, esclareça. Além disso:
operating-systems
virtual-memory
memory-management
Fasih Khatib
fonte
fonte
Respostas:
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:
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
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.
fonte
Se o sistema tiver que fornecer um espaço de endereço virtual seguro para cada processo, então sim.
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).
fonte