Купить
 
 
Жанр: Учеба

Аппаратурная реализация персональных компьютеров

страница №6

егистров на 136 слов, а арифметическое
устройство с плавающей запятой - 32 32-разрядных регистра, исполнительные
блоки общего назначения и аппаратные умножители.
Помимо SUN выпуском аналогичной продукции занимаются
еще несколько фирм, производящие SUN-совместимую продукцию.
Это оказалось возможным благодаря тому, что SPARC-архитектура
открыта для разработчиков. SUN опубликовала и постоянно обновляет
все необходимые для этого спецификации. Наиболее заметная из
этих фирм - Ross Technology со своими процессорами hyperSPARC.
В 1997 г. она выпустила изделия, работающие на частотах 133, 166 и
180 МГц. По оценкам экспертов по производительности hyperSPARC133
не уступает 233-мегагерцевому процессору Alphaа фирмы DEC.
Необходимо заметить, что hyperSPARC допускают простой upgrade
путем замены процессора в панельке (как, например, Pentium100
на Pentium-166). Важность этого определяется тем, что у RISCпроцессоров
близко нет такой аппаратной и программной совместимости,
которая наблюдается у процессоров 80х86.

1.5. Микропроцессоры фирмы AMD

Микропроцессор К5.
В 1996 г. фирмой AMD был
предложен к реализации первый скалярный процессор на основе одного
исполнительного конвейера К5 (5*86), использующий 64 - разрядную
шину данных (ШД) и работающий на частоте 100 МГц. МП
имеет практически самое высокое быстродействие при обработке команд
целочисленной арифметики. Однако из-за несовершенного конструктивно-технологического
исполнения арифметического
сопроцессора обработка команд с плавающей точкой, имеющих место
во всех программах трехмерной графики, операциях с
многоканальным звуком и т.д., он по производительности
значительно уступает аналогичным микропроцессорам Intel. Вторым
недостатком МП было то, что используемая в нем технология не дает
возможности увеличения тактовой частоты, что сводило практически
на нет все попытки дальнейшего совершенствования этой модели
МП.
После этого AMD приобрела фирму NexGen, еще одного независимого
разработчика x86 процессоров, который обладал передовой
на то время технологией и в небольших количествах выпускал кристаллы
без арифметического сопроцессора. Используя эти наработки,
AMD спроектировала новое поколение своих CPU - K6.

Микропроцессор К6-2
В 1998 г. фирма AMD приступила к
выпуску процессораК6-2, в котором использованы ряд технических
новшеств (разделены блоки диспетчеризации потока команд и данных,
использовано преобразование 80 * 86 команд в набор RISC - подобных
внутренних микроопераций, добавлены к стандартному набору
команд инструкции мультимедийной (ММХ) архитектуры и т.д.).
Процессоры выпускаются на тактовые частоты 300, ..., 500 МГц, выполнены
на кристалле площадью 81 мм2 по 0,25 - микронной технологии,
имеют 9,3 млн. транзисторов и рассчитаны на работу с 100
МГц шиной. Процессор имеет встроенные кэш-памяти L1 и L2, причем
кэш-память L1 имеет объем 64 Кб (по 32 Кб на кэш-команд и
кэш-данных), а кэш-память L2 встроена в процессор, имеет объем
256 Кб и работает на частоте процессора.
Напряжение питания ядра процессора - 2,2 В.
Для повышения производительность обработки команд с плавающей
точкой в К6-2 AMD предложила использовать не сопроцессор,
а специально спроектированный набор SIMD-инструкций
3DNow!, выполнение которых возлагалось на основной процессор.
Для этого к обычному ядру K6 добавился еще один блок операций с
числами одинарной точности с плавающей точкой. Благодаря тому,
что он мог выполнять однотипные вычисления с четырьмя парами
операндов одновременно, на специально оптимизированных под
3DNow! приложениях K6-2 показывал неплохую производительность.
Использование указанной технологии позволяло переложить задачу
обработки команд с плавающей точкой на основной процессор,
имеющего большее быстродействие, чем быстродействие арифметического
сопроцессора. Однако высокая производительность этого МП
проявлялась только в том случае, когда обрабатываемые программы
выполнялись с учетом технологии 3DNow!.

Микропроцессор К6-3
Для повышения производительности
с использованием новой технологии 3Dnow! AMD добавила интегрированный
в ядро кэш-память второго уровня L2, работающую на
частоте процессора. Новый процессор К6-3 (разъем Socket 7) получил
кодовое название Sharptooth, выполнен по 0,25 мкм технологии и
имеет 21,3 млн. транзисторов. Он работает на частотах 350,..., 475
МГц, что позволяет обеспечить работу системной шины на частоте до
100 МГц. Кэш-памяти L1 имеет объем 64 Кб (по 32 Кб на кэш-команд
и кэш-данных), а кэш-память L2 - 256 Кб. Кроме того, в системе предусматривается
использование кэш-памяти третьего уровня L3, позволяющая
несколько увеличить производительность процессора. Напряжение
питания процессора 2,3-2,5 В.

Система команд процессора дополнена 21 SIMD-командами
3Dnow! для обработки чисел с плавающей точкой. Арифметический
сопроцессор имеет два конвейера, оперирующими с двумя парами
вещественных чисел одинарной точности.
Ядро процессора отличается от предшествующего наличием
функции пакетной записи в память. Суть такой записи заключается в
том, что данные по шине передаются по мере их накопления 8-ми
байтными пакетами.

Микропроцессор К7 "Athlon"
C 1999 г. АMD начала выпуск
0,25 мкм (а позже и 0,18 мкм) RISC - процессора К7, который имеет
площадь кристалла менее 100 кв. мм., рассчитан на работу при тактовых
частотах 500, ..., 650 МГц и имеет наибольшую производительность
при обработке команд с плавающей точкой. Процессор содержит
22 млн. транзисторов, поддерживает системную шину Alpha EV6,
кэш-память L1 имеет объем 128 Кб (по 64 Кб на кэш-команд и кэшданных),
а кэш-память L2 - от 512 Кб до 8 Мб, которая может работать
либо на полной тактовой частоте процессора, либо на половинной,
либо на одной третьей частоте.
Набор SIMD-инструкций расширен до 45 команд. Напряжение
питания ядра процессора - 1,6 В.
Для установки процессора используется специальный разъем Slot
A, который выглядит также как и Slot 1, но шинные протоколы и назначения
контактов у Intel Pentium III и AMD Athlon совершенно различны.
Более того, различно даже число задействованных сигналов -
Athlon использует примерно половину из 242 контактов, в то время
как Pentium III всего четверть.
Отличительной особенностью процессора является системная
шина EV6, которая хотя и работает на частоте 100 МГц, но передача
данных по ней, в отличие от GTL+ фирмы Intel, ведется на обоих
фронтах сигнала. Поэтому фактическая частота передачи данных составляет
200 МГц. Если учесть тот факт, что ширина шины EV6 - 72
бита, 8 из которых используется под ESS (под проверку контрольной
суммы), то скорость передачи данных составляет:
V д = 64 бита ? 200 МГц = 1,6 Гбайт/с.
Заметим, что пропускная способность GTL+, работающей на
100 МГц частоте, в два раза меньше и составляет около 800 Мбайт/с.
Таким образом, EV6 более перспективна. При этом планируется, что
частота EV6 должна достигнуть значения 133 (266), а затем и 200
(400) МГц.
Еще одна интересная особенность EV6 заключается в
поддержке многопроцессорных систем. В отличие от GTL+, EV6
обеспечивает соединение точка-точка между процессорами, что
позволяет выделить всю пропускную способность шины для каждого
процессора. Теоретически таким образом может подключаться до 14
процессоров, что и определяет перспективность EV6 при
использовании в многопроцессорных системах.
Особенности работы процессора заключаются в следующем.
Перед началом работы над параллельными потоками инструкций,
процессор должен их откуда-то получить. Для этого в AMD
Athlon применяется дешифратор команд (декодер), который преобразует
поступающий на вход процессора код. Дешифратор в AMD
Athlon может раскладывать на RISC-составляющие до трех входящих
CISC-команд одновременно.
Перед тем, как попасть в соответствующий вычислительный
блок, поступающий поток RISC-команд задерживается в буфере
(Instruction Control Unit), который рассчитан на 72 инструкции.
Для эффективной работы с программами таблица предсказания
переходов имеет размер 2048 ячеек, в которых сохраняются предыдущие
результаты выполнения логических операций. На основании
этих данных процессор прогнозирует их результаты при их
повторном выполнении. Благодаря этому Athlon правильно
предсказывает результаты ветвлений где-то в 95% случаев.
Блок целочисленных вычислений имеет три конвейера для исполнения
целочисленных команд (Integer Execution Unit). Это
позволяет процессору исполнять три целочисленные инструкции
одновременно. Оптимальной глубиной конвейера для процессоров с
современными скоростями считается 9 стадий. Увеличение этого
числа приводит к ускорению процесса обработки команд, так как
скорость работы конвейера определяется работой самой медленной
его стадии. Однако, в случае слишком большого конвейера при
ошибках в предсказании переходов оказывается, что большая часть
работы по исполнению команд, уже вошедших на конвейер
выполнена напрасно. Его приходится очищать и начинать процесс
заново. Потому в Athlon глубина целочисленных конвейеров
составляет 10 стадий, что близко к оптимуму.

Блок FPU, предназначенный для обработки вещественных чисел,
имеет существенные отличия от предыдущих процессоров AMD,
которые в K6, K6-2 и K6-3 были неконвейеризированными. Это приводило
к тому, что хотя многие операции с плавающей точкой в FPU
от AMD выполнялись за малое число тактов, но общая производительность
была низкой, так как следующая вещественная операция не
могла начать выполняться до завершения предыдущей.
В Athlon арифметический сопроцессор имеет конвейер
глубиной 15 стадий и объединяет в себе три блока: один для
выполнения простых операций типа сложения, второй - для сложных
операций типа умножения и третий - для операций с данными.
Благодаря такому разделению работы Athlon может выполнять
одновременно по две вещественночисленные инструкции.
Некоторые изменения произошли с выполнением MMXопераций.
В процессоре добавлено несколько инструкций по нахождению
среднего, максимума и минимума и пересылкам данных. Если
обратить внимание на архитектурные особенности, то в Athlon имеется
по два блока MMX, потому в нем может выполняться одновременно
пара MMX - инструкций.
Блок 3DNow! в Athlon подвергся также сильным изменениям.
Хотя его архитектура и осталась неизменной - два конвейера обрабатывают
инструкции, работающие с 64-битными регистрами, в которых
лежат пары вещественных чисел одинарной точности, набор команд
расширен до 45 команд. Новые операции должны не только позволить
увеличить скорость обработки данных, но и позволить задействовать
технологию 3DNow! в таких областях, как распознавание
звука и видео, а также при работе в глобальной сети. Кроме этого, были
добавлены и инструкции для работы с данными, находящимися в
кэш-памяти.

1.6. Микропроцессоры фирмы Cyrix

Микропроцессор MI
В отличие от фирмы AMD
фирма Cyrix (ныне National Semiconductors) приступила к созданию
32 - разрядных высокопроизводительных МП в конце 1995 г.
Разработанный ею процессор МI класса 6*86 выполнен на основе 1,0
мкм, а позже 0,6 мкм, технологии. На частоте 133 МГц в ряде случаев
он превосходит Pentium I на 166 МГц. Это обеспечено некоторыми
функциональными особенностями, которые отличают его от МП
Pentium. Первой особенностью является снижение ограничений на типы
команд, одновременно выполняемых на обоих конвейерах. Если в
Pentium I во многих случаях второй конвейер вынужден простаивать,
то в М1 второй конвейер выполняет очередную команду.
Другой особенностью М1 является наличие средства для осуществления
неупорядоченного выполнения команд. Это означает, что в
ходе выполнения программы он может откладывать выполнение команды
на втором конвейере, если она в данный момент попадает под
упомянутые ограничения. Вместо нее на конвейер запускается следующая
команда, а пропущенная выполняется тогда, когда ограничения
на ее выполнение снимается. Естественно, процессор снабжен
средствами контроля за результатами выполнения программы, поэтому
пользователю невозможно определить, что внутри в какие-то моменты
времени нарушается исходная последовательность команд.
Вместо этого можно заметить, что информация в регистрах и в
памяти обновляется так же и в той же последовательности, что и в
процессоре Pentium I, в котором отсутствуют средства
неупорядоченного выполнения команд.
Еще одной особенностью является то, что если на конвейере находятся
команды, данные от одной из которых заносятся в память или
регистр с последующим чтением оттуда второй командой с этого или
другого конвейера, то передача их от одной к другой может быть произведена
параллельно занесению. При этом операция чтения может
быть исключена. Подобный механизм называют "продвижением данных"
(Data Forwarding) или "обходом чтения" (Memory Read
Bypassing). Включение этой функции, по словам специалистов Cyrix,
обеспечивает основной вклад в прирост производительности 6х86 в
сравнении с процессором Pentium.
Для прогнозирования ветвлений (Branch Prediction)
процессор имеет буфер адресов перехода (Branch Target Buffer) на 256
позиций. В нем хранится информация о результатах 256 последних
ветвлений. Эта информация обрабатывается в соответствии с алгоритмом
и на основании результата обработки делается
предположение о направлении ветвления.
Кроме того, МП имеет стек возвратов (Return Stack), отсутствующий
в процессорах Intel и AMD. Его функция заключается в
том, что процессор, встретив команду RET (или один из ее вариантов),
должен после этого выполнять переход на команду, адрес которой
находится на верхушке стека. Поскольку к моменту предвыборки
команд здесь могут находиться данные, не относящиеся к адресу возврата,
необходимо предусмотреть запоминание этого адреса где-то
помимо основного стека. МП запоминает адрес инструкции, идущей
после команды вызова подпрограммы, и в основном стеке (подобно
тому, как это делается во всех остальных процессорах), и в стеке возврата.

После обнаружения в потоке команд инструкции возврата устройство
предвыборки извлекает адрес из стека возврата и начинает
дальнейшую выборку команд с него. Когда же исполнительное устройство
дойдет до выполнения инструкции возврата, в очереди команд
будет стоять правильно выбранная следующая, команда.
Маркировка процессоров фирмы Cyrix осуществляется с учетом
его Р-рейтинга. Так, например, известны процессоры Сх6х86-Р166+ и
Сх6х86-Р200+. Символ "+" означает, что процессор показывает производительность
даже чуть более высокую, чем та, что стоит у него в
рейтинге. Заметим, что реально МП работают на частотах, более низких,
чем указанные в рейтинге, например, Сх6х86-Р120+ работает на
частоте 100, а Сх6х86-Р200 - 150 МГц. Поэтому при установке процессора
необходимо устанавливать именно то значение тактовой частоты,
при котором он должен функционировать. А не его Р-рейтинг.

Микропроцессор M II
В начале 1997 г. фирма Cyrix перешла
к выпуску более совершенного мультимедийного МП, получившего
название МII. Тактовая частота этого процессора будет доведена
до 450 МГц, что позволит использовать 100 МГц системную
шину. Этот процессор выполняется по 0,30 мкм (в дальнейшем по
0,25 мкм) технологии с архитектурой 6*86, имеет объем кэш - памяти
L1 64 Кбайт, в нем реализована архитектура ММХ.
Основное назначение процессора - использование в серверах,
настольных системах и т.д. Сам процессор не поддерживает набор
мультимедийных команд фирмы Intel и не предназначен для самостоятельной
обработки мультимедийных данных. Но он содержит
большое число функциональных блоков, ориентированных на поддержку
выполнения этих функций дополнительными платами.
В функции МП входят динамическое предсказание переходов,
внеочередное исполнение команд, группирование данных для записи
в память (основную или кэш - память второго уровня), страницы переменного
размера (VPS). По производительности он находится гдето
посередине между процессорами Celeron ** и Pentium II. Слабым
звеном в нем является арифметический сопроцессор.

Микропроцессор
MediaGX
С 1998 г. фирмой освоен новый процессор
MediaGX, в котором совмещены сразу четыре
устройства: собственно центральный процессор, блоки управления
графикой, звуком и памятью. То есть на одном кристалле размещена
вся система обработки информации, при которой нет необходимости
дополнительной установки в компьютере ни звуковой карты, ни видеоакселератора.

При этом в основу разработок заложен основной принцип - повышение
производительности микропроцессоров за счет повышения
тактовой частоты.
Однако, как показывают результаты эксплуатации МП, простое
наращивание тактовой частоты неоднозначно влияет на увеличение
его производительности. В первую очередь это связано с большим
разбросом во времени выполнения различных программ (приложений),
связанных с разницей в производительности их различных компонентов.
Так, например, разброс высоких и низких значений производительности
относительно среднего значения процессоров 80486
и Pentium Р5 составляет ориентировочно от 10 % до 20 % (рис. 7).
Оценка производительности здесь приведена по индексу iCOMP
(Intel Comparative Microprocessor Perfomance), который учитывает четыре
главных аспекта производительности процессора при 32- и 16 -
разрядных операциях: с целыми числами, числами с плавающей точкой,
графикой и видео.

Рис. 7. Разброс производительности процессоров
486DX4-100 и Pentium Р5

Параллельно увеличению тактовой частоты фирмами активно
проводятся работы по разработке новых модификаций МП, среди которых
наиболее быстродействующими являются процессоры с сокращенным
набором команд (RISC - процессоры), имеющие более простые
системы команд. Однако путь, связанный с упрощением системы
команд, не всегда оправдан, так как при этом возникает много
новых проблем с программным обеспечением. Поэтому ряд фирм
приступили к выпуску МП, программно - совместимых с процессорами
Intel, являющимися наиболее удачной разработкой среди этого
класса устройств.


2. Характеристики микропроцессоров и их анализ

Главной характеристикой любого микропроцессора общетехнического
применения является производительность:
- при использовании кэш-памяти первого уровня (L1),
- при обработке целочисленных величин (чисел с фиксированной
точкой),
- при обработке вещественных чисел (чисел с плавающей точкой),

- при чтении и записи информации в память,
- при обработке команд трехмерной графики.
Для определения указанных характеристик и сравнительного
анализа при тестировании использовалось одно и тоже оборудование,
что давало возможность более объективной оценки быстродействию
используемых при тестировании процессоров и ПК на их основе.

Производительность при использовании кэш-памяти L1 определяет
быстродействие процессоров и ПК при обработке команд и обмене
данными между процессором и памятью при наличии кэшпамяти
L1.
На рис. 8 для примера приведены кривые, отображающие производительность
основного процессора (CPU) и арифметического сопроцессора
(FPU). Для испытаний был выбран кристалл процессора
Pentium II с тактовой частотой 450 МГц, работающий с 100 МГц системной
шиной. В процессе тестирования определялись:
Рис. 8. Производительность CPU и FPU при обработке команд и обмене
информацией с памятью

- производительность основного процессора и арифметического
сопроцессора при обработке команд, исследование которых проводилось
на синтетических тестах CPUМark 99 и FPU WinМark соответственно,

- производительность CPU и FPU при обмене информацией с
системной памятью (CPU Memory Мark и FPU Memory Мark
соответственно).
Очевидно, что введение кэш-памяти L1 повышает на несколько
порядков производительность CPU и FPU по сравнению с ее отсутствием.

Производительность при обработке целочисленных величин.
Обработка целочисленных величин свойственна в большей степени
офисным приложениям. Измерение производительности процессора
может быть проведено тестирующими пакетами Winstone 99 и CPUMark
99. На рис. 9 приведены кривые производительности для трех
групп процессоров: - первая группа: 400 МГц процессоры AMD K62,
Celeron, Pentium II и AMD K6-3,
- вторая группа: 450 МГц процессоры Pentium III и Celeron,
- третья группа: 600 МГц процессоры Pentium III и AMD Athlon.

Рис. 9. Производительность процессоров
при целочисленных вычислениях

Сравнительный анализ гистограмм, проведенный для пар процессоров
Pentium II 400 МГц и Pentium III 450 МГц, Celeron 400 МГц
и Celeron 450 МГц, Pentium III 600 МГц и Athlon 600 МГц показывает,
что чем выше тактовая частота процессора, тем он производительнее.
Введение быстродействующей кэш-памяти L2, как видно из верхней
кривой (тест CPUMark 99) для 400 МГц процессоров AMD K6-2 и K63,
приводит к заметному росту производительности (для этих процессоров
почти на 50%).
Производительность при обработке вещественных чисел может
быть оценена тестирующей программой FPU WinMark, которая осуществляет
тестирование арифметического сопроцессора при обработке
команд с плавающей точкой.
Гистограммы для ранее выбранной группы процессоров приведены
на рис. 10.

Рис. 10. Гистограммы производительности FPU
при обработке вещественных чисел

Процессоры AMD K6-2 и K6-3 имеют наименьшую производительность,
которая обусловлена использованием в них неконвейерных
арифметических сопроцессоров. Введение в его архитектуру кэшпамяти
третьего уровня практически не влияет на повышение производительности.
В тоже время конвейеризация вычислений, используемая
в процессорах Intel Pentium и Celeron, ведет к увеличению производительности
на 50 - 70%.

В одинаковых по структуре построения (за исключением размера
кэш-памяти второго уровня) процессорах Celeron 400 МГц и Pentium
II 400 МГц также наблюдаются практически одинаковые производительности,
что еще раз подтверждает незначительное влияние быстродействующей
кэш-памяти на производительность при обработке вещественных
чисел.
Производительность при чтении и записи информации из памяти.
Кривые производительности чтения информации из памяти для
450 МГц процессоров AMD K6-2, AMD K6-3, Celeron, Pentium II и
Pentium III приведены на рис. 11. Из них видно, что производительность
чтения во многом определяется размером считываемого блока.
Для всех процессоров на начальном участке производительность чтения
информации из памяти практически одинаковы и слабо зависят от
размера блока информации.

Рис. 11. Производительность при чтении из памяти

Однако при превышении размера блока объема кэш-памяти производительность
при чтении резко снижается, причем это снижение
раньше проявляется у процессоров Intel, у которых объемы
первичных кэш-памятей команд и данных вдвое меньше, чем у AMD.
Второе падение скоростей чтения приходится при превышении
размеров вводимых блоков объемов вторичной кэш-памяти. И чем
больше объем вторичной кэш-памяти, тем ниже производительность
при чтении информации. Сказанное свидетельствует о демпфирующем
влиянии вторичной кэш-памяти на быстродействие процессора.
Поэтому для устранения негативного влияния вторичной кэшпамяти
на производительность обмена информацией разработчики
AMD ввели кэш-память третьего уровня, расположив ее на системной
плате вне процессора. По мнению разработчиков это должно повысить
производительность при чтении пакетов информации больших
объемов.
Анализ кривых скоростей записи информации в память этих же
процессорах показывает, что их поведение практически аналогично
поведению кривых, представленных на рис. 11. Таким образом, очевидно
влияние использования кэш-памятей обеих уровней на производительность
обмена информацией процессоров с памятью. Из сказанного
можно сделать следующие выводы:
- объемы передаваемых пакетов информации между процессором
и памятью не должны превышать размеров соответствующих кэшпамятей
команд и/или данных,
- объемы вторичной кэш-памяти оказывают демпфирующее
влияние на производительность обмена информацией между процессором
и памятью, при этом чем больше ее объемы, тем ниже производительность
обмена информацией между процессором и памятью.

Производительность при обработке команд трехмерной графики.
Обработка команд трехмерной графики характеризуется наибольшим
использованием аппаратных возможностей процессора. Вся вычислительная
мощность при этом мобилизована на выполнение команд 3Dпрограммы,
формируя трехмерные сцены воспроизводимого изображения.
В обработке команд принимают участие основной процессор,
проводящий предварительные вычисления (геометрические расчеты
объектов), арифметический сопроцессор, который осуществляет все
основные расчеты формы, размеров, цвета объектов, их расположения,
производительность и направления перемещения, освещенности
и т.д., и процессор(ы) вывода информации на экран монитора (дисплея),
формирующие сменяющиеся с определенной частотой страницы
изображения.
Для тестирования процессора с целью определения производительность
обработке команд трехмерной графики используется тестирующая
программа CPU 3Dmark, с помощью которой можно определить
пиковую производительность процессора при обработке 3Dкоманд.
На рис. 12 приведены гистограммы, показывающие производительности
процессоров Intel и AMD, при этом процессоры AMD
подверглись тестированию с включенным и выключенным блоком
3DNow!

Рис. 12. Гистограммы производительности при
обработке команд трехмерной графики

Из гистограмм можно сделать следующие выводы:
- производительность возрастает с ростом тактовой частоты процессора
и размера вторичной кэш-памяти;
- использование блока 3DNow! позволяет увеличить производительность
процессоров К6-2(3) почти в 2,5 раза. Это увеличение осуществляется
за счет применения SIMD-инструкций, которые обрабатываются
основным процессором, а не арифметическим сопроцессором.


Проводя сравнительный анализ производительности необходимо
отметить, что для интенсивных вычислений с числами с плавающей

Список страниц

Закладка в соц.сетях

Купить

☏ Заказ рекламы: +3805044-68-872

© Ассоциация электронных библиотек Украины

☝ Все материалы сайта (включая статьи, изображения, рекламные объявления и пр.) предназначены только для предварительного ознакомления. Все права на публикации, представленные на сайте принадлежат их законным владельцам. Просим Вас не сохранять копии информации.