Re: Пеpехват вызовов фyнкций на x86

From
Gennady Mayko ()
To
Arthur Vartanov
Date
2002-10-13T11:27Z
Area
SU.WINDOWS.NT.PROG
From: "Gennady Mayko" <gennady.mayko@broadcom.com>

Добрый день!

 AV> Hello, Gennady!
 AV> You wrote to Konstantin Mashukov on Thu, 10 Oct 2002 06:22:24 +0000
 AV> (UTC):


 AV> А как насчет команд сопроцессора (fst, fld или как их там)? Есть они на
 AV> всех процессорах начиная с 486, и пересылают сразу по 8 байтов.
--
Да, это так, с их помощью можно записать в/прочитать из памяти до 8 байт за
одну команду. Однако, это не факт, что эта запись, с точки зрения доступа к
памяти, будет атомарной. Она по прежнему может быть разбита на несколько
элементарных операций записи.

Все процессоры, начиная с x386, с точки зрения выполняющейся программы,
гарантируют атомарную запись в память только для байта; выровненного по
границе 16-бит слова; выровненного по границе 32-бит двойного слова плюс еще
пару вариантов для семейства P6 (в частности, выровненого по границе 64-бит
quadword). Кроме того, можно указать перед некоторыми командами префикс LOCK,
который так же гарантирует атомарное обращение к памяти. Кроме того, есть
команда XCHG, которая является атомарной даже без префикса LOCK. И есть еще
ситуации, связанные с атомарным обновлением системных данных (TSS, сегментных
регистров, page directory, page table и обработки прерывания).

Команды FST/FIST/FLD/FILD и их разновидности не гарантируют выравнивание своих
операндов в памяти и их нельзя использовать с префиксом LOCK, следовательно
они не соответствуют требованиям к атомарным операциям.


 AV> Sincerely, Arthur.  E-mail: arvar@penza.net

С уважением,
Геннадий Майко.

--- ifmail v.2.15dev5
 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)