Frame y dirección de memoria.

Iniciado por LaiaxanIV, 1 Abril 2016, 17:37 PM

0 Miembros y 1 Visitante están viendo este tema.

LaiaxanIV


  int f = alloc_frame();
  if(f == -1) return -1;
   copy_data((unsigned int)f<<12,0x00,4096);


alloc_frame() devuelve el numero de frame que está libre, sabiendo que el frame es de 4096B, necesito copiar eso a la pos 0x00 de memoria.


void copy_data(void *start, void *dest, int size)

Esta es la cabecera de copy_data.

Alguna idea de como lo puedo hacer? Me da un page_fault si pongo como dirección a copiar f*4096. Si pongo a mano la dirección me funciona perfectamente.

AlbertoBSD

Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

LaiaxanIV


allocate_DIR((struct task_struct*)child);
page_table_entry * PTc = get_PT((struct task_struct*)child);
page_table_entry * PTd = get_PT((struct task_struct*)dad);
 
 
for(i = 0; i < 256+8+20;++i){
    set_ss_pag(PTc, i,get_frame(PTd,i));
}
   
for( i = 264; i < 264+20; ++i){
    int f = alloc_frame(); //Agafem el frame lliure
    if(f == -1) return -5;
    set_ss_pag(PTd, (unsigned)i+500,f); //Assignem a la taula de pàgines del pare la traducció.
    set_ss_pag(PTc,(unsigned)i,f);          //Igualment per al fill.
   copy_data(((unsigned int)(get_frame(PTd,i)<<12)),((unsigned int)(f)<<12),4096);
  }


Así es el código, el error está en el segundo parametro que nos da page fault.