Ієрархія пам'яті

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Діаграма ієрархії комп'ютерної пам'яті

Ієра́рхія па́м'яті — термін, який використовується в обчислювальній техніці при проектуванні і низькорівневому програмуванні ЕОМ (комп'ютерів).

Означає, що різні види пам'яті утворюють ієрархію, на різних рівнях якої розташовані пам'яті з різними часом доступу, складністю, вартістю та обсягом. Можливість побудови ієрархії пам'яті викликана тим, що більшість алгоритмів звертаються в кожний проміжок часу до невеликого набору даних, який може бути поміщений у швидшу, але дорожчу і тому невелику, пам'ять (див. locality of reference[en]). Використання швидшої пам'яті збільшує продуктивність обчислювального комплексу. Під пам'яттю в даному разі мається на увазі пристрій (пристрої) зберігання даних в обчислювальній техніці або комп'ютерна пам'ять.

При проектуванні високопродуктивних комп'ютерів і систем необхідно розв'язати багато компромісів, таких як розміри і технології для кожного рівня ієрархії. Можна розглядати набір різних типів пам'яті (m1,m2,…,mn), які знаходяться в ієрархії, тобто кожен mi рівень є підлеглим для mi+1 рівня ієрархії. Для зменшення часу очікування на вищих рівнях, нижчі рівні можуть готувати дані укрупненими частинами з буферизацією і, після наповнення буфера, сигналізувати верхньому рівню про можливість отримання даних.

Часто виділяють 4 основних (укрупнених) рівня ієрархії:

  1. Внутрішня пам'ять процесора (регістри, організовані в регістровий файл і кеш процесора).
  2. Основний — оперативна пам'ять системи (англ. RAM) і допоміжних карт пам'яті.
  3. Накопичувачі з «гарячим» доступом (англ. On-line mass storage) — або вторинна комп'ютерна пам'ять. Жорсткі диски і твердотільні накопичувачі, які не потребують тривалих (секунди і більше) дій для початку отримання даних.
  4. Накопичувачі, що вимагають переключення носіїв (англ. Off-line bulk storage) — або третинна пам'ять. Сюди відносяться магнітні стрічки, стрічкові і дискові бібліотеки, які потребують тривалого перемотування або механічного (або ручного) перемикання носіїв інформації.

Ієрархія пам'яті в сучасних ПК[ред. | ред. код]

У більшості сучасних ПК розглядається наступна ієрархія пам'яті:

  1. Регістри процесора, організовані в регістровий файл — найбільш швидкий доступ (близько 1 такту), але розміром лише в декілька сотень або, рідко, тисяч байт.
  2. Кеш процесора 1го рівня (L1) — час доступу порядку декількох тактів, розміром в десятки кілобайт.
  3. Кеш процесора 2го рівня (L2) — більший час доступу (від 2 до 10 разів повільніше L1), близько половини мегабайта або більше.
  4. Кеш процесора третього рівня (L3) — час доступу близько сотні тактів, розміром в декілька мегабайт (у масових процесорах використовується з недавнього часу).
  5. ОЗП системи — час доступу від сотень до, можливо, тисячі тактів, але величезні розміри в кілька гігабайт, аж до десятків. Час доступу до оперативної пам'яті може змінюватись для різних його частин у випадку комплексів класу NUMA (з неоднорідним доступом в пам'ять).
  6. Дискове сховище — багато мільйонів тактів, якщо дані не були розміщені у кеші або буфері заздалегідь, розміри до декількох терабайт.
  7. Третинна пам'ять — затримки до декількох секунд або хвилин, але практично необмежені обсяги (стрічкові бібліотеки).

Більшість програмістів звичайно припускає, що пам'ять ділиться на два рівні, оперативну пам'ять і дискові накопичувачі, хоча в ассемблерних мовах і ассемблерно-сумісних (типу C) існує можливість безпосередньої роботи з регістрами. Отримання переваг від ієрархії пам'яті вимагає спільних дій від програміста, апаратури і компіляторів (а також базова підтримка в операційній системі):

  • Програмісти відповідають за організацію передачі даних між дисками і оперативною пам'яттю, використовуючи для цього файловий ввід-вивід.
  • Апаратне забезпечення відповідає за організацію передачі даних між пам'яттю і кешами.
  • Оптимізувальний компілятор відповідає за генерацію коду, при виконанні якого апаратура ефективно використовує регістри і кеш процесора.

Багато програмістів не враховують багаторівневість пам'яті при програмуванні. Цей підхід працює поки застосунок не зіткнеться з падінням продуктивності через насичення підсистеми пам'яті (англ. memory wall). При виправленні коду (рефакторинг) необхідно врахувати наявність і особливість роботи верхніх рівнів ієрархії пам'яті для досягнення найвищої продуктивності.

Джерела[ред. | ред. код]

  • Михайло Гук. «Апаратні засоби IBM PC». Санкт-Петербург, 1998.