Где хранятся данные которые не помещаются в оперативную память
Оперативная память играет важную роль: во время работы компьютера в ней хранятся текущие данные, которые необходимы процессору в тот или иной момент времени. Например, когда вы запускаете какую-нибудь программу, она в первую очередь загружается с жесткого диска в оперативную память и только после этого становится доступной для процессора.
Допустим, вы поработали в какой-то программе и вдруг решили поиграть в очень интересную игру. Для простоты предположим, что вы сначала закрыли свою программу, после чего запустили игрушку. При этом данные, связанные с программой, выгружаются из оперативной памяти, а информация об игре загружается в «оперативку». То есть уже данные игры (а не программы) станут доступны для процессора, что и позволит вам насладиться именно игрой.
Усложним пример. Допустим, вы запустили несколько программ (или игр) одновременно. При этом все связанные с запущенными приложениями данные загрузятся в оперативную память (конечно, если ее объема для этого достаточно). В зависимости от того, на какую конкретно программу вы решили переключиться, процессор обратится именно к тем ячейкам памяти, в которых хранятся данные, связанные с этой программой.
Соединяем узнанное воедино
Как мы уже упоминали, процессор «общается» с оперативной памятью не напрямую, а через специальную микросхему на материнской плате, которая называется северным мостом. При этом процессор, северный мост и оперативная память соединены между собой почти сотней очень тоненьких проводников, которые и называются системной шиной (FSB), о которой мы также уже говорили.
«Для чего вообще нужна оперативная память? – спросите вы. – Почему бы процессору не работать напрямую с файлами программ, хранящимися на жестком диске компьютера?»
Дело в том, что тогда бы возникли серьезные проблемы со скоростью работы компьютера. Пока все существующие в природе жесткие диски работают медленнее оперативной памяти в тысячи раз. Вот и приходится сначала загружать необходимые данные в намного более быструю оперативную память, чтобы процессор мог с ними нормально работать.
Внимание!
Нужно четко представлять, что оперативная память является энергозависимой. Это означает, что, как только вы выключите компьютер (или вдруг пропадет электричество), все данные из оперативной памяти пропадут.
По-английски оперативная память называется Random Access Memory (RAM), что переводится как «память с произвольным доступом». Что это за произвольный доступ? Будем разбираться, как говорится, «на пальцах».
Данные в оперативной памяти хранятся в так называемых ячейках. Каждая ячейка имеет индивидуальный адрес, который состоит из номеров строки и столбца, в которых расположена эта ячейка. Таких ячеек очень много (миллионы), и вместе они составляют двумерную матрицу.
Так вот, произвольный тип доступа оперативной памяти означает то, что если процессору вдруг понадобились данные из ячейки какого-нибудь стотысячного столбца и двухсоттысячной строки, ему не нужно последовательно перебирать все предыдущие тысячи столбцов и строк, чтобы добраться до искомой ячейки. Поиск и обращение к нужной ячейке происходят непосредственно и за счет этого очень быстро, что, согласитесь, достаточно благоприятно влияет на скорость работы.
Иными словами, сочетание «произвольный доступ» означает, что скорость доступа к конкретной ячейке не зависит от ее физического расположения в памяти.
Для сравнения
К примеру, на так называемых ленточных носителях информации реализован последовательный доступ. При таком типе доступа, чтобы прочитать содержимое ячейки (блока) под номером 1000, устройству чтения первым делом необходимо обнаружить начальную ячейку (для чего перемотать магнитную ленту к началу), потом последовательно отсчитать 999 блоков и только после этого произвести чтение из нужной ячейки.
Зададимся вопросом: «Что собой представляет оперативная память или, говоря более понятным языком, как она выглядит?» Это плата с расположенными с двух сторон прямоугольными микросхемами, в которых непосредственно и находится оперативная память (рис. 4.6).
Рис. 4.6. Плата оперативной памяти (один из видов)
На материнской плате оперативная память устанавливается в специально предназначенные для этого слоты (рис. 4.7).
Рис. 4.7. Слоты для оперативной памяти
Следует иметь в виду, что для каждого вида модулей оперативной памяти существуют собственные слоты. То есть вы не сможете, к примеру, установить память SDRAM в слот для DDR SDRAM, и наоборот.
Примечание
Не пугайтесь. Чуть позже вы узнаете, что означают загадочные аббревиатуры SDRAM и DDR SDRAM.
Впрочем, как самостоятельно устанавливать оперативную память на материнскую плату, мы рассмотрим в главе 11, а пока поговорим о ее основных характеристиках и видах.
Объем оперативной памяти
Самой понятной для обычного пользователя характеристикой памяти является ее объем. Как мы уже упоминали, объем современных плат памяти измеряется сотнями мегабайт. Чтобы ваш компьютер работал эффективно, он должен быть «вооружен» достаточным количеством оперативной памяти.
Если перевести наш разговор в русло сухих фактов, то вы узнаете, что для работы в операционной системе Windows XP неплохо бы иметь минимум 256 Мбайт «оперативки» (это необходимый минимум, комфортно работать с таким объемом памяти не получится), а лучше – 512 Мбайт. Если же компьютер работает под управлением Windows Vista, памяти понадобится значительно больше, то есть никак не меньше 512 Мбайт. А если вы хотите насладиться всеми прелестями полупрозрачного и трехмерного интерфейса Vista, придется начинать плясать от 1 Гбайт.
Быстродействие и производительность
Вы уже знаете, что самым быстрым устройством компьютера является процессор. Поэтому задача роста производительности ПК сводится не столько к повышению тактовой частоты ядра процессора, сколько к увеличению скорости работы остальных устройств, чтобы процессор не так долго простаивал, ожидая своих неторопливых коллег.
Оперативная память хоть и работает намного быстрее других внутренних устройств компьютера, все равно сильно отстает от скорости процессора. В связи с этим производители памяти все время пытаются всячески увеличить ее скорость.
Основным параметром быстродействия оперативной памяти является время доступа. Это время, которое проходит между моментом, когда чипсет дает запрос о содержимом ячейки памяти, и моментом, когда к нему возвращается ответ.
Время доступа измеряется в наносекундах. Напомним, что 1 нс = 10 –9 с. Такие промежутки времени могут показаться вам неимоверно малыми, но для процессора они все равно остаются очень большими.
Величина, обратная времени доступа, называется тактовой частотой. Этот параметр является более наглядным, так как позволяет реально сравнить скорость работы процессора и оперативной памяти. Например, устаревшие уже типы «оперативки» имели время доступа около 15 нс, что соответствовало тактовой частоте 60 МГц. Современные же типы памяти могут работать с тактовыми частотами 1066 МГц и выше.
Помимо скорости, оперативная память характеризуется таким важным параметром, как производительность (она же – теоретическая пропускная способность). Как производительность процессора зависит от разрядности системной шины, так производительность оперативной памяти зависит от разрядности шины памяти.
Разрядность шины памяти – это количество бит (байт), которые память может одновременно записать или прочитать за раз. Большинство современных типов памяти имеют разрядность шины 64 бита (8 байт) (хотя есть и выше).
Производительность оперативной памяти определяет количество информации, которое память способна принять или выдать за 1 секунду. И вычисляется она простым умножением разрядности шины памяти на скорость памяти.
Но не будем слишком глубоко вдаваться в технические тонкости. Вычислять быстродействие и производительность оперативной памяти вы вряд ли будете, скорее всего, просто купите ту, которая подходит к вашей материнской плате.
Типы памяти и виды модулей памяти
• FPM RAM (Fast Page Mode RAM) – память с так называемым быстрым страничным обменом использовалась в первые годы компьютерной эры. Как мы уже упоминали, оперативная память представляет собой многомиллионную матрицу ячеек. Для ускорения доступа к оперативной памяти она разбивалась на так называемые страницы. Это позволяло увеличить скорость доступа к данным в случаях, когда изменялся только номер столбца ячейки, а номер строки оставался неизменным. Время доступа FPM RAM составляло 200 нс.
• В 1995 году появилась память EDO RAM (Extended Data Output RAM), то есть оперативная память с расширенными возможностями вывода. EDO RAM была усовершенствованной версией FPM RAM. Время доступа данной памяти составляло уже 50 нс, но все равно было еще очень и очень большим (по сравнению со скоростью работы процессоров).
Эти два типа памяти безнадежно устарели и вряд ли уже когда-либо вам встретятся. Хотя, если вам попадется один из первых компьютеров на базе процессора Pentium Pro…
• В конце 1990-х годов производители памяти осчастливили пользователей компьютеров памятью нового типа SDRAM (Synchronous Dynamic RAM) – синхронная динамическая память. Данная память функционировала значительно быстрее предшественниц (время доступа составляло 6–9 нс) за счет синхронизации своей работы с системной платой. Память SDRAM хоть и считается уже морально устаревшей, однако ее все еще довольно часто можно встретить на не очень новых компьютерах. К тому же найти данную память в продаже не так легко.
• Следующим витком эволюции оперативной памяти стала DDR SDRAM. Аббревиатура DDR означает Double Data Rate – удвоенная скорость передачи данных. Как можно догадаться из названия, данная память работает в два раза быстрее SDRAM, и это действительно так. Память DDR SDRAM (и ее потомки) используется практически на всех современных компьютерах. Такая популярность памяти DDR SDRAM объясняется тем, что она способна работать с большинством современных системных плат, функционирующих на высоких частотах.
• Нетрудно предположить, что память DDR2 SDRAM и DDR3 SDRAM – это дальнейшее развитие DDR SDRAM. Эти типы различаются некоторыми технологическими особенностями, но нам это не так интересно. Просто запомните, что DDR2 работает быстрее, чем DDR, а DDR3 – быстрее, чем DDR2.
• Некоторое время лидером в быстродействии являлась память RDRAM (Rambus Dynamic RAM) – динамическая память от компании Rambus. Она работала на частотах 400 и 533 МГц и очень дорого стоила. Из-за своей дороговизны RDRAM не получила широкого распространения и встречается в некоторых компьютерах на базе уже несколько устаревшего процессора Pentium 4. Другие же производители материнских плат решили использовать более доступную память DDR SDRAM.
Вот такие типы памяти существовали либо существуют на рынке компьютерных технологий.
Теперь поговорим о модулях оперативной памяти. Под модулем мы будем понимать плату, на которой расположены микросхемы памяти (см. рис. 4.6). Модули отличаются друг от друга размерами и формой (форм-фактором). Вам могут встретиться модули памяти трех видов: SIMM, DIMM и RIMM.
• Модули SIMM (Single Inline Memory Module – модуль памяти с однорядным расположением выводов) являются устаревшими, так как именно на них реализовывалась память FPM и EDO. Данные модули производились в двух вариантах: 30– и 72-контактные (рис. 4.8).
Рис. 4.8. 30-контактный (сверху) и 72-контактный (снизу) модули SIMM
Отличительной особенностью модулей SIMM являлось то, что их нельзя было устанавливать на материнскую плату по одиночке или в нечетном количестве: 72-контактные модули располагались только парами, а маленькие 30-контактные – группами по четыре штуки. При нарушении этого правила материнская плата просто «не видела» память.
• Модули DIMM (Dual Inline Memory Module – модуль памяти с двухрядным расположением выводов) появились вместе с памятью SDRAM. Эти модули имеют 168 контактов и поддерживают скорости работы 66, 100 и 133 МГц. С появлением памяти DDR SDRAM появились 184-контактные модули, работающие на частоте от 200 МГц. Кстати, на рис. 4.6 изображен именно модуль DIMM.
Хоть 168– и 184-контактные модули DIMM и одинаковы по размерам, они имеют некоторые различия в форме. Это сделано именно для того, чтобы нельзя было установить модуль DIMM с памятью SDRAM в слот для памяти DDR SDRAM и наоборот.
• Как вы уже догадались, модули RIMM поддерживают память RDRAM. Они имеют 184 контакта, такие же размеры, как модуль DIMM, однако и ряд специфических особенностей конструкции (рис. 4.9), которые не позволят установить их в слот для модулей DIMM.
Рис. 4.9. Модуль RIMM
Подытоживая разговор об оперативной памяти, хочется отметить, что все описанные выше параметры вы, как правило, можете найти прямо на модуле памяти. Производители указывают их на специальных наклеечках. Там должна быть приведена информация о емкости модуля памяти, ее типе, быстродействии, рабочем напряжении питания, а также название фирмы-изготовителя. Если вам кто-то попробует продать память без такой наклейки, советуем ее не покупать – наверняка вам пытаются подсунуть какую-нибудь дешевую подделку.
Данный текст является ознакомительным фрагментом.
Продолжение на ЛитРес
Зачем вообще нужна оперативная память?
Прежде чем перейти к обсуждению решений, давайте проясним, почему эта проблема вообще существует. В оперативную память (RAM) можно записывать данные, но и на жёсткий диск тоже, так зачем вообще нужна RAM? Диск дешевле, у него обычно нет проблем с нехваткой места, почему же просто не ограничиться чтением и записью с диска?
Теоретически это может сработать. Но даже современные быстрые SSD работают намного, намного медленнее, чем RAM:
- Чтение с SSD: ~16 000 наносекунд
- Чтение из RAM: ~100 наносекунд
Сам себе СМИ
Сам себе СМИ Метки: СМИ, пользовательский контентЖурнал Time в 2006 году присвоил звание «Человек года» интернет-пользователю как таковому, вынеся на свою обложку зеркальный монитор с надписью You, в котором отражается тот, кто взял в руки журнал. Редакция Time тем самым хотела
Резюме: Не подпускать к себе конкурентов
Резюме: Не подпускать к себе конкурентов В данном случае проблема была обнаружена до возможного нанесения ущерба. Конечно, обнаружить такие проблемы во время профилактического аудита безопасности соседних систем удается не во всех компаниях. Многие из них вообще не
Дальше: применение этих методов
Проблему нехватки RAM проще всего решить с помощью денег, докупив оперативной памяти. Но если это невозможно или недостаточно, вы так или иначе примените сжатие, фрагментацию или индексирование.
Те же методы используются в различных программных пакетах и инструментах. На них построены даже высокопроизводительные системы Big Data: например, параллельная обработка отдельных фрагментов данных.
В следующих статьях рассмотрим, как применять эти методы в конкретных библиотеках и инструментах, в том числе NumPy и Pandas.
Всем привет. Кто-то из вас, возможно, уже знаком с СУБД для данных в оперативной памяти, но на всякий случай — по ссылке можно найти их общее описание. Если вкратце, такие СУБД хранят данные целиком в оперативной памяти. Что это означает? Каждый раз, отправляя запрос на поиск или обновление данных, вы обращаетесь только к оперативной памяти в обход жесткого диска — на нем никакие операции не производятся. И это хорошо, потому что оперативная память работает намного быстрее любого диска. Примером такой СУБД является Memcached.
Секундочку, скажете вы, а как же восстановить данные после перезагрузки или поломки машины с такой СУБД? Если на машине установлена СУБД для хранения данных только в оперативной памяти, о них можно забыть: при отключении питания данные бесследно исчезнут.
Можно ли объединить достоинства хранения данных в оперативной памяти с надежностью проверенных временем СУБД вроде MySQL или Postgres? Конечно! Повлияет ли это на производительность? Вы удивитесь, но нет!
Встречайте СУБД для данных в оперативной памяти, обеспечивающие их сохранность: Redis, Aerospike, Tarantool.
Вы можете спросить, как же эти СУБД обеспечивают сохранность данных? Фокус в том, что все данные по-прежнему хранятся в оперативной памяти, но каждая операция вдобавок записывается в расположенный на диске журнал транзакций. Посмотрите на изображение ниже:
Транзакции всегда записываются в самый конец журнала. В чем плюс такого подхода? Диск работает довольно быстро. Если говорить о классическом жестком диске (HDD), он может записывать данные в конец файла со скоростью до 100 Мбайт/с. Не верите? Запустите этот тест из командной строки в Unix/Linux/macOS:
И посмотрите, как быстро увеличивается размер some_file . Итак, жесткий диск весьма проворен при последовательной записи, однако его скорость резко падает при произвольной записи: обычно он способен выполнить около 100 таких операций.
При побайтовой записи, когда каждый байт записывается в произвольное место на жестком диске, вы можете увидеть, что реальная максимальная производительность диска составляет 100 байтов/с. Еще раз, всего-навсего 100 байтов/с! Разница в шесть порядков между пессимистичной (100 байтов/с) и оптимистичной (100 000 000 байтов/с) оценками скорости доступа к диску столь велика потому, что для поиска по произвольному сектору на диске требуется физическое движение головки диска, тогда как при последовательном доступе можно считывать данные по мере вращения диска; головка при этом остается неподвижной.
Если говорить о твердотельном накопителе (SSD), здесь ситуация лучше из-за отсутствия движущихся частей. Однако соотношение пессимистичной (1—10 тысяч операций в секунду) и оптимистичной (200—300 Мбайт/с) оценок остается практически неизменным: четыре-пять порядков. Подробнее с этими показателями можно ознакомиться по ссылке.
Таким образом, наша СУБД для данных в оперативной памяти, по сути, наводняет журнал транзакциями со скоростью до 100 Мбайт/с. Достаточно ли это быстро? Очень быстро. Предположим, размер транзакции составляет 100 байтов, тогда скорость будет равняться миллиону транзакций в секунду! Это настолько хороший показатель, что вам абсолютно точно не придется волноваться о производительности диска при использовании подобной СУБД. По ссылке ниже находится подробный тест производительности одной СУБД в оперативной памяти при обработке миллиона транзакций в секунду, где проблемным элементом является не диск, а процессор:
Подведем итог всему вышесказанному о дисках и СУБД в оперативной памяти:
- СУБД в оперативной памяти не обращаются к диску при обработке запросов, не изменяющих данные.
- СУБД в оперативной памяти все-таки обращаются к диску при обработке запросов, изменяющих данные, но работают с ним на максимальной скорости.
Во-вторых, дисковые СУБД должны сохранять данные таким образом, чтобы измененные данные можно было немедленно считать, в отличие от СУБД в оперативной памяти, которые не считывают с диска, за исключением случаев, когда при старте запускается восстановление. Именно поэтому для быстрого считывания дисковым СУБД нужны особые структуры данных, чтобы избежать полного сканирования журнала транзакций.
Одна из таких структур — B/B+-дерево, ускоряющее считывание данных. Недостатком этого дерева является необходимость изменять его при каждом меняющем данные запросе, что может привести к падению производительности из-за произвольного доступа к диску. Довольно много движков СУБД основано на B/B+-деревьях, из популярных можно назвать InnoDB от MySQL и движок Postgres.
Существует другая структура, которая лучше справляется с записью данных, — LSM-дерево. Это относительно новый тип деревьев, который не решает проблему произвольного считывания, но помогает избавиться от части проблем, связанных с произвольной записью. Примерами движков, использующих такие деревья, могут служить RocksDB, LevelDB или Vinyl. На изображении ниже приведена сводная информация о типах СУБД и используемых ими деревьях:
Резюмируем вышесказанное: СУБД в оперативной памяти, обеспечивающие сохранность данных, как при считывании, так и при записи могут работать очень быстро, а точнее — так же быстро, как и СУБД в оперативной памяти, которые не сохраняют данные на диске: первые используют диск настолько эффективно, что он никогда не становится проблемным местом.
Последняя — по порядку, но не по значимости — тема, которую я хотел бы затронуть в статье, посвящена снимкам состояния. Снятие таких снимков необходимо для компактификации журналов транзакций. Снимок состояния базы данных — это копия всех имеющихся данных. Снимка и журналов с последними транзакциями достаточно для восстановления состояния вашей базы данных. Поэтому, имея свежий снимок состояния, можно удалять все старые журналы транзакций, предшествующие дате снимка.
Зачем компактифицировать журналы? Потому что чем больше журналов, тем дольше будет восстановление базы данных. И потом, вам ведь не хочется захламлять диск устаревшей и бесполезной информацией (ну хорошо, старые журналы иногда здорово выручают, но давайте поговорим об этом в отдельной статье).
По сути, периодически делая снимки состояния, вы целиком копируете базу данных из оперативной памяти на диск. Как только копирование закончилось, можно смело удалять все журналы, в которых нет транзакций, записанных позже последней транзакции в вашем снимке состояния. Довольно просто, не так ли? А все потому, что все транзакции начиная с самого первого дня попадают в снимок.
Вы могли задаться вопросом: как сохранить консистентное состояние базы данных на диск и как определить последнюю зафиксированную в снимке транзакцию при условии постоянного поступления новых транзакций? Об этом мы поговорим в следующей статье.
Внешняя память - это память, предназначенная для длительного хранения программ и данных. Целостность содержимого ВЗУ не зависит от того, включен или выключен компьютер.
Внутренняя память -
Оперативная память (ОП) предназначена для временного хранения выполняемых программ и данных, обрабатываемых этими программами. Это энергозависимая память. Физически реализуется в модулях ОЗУ (оперативных запоминающих устройствах) различного типа. При выключении электропитания вся информация в оперативной памяти исчезает.
Объём хранящейся информации в ОЗУ составляет от 32 до 512 Мбайт и более. Занесение информации в память и её извлечение, производится по адресам. Каждый байт ОП имеет свой индивидуальный адрес (порядковый номер) . Адрес – число, которое идентифицирует ячейки памяти (регистры) . ОП состоит из большого количества ячеек, в каждой из которых хранится определенный объем информации. ОП непосредственно связана с процессором. Возможности ПК во многом зависят от объёма ОП.
Кеш память - очень быстрая память малого объема служит для увеличения производительности компьютера, согласования работы устройств различной скорости.
Специальная - постоянная, Fiash, видеопамять и тд.
Постоянное запоминающее устройство (ПЗУ) – энергонезависимая память для хранения программ управления работой и тестирования устройств ПК. Важнейшая микросхема ПЗУ – модуль BIOS (Basic Input/Output System – базовая система ввода/вывода) , в котором хранятся программы автоматического тестирования устройств после включения компьютера и загрузки ОС в оперативную память. Это Неразрушимая память, которая не изменяется при выключении питания
Перепрограммируемая постоянная память (Flash Memory) – энергонезависимая память, допускающая многократную перезапись своего содержимого
CMOS RAM (Complementary Metal-Oxide Semiconductor) - память с невысоким быстродействием и минимальным энергопотреблением от батарейки. Используется для хранения информации о конфигурации и составе оборудования компьютера, о режимах его работы. Содержимое изменяется программой, находящейся в BIOS (Basic Input Output System).
Видеопамять – запоминающее устройство, расположенное на плате управления дисплеем и предназначенное для хранения текстовой и графической информации, отображаемой на экране. Содержимое этой памяти сразу доступно двум устройствам – процессору и дисплею, что позволяет изменять изображение на экране одновременно с обновлением видеоданных в памяти.
Так что данные хранятся во внешней памяти.
ПИСЬМОНОСЕЦ: Сам себе «Компьютерру»
ПИСЬМОНОСЕЦ: Сам себе «Компьютерру» Автор: Сергей ВильяновВот Евгений Антонович обрадовался, получив камеру в подарок. Приятно. А своему другу-то чего приятное не стал делать? Взял бы и подарил. Была бы дружба крепче.И еще непонятна фраза «ушел в руки друга по цене,
Оперативная память
Оперативная память Оперативная память (оперативное запоминающее устройство, ОЗУ, «мозги», «оперативка») – микросхемы, используемые процессором для временного хранения данных при выполнении расчетов. В подавляющем большинстве случаев такая память представлена в виде
8.2. Как представлять себе программы на Прологе
8.2. Как представлять себе программы на Прологе Одной из характерных особенностей Пролога является то, что в нем допускается как процедурный, так и декларативный стиль мышления при составлении программы. Эти два подхода детально обсуждались в гл. 2 и затем многократно
Заведите себе врага
Заведите себе врага БоритесьИногда лучший способ узнать, каким должно быть ваше приложение — это узнать, каким оно не должно быть. Пусть это будет врагом вашего приложения, и вы будете видеть свет, на который вы должны идти.Когда мы решили создать систему управления
Убей в себе “слактивиста”[16]
Убей в себе “слактивиста”[16] Те, кого заворожили возможности “цифровой” политической деятельности, увы, редко могут отличить ее от “слактивизма”, или “диванного активизма”. Эта опасная разновидность слишком часто ведет к беспорядочным гражданским связям (обычно в
6.3. Сам себе Спилберг (DVD-студия Windows)
6.3. Сам себе Спилберг (DVD-студия Windows) DVD отличается от CD не только большой емкостью, это еще и особый формат. Он поддерживает создание меню, ускоренную и замедленную перемотку (очень ускоренную и очень замедленную), «перелистывание» разделов… Словом, если вы смотрите фильмы
Оперативная память
Оперативная память Оперативная память – одно из устройств, от объема и скорости работы которого зависит быстродействие всего компьютера. Ее задача – своевременное предоставление процессору необходимой информации.Наиболее популярны модули памяти DDR2 SDRAM
Оперативная память
Оперативная память Из предыдущего раздела должно быть понятно, что процессор – это устройство, обрабатывающее данные, которые хранятся в памяти. В этом разделе главы мы поговорим об одном из типов компьютерной памяти – оперативной памяти, или ОЗУ[4] (рис. 3.2). Рис. 3.2.
Техника № 2. Разбиение на блоки, загрузка данных по одному блоку за раз
Фрагментация полезна в ситуации, когда данные не обязательно загружать в память одновременно. Вместо этого мы можем загружать их частями, обрабатывая по одному фрагменту за раз (или, как обсудим в следующей статье, несколько частей параллельно).
Предположим, вы хотите найти самое большое слово в книге. Можете загрузить в память сразу все данные:
Но если книга не помещается в память, можно загрузить её постранично:
Это сильно уменьшает потребление памяти, потому что в каждый момент времени загружена только одна страница книги. При этом в итоге будет получен тот же ответ.
Оперативная память
Оперативная память Именно оперативная память оказывает очень большое влияние на производительность системы. Компьютер даже с самым мощным процессором будет крайне медленно «ворочаться», если в его памяти тесно приложениям и данным. В таком случае система будет
Самое простое решение: больше оперативной памяти
Самое простое решение проблемы нехватки оперативной памяти — потратить немного денег. Вы можете купить мощный компьютер, сервер или арендовать виртуальную машину с большим количеством памяти. В ноябре 2019 года быстрый поиск и очень краткое сравнение цен даёт такие варианты:
- Купить Thinkpad M720 Tower с 6 ядрами и 64 ГБ оперативной памяти за $1074
- Арендовать в облаке виртуальную машину с 64 ядрами и 432 ГБ оперативной памяти за $3,62/час
Потратить немного денег на аппаратное обеспечение, чтобы данные поместились в ОЗУ, — зачастую самое дешёвое решение. В конце концов, наше время дорого. Но иногда этого недостаточно.
Например, если вы выполняете много заданий по обработке данных в течение определённого периода времени, облачные вычисления могут быть естественным решением, но также и дорогостоящим. На одном из наших проектов такие затраты на вычисления израсходовали бы весь прогнозируемый доход от продукта, включая самый важный доход, необходимый для выплаты моей зарплаты.
Если покупка/аренда большого объёма RAM не решает проблему или невозможна, следующий шаг — оптимизировать само приложение, чтобы оно расходовало меньше памяти.
Процессор и оперативная память
Процессор и оперативная память Для комфортной работы с Pinnacle Studio 11 в Windows XP разработчики рекомендуют наличие в системе процессора Intel Pentium или AMD Athlon с тактовой частотой не ниже 1,4 ГГц (для комфортной работы желателен процессор с частотой не ниже 2,4 ГГц).Для работы в Windows Vista
Глава 12 Я противоречу сам себе
Глава 12 Я противоречу сам себе Разбираются разновидности вычислительного способа мышления, определяется реалистичный вычислительный подход к нему.Культура вычислительного подхода к природеВ Кремниевой долине можно встретить буддистов, анархистов, поклонников культа
Встречаются гибридные решения, когда текст хранится в наборе массивов, которые, в свою очередь, объединены в список. Казалось бы, такой подход позволяет объединить преимущества массивов и списков (быстрая вставка/удаление при низких накладных расходах по памяти). Однако такое решение сложно в реализации. Также оно приводит к фрагментации памяти.
Предлагаю вашему вниманию эффективную структуру данных для хранения редактируемого текста, которая проста в реализации, имеет константные накладные расходы по памяти и быструю вставку/удаление в произвольном месте. Также она позволяет эффективно редактировать файлы, которые целиком не умещаются в оперативную память.
Описание
Такая структура данных называется в английской терминологии Gap Buffer. Русское название мне неизвестно, встречается только термин «буферное окно» в русской Википедии. Не знаю, правда, доверять такому переводу термина или нет.
Анализ
- Операции вставки и удаления — дешевые: O(1) как при вставке отдельного символа, так и их группы (например, вставка из буфера обмена).
- Накладные расходы по памяти — низкие: O(1). Нужно хранить только положение курсора и общий размер буфера.
- Операция поиска элемента по индексу — дешевая: O(1).
- Операция копирования участка содержимого (например, для копирования в буфер обмена или сохранения текста на диск) — O(n), где n — размер копируемого участка. Сложность такая же, как для массива.
Таким образом, Gap Buffer эксплуатирует то свойство процесса редактирования текста, что операции вставки и удаления всегда происходят в том месте, где находится курсор; в свою очередь, перемещения курсора обычно бывают невелики.
Вариации
1. Теневой курсор записи
В своей базовой реализации Gap Buffer все же может вызывать нежелательные задержки. Например, при поиске текста или использовании закладок могут происходить значительные перемещения курсора. Также не всякое перемещение курсора по тексту сопровождается редактированием. Отсюда решение: ввести невидимый пользователю «курсор записи», который соответствует разрыву в Gap Buffer. Этот курсор перемещается только тогда, когда пользователь начинает вставку или удаление текста. При простых же перемещениях видимого курсора по тексту или замене (то есть когда общий размер текста не меняется) курсор записи не перемещать. Тем самым устраняются задержки при любых случайных перемещениях видимого курсора при просмотре текста, использовании закладок, поиска и т.д.
2. Редактирование файлов, которые не умещаются в оперативную память
В нашу эпоху оперативной памяти гигабайтного размера мало кто реализует редакторы, которые обходятся без полной загрузки текста в память. Большинство созданных людьми документов умещаются в нее, поэтому просто нет смысла усложнять редактор. Однако иногда возникает необходимость редактировать большие файлы, которые не умещаются даже в память сегодняшних компьютеров. Это могут быть машинно-генерированные данные, такие как лог-файлы или текстовое представление записи с каких-нибудь датчиков или приборов.
С помощью Gap Buffer можно эффективно реализовать редактирование файлов, размер которых превышает размер оперативной памяти компьютера. Можно заметить, что Gap Buffer фактически представляет собой два стека, один из которых хранит данные до курсора, а второй — после курсора. Первый из стеков растет вверх, а второй — вниз. Отсюда идея: реализовать оба стека в виде файлов, при этом храня в оперативной памяти только те их участки, которые находятся ближе к вершине.
Стек в памяти может расти вверх или вниз, а стек, реализованный в виде файла, может расти только вверх. Только к концу файла мы можем дописывать данные или наоборот, удалять их оттуда. Если вернуться теперь к операциям с памятью и рассмотреть стеки, растущие в разные стороны — то видно, что в стеке, растущем вверх, данные располагаются в прямом порядке по отношению к последовательности помещения их на стек, а в стеке, растущем вниз — в обратном порядке. Так что, если мы хотим реализовать Gap Buffer в виде двух стеков, растущих вверх — нам придется поменять порядок элементов во втором стеке, который хранит текст после курсора. Поэтому тот временный файл, который содержит данные после курсора, должен их содержать в обратном порядке, задом наперед.
Во временных файлах мы будем хранить не все содержимое стеков, а только их нижнюю часть. Верхняя часть будет располагаться в оперативной памяти, образуя как бы «локальный» Gap Buffer и позволяя пользователю, как и прежде, быстро редактировать текст и перемещаться по нему в некоторых пределах. При перемещениях курсора по тексту за пределы загруженного в память участка, его часть, наиболее далекая от курсора, будет сохраняться в один из временных файлов, а из другого будет подгружаться недостающая часть.
По окончании редактирования текста мы просто перемещаем курсор в его конец. Весь текст попадает в первый стек, растущий вверх, то есть первый временный файл. В оперативной памяти, возможно, остается еще кусок текста — его просто дописываем к файлу. После этого первый временный файл содержит сохраненный текст.
Можно реализовать еще несколько оптимизаций. При открытии файла, например, курсор обычно находится в его начале. Весь текст поэтому должен располагаться во втором стеке, то есть мы должны практически всё исходное содержимое редактируемого файла скопировать во второй временный файл задом наперед. Это длительная операция. Ее можно избежать, если отложить создание второго временного файла до тех пор, пока в этом не возникнет необходимость. То есть до тех пор, пока содержимое хвоста исходного файла полностью совпадает с содержимым второго стека. В этот период, вместо использования второго временного файла, мы можем подгружать информацию из исходного файла. Для создания второго временного файла, таким образом, придется сначала переместить курсор по тексту на расстояние, превышающее размер свободной оперативной памяти, потом что-нибудь там отредактировать, а потом вернуться назад, к началу текста.
Такую же оптимизацию можно реализовать и для первого временного файла. Не создавать его до тех пор, пока в нем не возникнет необходимость. А возникнет она не ранее, чем содержимое находящейся на диске части первого стека перестанет совпадать с начальным участком исходного файла. Также можно использовать «теневой курсор записи» и тем самым избежать ненужных операций копирования при перемещениях курсора по тексту без редактирования. Тогда, если пользователь далеко перемещает курсор по тексту без редактирования, скорость работы будет не хуже, чем у программы простого просмотра текста без полной его загрузки в память.
Реализованное описанным способом редактирование текста без полной его загрузки в память имеет, таким образом, умеренные накладные расходы по дисковому пространству: для временных файлов требуется место, равное размеру текста.
Интересно, что даже если текст большого объема в принципе влезает в оперативную память, при использовании редактора, который не загружает его целиком, такой документ будет быстрее открываться. Снова-таки повышение удобства для пользователя.
Заключение
Я уже не первый раз сталкиваюсь с тем, что некоторые технологии, разработанные для старых компьютеров с ограниченными возможностями, оказываются в наше время забытыми, что приводит к распространению неэффективных решений. Надеюсь, что описанное в этой статье «тайное знание предков» поможет появлению на свет хороших текстовых редакторов.
Благодарности
Вы пишете программу для обработки данных, она отлично проходит тест на небольшом файле, но падает на реальной нагрузке.
Проблема в нехватке памяти. Если у вас 16 гигабайт ОЗУ, вы не сможете туда загрузить стогигабайтный файл. В какой-то момент у ОС закончится память, она не сможет выделить новую, и программа вылетит.
Что делать?
Ну, можете развернуть кластер Big Data, всего-то:
- Найти кластер компьютеров.
- За неделю его настроить.
- Изучить новый API и переписать свой код.
Нам требуется простое и лёгкое решение: обрабатывать данные на одном компьютере, с минимальной настройкой и максимальным использованием уже подключенных библиотек. Почти всегда это возможно с помощью простейших методов, которые иногда называют «вычислениями вне памяти» (out-of-core computation).
В этой статье обсудим:
- Зачем нам вообще нужна оперативная память.
- Самый простой способ обработать данные, которые не помещаются в память — потратить немножко денег.
- Три основных программных метода обработки чрезмерных объёмов данных: сжатие, разбиение на блоки и индексирование.
Техника № 1. Сжатие
Сжатие позволяет поместить те же данные в меньший объём памяти. Есть две формы сжатия:
- Без потерь: после сжатия сохраняется в точности та же информация, что и в исходных данных.
- С потерями: сохраняемые данные теряют некоторые детали, но в идеале это не сильно влияет на результаты расчёта.
Что нам нужно, так это сжатие представления данных в памяти.
Предположим, в ваших данных хранится только два возможных значения, и больше ничего: "AVAILABLE" и "UNAVAILABLE" . Вместо сохранения строк с 10 байтами или более на запись, вы можете сохранить их как логические значения True или False , которые кодируются просто одни байтом. Можете сжать информацию даже до одного бита, уменьшив расход памяти ещё в восемь раз.
Убей в себе “слактивиста”[16]
Убей в себе “слактивиста”[16] Те, кого заворожили возможности “цифровой” политической деятельности, увы, редко могут отличить ее от “слактивизма”, или “диванного активизма”. Эта опасная разновидность слишком часто ведет к беспорядочным гражданским связям (обычно в
Оперативная память
Оперативная память Минимальным необходимым объемом оперативной памяти для работы с программой Premiere Pro считается 512 Мбайт для работы с видео формата DV и 2 Гбайт для работы с видео формата HDV.Оперативная память, как и процессор, влияет на быстродействие всей системы в целом,
Техника № 3. Индексация, когда требуется только подмножество данных
Индексирование полезно, если нужно использовать только подмножество данных и вы собираетесь загружать разные подмножества в разное время.
В принципе, в такой ситуации можно отфильтровать нужную часть и отбросить ненужное. Но фильтрация работает медленно и не оптимально, потому что придётся сначала загрузить в память много лишних данных, прежде чем их отбросить.
Если вам нужна только часть данных, вместо фрагментации лучше использовать индекс — выжимку данных, которая указывает на их реальное местоположение.
Представьте, что вы хотите прочитать только фрагменты книги, где упоминается трубкозуб (симпатичное млекопитающее на фотографии в начале статьи). Если проверять все страницы по очереди, то в память будет загружена по частям вся книга, страница за страницей, в поисках трубкозубов — и это займёт довольно много времени.
Или можете сразу открыть алфавитный индекс в конце книги — и найти слово «трубкозуб». Там указано, что упоминания слова есть на страницах 7, 19 и 120-123. Теперь можно прочитать эти страницы, и только их, что намного быстрее.
Это эффективный метод, потому что индекс намного меньше, чем вся книга, так что намного проще загрузить в память только индекс для поиска соответствующих данных.
Самый простой метод индексирования
Самый простой и распространённый способ индексирования — именование файлов в каталоге:
Если вам нужны данные за март 2019 года, вы просто загружаете файл 2019-Mar.csv — нет необходимости загружать данные за февраль, июль или любой другой месяц.
1.3.3. Оперативная память
1.3.3. Оперативная память Почему эта память — оперативная? Потому что она нужна при выполнении оперативных задач, например открыть Word, запустить почту, посмотреть картинку, поиграть в Квейк и т. д.В оперативную память (ОЗУ, оперативное запоминающее устройство) загружаются
Читайте также: