Иерархия памяти
У одной женщины было обостренное чувство ответственности и почти не было памяти.
Она помнила достаточно, чтобы работать. И работала она упорно.
Лидия Дэвис
Начиная примерно с 2008 года, каждый, кто хочет приобрести новый компьютер, сталкивается с определенной парадоксальной ситуацией при выборе возможностей хранения информации. Необходимо найти компромисс между объемом и скоростью. Сегодня технологии компьютерной индустрии пребывают в фазе перехода от накопителей на жестком диске к твердотельным накопителям (SSD). При одинаковой стоимости жесткий диск может продемонстрировать более высокую мощность, однако твердотельный накопитель гораздо более эффективен, и этот факт либо уже известен потребителям, либо они сами быстро приходят к такому выводу в процессе покупки.
Чего может не знать средний покупатель, так это того, что подобный компромисс достигается внутри любого компьютера на ряде уровней – до такой степени, что его можно признать одной из фундаментальных основ вычислительной деятельности.
В 1946 году Артур Беркс, Герман Голдстайн и Джон фон Нейман, трудясь в Институте специальных исследований в Принстоне, выработали проект предложения, который они назвали «электрический орган памяти». По их словам, в идеальном мире техника, разумеется, обладала бы безграничным количеством молниеносно работающей памяти, но на практике это невозможно (до сих пор). Вместо этого тройка экспертов предложила другой вариант, по их мнению, лучший из реальных: «иерархия слоев памяти, каждый из которых обладал бы большей мощностью, чем предыдущий, но при этом был бы менее доступным». По сути, имея пирамиду из различных форм памяти (маленькой, но быстрой и большой, но медленной), мы могли бы извлечь максимум выгоды из обоих видов. Основная идея иерархии интуитивно будет понятна любому человеку, который хоть раз пользовался библиотекой. Если вы проводите исследование для дипломной работы, вам наверняка понадобятся некоторые книги, на которые вы будете многократно ссылаться. Вместо того чтобы каждый раз идти в читальный зал, вы, разумеется, возьмете нужные книги домой, чтобы они были у вас всегда под рукой.
Идея иерархии памяти оставалась лишь теорией до изобретения суперкомпьютера, или ЭВМ сверхвысокой производительности, который получил название «Атлас» (это произошло в 1962 году в Манчестере). Основная память компьютера состояла из огромного барабана, который вращался при чтении и записи информации в отличие от его предшественника – воскового цилиндра. Однако у «Атласа» была более быстрая оперативная память меньшего объема, работающая на поляризованных магнитах. Данные считывались из цилиндра и передавались на магниты, где быстро обрабатывались, и затем результаты записывались на цилиндр. Вскоре после изобретения «Атласа» кембриджский математик Морис Вилкес пришел к выводу, что быстрая память небольшого объема – не самое подходящее место для хранения данных до их повторного сохранения на цилиндре. Оперативную память также можно было использовать для хранения фрагментов информации, которые могли бы пригодиться позднее. Ожидание аналогичных будущих запросов на эту информацию существенно ускоряло операционные процессы компьютера. Если информация, которую вы ищете, все еще находится в оперативной памяти, то вам не нужно выгружать ее из цилиндра. Как отметил Вилкес, память меньшего объема «автоматически накапливает в себе слова, которые переходят в нее из основной медленной памяти, и сохраняет их для последующего использования без необходимости вновь обращаться к основной памяти». Главное здесь, конечно, возможность использовать эту небольшую, быструю драгоценную память так, чтобы в ней всегда было то, что вам нужно, и вы могли обращаться к ней максимально часто. Если развить аналогию с библиотекой, это тот случай, когда вы можете один раз сходить за всеми нужными книгами и затем всю неделю работать с ними дома. Это так же удобно, как если бы все книги библиотеки уже лежали на вашем рабочем столе. Чем больше походов в библиотеку вы совершаете, тем больше замедляются темпы вашей работы.
Предложение Вилкеса было использовано позже, в конце 1960-х годов, когда в суперкомпьютер IBM 360/85 внедрили память, которая получила название «кеш» (быстродействующая буферная память большой емкости). С тех пор кеш повсеместно использовался в компьютерных технологиях. Идея хранения фрагментов информации, к которой пользователь обращается часто, настолько высокоэффективна, что в наши дни она используется во всех аспектах компьютерной деятельности.
В процессоры встроен кеш. В жесткие диски встроен кеш. Операционные системы используют кеш. Интернет-браузеры работают с помощью кеш-памяти. И даже серверы, которые «поставляют» контент в эти браузеры, тоже используют кеш, что позволяет нам в сотый раз моментально запускать видео, в котором кошка катается на роботе-пылесосе. Однако мы немного опережаем события.
История развития компьютерных технологий за последние пятьдесят с небольшим лет постоянно демонстрирует опережающий рост и отчасти позволяет нам сослаться на известное своей точностью предсказание, озвученное Гордоном Муром из корпорации Intel в 1975 году. Согласно этому предсказанию, количество транзисторов в компьютерном процессоре должно было удваиваться каждые два года. Тем не менее эффективность памяти при этом не прогрессировала, то есть затраты на доступ к памяти также многократно возрастали относительно времени обработки данных. Таким образом, чем быстрее вы пишете вашу дипломную работу, тем больше снижается продуктивность каждого похода в библиотеку. Аналогично эффективность завода, который удваивает скорость производства каждый год (но при этом получает все то же количество деталей из-за рубежа в прежнем неторопливом темпе), едва ли будет выше эффективности завода, работающего в два раза медленнее. Сначала казалось, что закон Мура не принес никакой пользы, кроме того что процессоры стали «простаивать» все больше и чаще. В 90-е годы эта проблема получила название «стена памяти».
Лучшим средством защиты компьютерной науки от удара об эту стену стало изобретение еще более сложной иерархии: кеш для кеша для кеша на всех уровнях памяти. Современные лэптопы, планшеты и смартфоны имеют шестиуровневую иерархию памяти, при этом экономное и разумное использование памяти еще никогда не было так важно для компьютерных технологий, как сейчас. Так давайте рассмотрим первый вопрос, который приходит на ум, когда речь заходит о кеш-памяти (или о шкафах, к примеру). Что же нам делать, когда все переполнено?