Himik писал(а):
Функция clone_directory не просто копирует таблицы страниц, но и содержимое физической памяти. Если это не так, либо у maisvendoo вместо этого пустая заглушка, то работать не будет.
Реализовано копирование физической памяти, да, происходит переключение в режим с сегментной адресацией, потом копирование страниц, потом возврат обратно в страничную адресацию
Код:
/*------------------------------------------------------------------------------
// Copy data from page (in physical memory!)
//----------------------------------------------------------------------------*/
.global copy_page_physical
copy_page_physical:
/* Push EBX and EFLAGS */
push %ebx
pushf
/* Switch off all interrupts */
cli
/* Get parametrs from stack */
mov 12(%esp), %ebx
mov 16(%esp), %ecx
/* Switch off paging memory */
mov %cr0, %edx
and $0x7FFFFFFF, %edx
mov %edx, %cr0
mov $1024, %edx
/* Copy page data */
loop:
mov (%ebx), %eax
mov %eax, (%ecx)
add $4, %ebx
add $4, %ecx
dec %edx
jnz loop
/* Switch on paging memory */
mov %cr0, %edx
or $0x80000000, %edx
mov %edx, %cr0
/* Pop EFLAGS and EBX */
popf
pop %ebx
ret