AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 412100
Accepted
JuHyung Son
JuHyung Son
Asked: 2017-12-21 11:01:44 +0800 CST2017-12-21 11:01:44 +0800 CST 2017-12-21 11:01:44 +0800 CST

Espaço de endereço do kernel e tabela de páginas do kernel

  • 772

Estou estudando Professional Linux Kernel Architecture e estou no Capítulo 3 Memory Management. Enquanto eu estudava, o próprio espaço de endereço do kernel é dividido em área de mapeamento direto, área vmalloc, área kmap e área de mapeamento fixa.

insira a descrição da imagem aqui

O que eu estou querendo saber é como abaixo.

  1. A área de mapeamento direto (896 MB) do espaço de endereço do kernel na máquina de 32 bits pode ser acessada por funções como __va, __pa sem MMU?

  2. se 1. for verdadeiro, então a tabela mestre da página do kernel (swapper_pg_dir) gerencia apenas 128 MB?

  3. Enquanto estou estudando o código do kernel, encontrei diferença na função paging_init entre 32 bits e 64 bits. Em 32 bits, encontrei a função pagetable_init que inicializa e domina a tabela de páginas do kernel na função paging_init .

função paging_init em 32 bits

void __init pageit_init(void){
    pagetable_init();
    __flush_tlb_all();

    kmap_init();

    olpc_dt_build_devicetree();
    sparse_memory_present_with_active_regions(MAX_NUMNODES);
    sparse_init();
    zone_sizes_init(); 
}

Mas em 64 bits, não consegui encontrar a função relacionada à tabela de páginas do kernel na função paging_init .

void __init paging_init(void)
{
    sparse_memory_present_with_active_regions(MAX_NUMNODES);
    sparse_init();

    node_clear_state(0, N_MEMORY);
    if (N_MEMORY != N_NORMAL_MEMORY)
        node_clear_state(0, N_NORMAL_MEMORY);

    zone_sizes_init();
}

O kernel de 64 bits não possui tabela de páginas do kernel mestre? Se for verdade, basta acessar a memória do kernel apenas por mapeamento direto?

linux kernel
  • 1 1 respostas
  • 3110 Views

1 respostas

  • Voted
  1. Best Answer
    Johan Myréen
    2017-12-21T12:22:47+08:002017-12-21T12:22:47+08:00

    Respostas às perguntas 1 e 2: não, uma vez habilitada a paginação, as instruções da CPU usam apenas endereços virtuais, que são traduzidos para endereços físicos usando a MMU antes de ler ou escrever na RAM. As macros __vae __panão acessam a memória, apenas convertem endereços entre os espaços de endereço. Em uma máquina de 32 bits, __vaapenas adiciona 0xc0000000ao endereço físico fornecido como argumento, porque o mapeamento foi configurado para que o endereço físico Nesteja no endereço virtual N+0xc0000000.

    Os endereços que você deseja acessar com a CPU devem ter um mapeamento; você não pode ignorar o MMU. Portanto, um mapeamento que gerencia apenas 128 MB não é suficiente.

    • 3

relate perguntas

  • astyle não altera a formatação do arquivo de origem

  • Como os desenvolvedores do kernel Linux lidam com seu trabalho com milhões de linhas de código? É um método? [fechado]

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

  • Acesse o sistema de arquivos como usuário root

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve