- Запис зі зворотним копіюванням. Інформація записується тільки в блок К-П. Модифікований блок К-П записується в основну пам'ять тільки у випадку його заміни. Для цього необхідно наявність біта модифікації блоку К-П. Якщо цей біт не встановлений, то зворотне копіювання скасовується.
Для мультіпроцесорних систем запис зі зворотним копіюванням більш краща, тому що операції запису виконуються зі швидкістю К-П і кілька записів в один блок вимагає тільки одного запису в пам'ять більш низького рівня і тим самим звільняється системна шина. Наскрізний запис має перевагу в тім, що основна пам'ять завжди має найбільш свіжу копію даних. Це дуже важливо і для ММПС і для організації вводу/виводу.
Недоліки методу зворотного запису:
- Усі змінені блоки повинні бути переписані в основну пам'ять перед тим, як інший пристрій зможе одержати до них доступ;
-У випадку відключення напруги, коли вміст К-П губиться, а вміст основної пам'яті зберігається, не можна визначити які місця в основній пам'яті містять застарілі дані.
Існує категорія застарілих даних, що з'являються в тому випадку, коли К-П використовується в системі з основною пам'яттю і двома-трьома задатчиками. Два пристрої копіюють розділ пам'яті і перший пристрій обновляє його першим, а коли другий пристрій робить запис своєї копії розділу, то руйнує всі зміни, зроблені першим пристроєм, тим самим порушується погодженість К-П.
Основними методами забезпечення погодженості (когерентності К-П є наступні методи.:
- очищення К-П. При цьому змінені дані записуються в основну пам'ять, а К-П очищається. Якщо всі К-П у системі очищаються перед операцією запису пристроями в пам'ять спільного користування, то можливість появи застарілих даних у будь-який К-П виключається. Головний недолік цього методу – наступні за очищенням звертання до К-П будуть кєш-промахами доти, поки К-П заповниться новими даними;
- апаратна прозорість. Усі записи проходять через єдину К-П;
- кожен запис обновляє основну пам'ять і всі К-П, що розділяють цю пам'ять;
- некэшуєма пам'ять – використання основної пам'яті для декількох пристроїв як некэшуємої, тобто всі звертання до основної пам'яті є кэш-промахами.
Продуктивність К-П визначається через середній час доступу до К-П рівного часу звертання при влученні + частка промахів х утрати.
У процесорах, використовуваних у мультіпроцесорних конфігураціях, застосовується більш складний протокол MESI (Modified, Exclusive, Shared, Invalid) організації К-П зі зворотним записом, що запобігає зайвим передачам даних між К-П і основною пам'яттю. Для ММПС, у яких пам'ять фізично розподілена між процесорними модулями, ідентичність даних у К-П (погодженість, когерентність) різних модулів підтримується за допомогою меж модульних пересилань. Порядок роботи абонентів на системній шині при використанні протоколу MESI полягає в наступному. Усі дії з використанням транзакцій шини мікропроцесора і зовнішніх пристроїв з копіями рядків як у К-П так і в основній пам'яті доступні для відстеження всіма мікропроцесорами. Це є наслідком того, що в кожен момент часу передає тільки один, а сприймають усі підключені до шини абоненти. Однак, якщо для об'єднання мікропроцесорів використовується не шина, а інший елемент комутаційного середовища, то для працездатності протоколу MESI необхідно дотримувати порядок виконання транзакций, щоб вони були доступні іншим мікропроцесорам.
Визначення протоколу – кожен рядок К-П мікропроцесора може знаходитися в одному з наступних станів:
М – рядок модифікований, тобто доступний по читанню/запису тільки в цьому мікропроцесорі, тому що змінений операцією запису в порівнянні з рядком в оперативній пам'яті;
Е – рядок монопольно - копійований (тобто доступний по читанню/запису як у цьому мікропроцесорі так і в основній пам'яті);
S – рядок множинно - копійований чи поділюваний ( доступний операціям читання/запису як у цьому мікропроцесорі, в оперативній пам'яті й у К-П інших мікропроцесорів, у яких міститься його копія);
I – рядок неможливий до використання (недоступний операціям читання/запису).
Прямолінійний підхід до забезпечення когерентності К-П у ММПС полягає в тому, що при кожнім невлученні в К-П у будь-якому процесорі ініціюється запит необхідного рядка з того блоку пам'яті, у якому цей рядок розміщений. Надалі цей блок стосовно рядка буде називатися резидентним. Запит передається через комутатор у модуль з резидентним для рядка блоком пам'яті, з якого необхідний рядок пересилається в модуль, у якому відбулося невлучення. При цьому, у кожнім модулі для кожного резидентного рядка ведеться список модулів, у К-П яких цей рядок розміщається. Рядок, розміщений у К-П більш ніж одного модуля, називається поділюваним. .
Алгоритм забезпечення когерентності.
При записі даних у К-П процесор припиняється доти, поки змінений рядок К-П пересилається в резидентну пам'ять модуля. Якщо цей рядок був поділюваним, він пересилається з резидентної пам'яті в усі, зазначені в списку модулів, модулі. Після одержання підтверджень про зміну всіх необхідних рядків мікропроцесор продовжує роботу. Даний алгоритм дає великі простої при операції запису в К-П.
Алгоритм DASH.
Кожен модуль має для кожного рядка, резидентного у модулі, список модулів, у К-П якого розміщені копії рядків.
Кожен рядок (у резидентном для нього модулі) має три можливих глобальних стани:
- « некєшуємий», якщо копія рядка не знаходиться в К-П якогось іншого модуля , крім резидентного для цього рядка;
- «віддалена-роздільна», якщо копії рядка розміщені в К-П в інших модулів;
- «віддалена -змінена», якщо рядок змінений операцією запису в якомусь модулі.
Існують три локальних стани рядка:
- неможлива до використання;
- поділювана – якщо є незмінена копія в інший К-П;
- змінена, якщо копія змінена операцією запису.
При читанні процесором зі своєї К-П рядка (поділюваного чи зміненого) у випадку його відсутності або неможливості використання здійснюється запит ²промах читання² у резидентний для цього рядка модуль. Для глобального стану рядка:
- некэшуємий чи віддалено-роздільний – копія рядка посилається в модуль, що запросив, а сам модуль міститься в список модулів;
- “ віддалено- змінений” – запит “промах читання” перенаправляеться у модуль, що містить змінений рядок. Цей модуль пересилає необхідний рядок у модуль, що запросив, і в модуль, резидентний для цього рядка . У резидентнім модулі для цього рядка встановлюється стан “ відалено - роздільний”.
Якщо процесор здійснює операцію запису, а стан рядка в який записуємо – “змінений”, то запис виконується. Якщо рядок неможливий до чи використання “поділюваний”, то модуль посилає в резидентний для рядка модуль запит на захоплення у виняткове використання цього рядка і припиняє виконання запису до одержання підтвердження, що всі інші модулі, що розділяють з ним розглянутий рядок, перевели його копію в стан “неможливий до використання”.
Стан рядка “некэшуємий” – він відсилається модулю, що запросив, і він продовжує припинені обчислення.
Стан рядка “ віддалений-роздільний”, резидентний модуль розсилає за списком модулів , що мають копію цього рядка, запит на перехід цих рядків у стан “неможливий до використання”. Після одержання цього запиту кожний з модулів змінює стан своєї копії рядка на “ неможливий до використання” і посилає підтвердження виконання в модуль, що ініціював операцію запису. При цьому в припиненому модулі рядок після запису переходить у стан “віддалено - змінений”.
У системах, що використовують комутатор з тимчасовим поділом (шину), інтерфейс із шиною кожного модуля “прослуховує” усі передачі по шині, тому немає необхідності вести списки модулів, що розділяють рядки. К-П зі зворотним записом створює менше навантаження на шину процесора і забезпечує велику продуктивність, однак контролер для такого типу К-П значно складніше. При виборі способу організації К-П необхідно, крім апаратної реалізації, враховувати особливості генерації програм компілятором (одержання файлів з расширенням .map ). Це має на увазі локальне розташування кодів операцій і даних після компіляції. Тому що області пам'яті програм і пам'яті даних різні і до них відбувається одночасний доступ, то для підвищення паралеллизма при роботі з пам'яттю роблять окремі К-П команд і К-П даних.
Використані джерела
1. Ю-Чжен Лю, Г.ГибсонМикропроцессоры семейства 8086/8088М.: Радио и связь, 1987.
2. Б.В.Шевкопляс Микропроцессорные структуры. Инженерные решения М.: Радио и связь, 1990
3. В.Шевкопляс Микропроцессорные структуры. Инженерные решения. Дополнение первое.М.: Радио и связь, 1993
4. М.Гук Аппаратные средства IBMPC С.Петербург ²Питер² 2000
5. В.Корнеев, А.КиселевСовременные микропроцессорыСанкт-Петербург ²БХВ–Петербург² 2003
6. Локазюк В.М. и дрМикропроцессоры и микроЭВМ в производственных системахКиев Издательский центр ² Академия ² 2002
7. Гуржий А.М. и дрАрхитектура, принципы функционирования и управления ресурсами IBMPCХарьков, 2003
8. В.В.Сташин, А. В. Урусов, О.Ф. МологонцеваПроектирование цифровых устройств на однокристальных микроконтроллерахЛ. Энергоатомиздат
9. Под ред.А.Д.Викторова Руководство пользователя по сигнальным микропроцессорам семейства ADSP-2100 Санкт- Петербургский государственный электротехнический университет. Санкт- Петербург 1997
10. М.Предко Руководство по микроконтроллерам в 2-х томах М: Постмаркет, 2001