сборка 2 программы меняют друг друга

Интересно, почему, когда вы выполняете 2 программы сборки одновременно или они используют потоки, это будет выглядеть так.

//program1
mov eax,1
add eax,50

program 2
xor eax,eax
add eax,eax

Доступ к регистрам, в отличие от оперативной памяти, можно получить через любую программу, так как же эти программы не меняют друг друга? Я имею в виду, что программа 1 инструкция 1 может быть после инструкции 1 команда 2 Help!


person user3350951    schedule 25.02.2014    source источник
comment
Прочтите о переключении контекста.   -  person Michael    schedule 25.02.2014


Ответы (2)


Операционная система следит за тем, чтобы разные программы не связывались с регистрами друг друга. В противном случае любая многозадачность была бы невозможна.

Все программы (даже не написанные на ассемблере) постоянно меняют регистры. Именно так работает ЦП; нет никакого способа обойти это. Так как переключение задач может произойти в любой момент - между любыми двумя ассемблерными инструкциями - ОС следит за тем, чтобы при возвращении к программе управления прежние значения регистров восстанавливались. Регистры похожи на переменные — как бы вы себя чувствовали, если бы переменные в вашей программе непредсказуемо меняли свои значения в случайные моменты?

Внутри, когда ОС создает поток, она также выделяет кусок памяти, достаточно большой для хранения всех регистров в ЦП. Когда происходит переключение задачи и поток теряет управление, ОС сохраняет там все регистры. Когда поток восстанавливает управление, регистры восстанавливаются.

Различные программы (процессы) работают как разные потоки, насколько это касается ядра ОС. У каждого процесса есть хотя бы один поток — главный. Даже если вы запустите одну и ту же программу дважды, вы получите два разных процесса и два потока, по одному на процесс, и они не будут видеть или изменять регистры друг друга.

Для обмена информацией между потоками одного и того же процесса вы можете использовать память. Для обмена информацией между процессами вы можете использовать разделяемую память или другие методы межпроцессного взаимодействия. Все это предоставляется ОС; сам ЦП имеет довольно мало возможностей для многозадачности.

person Seva Alekseyev    schedule 04.03.2014

В многоядерных процессорах каждое ядро ​​имеет свой собственный набор регистров. Для многозадачности только с одним ядром все регистры будут сохранены перед переключением на другую задачу или поток.

Кортик

person Dirk Wolfgang Glomp    schedule 27.02.2014