Как 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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