Державний університет інформаційно - комунікаційних технологій
Курсова робота
на тему:
Кеш-пам'ять
практичне завдання: Дефрагментація диска
на уроках:
Операційні системи
виконав:
Волоха Олексій Володимирович
група ІБД-32б
Київ-2006
План
Теоретична частина
Кеш-пам'ять
Вступ 3
Причини впровадження кеш-пам'яті 4
Розділ 4 січня
Що таке кеш-пам'ять? 4
Рівень за рівнем 5
Внутрішній кеш 6
Змішана і розділена кеш-пам'ять 9
Статична і динамічна пам'ять 10
TLB як різновид кеш-пам'яті 11
Розділ лютого 1911
Організація кеш-пам'яті 11
Стратегія розміщення 15
Відображення секторів ВП в кеш-пам'яті 15
Ієрархічна модель кеш-пам'яті 16
Асоціативність кеш-пам'яті 16
Розмір рядки і тега кеш-пам'яті 17
Типи підключення кеш-пам'яті 18
Сегментування кеш-пам'яті та швидкість жорстких дисків 19
Збільшення продуктивності кеш-пам'яті 21
Навіщо збільшувати кеш? 21
Висновки 23
Практична частина
Дефрагментація диска 24
Література 27
Введення
В якості елементної бази основної пам'яті в більшості ЕОМ використовуються мікросхеми динамічних ОЗУ, на порядок поступаються за швидкодією центрального процесора. У результаті, процесор змушений простоювати кілька періодів тактової частоти, поки інформація з ІМС пам'яті встановиться на шині даних ЕОМ. Якщо ж ВП виконати на швидких мікросхемах статичної пам'яті, вартість ЕОМ зросте досить істотно.
Економічно прийнятне рішення цієї проблеми можливе при використанні дворівневої пам'яті, коли між основною пам'яттю і процесором розміщується невелика, але швидкодіюча буферна пам'ять або кеш-пам'ять. Разом з основною пам'яттю вона входить в ієрархічну структуру і її дія еквівалентно швидкому доступу до основної пам'яті. Використання кеш-пам'яті дозволяє уникнути повного заповнення всієї машини швидкої RAM пам'яттю. Звичайно програма використовує пам'ять будь-якої обмеженої області, зберігаючи потрібну інформацію в кеш-пам'яті, робота з якої дозволяє процесору обходитися без всяких циклів очікування. У великих універсальних ЕОМ, основна пам'ять яких має ємність близько 1-32 Гбайт, зазвичай використовується кеш-пам'ять ємність 1-12 Мбайт, тобто ємність кеш-пам'ять становить порядку 1/100-1/500 ємності основної пам'яті, а швидкодія в 5-10 разів вище швидкодії основної пам'яті. Вибір об'єму кеш-пам'яті - завжди компроміс між вартісними показниками (в порівнянні з ВП) і її об'ємом, яка повинна бути досить великою, щоб середній час доступу в системі, що складається з основної і кеш-пам'яті, визначалося часом доступу до останньої. Реальна ефективність використання кеш-пам'яті залежить від характеру вирішуваних завдань і неможливо визначити заздалегідь, який обсяг її буде дійсно оптимальним.
Не всяка кеш-пам'ять рівнозначна. Велике значення має той факт, як багато інформації може містити кеш-пам'ять. Чим більше кеш-пам'ять, тим більше інформації може бути в ній розміщене, а отже, тим більша ймовірність, що потрібний байт буде міститися в цій швидкій пам'яті. Очевидно, що найкращий варіант - це коли обсяг кеш-пам'яті відповідає обсягу всієї оперативної пам'яті. У цьому випадку вся інша пам'ять стає не потрібною. Вкрай протилежна ситуація - 1 байт кеш-пам'яті - теж не має практичного значення, тому що ймовірність того, що потрібна інформація виявиться в цьому байті, прямує до нуля.
У процесі роботи такої системи в буферну пам'ять копіюються ті ділянки ВП, до яких проводиться звернення з боку процесора. Виграш досягається за рахунок властивості локальності, зважаючи на велику ймовірності звернення процесором до команд, які лежать в сусідніх комірках пам'яті.
Кеш-пам'ять, що складається з m слів, зберігає копії не менше, ніж m-слів з усіх слів основної пам'яті. Якщо копія, до адресою якої був виконаний доступ ЦП, існує в кеш-пам'яті, то зчитування завершується вже при доступі
до кеш-пам'яті. Відзначимо, що використання кеш-пам'яті грунтується на принципах просторової і тимчасової локальності. У випадку просторової локальності основна пам'ять розбивається на блоки з фіксованим числом слів і обмін даними між основною пам'яттю і кеш-пам'яттю виконується блоками. При доступі до деякого адресою центральний процесор повинен спочатку визначити чи містить кеш-пам'ять копію блоку з вказаною адресою, і якщо є, то визначити, з якої адреси кеш-пам'яті починається цей блок. Цю інформацію ЦП одержує за допомогою механізму перетворення адрес.
Причини впровадження кеш-пам'яті
Явна необхідність у кеш-пам'яті при проектуванні масових ЦП проявилася на початку 1990-х рр.., Коли тактові частоти ЦП значно перевищили частоти системних шин, і, зокрема, шини пам'яті. В даний час частоти серверних ЦП досягають майже 4 ГГц, а оперативної пам'яті, масово застосовуваної в серверах, - тільки 400 МГц (200 МГц з подвоєнням завдяки передачі по обох фронтах сигналу). У цій ситуації при прямому зверненні до пам'яті функціональні пристрої ЦП значну частину часу простоюють, чекаючи доставки даних. У якійсь мірі проблеми швидкодії оперативної пам'яті можуть бути вирішені збільшенням розрядності шини пам'яті, але навіть в серверах молодшого рівня нерідко зустрічається 8-16 гнізд для модулів пам'яті, тому таке рішення ускладнює дизайн системної плати. Прокласти ж 256 - або навіть 512-біт шину до розташованої усередині кристала ЦП кеш-пам'яті порівняно нескладно. Таким чином, ефективної альтернативи кеш-пам'яті в сучасних високопродуктивних системах не існує.
Розділ 1
Що таке кеш-пам'ять?
Кеш-пам'ять - це високошвидкісна пам'ять довільного доступу, використовувана процесором комп'ютера для тимчасового зберігання інформації. Вона збільшує продуктивність, оскільки зберігає найбільш часто використовувані дані і команди «ближче» до процесора, звідки їх можна швидше отримати
Кеш-пам'ять безпосередньо впливає на швидкість обчислень і допомагає процесору працювати з більш рівномірним завантаженням. Уявіть собі масив інформації, використовуваної у вашому офісі. Невеликі обсяги інформації, необхідної в першу чергу, скажімо список телефонів підрозділів, висять на стіні над вашим столом. Точно так само ви зберігаєте під рукою інформацію за поточними проектами. Рідше використовувані довідники, наприклад, міська телефонна книга, лежать на полиці, поруч з робочим столом. Література, до якої ви звертаєтеся зовсім рідко, займає полиці книжкової шафи.
Комп'ютери зберігають дані в аналогічній ієрархії. Коли додаток починає працювати, дані і команди переносяться з повільного жорсткого диска в оперативну пам'ять довільного доступу (Dynamic Random Access Memory - DRAM), звідки процесор може швидко їх отримати. Оперативна пам'ять виконує роль кеша для жорсткого диска.
Для досить швидких комп'ютерів (наприклад, на основі intel-80386 з тактовою частотою більше 25 мгц або intel-80486) необхідно забезпечити швидкий доступ до оперативної пам'яті, інакше мікропроцесор буде простоювати і швидкодія комп'ютера зменшиться. Для цього такі комп'ютери можуть оснащуватися кеш-пам'яттю, тобто "Сверхоперативной" пам'яттю відносно невеликого обсягу (звичайно від 64 до 256 кбайт), в якій зберігаються найбільш часто використовувані ділянки оперативної пам'яті. Кеш-пам'ять розташовується "між" мікропроцесором і оперативною пам'яттю, і при зверненні мікропроцесора до пам'яті спочатку виробляється пошук потрібних даних у кеш-пам'яті. Оскільки час доступу до кеш-пам'яті в кілька разів менше, ніж до звичайної пам'яті, а в більшості випадків необхідні мікропроцесору дані містяться в кеш-пам'яті, середній час доступу до пам'яті зменшується. Для комп'ютерів на основі intel-80386dx або 80486sx розмір кеш-пам'яті в 64 кбайт є задовільним, 128 кбайт - цілком достатнім. Комп'ютери на основі intel-80486dx і dx2 зазвичай оснащуються кеш-пам'яттю ємністю 256 кбайт.
Рівень за рівнем
Хоча оперативна пам'ять набагато швидше диска, тим не менше і вона не встигає за потребами процесора. Тому дані, які потрібні часто, переносяться на наступний рівень швидкої пам'яті, званої кеш-пам'яттю другого рівня. Вона може розташовуватися на окремій високошвидкісний мікросхемі статичної пам'яті (SRAM), встановленої в безпосередній близькості від процесора (у нових процесорах кеш-пам'ять другого рівня інтегрована безпосередньо в мікросхему процесора.
На більш високому рівні інформація, використовувана найчастіше (скажімо, команди в багато разів виконуваному циклі), зберігається у спеціальній секції процесора, званої кеш-пам'яттю першого рівня. Це найшвидша пам'ять.
Процесор Pentium III компанії Intel має кеш-пам'ять першого рівня ємністю 32 Кбайт на мікросхемі процесора і або кеш-пам'ять другого рівня ємністю 256 Кбайт на мікросхемі, або кеш-пам'ять другого рівня ємністю 512 Кбайт, не інтегровану з процесором.
Коли процесору потрібно виконати команду, він спочатку аналізує стан своїх регістрів даних. Якщо необхідних даних в регістрах немає, він звертається до кеш-пам'яті першого рівня, а потім - до кеш-пам'яті другого рівня. Якщо даних немає в жодній кеш-пам'яті, процесор звертається до оперативної пам'яті. І тільки в тому випадку, якщо потрібних даних немає і там, він зчитує дані з жорсткого диска.
Коли процесор виявляє дані в одному з кешей, це називають «попаданням»; невдачу називають «промахом». Кожен промах викликає затримку, оскільки процесор буде намагатися виявити дані на іншому, більш повільному рівні. У добре спроектованих системах з програмними алгоритмами, які виконують попередню вибірку даних до того, як вони будуть потрібні, відсоток «попадань» може досягати 90.
Для процесорів старшого класу на отримання інформації з кеш-пам'яті першого рівня може піти від одного до трьох тактів, а процесор в цей час чекає і нічого корисного не робить. Швидкість доступу до даних з кеш-пам'яті другого рівня, що розміщується на процесорної плати, становить від 6 до 12 циклів, а у випадку з зовнішньої кеш-пам'яттю другого рівня - десятки або навіть сотні циклів.
Кеш-пам'ять для серверів навіть більш важлива, ніж для настільних ПК, оскільки сервери підтримують між процесором і пам'яттю дуже високий рівень трафіку, що генерується клієнтськими транзакціями. У 1991 році Intel перетворила ПК на базі процесора 80486 з тактовою частотою 50 МГц до серверу, додавши на процесорну плату кеш з тактовою частотою 50 МГц. Хоча шина, що зв'язує процесор і пам'ять, працювала з частотою всього 25 МГц, така кеш-пам'ять дозволила багато програм під час роботи повністю розміщувати в процесорі 486 з тактовою частотою 50 МГц.
Ієрархічна організація пам'яті допомагає компенсувати розрив між швидкостями процесорів, щорічно збільшуються приблизно на 50% в рік, і швидкостями доступу до DRAM, які ростуть лише на 5%. Як вважає Джон Шен, професор Університету Карнегі-Меллона, у міру посилення цього дисонансу виробники апаратного забезпечення додадуть третій, а можливо і четвертий рівень кеш-пам'яті.
Дійсно, вже в цьому році Intel має намір представити кеш-пам'ять третього рівня в своїх 64-розрядних процесорах Itanium. Кеш ємністю 2 або 4 Мбайт буде пов'язаний із процесором спеціальною шиною, тактова частота якої збігається з частотою процесора.
IBM також розробила власну кеш-пам'ять третього рівня для 32 - і 64-розрядних ПК-серверів Netfinity. За словами Тома Бредікіча, директора з питань архітектури і технологій Netfinity, спочатку кеш буде розміщуватися на мікросхемі контролера пам'яті, випуск якої почнеться до кінця наступного року.
Кеш-пам'ять третього рівня корпорації IBM стане загальносистемним кешем, куди зможуть звертатися від 4 до 16 процесорів сервера. З кеш-пам'яттю третього рівня Intel зможе працювати тільки той процесор, до якого вона підключена, але представники IBM підкреслили, що їх кеш третього рівня здатний збільшити пропускну здатність всієї системи. Бредікіч зазначив, що нова кеш-пам'ять виробництва IBM також допоможе реалізувати комп'ютерні системи високої готовності, необхідні для електронної комерції, оскільки з її допомогою можна буде міняти модулі основної пам'яті і виконувати модернізацію, не перериваючи роботу системи.
Внутрішній кеш
Внутрішньо кешування звернень до пам'яті застосовується в процесорах, починаючи з 486-го. З кешуванням пов'язані нові функції процесорів, біти регістрів і зовнішні сигнали.
Процесори 486 і Pentium мають внутрішній кеш першого рівня, в Pentium Pro і Pentium II є і вторинний кеш. Процесори можуть мати як єдиний кеш інструкцій і даних, так і загальний. Виділений кеш інструкцій зазвичай використовується тільки для читання. Для внутрішнього кеша зазвичай використовується наборно-асоціативна архітектура.
Рядки в кеш-пам'яті виділяються тільки при читанні, політика запису перших процесорів 486 - тільки Write Through (наскрізний запис) - повністю програмно-прозора. Пізніші модифікації 486-го і всі старші процесори дозволяють перемикатися на політику Write Back (зворотний запис).
Роботу кешу розглянемо на прикладі чотириканального наборно-асоціативного кеша процесора 486, його фізична структура приведена на рис. 1. Кеш є несекторірованним - кожен біт достовірності (Valid bit) відноситься до цілої рядку, так що стоку не може бути "частково достовірної".
Роботу внутрішньої кеш-пам'яті характеризують такі процеси: обслуговування запитів процесора на звернення до пам'яті, виділення і заміщення рядків для кешування областей фізичної пам'яті, забезпечення узгодженості даних внутрішнього кеша і оперативної пам'яті, управління кешуванням.
Будь-який внутрішній запит процесора на звернення до пам'яті спрямовується на внутрішній кеш. Теги чотирьох рядків набору, який обслуговує цю адресу, порівнюються зі старшими бітами запитаного фізичної адреси. Якщо адресуемая область представлена в рядку кеш-пам'яті (випадку попадання - cache hit), запит на читання обслуговується тільки кеш-пам'яттю, не виходячи на зовнішню шину. Запит на запис модифікує цю рядок, і в залежності від політики запису або відразу виходить на зовнішню шину (при наскрізний запису), або трохи пізніше (при використанні алгоритму зворотного запису).
Рис 1. Структура первинного кеша процесора 486
У разі промаху (Cache Miss) запит на запис іде лише на зовнішню шину, а запит на читання обслуговується складніше. Якщо цей заріс відноситься до Кешована області пам'яті, виконується цикл заповнення цілого рядка кеша - всі 16 байт (32 для Pentium) читаються з оперативної пам'яті і поміщаються в одну з рядків кеша, що обслуговує цю адресу. Якщо витребувані дані не вкладаються в одному рядку, заповнюється і сусідня. Заповнення рядка процесор намагається виконати найшвидшим способом - пакетним циклом з 32-бітними передачами (64-бітними для Pentium і старше).
Внутрішній запит процесора на дані задовольняється відразу, як тільки затребувані дані зчитуються з ОЗУ - заповнення рядка до кінця може відбуватися паралельно з обробкою отриманих даних. Якщо в наборі, який обслуговує цю адресу пам'яті, є вільний рядок (з нульовим бітом достовірності), заповнена буде вона і для неї встановиться біт достовірності. Якщо вільних рядків у наборі немає, буде заміщена рядок, до якої довше всіх не було звернень. Вибір рядка для заміщення виконується на основі аналізу біт LRU (Least Recently Used) за алгоритмом "псевдо-LRU". Ці біти (по три на кожен з наборів) модифікуються при кожному зверненні до рядка даного набору (кеш-попаданні або заміщення).
Таким чином, виділення і заміщення рядків виконаються тільки кеш-промахів читання, при промахи запису заповнення рядків не проводиться. Якщо затребувана область пам'яті присутній у рядку внутрішнього кеша, то він обслужить цей запит. Управляти кешуванням можна тільки на етапі заповнення рядків; крім того, існує можливість їх анулювання - оголошення недостовірними і очищення всієї кеш-пам'яті.
Очищення внутрішньої кеш-пам'яті при наскрізний запису (обнулення біт достовірності всіх рядків) здійснюється зовнішнім сигналом FLUSH # за один такт системної шини (і, звичайно ж, за сигналом RESET). Крім того, є інструкції анулювання INVD і WBINVD. Інструкція INVD анулює рядки внутрішнього кеша без вивантаження модифікованих рядків, тому її необережне використання при включеній політиці зворотного запису може привести до порушення цілісності даних в ієрархічній пам'яті. Інструкція WBINVD попередньо вивантажує модифіковані рядки в основну пам'ять (при наскрізний запису її дію збігається з INVD). За зворотного запису очищення кеша припускає й вивантаження всіх модифікованих рядків в основну пам'ять. Для цього, природно, може знадобитися і значне число тактів системної шини, необхідних для проведення всіх операцій запису.
Анулювання рядків виконується зовнішніми схемами - воно необхідне в системах, у яких в оперативну пам'ять запис може виробляти не тільки один процесор, а й інші контролери шини - процесор або периферійні контролери. У цьому випадку потрібні спеціальні засоби для підтримки узгодженості даних у всіх щаблях пам'яті - в первинної та вторинної кеш-пам'яті і динамічного ОЗУ. Якщо зовнішній (по відношенню до розглянутого процесору) контролер виконує запис у пам'ять, процесору повинен бути поданий сигнал AHOLD. З цього сигналу процесор негайно віддає керування шиною адреси A [31:4], на якій зовнішнім контролером встановлюється адреса пам'яті, супроводжуваний стробом EADS #. Якщо адресована пам'ять присутній у первинному кеші, процесор анулює рядок - скидає біт достовірності цього рядка (вона звільняється). Анулювання рядка процесор виконує в будь-якому стані.
Управління заповненням кешу можливо і на апаратній і на програмному рівнях. Процесор дозволяє кешувати будь-яку область фізичної пам'яті. Зовнішні схеми можуть забороняти процесору кешувати певні області пам'яті установкою високого рівня сигналу KEN # під час циклів доступу до цих областей пам'яті. Цей сигнал управляє тільки можливістю заповнення рядків кешу з адресованої області пам'яті. Програмно можна управляти Кешована кожної сторінки пам'яті - забороняти одиничним значенням біта PCD (Page Cache Disable) у таблиці або каталозі сторінок. Для процесорів з WB-кешем біт PWT (Page Write Through) дозволяє посторінково управляти і алгоритмом запису. Загальне програмне керування кешуванням здійснюється за допомогою біт керуючого регістру CR 0: CD (Cache Disable) і NW (No Write Through). Можливі такі поєднання біт регістру:
CD = 1, NW = 1 - якщо після установки такого значення виконати очищення кеша, кеш буде повністю відключений. Якщо ж перед встановленням цього поєднання біт кешу був заповнений, а очищення не проводилася, кеш перетворюється в "заморожену" область статичної пам'яті;
CD = 1, CW = 0 - заповнення кеша заборонено, але наскрізний запис дозволена. Ефект аналогічний тимчасового переведення сигналу KEN # у високе (пасивне) стан. Цей режим може використовуватися для тимчасового відключення кешу, після якого можливе його включення без очистки;
CD = 0, NW = 1 - заборонена комбінація (викликає відмова загального захисту);
CD = 0, NW = 0 - нормальний режим роботи з наскрізною записом.
Для повної заборони кешу необхідно встановити CD = 1 і NW = 1, після чого виконати очистку (Flush). Без очищення кеш буде обслуговувати запити у разі влучень.
Процесори 486 і більше мають вихідні сигнали PCD і PWT, що керують роботою вторинного (зовнішнього) кешу (вони ж керують і внутрішнім кешем). У циклах звернення до пам'яті, коли сторінкові перетворення не використовуються (наприклад, при зверненні до таблиці каталогів сторінок), джерелом сигналів є біти PCD і PWT регістру CR 3, при зверненні до каталогу сторінок - біти PCD і PWT з дескриптора відповідного входження каталогу, при зверненні до самих даних - біти PCD і PWT з дескриптора сторінки. Крім того, обидва цих сигналу можуть примусово встановлюватися спільними бітами керування кешуванням CD і NW регістра CRO.
Режим зворотного запису може вирішуватися тільки апаратно сигналом WB / WT #, вироблюваним зовнішніми схемами.
У просторі пам'яті РС є області, для яких кешування принципово неприпустимо (наприклад, колективна пам'ять адаптерів) або непридатна політика зворотної запису. Крім того, кешування іноді корисно відключати при виконанні одноразово виконуваних ділянок програми (наприклад, ініціалізації) з тим, щоб з кешу не витіснялісь більш часто використовувані фрагменти. Нагадаємо, що заборонити можна тільки заповнення рядків, а звернення до пам'яті, вже представленої дійсними рядками кеша, все одно буде обслуговуватися з кеша. Для повної заборони роботи кеша рядки повинні бути анульовані.
Програмно при включеному режимі сторінкового перетворення кешуванням управляють біти атрибутів сторінок (на рівні таблиці сторінок і їх каталогу), біти PCD і PWT регістра CR 3, і, нарешті, глобально кешуванням управляють біти CD і NW регістра CR 0.
Апаратно (сигналом KEN #) зовнішні схеми можуть управляти кешуванням (дозволяти заповнення рядків) для кожного конкретного адреси звернення до фізичної пам'яті.
Змішана і розділена кеш-пам'ять.
Внутрішня кеш-пам'ять використовувалася раніше як для інструкцій (команд), так і для даних. Така пам'ять називалася змішаної, а її архітектура - Прінстонської, в якій в єдиній кеш-пам'яті, згідно з класичними принципами фон Неймана, зберігалися і команди і дані.
Порівняно недавно стало звичайним розділяти кеш-пам'ять на дві - окремо для інструкцій і окремо для даних.
Перевагою змішаної кеш-пам'яті є те, що при заданому обсязі, їй властива більш висока ймовірність влучень, в порівнянні з розділеною, оскільки в ній автоматично встановлюється оптимальний баланс між інструкціями і даними. Якщо в виконуваному фрагменті програми звернення до пам'яті пов'язані, в основному, з вибіркою інструкцій, а частка звернень до даних відносно мала, кеш-пам'ять має тенденцію заповнення інструкціями і навпаки.
З іншого боку, при роздільному кеш-пам'яті, вибірка інструкцій і даних може проводитися одночасно, при цьому виключаються можливі конфлікти. Останнє особливо істотно в системах, що використовують конвейеризацию команд, де процесор витягує команди з випередженням і заповнює ними буфер чи конвеєр.
Так, наприклад, в процесорі Intel ® 486 DX 2 застосовувалася змішана кеш-пам'ять,
У Intel ® Pentium ® і в AMD Athlon ™ з їх суперскалярной організацією - роздільна. Більш того, в цих процесорах крім кеш-пам'яті інструкцій і кеш-пам'яті даних використовується також і адресна кеш-пам'ять. Цей вид кешу використовується в пристроях управління пам'яттю, в тому числі для перетворення віртуальних адрес у фізичні.
Завдяки використанню нанотехнологій, для зниження споживаної потужності, збільшення швидкодії ЕОМ (що досягається скороченням часу обміну даними між процесором і кеш-пам'яттю) існує можливість, а більше того є реальні приклади того, що кеш-пам'ять реалізують в одному кристалу з процесором. Така внутрішня кеш-пам'ять реалізується за технологією статичного ОЗУ і є найбільш швидкодіючої. Обсяг її зазвичай складає 64-128 Кбайт, причому подальше збільшення її обсягу приводить звичайно до зниження швидкодії через ускладнення схем управління і дешифрування адреси.
Альтернативою, широко вживаною в даний час, є друга (зовнішня) кеш-пам'ять більшого об'єму, розташована між внутрішньою кеш-пам'яттю і ОП. У цій дворівневій системі кеш-пам'яті, внутрішньої пам'яті відводиться роль першого рівня L 1, а зовнішньої - другого L 2. ємність L 2 зазвичай на порядок і більше вище, ніж L 1, а швидкодія і вартість нижча. Пам'ять другого рівня також будується зазвичай як статичне ОЗУ. Ємність її може становити від 256 Кбайт до 1 Мбайта і технічно реалізується як у вигляді окремої мікросхеми, проте може розміщуватися і на одному кристалі з процесором.
Найсучасніші процесори від найбільших виробників оснащуються сьогодні кеш-пам'яттю ємністю в Intel Pentium 4 на ядрі Northwood - 512 Кбайт кеш-пам'яті L 2, а процесори Prescott будуть випускатися за 0,09-мікронної технології і отримають кеш-пам'ять другого рівня подвоєного об'єму, який складе 1 Мбайт. Intel продовжує широко рекламувати свій "екстремальний" ігровий процесор Pentium 4 Extreme Edition на основі модифікованого серверного ядра Gallatin з тактовою частотою 3,40 ГГц і кеш-пам'яттю третього рівня об'ємом 2 Мбайта. Вона доповнює стандартний нортвудовскій кеш L 2 512 Кбайт і теж працює на частоті ядра процесора (правда, з більшою рази в два латентністю). Таким чином, в сумі новий Pentium 4 Extreme Edition має кеш-пам'ять об'ємом 2,5 Мбайт.
Додаткова кеш-пам'ять третього рівня веде початок від серверних процесорів Xeon MP на 0,13-микронном ядрі Gallatin і не має нічого спільного з прийдешнім 90-нанометровим Prescott, однак цей кристал (ядро) все ж таки трохи переробили з метою підтримки системної шини 800 МГц, зменшення енергоспоживання та ін й упакували в стандартний корпус від поточних Pentium 4. У свою чергу AMD Athlon 64 і AMD Opteron працюють на більш високій частоті 2200 МГц, здійснюються за 0,13-мікронної технології (SOI) і містять 105,9 млн. транзисторів і відрізняються від попередніх Athlon XP новим ядром з 64-бітними можливостями обчислень (поряд з поліпшеними 32-бітними на базі колишнього ядра Athlon XP), кеш-пам'яттю другого рівня об'ємом 1 Мбайт (причому кеш у Атлон інклюзивний, тобто повний обсяг з урахуванням 128 Кбайт L 1 складає 1152 Кбайт).
При доступі до пам'яті, ЦП спочатку звертається до кеш-пам'яті першого рівня. При промаху виробляється звернення до кеш-пам'яті другого рівня. Якщо інформація відсутня і в L 2, виробляється звернення до ОП, і відповідний блок заноситься спочатку в L 2, а потім і в L 1. Завдяки такій процедурі, часто запитувана інформація може бути легко відновлена з кеш-пам'яті другого рівня.
Потенційна економія за рахунок застосування L 2 залежить від імовірності влучень як в L 1, так і L 2. Однак, досвід Intel і AMD показує, що використання кеш-пам'яті другого рівня суттєво покращує продуктивність. Саме тому в усіх проанонсірованих виробниками новітніх версіях процесорів застосовується дворівнева і навіть трирівнева організація кеш-пам'яті.
Статична і динамічна пам'ять
У кожному сучасному ЦП передбачено деяку кількість статичної пам'яті, що працює на частоті ядра. Саме статичної, оскільки використання динамічної пам'яті в цих цілях представляється вкрай нераціональним.
Одна осередок статичної пам'яті складається з шести транзисторів і двох резисторів (для техпроцесів з проектними нормами до 0,5 мкм могли бути використані тільки чотири транзистора на одну клітинку, з додатковим шаром полікремнію і з більш жорсткими обмеженнями за максимальною тактовою частотою), в той час як аналогічна структура динамічної пам'яті складається з одного транзистора і одного конденсатора.
Швидкодія статичної пам'яті набагато вище (ємність, яка використовується у динамічній пам'яті, має певну швидкість зарядки до необхідного рівня, що визначає "частотний стелю"), але через більшої кількості складових елементів вона істотно дорожчий у виробництві і відрізняється більш високим енергоспоживанням. Бітове значення клітинки статичної пам'яті характеризується станом затворів транзисторів, а динамічної - рівнем заряду конденсатора. Так як конденсатори мають властивість з часом розряджатися, то для підтримки їх стану потрібна регулярна перезарядка (для сучасних мікросхем динамічної пам'яті - приблизно 15 разів на секунду). Крім того, під час операції читання з комірки динамічної пам'яті конденсатор розряджається, тобто осередок втрачає свій первісний заряд, а отже повинна бути перезаряджаючи.
Очевидно, що статична пам'ять використовується там, де потрібна максимальна швидкодія (регістри ЦП, кеш-пам'ять, локальна пам'ять сигнального процесора), а динамічна - там, де пріоритетом є об'єм, а не швидкість читання-запису (оперативна пам'ять, буфери периферійних пристроїв) .
TLB як різновид кеш-пам'яті
Майже всі сучасні ЦП володіють TLB (Translation Look - aside Buffers, допоміжні буфера перетворення). Своїм існуванням вони зобов'язані тому факту, що ЦП в роботі використовують переважно віртуальні адреси оперативної пам'яті, у той час як контролери оперативної і кеш-пам'яті працюють переважно з реальними адресами. Для того щоб не обчислювати при кожному зверненні до пам'яті реальну адресу з віртуального, у ЦП присутні таблиці відповідності віртуальних адрес сторінок пам'яті реальним. Як правило, їх обсяг невеликий (від одиниць до сотень записів), але цього цілком достатньо, оскільки часто запитувані дані або команди зазвичай добре локалізуються в межах сторінки пам'яті розміром 4 або 8 Кбайт.
Що ж відбувається, якщо запитуваної реальної адреси будь-якої сторінки не знаходиться в TLB? A - box ЦП відпрацьовує спеціальний виклик (exception trap), на який ОС повинна адекватно відреагувати, тобто провести пошук потрібної сторінки в своїх таблицях підсистеми віртуальної пам'яті. Якщо в процесі пошуку виявиться, що зазначена сторінка знаходиться у файлі або розділі підкачки, то вона повинна негайно бути звідти зчитана в оперативну пам'ять. У результаті А-box ЦП отримає реальну адресу потрібної сторінки пам'яті і процес піде своїм шляхом.
Варто також зауважити, що єдиної схеми адресації записів кеш-пам'яті не існує. Тому залежно від ієрархічного розташування та цільового призначення даної структури кеш-пам'яті, а також ідей побудови певного ЦП може використовуватися вибірково як реальна, так і віртуальна адресація записів, або навіть гібридна схема (реальне тегування з віртуальною індексацією), що передбачає і відповідну організацію структури TLB.
Розділ 2
Організація кеш-пам'яті
Концепція кеш-пам'яті виникла раніше ніж архітектура IBM / 360, і сьогодні кеш-пам'ять є практично в будь-якому класі комп'ютерів, а в деяких комп'ютерах - у множині.
Рис. 2. Типові значення ключових параметрів для кеш-пам'яті робочих станцій і серверів
Всі терміни, які були визначені раніше можуть бути використані і для кеш-пам'яті, хоча слово "рядок" (line) часто вживається замість слова "блок" (block).
На малюнку 2 представлений типовий набір параметрів, який використовується для опису кеш-пам'яті.
Розглянемо організацію кеш-пам'яті більш детально, відповідаючи на чотири питання про ієрархію пам'яті.
1. Де може розміщуватися блок у кеш-пам'яті?
Принципи розміщення блоків в кеш-пам'яті визначають три основні типи їх організації:
Якщо кожен блок основної пам'яті має лише одне фіксоване місце, на якому він може з'явитися в кеш-пам'яті, то така кеш-пам'ять називається кешем з прямим відображенням (direct mapped). Це найбільш проста організація кеш-пам'яті, при якій для відображення адрес блоків основної пам'яті на адреси кеш-пам'яті просто використовуються молодші розряди адреси блоку. Таким чином, всі блоки основної пам'яті, що мають однакові молодші розряди в своєму адресі, потрапляють в один блок кеш-пам'яті, тобто
(Адреса блоку кеш-пам'яті) =
(Адреса блоку основної пам'яті) mod (число блоків в кеш-пам'яті)
Якщо певний блок основної пам'яті може розташовуватися на будь-якому місці кеш-пам'яті, то кеш називається повністю асоціативним (fully associative).
Якщо певний блок основної пам'яті може розташовуватися на обмеженій множині місць в кеш-пам'яті, то кеш називається множинно-асоціативним (set associative). Зазвичай безліч представляє собою групу з двох або більшої кількості блоків в кеші. Якщо множина складається з n блоків, то таке розміщення називається множинно-асоціативним з n каналами (n - way set associative). Для розміщення блоку перш за все необхідно визначити безліч. Безліч визначається молодшими розрядами адреси блоку пам'яті (індексом):
(Адреса безлічі кеш-пам'яті) =
(Адреса блоку основної пам'яті) mod (число множин у кеш-пам'яті)
Далі, блок може розміщуватись на будь-якому місці даної множини.
Діапазон можливих організацій кеш-пам'яті дуже широкий: кеш-пам'ять з прямим відображенням є просто одноканальна множинно-асоціативна кеш-пам'ять, а повністю асоціативна кеш-пам'ять з m блоками може бути названа m-канальної множинно-асоціативної. У сучасних процесорах як правило використовується або кеш-пам'ять з прямим відображенням, або двох-(чотирьох-) канальна множинно-асоціативна кеш-пам'ять.
2. Як знайти блок, що знаходиться в кеш-пам'яті?
У кожного блоку в кеш-пам'яті є адресний тег, який вказує, який блок в основній пам'яті даний блок кеш-пам'яті представляє. Ці теги зазвичай одночасно порівнюються з виробленим процесором адресою блоку пам'яті.
Крім того, необхідний спосіб визначення того, що блок кеш-пам'яті містить достовірну або придатну для використання інформацію. Найбільш загальним способом вирішення цієї проблеми є додавання до тегу так званого біта достовірності (valid bit).
Адресація множинно-асоціативної кеш-пам'яті здійснюється шляхом ділення адреси, що надходить з процесора, на три частини: поле зміщення використовується для вибору байта всередині блоку кеш-пам'яті, поле індексу визначає номер множини, а поле тега використовується для порівняння. Якщо загальний розмір кеш-пам'яті зафіксувати, то збільшення ступеня асоціативності призводить до збільшення кількості блоків в множині, при цьому зменшується розмір індексу і збільшується розмір тега.
3. Який блок кеш-пам'яті повинен бути заміщений при промаху?
При виникненні промаху, контролер кеш-пам'яті повинен вибрати підлягає заміщенню блок. Користь від використання організації з прямим відображенням полягає в тому, що апаратні рішення тут найбільш прості. Вибирати просто нічого: на потрапляння перевіряється тільки один блок і тільки цей блок може бути заміщений. При повністю асоціативної або множинно-асоціативної організації кеш-пам'яті є кілька блоків, з яких треба вибрати кандидата у разі промаху. Як правило для заміщення блоків застосовуються дві основні стратегії: випадкова і LRU.
У першому випадку, щоб мати рівномірний розподіл, блоки-кандидати вибираються випадково. У деяких системах, щоб отримати відтворюване поведінку, яка особливо корисно під час налагодження апаратури, використовують псевдовипадковий алгоритм заміщення.
У другому випадку, щоб зменшити ймовірність викидання інформації, яка скоро може знадобитися, всі звернення до блоків фіксуються. Замінюється той блок, який не використовувався найдовше (LRU - Least - Recently Used).
Гідність випадкового способу полягає в тому, що його простіше реалізувати в апаратурі. Коли кількість блоків для підтримки траси збільшується, алгоритм LRU стає все більш дорогим і часто тільки наближеним. На малюнку 3 показані відмінності в частках промахів при використанні алгоритму заміщення LRU і випадкового алгоритму.
Рис. 3. Порівняння часткою промахів для алгоритму LRU і випадкового алгоритму заміщення
при декількох розмірах кеша і різних асоціативність при розмірі блоку 16 байт
4. Що відбувається під час запису?
При зверненнях до кеш-пам'яті на реальних програмах переважають звернення з читання. Всі звернення за командами є зверненнями з читання і більшість команд не пишуть у пам'ять. Зазвичай операції запису складають менше 10% загального трафіку пам'яті. Бажання зробити загальний випадок більш швидким означає оптимізацію кеш-пам'яті для виконання операцій читання, однак при реалізації високопродуктивної обробки даних не можна нехтувати і швидкістю операцій запису.
На щастя, загальний випадок є і більш простим. Блок з кеш-пам'яті може бути прочитаний в той же самий час, коли читається і порівнюється його тег. Таким чином, читання блоку починається відразу як тільки стає доступним адресу блоку. Якщо читання відбувається з попаданням, то блок негайно направляється в процесор. Якщо ж відбувається промах, то від заздалегідь зчитаного блоку немає ніякої користі, правда немає і ніякої шкоди.
Однак при виконанні операції запису ситуація докорінно змінюється. Саме процесор визначає розмір запису (звичайно від 1 до 8 байтів) і тільки ця частина блоку може бути змінена. У загальному випадку це має на увазі виконання над блоком послідовності операцій читання-модифікація-запис: читання оригіналу блоку, модифікацію його частини і запис нового значення блоку. Більш того, модифікація блоку не може починатися до тих пір, поки перевіряється тег, щоб переконатися в тому, що звернення є попаданням. Оскільки перевірка тегів не може виконуватися паралельно з іншою роботою, то операції запису забирають більше часу, ніж операції читання.
Дуже часто організація кеш-пам'яті в різних машинах відрізняється саме стратегією виконання запису. Коли виконується запис у кеш-пам'ять є дві базові можливості:
наскрізний запис (write through, store through) - інформація записується у два місця: у блок кеш-пам'яті і в блок більше низького рівня пам'яті.
запис із зворотним копіюванням (write back, copy back, store in) - інформація записується тільки в блок кеш-пам'яті. Модифікований блок кеш-пам'яті записується в основну пам'ять тільки коли він заміщається. Для скорочення частоти копіювання блоків при заміщенні звичайно з кожним блоком кеш-пам'яті зв'язується так званий біт модифікації (dirty bit). Цей біт стану показує чи був модифікований блок, що знаходиться в кеш-пам'яті. Якщо він не модифікувався, то зворотне копіювання скасовується, оскільки більш низький рівень містить ту ж саму інформацію, що і кеш-пам'ять.
Обидва підходи до організації записи мають свої переваги і недоліки. При записі із зворотним копіюванням операції запису виконуються зі швидкістю кеш-пам'яті, і кілька записів в один і той же блок вимагають тільки одного запису в пам'ять більш низького рівня. Оскільки в цьому разі звернення до основної пам'яті відбуваються рідше, взагалі кажучи потрібна менша смуга пропускання пам'яті, що дуже привабливо для мультипроцесорних систем. При наскрізний запису промахи з читання не впливають на записи в більш високий рівень, і, крім того, наскрізний запис простіше для реалізації, ніж запис із зворотним копіюванням. Наскрізна запис має також перевага в тому, що основна пам'ять має найбільш свіжу копію даних. Це важливо в мультипроцесорних системах, а також для організації вводу / виводу.
Коли процесор очікує завершення запису при виконанні наскрізний запису, то говорять, що він зупиняється для запису (write stall). Загальний прийом мінімізації зупинень по запису пов'язаний з використанням буфера запису (write buffer), який дозволяє процесору продовжити виконання команд під час оновлення вмісту пам'яті. Слід зазначити, що аррестори по запису можуть виникати і при наявності буфера запису.
При промаху під час запису є дві додаткові можливості:
розмістити запис у кеш-пам'яті (write allocate) (називається також вибіркою під час запису (fetch on write)). Блок завантажується у кеш-пам'ять, услід за чим виконуються дії аналогічні що виконується при виконанні запису з попаданням. Це схоже на промах при читанні.
не розміщувати запис у кеш-пам'яті (називається також записом в оточення (write around)). Блок модифікується на більш низькому рівні і не завантажується у кеш-пам'ять.
Зазвичай в кеш-пам'яті, що реалізує запис із зворотним копіюванням, використовується розміщення запису в кеш-пам'яті (в надії, що подальша запис в цей блок буде перехоплена), а в кеш-пам'яті з наскрізним записом розміщення запису в кеш-пам'яті часто не використовується (оскільки подальша запис у цей блок все одно піде в пам'ять).
Стратегія розміщення.
На складність цього механізму істотно впливає
стратегія розміщення, що визначає, в яке місце кеш-пам'яті
слід помістити кожен блок з основної пам'яті.
У залежності від способу розміщення даних основної пам'яті в кеш-пам'яті існує три типи кеш-пам'яті:
кеш з прямим відображенням (розміщенням);
повністю асоціативний кеш;
множинний асоціативний кеш або частково-асоціативний.
Кеш з прямим відображенням (розміщенням) є самим
простим типом буфера. Адреса пам'яті однозначно визначає рядок
кешу, в яку буде поміщений блок інформації. При цьому припускає-
ладено, що оперативна пам'ять розбита на блоки і кожному та-
кому блоку в буфері відводиться всього один рядок. Це простий і недорогий у реалізації спосіб відображення. Основний його недолік - жорстке закріплення за певними блоками ВП одного рядка в кеші. Тому, якщо програма по черзі звертається до слів з двох різних блоків, що відображаються на одну і ту ж рядок кеш-пам'яті, постійно буде відбуватися оновлення цього рядка і вірогідність попадання буде низькою.
Кеш з повністю асоціативним відображенням дозволяє подолати недолік прямого, дозволяючи завантаження будь-якого блоку ВП в будь-який рядок кеш-пам'яті. Логіка управління виділяє в адресі ВП два поля: поле тега і поле слова. Поле тега збігається з адресою блоку ОП. Для перевірки наявності копії блоку в кеш-пам'яті, логіка управління кеша повинна одночасно перевірити теги всіх рядків на збіг з полем тега адреси. Асоціативне відображення забезпечує гнучкість при виборі рядка для знову записуваного блоку. Принциповий недолік цього способу - у необхідності використання дорогої асоціативної пам'яті.
Множинно-асоціативний тип або частково-асоціативний тип відображення - це один з можливих компромісів, що поєднує достоїнства прямого та асоціативного способів. Кеш-пам'ять (і тегів і даних) розбивається на деяку кількість модулів. Залежність між модулем і блоками ВП така ж жорстка, як і при прямому відображенні. А ось розміщення блоків по рядках модуля довільне і для пошуку потрібного рядка в межах модуля використовується асоціативний принцип. Цей спосіб відображення найбільш широко поширений в сучасних мікропроцесорах.
Відображення секторів ВП в кеш-пам'яті.
Даний тип відображення застосовується у всіх сучасних ЕОМ і полягає в тому, що вся ВП розбивається на сектори, які складаються з фіксованого числа послідовних блоків. Кеш-пам'ять також розбивається на сектори, що містять таку ж кількість рядків. Розташування блоків в секторі ВП та секторі кешу повністю збігається. Відображення сектора на кеш-пам'ять здійснюється асоціативно, ті будь-який сектор з ОП може бути поміщений в будь-який сектор кеша. Таким чином, в процесі роботи АЛП звертається в пошуках чергової команди до ОП, у результаті чого, в кеш завантажується (у разі відсутності там блоку, що містить цю команду), цілий сектор інформації з ОП, причому за принципом локальності, за рахунок цього досягається значна збільшення швидкодії системи.
Ієрархічна модель кеш-пам'яті
Як правило, кеш-пам'ять має багаторівневу архітектуру. Наприклад, в комп'ютері з 32 Кбайт внутрішньої (у ядрі ЦП) і 1 Мбайт зовнішньої (в корпусі ЦП або на системній платі) кеш-пам'яті перша буде вважатися кеш-пам'яттю 1-го рівня (L 1), а друга - кеш-пам'яттю 2-го рівня (L 2). У сучасних серверних системах кількість рівнів кеш-пам'яті може доходити до чотирьох, хоча найбільш часто використовується двох-або трирівнева схема.
У деяких процесорних архітектур кеш-пам'ять 1-го рівня розділена на кеш команд (Instruction Cache, I - cache) і кеш даних (Data Cache, D - cache), причому необов'язково однакових розмірів. З точки зору схемотехніки простіше і дешевше проектувати роздільні I - cache і D - cache: вибірку команд проводить I - box, а вибірку даних - Е-box і F - box, хоча в обох випадках задіюються А-box і С-box. Всі ці блоки великі, і забезпечити їм одночасний і швидкий доступ до одного кешу проблематично. Крім того, це неминуче потягне за собою збільшення кількості портів доступу, що також ускладнює завдання проектування.
Так як I - cache і D - cache повинні забезпечувати дуже низькі затримки при доступі (це справедливо для будь-якого кеша L 1), доводиться жертвувати їх об'ємом - зазвичай він становить від 16 до 32 Кбайт. Адже чим менше розмір кешу, тим легше домогтися низьких затримок при доступі.
Кеш-пам'ять 2-го рівня, як правило, уніфікована, тобто може містити як команди, так і дані. Якщо вона вбудована в ядро ЦП, то говорять про S - cache (Secondary Cache, вторинний кеш), в іншому випадку - про B - cache (Backup Cache, резервний кеш). У сучасних серверних ЦП обсяг S - cache становить від одного до декількох мегабайт, a B - cache - до 64 Мбайт. Якщо дизайн ЦП передбачає наявність вбудованої кеш-пам'яті 3-го рівня, то її називають T - cache (Ternary Cache, третинний кеш). Як правило, кожний наступний рівень кеш-пам'яті повільніше, але більше попереднього за обсягом. Якщо в системі присутній B - cache (як останній рівень моделі кеш-пам'яті), то він може контролюватися як ЦП, так і набором системної логіки.
Якщо в момент виконання деякої команди в регістрах не виявиться даних для неї, то вони будуть затребувані з найближчого рівня кеш-пам'яті, тобто з D - cache. У разі їх відсутності в D - Cache запит направляється в S - cache і т. д. У гіршому випадку дані будуть доставлені безпосередньо з пам'яті. Втім, можливий і ще більш сумний варіант, коли підсистема управління віртуальною пам'яттю операційної системи (ОС) встигає витіснити їх у файл підкачки на жорсткий диск. У випадку доставки з оперативної пам'яті втрати часу на отримання потрібних даних можуть складати від десятків до сотень тактів ЦП, а в разі знаходження даних на жорсткому диску мова вже може йти про мільйони тактів.
Асоціативність кеш-пам'яті
Одна з фундаментальних характеристик кеш-пам'яті - рівень асоціативності - відображає її логічний сегментацію. Справа в тому, що послідовний перебір всіх рядків кеша в пошуках необхідних даних зажадав би десятків тактів і звів би нанівець весь виграш від використання вбудованої в ЦП пам'яті. Тому осередки ОЗУ жорстко прив'язуються до рядків кеш-пам'яті (у кожному рядку можуть бути дані з фіксованого набору адрес), що значно скорочує час пошуку. З кожною клітинкою ОЗУ може бути пов'язано більше одного рядка кеш-пам'яті: наприклад, n-канальна асоціативність (n - way set associative) означає, що інформація за деякою адресою оперативної пам'яті може зберігатися в п місць кеш-пам'яті.
Вибір місця може проводитися за різними алгоритмами, серед яких найчастіше використовуються принципи заміщення LRU (Least Recently Used, заміщається запис, запитана в останній раз найбільш давно) і LFU (Least Frequently Used, запис, найменш часто запитують), хоча існують і модифікації цих принципів. Наприклад, повністю асоціативна кешпамять (fully associative), у якій інформація, що знаходиться за довільним адресою в оперативній пам'яті, може бути розміщена в довільному рядку. Інший варіант - пряме відображення (direct mapping), при якому інформація, яка знаходиться за довільним адресою в оперативній пам'яті, може бути розміщена лише в одному місці кеш-пам'яті. Природно, цей варіант забезпечує найбільшу швидкодію, тому що при перевірці наявності інформації контролеру доведеться "зазирнути" лише в один рядок кеша, але й найменш ефективний, оскільки при записі контролер не буде вибирати "оптимальну" місце. При однаковому обсязі кешу схема з повною асоціативністю буде найменш швидкої, але найбільш ефективною.
Повністю асоціативний кеш зустрічається на практиці, але, як правило, у нього дуже невеликий обсяг. Наприклад, у ЦП Cyrix 6 x 86 використовувалося 256 байт такого кеша для команд перед уніфікованим 16-або 64-Кбайт кешем L 1. Часто полноассоціатівную схему застосовують при проектуванні TLB (про них буде розказано нижче), кешей адрес переходів, буферів читання-запису і т. д. Як правило, рівні асоціативності I - cache і D - cache досить низькі (до чотирьох каналів) - їх збільшення недоцільно, оскільки призводить до збільшення затримок доступу і в підсумку негативно відбивається на продуктивності. В якості деякої компенсації збільшують асоціативність S - cache (зазвичай до 16 каналів), оскільки затримки при доступі до цього кешу неважливі. Наприклад, згідно з результатами досліджень часто використовуваних цілочислових задач, в Intel Pentium III 16 Кбайт чотириканального D - cache було достатньо для покриття близько 93% запитів, а 16-Кбайт чотириканального I - cache - 99% запитів.
Розмір рядки і тега кеш-пам'яті
Важлива характеристика кеш-пам'яті - розмір рядка. Як правило, на один рядок покладається один запис адреси (так званий тег), яка вказує, якою адресою в оперативній пам'яті відповідає дана лінія. Очевидно, що нумерація окремих байтів недоцільна, оскільки в цьому випадку обсяг службової інформації в кеші в кілька разів перевищить обсяг самих даних. Тому один тег зазвичай покладається на один рядок, розмір якої зазвичай 32 або 64 байта (реально існуючий максимум 1024 байти), і еквівалентний чотирьом (іноді восьми) розрядність системної шини даних. Крім того, кожен рядок кеш-пам'яті супроводжується деякою інформацією для забезпечення відмовостійкості: одним або декількома бітами контролю парності (parity) або восьмою і більш байтами виявлення і корекції помилок (ЕСС, Error Checking and Correcting), хоча в масових рішеннях часто не використовують ні того, ні іншого.
Розмір тега кеш-пам'яті залежить від трьох основних чинників: обсягу кеш-пам'яті, максимального кешувального обсягу оперативної пам'яті, а також асоціативності кеш-пам'яті. Математично цей розмір розраховується за формулою:
Stag = log 2 (Smem * A / Scache),
де Stag - розмір одного тега кеш-пам'яті, в бітах; Smem - максимальний кешуючий обсяг оперативної пам'яті, в байтах; Scache - об'єм кеш-пам'яті, в байтах; А - асоціативність кеш-пам'яті, в каналах.
Звідси випливає, що для системи з 1-Гбайт оперативної пам'яттю і 1-Мбайт кеш-пам'яттю з двоканальної асоціативністю потрібно 11 біт для кожного тега. Примітно, що власне розмір рядка кеш-пам'яті ніяк не впливає на розмір тега, але назад пропорційно впливає на кількість тегів. Слід розуміти, що розмір рядка кеш-пам'яті не має сенсу робити менше розрядності системної шини даних, але багаторазове збільшення розміру призведе до надмірного засмічення кеш-пам'яті непотрібною інформацією і зайвого навантаження на системну шину і шину пам'яті. Крім того, максимально кешуючий об'єм кеш-пам'яті не зобов'язаний відповідати максимально можливому встановлюється обсягом оперативної пам'яті в системі. Якщо виникне ситуація, коли оперативної пам'яті виявиться більше, ніж може бути Закешовано, то в кеш-пам'яті буде присутній інформація тільки з нижнього сегмента оперативної пам'яті. Саме такою була ситуація з платформою Socket 7 / Super 7. Набори мікросхем для цієї платформи дозволяли використовувати великі обсяги оперативної пам'яті (від 256 Мбайт до 1 Гбайт), в той час як кешуючий обсяг часто був обмежений першими 64 Мбайт (мова йде про B - cache, що знаходиться на системній платі) через використання дешевих 8 -біт мікросхем тегів SRAM (2 біта з яких резервувалося під покажчики дійсності і измененности рядки). Це призводило до відчутного падіння продуктивності.
Яка інформація міститься в тегах кеш-пам'яті? Це інформація про адреси, але як можна точно відобразити розташування рядка кеш-пам'яті на всьому просторі кешувального обсягу оперативної пам'яті, використовуючи настільки незначна кількість адресних бітів? Це поняття є фундаментальним в розумінні принципів функціонування кеш-пам'яті. Розглянемо попередній приклад, з 11-біт тегами. Враховуючи логічне сегментування завдяки двоканальної асоціативності, можна розглядати дану кеш-пам'ять як складається з двох незалежних сегментів по 512 Кбайт кожен. Уявімо оперативну пам'ять як що складається з "сторінок" по 512 Кбайт кожна - їх буде відповідно 2048 штук. Далі, Iog 2 (2048) = 11 (підстава логарифма дорівнює 2, оскільки можливі тільки два логічних стану кожного біта). Це означає, що фактично тег - не номер окремого рядка кеш-пам'яті, а номер "сторінки" пам'яті, на яку відображається та чи інша рядок. Іншими словами, в межах "сторінки" зберігається пряме відповідність її "рядків" з відповідними рядками кеш-пам'яті, тобто п-й рядок кеш-пам'яті відповідає n-й "рядку" даної "сторінки" оперативної пам'яті.
Розглянемо механізм роботи кеш-пам'яті різних видів асоціативності. Припустимо, є абстрактна модель з вісьмома рядками кеш-пам'яті та 64 еквівалентними рядками оперативної пам'яті. Потрібно помістити в кеш рядок 9 оперативної пам'яті (зауважимо, що всі рядки нумеруються від нуля і по зростаючій). У моделі з прямим відображенням цей рядок може зайняти лише одне місце: 9 mod 8 = 1 (обчислення залишку від ділення без остачі), тобто місце рядка 1. Якщо взяти модель з двоканальної асоціативністю, то цей рядок може зайняти одне з двох місць: 9 mod 4 = 1, тобто рядок 1 будь-якого каналу (сегмента). Полноассоціатівная модель надає свободу для розміщення, і даний рядок може зайняти місце будь-якої з восьми наявних. Іншими словами, фактично є 8 каналів, кожен з яких складається з 1 рядка.
Жодна з вищезгаданих моделей не дозволить, зрозуміло, помістити в кеш більше рядків, ніж він фізично в змозі розмістити, вони лише пропонують різні варіанти, що розрізняються балансом ефективності використання кешу і швидкості доступу до нього.
Типи підключення кеш-пам'яті
Кількість портів читання-запису кеш-пам'яті - показник того, скільки одночасних операцій читання-запису може бути оброблено. Хоча жорстких вимог і немає, певну відповідність набору функціональних пристроїв ЦП має простежуватися, так як відсутність вільного порту під час виконання команди призведе до вимушеного простою.
Існує два основних способи підключення кешпамяті до ЦП для читання: наскрізний і побічний (Look - Through і Look - Aside). Суть першого в тому, що при необхідності дані спочатку запитуються у контролерів кеш-пам'яті самого високого рівня, який перевіряє стан підключених тегів і повертає або потрібну інформацію, або негативну відповідь, і в цьому випадку запит перенаправляється в більш низький рівень ієрархії кеш-пам'яті або в оперативну пам'ять. При реалізації другого способу читання запит одночасно надсилається як кеш-контролера самого високого рівня, так і іншим кеш-контролерів та контролеру оперативної пам'яті. Недолік першого способу очевидна: при відсутності інформації в кеші високого рівня доводиться повторювати запит, і час простою ЦП збільшується. Недолік другого підходу - висока надмірність операцій і, як наслідок, "засмічення" внутрішніх шин ЦП і системної шини непотрібною інформацією. Логічно припустити, що якщо для кешей L 1 оптимальна наскрізна схема, то для T - cache або B - cache побічна схема може виявитися більш вигідною. Для S - cache вибір неоднозначний.
Розрізняють також локальний і віддалений кеш. Локальним називають кеш, що знаходиться або в ядрі ЦП, або на тій же кремнієвій підкладці або в корпусі ЦП, віддаленим - розміщений на системній платі. Відповідно локальним кешем управляє контролер в ядрі ЦП, а віддаленим - НМС системної плати. Локальний кеш з точки зору швидкодії краще, оскільки інтерфейс до віддаленого кешу зазвичай мультиплексируются з системною шиною. З одного боку, коли інший ЦП захоплює загальну системну шину або який-небудь периферійний контролер звертається до пам'яті безпосередньо, віддалений кеш може виявитися тимчасово недоступним. З іншого - такий кеш легше використовувати в багатопроцесорних системах.
Існують два найпоширеніші способи запису в кеш: наскрізний (Write - Through) і зворотної (Write - Back) запису. У першому випадку інформація одночасно зберігається як у поточний, так і в більш низький рівень ієрархії кеш-пам'яті (або прямо в оперативну пам'ять при відсутності такого). У другому - дані зберігаються тільки в поточному рівні кеш-пам'яті, при цьому виникає ситуація, коли інформація в кеші і оперативної пам'яті розрізняється, причому остання стає застарілою. Для того щоб при скиданні кешу інформація не була необоротно втрачено, до кожного рядка кеша додається "брудний" біт (dirty bit, інакше відомий як modified). Він потрібен для позначення того, чи відповідає інформація в кеші інформації в оперативній пам'яті, і чи слід її записати в пам'ять при скиданні кеша.
Також слід згадати спосіб резервування запису (write allocation). При записі даних в оперативну пам'ять часто виникає ситуація, коли записувані дані можуть скоро знадобитися, і тоді їх доведеться досить довго довантажувати. Резервування запису дозволяє частково вирішити цю проблему: дані записуються не в оперативну пам'ять, а в кеш. Рядок кеша, замість якої записуються дані, повністю вивантажується в оперативну пам'ять. Так як знову записаних даних зазвичай недостатньо для формування повної рядка кеша, з оперативної пам'яті запитується відсутня інформація. Коли вона отримана, новий рядок записується, і тег оновлюється. Певних переваг чи недоліків такий підхід не має - іноді це може дати незначний приріст продуктивності, але також і призвести до засмічення кешу непотрібною інформацією.
Сегментування кеш-пам'яті та швидкість жорстких дисків
У першій частині даного огляду ми познайомилися з режимом Performance Mode у SCSI-дисків Seagate Cheetah зі швидкістю обертання 10 000 і 15 000 об. / хв - Cheetah 10 K .7 і Cheetah 15 K .4. Нагадаю, що утиліта Seagate SeaTools Enterprise дозволяє користувачеві керувати політикою кешування і, зокрема, перемикати новітні SCSI-диски Seagate між двома різними моделями кешування - Desktop Mode і Server Mode. Цей пункт у меню SeaTools носить назву Performance Mode (PM) і може приймати два значення - On (Desktop Mode) і Off (Server Mode). Відмінності між цими двома режимами чисто програмні - у разі Desktop Mode кеш-пам'ять жорсткого диска розбивається на фіксоване число сегментів постійного (однакового) обсягу і далі вони використовуються для кешування звернень при читанні і запису. Причому, в окремому пункті меню користувач навіть може сам призначати кількість сегментів (керувати сегментированием кешу): наприклад, замість дефолтних 32-х сегментів проставити інше значення (при цьому обсяг кожного сегмента пропорційно зменшиться).
У разі ж Server Mode сегменти буфера (кешу диска) можуть динамічно (пере) призначатися, змінюючи при цьому свій розмір і кількість. Мікропроцесор (і мікропрограма) диска самі динамічно оптимізують кількість (і ємність) сегментів кеш-пам'яті залежно від вступників для виконання на диск команд.
Тоді ми змогли з'ясувати, що використання нових накопичувачів Seagate Cheetah в режимі «Desktop» (при фіксованому сегментації за замовчуванням - на 32 сегменту) замість дефолтного «Server» з динамічним сегментированием здатне трохи підняти продуктивність дисків в ряді завдань, більш характерних для настільного комп'ютера або медіа-серверів. Причому, ця надбавка часом може досягати 30-100% (!) Залежно від типу задачі та моделі диска, хоча в середньому вона оцінюється величиною 30%, що, погодьтеся, теж непогано. Серед таких завдань - рутинна робота настільного ПК (тести WinBench, PCmark, H 2 bench), читання і копіювання файлів, дефрагментація. При цьому в суто серверних додатках продуктивність накопичувачів майже не падає (якщо і падає, то незначно). Втім, помітний виграш від використання Desktop Mode ми змогли спостерігати тільки на диску Cheetah 10 K .7, тоді як її старшої сестриці Cheetah 15 K .4 виявилося майже все одно, в якому з режимів працювати над настільними додатками.
Намагаючись розібратися далі, як впливає сегментування кеш-пам'яті цих жорстких дисків на продуктивність у різних додатках і які режими сегментування (яка кількість сегментів пам'яті) більш вигідно при виконанні тих чи інших завдань, я досліджував вплив кількості сегментів кеш-пам'яті на продуктивність диска Seagate Cheetah 15 K .4 в широкому діапазоні значень - від 4 до 128 сегментів (4, 8, 16, 32, 64 і 128). Результати цих досліджень і пропонуються вашій увазі в цій частині огляду. Підкреслю, що дані результати цікаві не тільки суто для цієї моделі дисків (або SCSI-дисків Seagate в цілому) - сегментування кеш-пам'яті і вибір кількості сегментів - це одне з основних напрямків оптимізації firmware, в тому числі, настільних дисків з інтерфейсом ATA, які зараз також оснащуються переважно буфером 8 Мбайт. Тому описані в даній статті результати продуктивності накопичувача в різних завданнях в залежності від сегментування його кеш-пам'яті мають відношення і до індустрії настільних ATA-накопичувачів. А оскільки методика випробувань була описана в першій частині, переходимо безпосередньо до самих результатів.
Втім, перш, ніж перейти до обговорення результатів, поглянемо трохи докладніше на пристрій і роботу сегментів кеш-пам'яті диска Seagate Cheetah 15 K .4, щоб краще розуміти, про що йде мова. З восьми мегабайт для власне кеш-пам'яті (тобто для кешуючих операцій) тут є 7077 Кбайт (інше - службова область). Ця область поділяється на логічні сегменти (Mode Select Page 08 h, byte 13), які використовуються для читання і запису даних (для здійснення функцій читання, з пластин і відкладеної запису на поверхню диска). Для звернення до даних на магнітних пластинах сегменти використовують саме логічну адресацію блоків накопичувача. Диски цієї серії підтримують максимум 64 сегменту кеш-пам'яті, причому довжина кожного сегмента дорівнює цілому числу секторів диска. Об'єм доступної кеш-пам'яті, по всій видимості, розподіляється порівну між сегментами, тобто якщо сегментів, скажімо, 32, то обсяг кожного сегмента дорівнює приблизно 220 Кбайт. При динамічній сегментації (в режимі PM = off) кількість сегментів може змінюватися вінчестером автоматично залежно від потоку команд від хоста.
Програми для серверів і настільних комп'ютерів вимагають різних операцій кешування від дисків для забезпечення оптимальної продуктивності, тому складно забезпечити єдину конфігурацію для найкращого виконання цих завдань. На думку Seagate, для «настільних» додатків потрібно конфігурувати кеш-пам'ять так, щоб швидко відповідати на повторні запити великої кількості невеликих сегментів даних без затримок на попередній виклик суміжних сегментів. У серверних завданнях, навпаки, потрібно так конфігурувати кеш, щоб забезпечити надходження великих обсягів послідовних даних в неповторюваних запитах. У цьому випадку важливіша здатність кеш-пам'яті зберігати більше даних з суміжних сегментів при попереджувальний читанні. Тому для Desktop Mode виробник рекомендує використовувати 32 сегмента (у ранніх версіях Cheetah використовувалися 16 сегментів), а для Server Mode адаптивне кількість сегментів стартує всього з трьох на весь кеш, хоча в процесі роботи може і збільшуватися. Ми у своїх експериментах з приводу впливу кількості сегментів на продуктивність у різних додатках обмежимося діапазоном від 4 сегментів до 64 сегментів, а в якості перевірки «проженемо» диск також при 128 сегментах, встановлених у програмі SeaTools Enterprise (програма при цьому не повідомляє, що дана кількість сегментів в цьому диску неприпустимо).
Збільшення продуктивності кеш-пам'яті
Формула для середнього часу доступу до пам'яті в системах з кеш-пам'яттю виглядає наступним чином:
Середній час доступу = Час звернення при попаданні + Частка промахів x Втрати при промаху
Ця формула наочно показує шляхи оптимізації роботи кеш-пам'яті: скорочення частки промахів, скорочення втрат при промаху, а також скорочення часу звернення до кеш-пам'яті при попаданні. На малюнку 5.38 коротко представлені різні методи, які використовуються в даний час для збільшення продуктивності кеш-пам'яті. Використання тих чи інших методів визначається перш за все метою розробки, при цьому конструктори сучасних комп'ютерів піклуються про те, щоб система виявилася збалансованої за всіма параметрами.
Навіщо збільшувати кеш?
Первинна причина збільшення обсягу вбудованого кеша може полягати в тому, що кеш-пам'ять в сучасних процесорах працює на тій же швидкості, що і сам процесор. Частота процесора в цьому випадку ніяк не менше 3200 M Гц. Більший обсяг кеша дозволяє процесору тримати великі частини коду готовими до виконання. Така архітектура процесорів сфокусована на зменшенні затримок, пов'язаних з простоєм процесора в очікуванні даних. Сучасні програми, в тому числі ігрові, використовують великі частини коду, який необхідно витягувати з системної пам'яті на першу вимогу процесора. Зменшення проміжків часу, що йдуть на передачу даних від пам'яті до процесора, - це надійний метод збільшення продуктивності додатків, що вимагають інтенсивної взаємодії з пам'яттю. Кеш L 3 має дещо більш високий час очікування, ніж L 1 і 2, це цілком природно. Хоч він і повільніше, але все-таки він значно швидший, ніж звичайна пам'ять. Не всі програми виграють від збільшення обсягу або швидкості кеш-пам'яті. Це сильно залежить від природи додатки.
Якщо великий об'єм вбудованого кешу - це добре, тоді що ж утримувало Intel і AMD від цієї стратегії раніше? Простим відповіддю є висока собівартість такого рішення. Резервування простору для кеша дуже дорого. Стандартний 3.2 GHz Northwood містить 55 мільйонів транзисторів. Додаючи 2048 КБ кеша L 3, Intel йде на збільшення кількості транзисторів до 167 мільйонів. Простий математичний розрахунок покаже нам, що EE - один з найдорожчих процесорів.
Сайт AnandTech провів порівняльне тестування двох систем, кожна з яких містила два процесори - Intel Xeon 3,6 Ггц в одному випадку і AMD Opteron 250 (2,4 ГГц) - в іншому. Тестування проводилося для додатків ColdFusion MX 6.1, PHP 4.3.9, і Microsoft. NET 1.1. Конфігурації виглядали наступним чином:
AMD
- Dual Opteron 250;
- 2 ГБ DDR PC3200 (Kingston KRX3200AK2);
- Системна плата Tyan K 8 W;
- ОС Windows 2003 Server Web Edition (32 біт);
- 1 жорсткий IDE 40 Гб 7200 rpm, кеш 8 МБ
Intel
- Dual Xeon 3.6 ГГц;
- 2 ГБ DDR 2;
- Материнська плата Intel SE 7520 AF 2;
- ОС Windows 2003 Server Web Edition (32 біт);
- 1 жорсткий IDE 40 Гб 7200 rpm, кеш 8 МБ
На додатках ColdFusion і PHP, не оптимізованих під ту чи іншу архітектуру, трохи швидше (2,5-3%) виявилися Opteron 'и, зате тест с. NET продемонстрував послідовну прихильність Microsoft платформі Intel, що дозволило парі Xeon' ів вирватися вперед на 8%. Висновок цілком очевидний: використовуючи ПЗ Microsoft для веб-додатків, є сенс вибрати процесори Intel, в інших випадках кілька кращим вибором буде AMD.
Більше - не завжди краще
Частота промахів при зверненні до кеш-пам'яті може бути значно знижена за рахунок збільшення ємності кеша. Але більша кеш-пам'ять потребує більше енергії, генерує більше тепла і збільшує число бракованих мікросхем при виробництві.
Один із способів обійти ці труднощі - передача логіки управління кеш-пам'яттю від апаратного забезпечення до програмного.
«Компілятор потенційно в стані аналізувати поведінку програми і генерувати команди з перенесення даних між рівнями пам'яті», - зазначив Шен.
Керована програмним чином кеш-пам'ять зараз існує лише в дослідницьких лабораторіях. Можливі труднощі пов'язані з тим, що доведеться переписувати компілятори і перекомпілювати успадкований код для всіх процесорів нового покоління.
Висновки
Аналіз викладеного вище матеріалу дозволяє зробити висновок, що відповідно до канонічними теоріями, сучасні виробники широко використовують кеш-пам'ять при побудові новітніх процесорів. Багато в чому, їх чудові характеристики по швидкодії досягаються саме завдяки застосуванню кеш-пам'яті другого і навіть третього рівня. Цей факт підтверджує теоретичні викладки Гарвардського університету про те, що зважаючи на дії принципу локальності інформації в сучасних комп'ютерах застосування кеш-пам'яті змішаного типу дозволяє добитися чудових результатів у продуктивності процесорів і знижує частоту необхідних звернень до основної пам'яті.
У наявності широкі перспективи подальшого використання кеш-пам'яті в машинах нового покоління, однак існуюча проблематика неможливості нескінченного збільшення кешу, а також висока собівартість виготовлення кешу на одному кристалі з процесором, ставить перед конструкторами питання про якийсь якісному, а не кількісному видозміні або стрибок у принципах, або огранізації кеш-пам'яті в процесорах майбутнього.
Дефрагментація диска
Дефрагментатор дисків виконує пошук фрагментованих файлів і папок на локальних томах. Фрагментовані файл або папка розділені на безліч частин і разбрасани по всьому тому.
Якщо том містить багато фрагментованих файлів і папок, системі потрібно більше часу для звернення до них, оскільки доводиться виконувати додаткові операції читання з диска їх окремих частин. На створення файлів і папок також йде більше часу, оскільки вільний простір на диску складається із розрізнених фрагментів. Системі доводиться зберігати нові файли і папки в різних місцях томи.
Дефрагментатор дисків переміщує розрізнені частини кожного файлу або папки в одне місце томи, після чого файли і папки займають на диску єдине послідовне простір. В результаті доступ до файлів і папок виконується ефективніше. Об'єднуючи окремі частини файлів і папок, програма дефрагментації також об'єднує в єдине ціле вільне місце на диску, що робить менш вірогідною фрагментацію нових файлів.
Процес пошуку і об'єднання фрагментованих файлів і папок називається дефрагментацією. Час, необхідний для дефрагментації томи, залежить від декількох факторів, у тому числі від його розміру, загального числа файлів, ступеня фрагментації і доступних системних ресурсів. Перед виконанням дефрагментації можна знайти все фрагментовані файли і папки, проаналізувавши том. Отримані відомості дозволять дізнатися, як багато фрагментованих файлів і папок містить те, і вирішити, чи слід виконувати дефрагментацію.
За допомогою програми дефрагментації можна перетворити томи, використовують файлові системи FAT, FAT32 і NTFS.
Для запуску програми дефрагментації диска необхідно через кнопки ПУСК, ПРОГРАМИ, СТАНДАРТНІ вийти на панель СЛУЖБОВІ
і запустити Дефрагментація диска.
Рис. 1.1. Загальний вигляд панелі дефрагментації.
Цілями дефрагментації дисків є:
аналіз стану каталогів і файлів на диску;
виконання операцій перезапису інформації в інтересах збільшення обсягу суцільних областей вільного простору.
Для проведення фрагментації слід вибрати будь-який з дисків крім системного.
Безпосередньо перед дефрагментацією необхідно провести аналіз вибраного диска і отримати звіт про роботу програми аналізу.
Рис. 1.2. Панель дефрагментації з результатами аналізу диска.
У результаті аналізу на панелі дефрагментації відображається розподіл:
Далі запускається програма дефрагментації і виводиться звіт про її роботу.
Рис. 1.3. Панель дефрагментації зі звітом
Далі слідують звіти результатів аналізу та дефрагментації диска Е:
Том (E:) до дефрагментації:
Розмір тому = 30,58 ГБ
Розмір кластера = 4 КБ
Зайнято = 21,23 ГБ
Вільно = 9,35 ГБ
Відсоток вільного місця = 30%
Фрагментація томи
Всього фрагментоване = 1%
Фрагментація файлів = 3%
Фрагментація вільного місця = 0%
Фрагментація файлів
Всього файлів = 6720
Середній розмір файлу = 4 МБ
Всього фрагментоване файлів = 23
Всього зайвих фрагментів = 105
У середньому фрагментів на файл = 1,01
Фрагментація файлу підкачки
Розмір файлу підкачки = 0 байт
Всього фрагментів = 0
Фрагментація папок
Всього папок = 307
Фрагментоване папок = 39
Зайвих фрагментів папок = 317
Фрагментація MFT (Master File Table)
Загальний розмір MFT = 26 МБ
Лічильник записів MFT = 7049
Відсоток використання MFT = 26%
Всього фрагментів MFT = 2
-------------------------------------------------- ------------------------------
Фрагментів Розмір файлу Найбільш фрагментовані файли
44 180 КБ \ Need for Speed Most Wanted \ SOUND \ ENGINE
31 липня МБ \ System Volume Information \ RP32 \ A0020244.exe
29 120 КБ \ age of mythology \ Eng \ history \ units
29 120 КБ \ age of mythology \ locale \ history \ units
28 116 КБ \ age of mythology \ Eng \ history \ techs
28 116 КБ \ age of mythology \ locale \ history \ techs
25 108 КБ \ Need for Speed Most Wanted \ TRACKS \ L2RA
Листопад 1944 КБ \ 2 \ Katjuha 2005
10 625 КБ \ System Volume Information \ RP32 \ A0020265.exe
Жовтень 1969 КБ \ Thumbs.db
9548 КБ \ System Volume Information \ RP32 \ A0020243.exe
Вересень 1940 КБ \ Need for Speed Most Wanted \ NIS
Серпень 1936 КБ \ Need for Speed Most Wanted \ European Help Files \ Sv
Серпень 1936 КБ \ Need for Speed Most Wanted \ European Help Files \ pt-br
Серпень 1936 КБ \ Need for Speed Most Wanted \ European Help Files \ pt
Серпень 1936 КБ \ Need for Speed Most Wanted \ European Help Files \ NL
8 126 КБ \ System Volume Information \ RP34 \ change.log.2
Серпень 1936 КБ \ Need for Speed Most Wanted \ European Help Files \ Da
Серпень 1936 КБ \ Need for Speed Most Wanted \ European Help Files \ en-uk
Серпень 1936 КБ \ Need for Speed Most Wanted \ European Help Files \ De
Серпень 1936 КБ \ Need for Speed Most Wanted \ European Help Files \ fr-fr
Серпень 1936 КБ \ Need for Speed Most Wanted \ European Help Files \ Fi
Серпень 1936 КБ \ Need for Speed Most Wanted \ European Help Files \ es
Липень 1932 КБ \ Need for Speed Most Wanted \ EA Help
28 липня КБ \ Need for Speed Most Wanted \ CARS
Липень 1960 КБ \ 2 \ @ 1 @
6372 КБ \ System Volume Information \ RP32 \ A0020250.dll
6336 КБ \ System Volume Information \ RP32 \ A0020247.exe
Червень 1964 КБ \ 2 \ @ @ @ @
5316 КБ \ System Volume Information \ RP32 \ A0020241.exe
Том (E:) після дефрагментації:
Розмір тому = 30,58 ГБ
Розмір кластера = 4 КБ
Зайнято = 21,23 ГБ
Вільно = 9,35 ГБ
Відсоток вільного місця = 30%
Фрагментація томи
Всього фрагментоване = 0%
Фрагментація файлів = 0%
Фрагментація вільного місця = 0%
Фрагментація файлів
Всього файлів = 6720
Середній розмір файлу = 4 МБ
Всього фрагментоване файлів = 0
Всього зайвих фрагментів = 0
У середньому фрагментів на файл = 1,00
Фрагментація файлу підкачки
Розмір файлу підкачки = 0 байт
Всього фрагментів = 0
Фрагментація папок
Всього папок = 307
Фрагментоване папок = 1
Зайвих фрагментів папок = 0
Фрагментація MFT (Master File Table)
Загальний розмір MFT = 26 МБ
Лічильник записів MFT = 7049
Відсоток використання MFT = 26%
Всього фрагментів MFT = 2
-------------------------------------------------- ------------------------------
Фрагментів Розмір файлу Файли, які не можуть бути дефрагментовані
відсутня
Висновок
Зі звітів видно, що після дефрагментації диска Е: фрагментованих файлів не залишилося. Відбулася повна дефрагментація диска.
Література
Е. Танненбаум, Сучасні операційні системи, СПб: Питер, 2002. - 1024 с.
Р. Столлінз Операційні системи. М.: Вільямз, 2002. - 600 с.
В. Г. Оліфер, Н. А. Оліфер Мережеві операційні системи. СПб: Питер, 2001 .- 554 с.
А. Шоу. Логічне проектування операціонніх систем. М.: "СВІТ", 1981 .- 360 с.
Казарін О.В. Безпека програмного забезпечення комп'ютерних систем. : Москва, МГУЛ, 2003, 212 с.
Конспект лекцій.
Довідкова система Windows XP.