Как Linux копирует регистры?Linux

Anonymous
Как Linux копирует регистры?

Сообщение Anonymous »

Недавно я узнал, что fork применяет COW (копирование при записи) даже к регистрам.
Для проверки я поигрался с простым игрушечным кейсом:

Код: Выделить всё

(gdb) info inferiors
Num  Description       Connection           Executable
* 1    process 59316     1 (native)           /home/Drew/mycode/a.out
2    process 59386     1 (native)           /home/Drew/mycode/a.out
(gdb) print( $rdi )
$1 = 18874385
(gdb) set $rdi=42
(gdb) print( $rdi )
$2 = 42
(gdb) inferior 2
[Switching to inferior 2 [process 59386] (/home/Drew/mycode/a.out)]
[Switching to thread 2.1 (process 59386)]
#0  0x00002aaaab090291 in fork () from /lib64/libc.so.6
(gdb) print( $rdi )
$3 = 18874385
Как вы видите, изменение rdi в родительском процессе не мешает дочернему процессу.
Интересно, как это делается? предоставляет ли современный процессор несколько одинаковых регистров исключительно для многопроцессорной обработки?

Подробнее здесь: https://stackoverflow.com/questions/792 ... -registers

Вернуться в «Linux»