Иерархия памяти: различия между версиями

[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м Под памятью в данном случае подразумевается устройство хранения данных (запоминающее устройство) в [[Вычислительная_техника|Вычисли
Строка 20:
# Накопители, требующие переключения носителей (Off-line bulk storage) — или третичная память. Сюда относятся [[Ленточный накопитель|магнитные ленты]], [[Ленточная библиотека|ленточные]] и [[дисковые библиотеки]], требующие длительной перемотки либо механического (или ручного) переключения носителей информации.
 
== Иерархия памяти в современных [[ПК]] ==
 
В большинстве современных [[ПК]] рассматривается следующая [[иерархия]] памяти:
# [[Регистры микропроцессорапроцессора]], организованные в [[регистровый файл]] — наиболее быстрый доступ (порядка 1 [[такт|такта]]), но размером лишь в несколько сотен или, редко, тысяч [[байт]].
# [[Кэш процессора]] 1го уровня (L1) — время доступа порядка нескольких [[такт|тактов]], размером в десятки [[килобайт]]
# [[Кэш процессора]] 2го уровня (L2) — большее время доступа (от 2 до 10 раз медленнее L1), около полумегабайтаполу-[[Мегабайт|мегабайта]] или более
# [[Кэш процессора]] 3го уровня (L3) — время доступа около сотни тактов, размером в несколько [[мегабайт]] (в массовых процессорах используется с недавнего времени)
# [[ОЗУ]] системы — время доступа от сотен до, возможно, тысячи тактов, но огромные размеры в несколько [[гигабайт]], вплоть до десятков. Время доступа к [[ОЗУ]] может варьироваться для разных его частей в случае комплексов класса [[NUMA]] (с неоднородным доступом в память)
# [[Дисковый массив|Дисковое хранилище]] — многие миллионы тактов, если данные не были закэшированны или забуферизованны заранее, размеры до нескольких [[терабайт]]
# Третичная память — задержки до нескольких секунд или минут, но практически неограниченные объемы ([[ленточная библиотека|ленточные библиотеки]]).
 
Современные [[языки программирования]] обычно предполагают, что память делится на два уровня, оперативную память и дисковые накопители, хотя в [[ассемблер|ассемблерных]] [[Языки программирования|языках]] и ассемблерно-совместимых (типа Си или[[Си_(язык_программирования)|C]] Си++) существует возможность непосредственной работы с регистрами. Получение преимуществ от иерархии памяти требует совместных действий от программиста, аппаратуры и компиляторов (а также нижележащаябазовая поддержка в операционной системе):
* Программисты отвечают за программированиеорганизацию пересылокпередачи данных между дисками и ОЗУпамятью при[[ПК]] ([[ОЗУ]]), помощииспользуя файлового[[файл|файловый]] ввода[[ввод-выводавывод]].
* [[Аппаратное обеспечение]] отвечает за прозрачноеорганизацию использованиепередачи кэшейданных длямежду работойпамятью с[[ПК]] памятьюи кэшами.
* Оптимизирующие [[Компилятор|компиляторы]] отвечают за генерацию такого [[Код|кода]], который при исполнении приводиткоторого каппаратура эффективному использованиюэффективно регистровиспользует [[регистр|регистры]] и кэшей[[кэш процессора]].
 
Многие программисты предполагают,признают чтоодин оперативнаяуровень памятьпамяти является одним уровнем иерархии[[ПК]]. Этот подход работает до тех пор, пока [[Программа (компьютер)|приложение]] не столкнется с падением производительности из-за насыщения подсистемы памяти ([[Random Access Memory|memory wall]]). При перепроектированииисправлении кода нужно([[Рефакторинг]] [[Программа (компьютер)|программы]]) будетнеобходимо учесть верхние уровни иерархии памяти.
 
== Примечания ==