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.
El destino 0x0 no es escribible
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.