АТОМЫ
Если абстрагироваться от вопросов синхронизации, то обмен данными между потоками одного процесса не представляет никакой сложности — имея общее адресное пространство и общие открытые файлы, потоки получают беспрепятственный доступ к данным друг друга.
Другое дело — обмен данными потоков, выполняющихся в рамках разных процессов.
Для защиты процессов друг от друга ОС возводит мощные изолирующие преграды, которые не только защищают процессы, но и не позволяют им передавать друг другу данные.
Потоки разных процессов работают в разных адресных пространствах. Однако операционная система имеет доступ ко всем областям памяти, поэтому она может играть роль посредника в информационном обмене прикладных потоков.
При возникновении необходимости в обмене данными поток обращается с запросом к ОС. По этому запросу ОС, пользуясь своими привилегиями, создает различные системные средства связи, такие, например, как каналы или очереди сообщений.
Эти средства, так же как и рассмотренные выше средства синхронизации процессов, относятся к классу средств межпроцессного взаимодействия, то есть IPC (Inter Process Communications).
Тот факт, что механизмы IPC работают на уровне операционной системы, положительно сказывается на скорости и надежности программ и программных комплексов, построенных с их использованием. Эффективность приложений соответственно возрастает.
Таким образом, IPC становится необходим в том случае, если поток одного процесса должен передать данные потоку другого процесса.
Интерфейс Win32 API предоставляет приложениям возможность хранения строк в структурах, известных под названием таблиц атомов.
После того как программа сохранит строку в таблице атомов, она может обратиться к этой строке, используя атом.
Aтом (atom) представляет собой уникальное 16-разрядное значение, которое связано со строковой константой.
Использование атома в качестве ссылки на строку сродни применению дескриптора памяти для обращения к блоку общих глобальных данных.
Подобие имеющейся у приложения возможности передавать дескриптор памяти интерфейсу Win32 API с целью получения указателя на содержимое блока данных (с помощью функции GlobalLock()), приложение может также использовать средства Win32 API для получения значения строки, связанной с атомом.
Значение строки, которое представляет атом, известно под названием имени атома (atom name). Применение атомов:
1. Атомы применяются в приложениях ради экономии памяти. Сохранение неоднократно встречающихся строк в таблице атомов приложения позволяет экономить память, поскольку в данном случае значение строки сохраняется только один раз.
Прочие экземпляры строки занимают лишь по 2 байта памяти, которая требуется для атома, вместо целого ряда байтов, необходимых для хранения копии конкретной строки.
Еще одна причина хранения строк в виде атомов состоит в том, что таблицы атомов повышают общую производительность при сравнении строк, поскольку вместо сравнения каждого байта обеих строк в данном случае сравниваются лишь 16-разрядные атомы.
2. Кроме того, атомы имеют важное значение и для обмена данными между программами.
Таблица атомов, которая является глобальной для всех процессов, называется глобальной таблицей атомов (global atom table) и используется для обмена данными между процессами. Применение атомов для обмена данными между приложениями является одним из основополагающих принципов динамического обмена данными (DDE).
3. Атомы также широко используются для хранения строк переменной длины в дескрипторах объектов OLE (технологии встраивания и связывания объектов).
В результате применения атомов в дескрипторах данных OLE получаются более компактные структуры фиксированного размера с существенно более простым методом обмена.
Работа с таблицами атомов
Существует два вида таблиц атомов:
1. Локальные
2. Глобальные.
1. У каждого процесса имеется собственная таблица атомов. Значение локального атома является уникальным для процесса, в котором оно определено.
С другой стороны, доступ к атомам, хранящимся в глобальной таблице атомов, может выполняться из любого приложения. Что касается любого конкретного глобального атома, то по заданному имени атома интерфейс Win32 API вернет каждому приложению один и тот же атом.
Функция AddAtom() сохраняет строки в локальной таблице атомов. Имена атомов сохраняются в том же регистре, в котором они вводились.
Всякий раз когда функция AddAtom() вызывается для уже существующего атома, Windows увеличивает счетчик внутренних ссылок на этот атом.
Синтаксис функции AddAtom() следующий
ATOM AddAtom (LPCTSTR lpszStringToStore )
Параметры:
lpszStringToStore – указатель на сохраняемую строку, которая завершается нулевым символом. Максимальная длина строки составляет 255 символов. Если первым символом строки оказывается знак #, а после него следуют цифры, представляющие целое число, меньшее константы MAXINATOM, тогда возвращается целый атом.
Возвращаемое значение. При успешном выполнении – вновь созданный атом. Если указанная строка уже существует в таблице атомов, возвращается тот же самый атом, что и исходная строка; в противном случае – 0.
Для уменьшения счетчика ссылок на атом применяется функция DeteteAtom(). Когда число ссылок достигает нуля, атом из таблицы атомов удаляется. Синтаксис функции DeleteAtom() следующий
ATOM DeleteAtom (ATOM nAtom)
Параметры:
nAtom – атом, который удаляется из локальной таблице атомов. Целые атомы не могут быть удалены, хотя значение NULL возвращается всякий раз, когда они используются в качестве аргументов функции DeleteAtom().
Возвращаемое значение. При успешном выполнении – NULL, в противном случае – значение nAtom.
Функция FindAtom() осуществляет поиск атома, который соответствует заданной строке, в локальной таблице атомов.
Поиск выполняется без учета регистра. Синтаксис функции FindAtom() следующий
ATOM FindAtom (LPCTSTR lpszString )
Параметры:
lpszString – указатель на искомую строку, которая завершается нулевым символом. Если первым символом строки оказывается знак #, а после него следуют цифры, представляющие целое число, меньшее константы MAXINATOM, тогда возвращается синтезированный целочисленный атом с тем же значением.
Возвращаемое значение. При успешном выполнении – 16-разрядное значение локального атома, связанного с указанной строкой; в противном случае – NULL.
Для возврата имени атома из таблицы атомов применяется функция GetAtomName(). При этом имя атома возвращается в том же регистре, в котором оно первоначально сохранялось.
... массой, большей урана. В наши дни такие «трансурановые» элементы были получены искусственно. Вполне можно утверждать, что предела таблицы не существует и получение или нахождение других трансурановых элементов – это дело будущего. Таково, в общих чертах, учение об атомах химических элементов, созданное Дальтоном и определившее все дальнейшее развитие химии в XIX столетии. , с помощью ...
... орбиты; 3. Магнитным квантовым числом, характеризующим положение облаков в пространстве; 4. И спиновым квантовым числом, характеризующим веретенообразное движение электрона вокруг своей оси. [ 1, 4 ] Глава II. Строение атома Химики XIXв. Не в состоянии были ответить на вопрос, в чем суть различий между атомами разных элементов, например меди и йода. Лишь в период 1897-1911гг. ...
... этому времени: открытие радиоактивности, экспериментальное доказательство ядерной модели ядра, измерение отношения e / m для электрона, α-частицы и для так называемой H-частицы – ядра атома водорода, открытие искусственной радиоактивности и ядерных реакций, измерение зарядов атомных ядер и т. д. В настоящее время твердо установлено, что атомные ядра различных элементов состоят из двух частиц ...
... атома относительно атомного ядра. Вторым фактором является межорбитальное отталкивание зарядов электронов. Отсюда видно, что электронная конфигурация атома не оболочковая, как принято считать, а орбитально ярусная. На рисунке 3 показаны проекции электронных оболочек некоторых атомов. С точки зрения квантовой механики все проекции равноценны и показывают структуру электронных облаков атомов. А ...
0 комментариев