|
Логічна структура пам'яті ПК обумовлена особливостями адресації МП відповідних поколінь. МП 8086/88 мали 20-бітну шину адреси і тому забезпечували доступний адресний простір обсягом 1 МБ. Починаючи з 80286МП шина адреси була збільшена до 24 біт, а потім до 32 біт в 386 і 486 і 36 біт в МП Pentium Pro. В реальному режимі адресації залишається однак і у цих МП формально доступним лише 1МБ пам'яті, що для більшості сучасних застосувань вже не достатньо.
В даний час адресний простір пам'яті ПК розподіляється наступним чином:
Базова пам'ять розміром 640Кб, доступна дисковій ОС (DOS) і програмам реального режиму, що використовують адреси 00000Н-9FFFFH.
Верхня пам'ять розміром 384кБ та адресами A000H-FFFFFH (це область розміщення буферної пам'яті адаптерів і постійна пам'ять базової системи управління вводу/виводу BIOS).
Додаткова розширена пам'ять, починаючи з адреси 100000Н і вище, доступна в захищеному режимі для МП 80286 і наступних поколінь.
Для 386 МП при 32-бітній шині адреси верхня межа цієї пам'яті 4ГБ, для Pentium Pro і Pentium II 64ГБ (36-розрядна шина адреси).
Базова пам'ять найбільш дефіцитна у ПК - розподіляється таким чином: вектори переривання (256 подвійних слів) - адреси 00000H-003FFH, область змінних BIOS - адреси 00400Н-004FFH, область DOS - 00500H-005xxH, пам'ять користувача 005xxH-9FFFFH (до 638 КБ).
Верхня пам'ять UMA має області різного призначення. Стандартний розподіл UMA виглядає наступним чином: відео пам'ять - 128Кб - адреси А0000Н-BFFFFH, розширення BIOS - 128Кб з адресами C0000H-DFFFFH. Вільна область 64Кб з адресами F0000H-FFFFFH. В МПС можливі різні варіанти використання залишилися 384кБ пам'яті до 1МБ. Одна з них це тіньова пам'ять адаптерів і ROM BIOS. Тіньова пам'ять усуває звернення до зазвичай повільної 8-бітної верхньої пам'яті ROM BIOS за рахунок її підміни ділянкою оперативної пам'яті більш високої швидкодії і розрядності, в який листується інформація з ROM BIOS. Оперативна або основна пам'ять спільно з МП становить ядро будь-якого ПК. Як ОП використовується в основному динамічна пам'ять, що має на сьогоднішній день найкраще поєднання ємності, енергоспоживання і вартості. Проте їй притаманні не зовсім висока швидкодія, тому статична пам'ять, швидкодія якої вище, ніж у динамічної пам'яті, також знаходить застосування в ПК як кеш-пам'яті. Кеш зберігає копії блоків даних тих областей ОП, до яких відбувається поточне звернення і досить ймовірно подальше звернення. Доступ до таких даних за допомогою кеш-пам'яті може бути виконаний швидше, ніж через ОП, що позначається на продуктивності всього ПК.
В даний час мікросхеми динамічної пам'яті мають ємність 1-256Мбіт з розрядністю 1, 4, 8 біта, один, два або чотири байти (з бітом паритету або без них). Корпуси мікросхем мають інформаційні входи/виходи (ці входи можуть бути об'єднані), мультиплексні шини адреси, керуючі виводи - вибір адреси рядки, - вибір адреси стовпця, - дозвіл запису, - дозвіл виходу.
Обраною мікросхемою пам'яті є та, на яку під час дії низького рівня сигналу надходить активний (низький) рівень сигналу. Мікросхеми DRAM в даний час безпосередньо на плату не встановлюються, оскільки вони займають багато місця. Ці мікросхеми встановлюються на друковані плати невеликого розміру з одностороннім друкованим роз'ємом. Контакти цього роз'єму виготовлені з високоякісного матеріалу і позолочені. Кількість мікросхем пам'яті і тип мікросхем визначається необхідною розрядністю і обсягом збережених даних. Такі друковані плати називаються SIMM або DIMM модулями. SIMM - модулі першого покоління мали 30 контактний роз'єм, другого - 72 контактний, модулі DIMM - 168 контактний роз'єм. Розрізняють односторонні і двосторонні модулі. У перших - мікросхеми пам'яті встановлюються на одній стороні друкованої плати, по друге - мікросхеми пам'яті встановлені на обох сторонах друкованої плати. Зазвичай вся оперативна пам'ять ділиться на декілька банків. Банк визначає найменший об'єм пам'яті, який може бути адресований МП за один раз і відповідає розрядності шини даних МП. Якщо використовувати пам'ять з чергуванням адрес (interleaving mode), розрядність банку збільшується. Сучасні SIMM 72 мають 4-байтную організацію з можливо-64, 72 або 80 біт (відповідно без контролю, з контролем за паритетом, з використанням кодів з виявленням та виправленням помилок (ECC - Error Checking and Correction)).
Модулі DIMM-168 на мікросхемах пам'яті ємністю 4-64Мбіт мають загальну місткість від 8 до 256 МБ. Сигнали модулів DIMM-168 мають таке призначення:
DQx - біти даних (від 0 до 63), CBx - контрольні біти (від 0 до 15), RAS [0-3] - строби вибірки рядка, CAS [0-7] - строби вибірки стовпців, А [0-13] - мультипліковані шина адреси, WE0, WE2 - сигнали дозволу записи, OE0, OE2 - сигнали дозволу вихідних буферів, SCL - дані інтерфейсу ідентифікації, SA [0-2] - адреса модуля в інтерфейсі.
Всі мікросхеми одного банку мають загальні шини сигналів RAS, власні для кожного банку, модулі з такою організацією використовують побайтно розподіл інформаційних біт за сигналами CASx. В односторонніх модулях (1, 4, 16, 64 МБ) використовується тільки одна пара сигналів RAS, у двосторонніх (2, 8, 32 МБ) - дві пари цих сигналів.
Direct Rambus DRAM (RDRAM) - архітектура оперативної пам'яті ПК нового покоління працює на частотах 300, 350 і 400 МГц. Система пам'яті RDRAM складається з контролера, каналу пов'язаного з одним або декількома модулями, звані RIMM (Rambud In-Line Memory Module). Канал містить дві групи шин: адресну шину шириною 8 біт, з котрих 5 біт - адреса стовпця, а 3 біта - адреса рядка і 16 або 18 розрядну двонаправлену шину даних. Дані та адреса передаються по каналу пакетами. Функції з їх обробці покладено на контролер. До його складу входить мультиплексор/демультиплексор. Він виробляє операції пакування/розпакування між вузьким потоком даних в каналі і більше синхронним паралельним 144 біта. Контролер здійснює також перетворення рівнів сигналів RSC (Rambus Signaling Level) і рівнів к-МОН системної шини працює на частоті 100 МГц, яка становить 1/8 від частоти каналу.
На одному модулі RIMM може розміщуються до 16 мікросхем пам'яті залежно від їх типу. Ємність одного модуля може досягати 256МБ. Тактова частота RDRAM, рівна 400МГц в поєднанні зі зчитуванням даних по 2 фронтах тактового сигналу і 2-байтовой шиною даних теоретично забезпечують максимальну швидкість передачі даних 1,6 ГБ/с.
Розподіл пам'яті представлено на рисунку 4.1.
Рисунок 4.1. – Розподіл пам’яті
Кеш пам’ять
Основна пам'ять, реалізована на відносно повільних за своєю природою мікросхемах динамічної пам'яті, зазвичай вимагає вводу тактів очікування процесора (wait states) в цикли звернення до пам'яті. Статична пам'ять, побудована, як і процесор, на тригерних комірках, по своїй природі здатна наздоганяти сучасні процесори за швидкодією і уникнути (або хоча б скоротити кількість) тактів очікування. Реалізація основної пам'яті на мікросхемах SRAM технічно і економічно не виправдана, оскільки щільність інформації у них істотно нижче, а питома вартість зберігання та енергоспоживання (або, що важливіше, тепловиділення) істотно вище, ніж у DRAM.
Розумним компромісом для побудови економічних і продуктивних систем з'явився ієрархічний спосіб побудови оперативної пам'яті, прийшов в архітектуру PC з появою процесора 386, у якого тактова частота вже значно відривалася від можливостей мікросхеми DRAM того часу. Ідея цього способу полягає в поєднанні основної пам'яті великого обсягу на DRAM з відносно невеликою кеш-пам'яттю на швидкодіючих мікросхемах SRAM. Ідея, звичайно, далеко не нова – надоперативна пам'ять застосовувалася давно, ще у «великих» комп’ютерах.
У перекладі слово «кеш» (cache) означає склад або тайник («заначка»). Таємниця цього складу полягає в його «прозорості» - для програми. Він не являє собою додаткову область пам'яті, що адресується, він є додатковим і швидкодіючим сховищем копій блоків інформації основної пам'яті, до яких, ймовірно, найближчим часом буде звернення. Кеш не може зберігати копію всієї основної пам'яті, оскільки його обсяг у багато разів менше обсягу основної пам'яті. Він зберігає лише обмежену кількість блоків даних і каталог (cache directory) - список їх поточного відповідності областям основної пам'яті. Крім того, кешуватися може не вся пам'ять, доступна процесору:
Зазвичай кешується тільки основна динамічна пам'ять системної плати (пам'ять, встановлена на адаптерах, не кешується), і з цієї пам'яті кешується тільки частина (поширені версії чипсетів для Pentium часто дозволяють кешувати тільки перші 64 Мбайт ОЗУ).
При кожному зверненні до пам'яті, що керується, контролер кеш-пам'яті по каталогу перевіряє, чи є дійсна копія даних у кеші. Якщо вона там є, то це випадок кеш-попадання (cache hit), і звернення за даними відбувається тільки до кеш-пам'яті. Якщо дійсної копії там немає, то це випадок кеш-промаху (cache miss), і дані беруться з основної пам'яті. Відповідно до алгоритму кешування блок даних, що зчитується з основної пам'яті при певних умовах, замінить один з блоків кеша. Від «спритності» і «передбачливості» алгоритму залежить відсоток попадань і, отже, ефективність кешування. Пошук блоку в списку повинен проводитися досить швидко, щоб «роздуми» в ухваленні рішення не звести нанівець виграш від застосування швидкодіючої пам'яті.
У сучасних комп'ютерах кеш зазвичай будується за дворівневою схемою. Первинний кеш (L1Cache) вбудований в усі процесори класу 486 і старше, він є й у деяких моделях 386. Обсяг його невеликий (8-32 Кбайт), і для підвищення продуктивності для даних і команд часто використовується роздільний кеш (так звана Гарвардська архітектура - протилежність Прістонській, що використовує загальну пам’ять для команд і даних). Швидкодія його така, що він працює на внутрішній тактовій частоті процесора (CPU Clock), уже досягла 333 МГц. Вторинний кеш (L2 Cache) зазвичай встановлюється на системній платі. Типовим для комп'ютерів на процесорі i486 вважається обсяг 64-256 Кбайт, для Pentium - 256-512 Кбайт, нові чипсети підтримують до 2 Мбайт L2 Cache. Його швидкодія забезпечує роботу на зовнішній тактовій частоті процесора - частоті системної шини (Host Bus Clock), типове значення якої від діапазону 50-66 МГц вже переходить до 75, 83 і навіть 100-125 МГц. У Pentium Pro синхронний L2 Cache розташований в одному корпусі з процесором і працює на його внутрішній частоті.
Кеш-контролер повинен забезпечувати когерентність (coherency) - узгодження даних кеш-пам'яті обох рівнів з даними в основній пам'яті, причому звернення до цих даних може здійснюватися не тільки з боку процесора (а процесорів може бути і декілька, і в кожного може бути свій внутрішній кеш), але і з боку інших активних (bus-master) адаптерів, підключених до шин (PCI, VLB, ISA...).
Контролер кеша оперує рядками (cache line) фіксованої довжини. Рядок може зберігати копію блоку основної пам'яті, розмір якого збігається з довжиною рядка. З кожним рядком кеша пов'язана інформація про адресу скопійованого в неї блоку основної пам'яті і ознаки її стану. Рядок може бути дійсним (valid) - це означає, що в поточний момент часу вона достовірно відображає відповідний блок основної пам’яті, або недійсною (порожній).
Інформація про те, який саме блок займає даний рядок (тобто старша частина адреси чи номер сторінки), і її стан називається тегом (tag) і зберігається у зв'язаній з даною рядком комірці спеціальної пам'яті тегів (tag RAM). В операціях обміну з основною пам'яттю зазвичай рядок бере участь цілком (несекційний кеш), для процесора i486 і старше довжина рядка збігається з обсягом даних, переданих за один пакетний цикл (для 486 це 4x4 = 16 байт, для Pentium - 4x8 = 32 байт). Можливий і варіант секційного (sectored) кеша, при якому один рядок містить кілька суміжних осередків - секторів, розмір яких відповідає мінімальній порції обміну даних кеша з основною пам'яттю. При цьому в записі каталогу, відповідної кожному рядку, повинні зберігатися біти дійсні для кожного сектора даного рядка. Секціювання дозволяє економити пам'ять, необхідну для зберігання каталогу при збільшенні обсягу кешу, оскільки більша кількість біт каталогу відводиться під тег і вигідніше використовувати додаткові біти дійсності, ніж збільшувати глибину індексу (кількість елементів) каталогу.
Рядки кешу під відображення блока пам'яті звичайно виділяються тільки при операціях читання. Запис блоку, що не має копії в кеші, проводиться тільки в основну пам'ять (для підвищення швидкодії вона може проводитися через буфер відкладеного запису, але це окремий механізм, який не має безпосереднього відношення до даного кешування). Поведінка кеш-контролера при операції запису в пам'ять, коли копія області, що необхідна, знаходиться у деякому рядку кеша, визначається його політикою запису (Write Policy). Існують два основні алгоритми запису даних з кеша в основну пам'ять: наскрізний запис WT (Write Through) і зворотний запис WB (Write Back). Алгоритм WT передбачає виконання кожної операції запису (навіть однобайтної), що потрапляє у керуючий блок, одночасно і в рядок кеша, і в основну пам'ять. При цьому, процесор при кожній операції запису має чекати закінчення щодо тривалого запису в основну пам'ять. Алгоритм досить простий в реалізації і легко забезпечує цілісність даних за рахунок постійного збігу копій даних в кеші і основній пам'яті. Для нього немає необхідності зберігання ознаки стану і модифікації цілком, достатньо лише інформації тега (при цьому вважається, що будь-який рядок завжди відображає блок, на який саме - вказує тег). Але ця простота оплачується низькою ефективністю запису
Існують варіанти цього алгоритму із застосуванням відкладеного буферізованого запису, при цьому дані в основну пам'ять переписуються через FIFO-буфер під час вільних тактів шини.
Алгоритм WB дозволяє зменшити кількість операцій запису на шині основної пам'яті. Якщо блок пам'яті, в який повинен проводитися запис, відображений і в кеші, то фізичний запис спочатку буде проведений в цей дійсний рядок кеша і він буде відзначений як брудний (dirty), або модифікований, тобто вимагає вивантаження в основну пам'ять. Тільки після цього вивантаження (запис в основну пам'ять) рядок стане чистим (clean), і його можна буде використовувати для кешування інших блоків без втрати цілісності даних. В основну пам'ять дані переписуються тільки цілим рядком (після заповнення всіх її секторів в разі секційного кешу) або безпосередньо перед його заміщенням в кеші новими даними.
Даний алгоритм складніше в реалізації, але істотно ефективніше, ніж WT. Підтримка системної платою кешування із зворотним записом потребує обробки додаткових інтерфейсних сигналів для забезпечення вивантаження модифікованих рядків в основну пам'ять, якщо до цієї області проводиться звернення з боку таких контролерів шини, як графічні адаптери, контролери дисків, мережеві адаптери і т.п.
Залежно від способу визначення взаємної відповідності рядка кеша і області основної пам'яті розрізняють три архітектури кеш-пам'яті, а саме: кеш прямого відображення (direct-mapped cache); повністю асоціативний кеш (fully associative cache) та їх комбінація - частково - або набірно-асоціативний кеш (set-associative cache).
У кеш-пам'яті прямого відображення адреси пам'яті, по якому відбувається звернення, однозначно визначає рядок, в якому може знаходитися відображення необхідного блоку. Принципи його роботи покажемо на прикладі несекційного кеша обсягом 256 Кбайт з розміром рядка 32 байта і обсягом основної пам'яті, що керується, 64 Мбайт - типовий кеш системної плати для Pentium. Структуру пам'яті в такій системі ілюструє рисунок. 4.3.1.
Рисунок 4.2.- Структура кешу прямого відображення
Основна пам'ять, що керується, умовно розбивається на сторінки (в даному випадку 256), розмір яких збігається з розміром кеш-пам'яті. Кеш пам'ять (і знову-таки умовно сторінки основної пам'яті) ділиться на рядки (256К/32 = 8К рядків). Архітектура прямого відображення має на увазі, що кожен рядок кеша може відображати з будь-якої сторінки пам'яті, що керується, тільки відповідний їй рядок (на рисунку 4.3.1. вони знаходяться на одному горизонтальному рівні). Оскільки обсяг основної пам'яті значно більше обсягу кешу, на кожен рядок кеша може претендувати безліч блоків пам'яті з однаковою молодшою частиною адреси (зміщенням всередині сторінки).
Один рядок в певний момент може містити копію тільки одного з цих блоків. Номер (адреса) рядка в кеш-пам'яті називається індексом (index). Інформація про те, який саме блок займає даний рядок (тобто старша частина адреси чи номер сторінки), називається тегом (tag) і зберігається у зв'язаній з даним рядком комірці спеціальної пам'яті тегів (tag RAM). Наймолодші біти адреси визначають положення байта в банку пам'яті (А [0:2]) і в рядку (A3, А4), але для роботи кеш-контролера вони несуттєві. Пам'ять тегів повинна мати кількість осередків, дорівнює кількості рядків кеша, а її розрядність повинна вміщати старші біти адреси пам'яті,що кешується, що не потрапили на шину адреси кеш-пам'яті. Крім адресної частини тега з кожним рядком кеша пов'язані біти ознак дійсності і модифікуванні даних.
На початку кожного звернення до пам'яті, що керується, контролер насамперед зчитує комірку каталогу із заданим індексом, порівнює біти адрес тега зі старшими бітами адреси пам'яті та аналізує ознаку дійсності. Цей аналіз виконується в спеціальному циклі стеження (snoop cycle), іноді його називають циклом запиту (inquire). Якщо в результаті аналізу з'ясувалося, що потрібний блок не знаходиться в кеші, то генерується (або продовжується) цикл звернення до основної пам'яті (випадок кеш-промаху); у разі потрапляння запит обслуговується кеш-пам'яті. У разі промаху після зчитування з основної пам'яті нові дані містяться і в рядку кеша (якщо вона чиста), а в її тег поміщаються старші біти адреси і встановлюється ознака дійсності даних. Незалежно від обсягу даних, що потребується, в кеш з основної пам'яті, рядок переписується цілком (оскільки ознака дійсності належить до всіх її байтів). Якщо контролер кеша реалізує випереджаюче зчитування (read ahead), то в наступні вільні цикли шини оновиться і наступний за нею рядок (якщо він був чистий). Це читання «про запас» дозволить при необхідності здійснювати пакетний цикл зчитування з кешу через межі рядка.
Цей кеш має найпростішу апаратну реалізацію і застосовується у вторинному кеші більшості системних плат. Однак йому притаманний серйозний недолік, цілком очевидний при розгляді малюнка. Якщо в процесі виконання програми процесору по черзі будуть вимагатися блоки пам'яті, зміщені відносно один одного на величину, кратну розміру сторінки (на рисунку це будуть блоки, розташовані на одній горизонталі в різних сторінках), то кеш буде працювати інтенсивно, але вхолосту (cache trashing). Чергове звернення буде заміщати дані, лічені в попередньому і будуть потрібні в подальшому обігу - тобто буде суцільна низка кеш-промахів. Перемикання сторінок в багатозадачних ОС також знижує кількість кеш-влучень, що відображається на продуктивності системи. Збільшення розміру кеша при його архітектурі прямого відображення дасть не дуже суттєвий ефект, оскільки різні завдання будуть претендувати на одні й ті ж рядки кеша.
Іноді в описі кеша прямого відображення фігурує поняття набір (set), що може збити з пантелику. Воно застосовується замість терміна рядок (line) в секційному кеші прямого відображення, а сектор тоді називають рядком. З набором (як і рядком несекційного кешу) пов'язана інформація про теги, що відноситься до всіх елементів набору (рядках або секторам).
Чипсети
Дата добавления: 2015-10-28; просмотров: 176 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
СИСТЕМНІ РЕСУРСИ ТА СИСТЕМНІ ШИНИ. ЧИПСЕТИ | | | Характеристика чипсетів |