Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void *CreatePageDirectory (){
- int i;
- unsigned long destAddressVA; //virtual.
- //alocaremos uma página apenas, pois tem 4KB.
- destAddressVA = (unsigned long) newPage ();
- if ( destAddressVA == 0 )
- {
- return NULL;
- }
- //o endereço do diretório de páginas clone.
- //precisamos uar o endereço virtual para manipularmos os dados,
- //pois estamos no esquema de memória do kernel base.
- unsigned long *dest = (unsigned long *) destAddressVA;
- //o endereço do diretório de páginas do kernel.
- unsigned long *src = (unsigned long *) gKernelPageDirectoryAddress;
- //Nesse momento já temos o endereço da origem e do destino.
- //O endereço lógico e físico do diretório de páginas do kernel
- //são iguais, porém os endereços físico e virtual do diretório
- //de páginas clone são diferentes.
- //#importante: A rotina de cópia do conteúdo entre os buffers precisa usar
- //endereços lógicos, pois estamos usando o kernel base e sua
- //configuração de memória.
- //
- // ## Copiar ##
- //
- // Agora vamos apenas copiar o diretório de páginas do kernel
- // para o diretório de páginas clone.
- // São 1024 dwords.
- // Criamos um diretório vazio com páginas não presentes.
- // 0010 em binário.
- for ( i=0; i < 1024; i++ )
- {
- dest[i] = (unsigned long) src[i];
- };
- return (void *) destAddressVA;
- };
Add Comment
Please, Sign In to add comment