Виды моделей памяти в компьютерных системах
Применение моделей памяти позволяет контролировать ее сегментное распределение и делать его более эффективным или адекватным решаемой задаче. По умолчанию при компиляции и редактировании связей генерируется код для работы в малой (small) модели. Если программа удовлетворяет хотя бы одному из двух следующих условий, следует использовать другую модель памяти:
· размер кода программы превышает 64 Кб;
· размер статических данных программы превышает 64 Кб.
Имеется два варианта выбора модели памяти для программы:
· назначить нужную модель в опциях компилятора;
· использовать в объявлении объектов программы модификаторы near,far иhuge.
Можно комбинировать эти способы.
Архитектура процессоров, основанных на базе 8086/8088, предусматривает разбиение оперативной памяти на физические сегменты, способные содержать информацию объемом до 64 Кб. Минимальное количество сегментов, выделяемое программе, равно двум: сегмент кода и сегмент статических данных. К статическим данным при этом относятся все объекты, объявленные с классом памяти extern или static. Формальные параметры функций и локальные переменные не являются статическими. Они хранятся не в сегменте данных, а в стеке (однако при этом стек может быть совмещен со стандартным сегментом данных физически).
Программа на Си может работать с динамической памятью с помощью библиотечных функций семейства malloc. При этом память может выделяться как в отдельном сегменте (дальняя динамическая память), так и в стандартном сегменте данных между концом занятой данными области и стеком (ближняя динамическая память).
Адрес оперативной памяти состоит из двух частей:
· базовый адрес сегмента — 16‑битовое число;
· смещение относительно начала сегмента — также 16-битовое число.
Для доступа к коду или данным, находящимся в единственном стандартном сегменте, достаточно использовать только смещение. В этом случае применяются указатели, объявленные с модификатором near (ближний). Поскольку для доступа к объекту используется только одно двухбайтовое число, применение ближних указателей дает компактный по занимаемой памяти код с хорошим быстродействием.
Если код или данные находятся в другом сегменте по отношению к адресующему, для доступа к ячейке памяти должны и адрес сегмента, и смещение. В этом случае указатели объявляются с модификатором far (дальний). Доступ к объектам по дальним указателям позволяет программе адресовать всю оперативную память, а не только в пределах сегмента размером 64 Кб.
Наконец, указатели с модификатором huge (максимальный) также включают адрес сегмента, и смещение, но имеют иную адресную арифметику. Поскольку объекты, адресуемые far указателями, не выходят за границу адресуемого сегмента, действия по вычислению адресов выполняются только над смещением дальних указателей. Это ускоряет доступ, но ограничивает размер одного программного объекта объемом 64 Кб. Для указателей huge арифметические действия выполняются над всеми 32 битами адреса.
Тип адреса huge определен только для данных, таких как массивы и указатели на них. Таким образом, никакой из исходных файлов, составляющих программу, не должен генерировать более 64 Кб кода.
Кратко опишем шесть имеющихся в Си моделей памяти.
Малая модель (small). Программа занимает 2 стандартных сегмента: сегмент кода и сегмент данных, в котором размещается также стек. Как код, так и данные программы не могут превышать 64 Кб. Модель подходит для большинства несложных программ и назначается компилятором по умолчанию. Для доступа к объектам кода или данных по умолчанию используются указатели типа near.
Средняя модель (medium). Для данных и стека выделяется один сегмент, для кода — произвольное число сегментов. Каждому исходному модулю программы выделяется собственный сегмент кода. Модель применяется для программ с большим количеством кода (более 64 Кб) и небольшими объемами данных (менее 64 Кб). Для доступа к функциям по умолчанию используются указатели far, а для доступа к данным — указатели near. Модель предлагает компромисс между скоростью выполнения и компактностью кода, поскольку многие программы чаще обращаются к данным, чем к функциям.
Компактная модель (compact). В этой модели выделяется один сегмент для кода, и произвольное число сегментов для данных. Модель применяется для небольших программ, работающих со значительными объемами данных. Доступ к функциям производится по указателям near, а к данным — по указателям far.
Большая модель (large) использует по несколько сегментов и для кода, и для данных. Модель подходит для больших программ со значительным объемом данных. В этой модели доступ к элементам кода и данных производится по указателям типа far. Как и во всех предшествующих моделях умолчания можно обойти, явно используя модификаторы near, far и huge там, где они требуются при объявлении данных и функций.
Максимальная модель (huge) аналогична большой за исключением того, что в ней снимается ограничение на размер массивов в 64 Кб. Однако для больших массивов не допускается пересечения элементами границ сегмента, из чего следует, что элемент массива не может превышать по размеру 64 Кб. Кроме того, для обеспечения эффективной адресации размер в байтах элемента большого массива должен быть степенью двойки.
Максимальная модель требует учитывать некоторые особенности языка при обращении к операции sizeof и вычитании указателей. По умолчанию значение sizeof имеет тип unsigned int, однако число байтов в huge массиве должно быть представлено типом unsigned long. Для получения правильного значения следует делать приведение типа:
Аналогично, результат вычитания указателей определен в Си как значение типа int. При вычитании указателей типа huge результат может иметь тип long. В этом случае также требуется сделать приведение типа:
Память — одна из самых сложных тем в информатике, но понимание устройства памяти компьютера позволяет разрабатывать более эффективные программы, а для более низкоуровневого программирования, например, при разработке ОС, это понимание и вовсе является обязательным.
В этой статье будет рассмотрена модель памяти с высокоуровневой точки зрения — виды памяти, аллокаторы, сборщик мусора.
3. Виды памяти ЭВМ
Память современной ЭВМ строится в виде многоступенчатой иерархической системы, что обеспечивает экономически оправданное удовлетворение противоречивых требований — большой ёмкости и высокого быстродействия, и обычно предполагает использование нескольких запоминающих устройств, имеющих различные характеристики. В иерархию памяти ЭВМ обычно входят: внешняя память и внутренняя, или оперативная, память.
1. Введение
В современном мире мобильных компьютерных технологий большинство людей уже просто не могут обойтись без коммуникаторов, планшетов и другой портативной компьютерной техники. В свою очередь растет спрос на скорость работы представленных мобильных решений, поскольку никто уже не готов мириться с низкой производительностью того или иного устройства . Скорость выполнения программ напрямую зависит от скорости передачи данных между процессором и памятью, а для выполнения больших программ, обрабатывающих огромные массивы данных, необходима память очень большого объема.
В идеале память должна быть быстрой, большой и недорогой. . Поэтому проектировщики компьютерных систем трудятся над разработкой и усовершенствованием технологий, позволяющих создавать для компьютера видимость большой и быстрой памяти.
В этом вопросе рассмотрим, что такое память ЭВМ и какие виды памяти существуют.
Способы контроля динамической памяти
Из-за сложности программ очень трудно определить, когда необходимо освобождать память в ОС, и это вторая явная проблема динамической памяти. Если забыть вызвать munmap() или free() , то произойдет следующая ситуация: приложению память уже не нужна, но ОС всё ещё будет считать, что эта память используется программой. Эту проблему называют «утечкой памяти». Существуют несколько способов автоматического или полуавтоматического решения этой проблемы:
RAII (Получение ресурса есть инициализация) — в ООП — организация получения доступа к ресурсу в конструкторе, а освобождения — в деструкторе соответствующего класса. Достаточно реализовать управление памятью в конструкторах и деструкторах, а компилятор вызовет их автоматически. Например, немного урезанный класс String из статьи про Move-семантику. Выделяем память в конструкторе, очищаем в деструкторе:
Умные указатели на основе RAII — указатели, автоматически владеющие динамической памятью, то есть автоматически освобождающие её, когда она больше не нужна. Умные указатели инкапсулируют только управление памятью объекта, но не сам объект, как, например, происходит в String, который инкапсулирует объект целиком. Примеры умных указателей ниже.
std::unique_ptr — класс уникального указателя, является единственным владельцем памяти и очищает её в своём деструкторе. Поэтому объекты класса std::unique_ptr не могут иметь копий, но могут быть перемещены. Подробнее о семантике перемещения в этой статье.
std::shared_ptr — класс общего указателя, использующий атомарный счётчик ссылок для подсчёта количества владельцев памяти. В конструкторе счётчик инкрементируется, в деструкторе — декрементируется. Как только счётчик становится равным нулю, память освобождается.
Но у std::shared_ptr есть проблема, например, когда объект A ссылается на объект B, а объект B ссылается на объект A. В таком случае у обоих объектов счётчик ссылок никогда не будет меньше 1 и произойдёт утечка памяти. Решений у этой проблемы два. Использование std::weak_ptr , который ссылается на объект, но без счётчика ссылок, и не может быть разыменован без предварительной конвертации в std::shared_ptr . Вторым решением этой проблемы является сборщик мусора.
Сборка мусора — одна из форм автоматического управления динамической памятью, которая помечает все доступные из стека или статической памяти динамически выделенные объекты. Объекты, до которых нельзя добраться через цепочку указателей, начиная с автоматической или статической памяти, т. е. не помеченные сборщиком мусора, очищаются.
Умные указатели и RAII используются в основном в относительно низкоуровневых языках, например, С++ или Swift. В более высокоуровневых языках обычно используется сборщик мусора (Java), хотя может применяться комбинация умного указателя и сборщика мусора (Python).
У каждого способа управления динамической памятью есть свои плюсы и минусы. В основном приходится жертвовать производительностью программы ради скорости и простоты разработки, либо наоборот: высокая производительность, но и высокая требовательность к программистам, из-за чего вероятность ошибиться при разработке программы выше и медленней сам процесс.
Тема хранения информации была актуальна во все времена — начиная с рассвета человеческой цивилизации и по сей день. Свой авторский взгляд на историю средств хранения предлагает Джереми Кук, публикующий свои статьи на сайте EETimes.
В продолжение темы об эволюции цифровой памяти я подготовил что-то вроде слайд-шоу, иллюстрирующего этот прогресс. Полный обзор истории памяти – занятие слишком утомительное, поэтому я выбрал список того, что считаю в ней основным. Приглашаю всех высказывать свое мнение о подборке в комментариях.
Письменность
Источник: Университет Чикаго
Еще не электронная и даже не механическая, письменность сама по себе была невероятным открытием. Она позволила не только общаться людям, находящимся в разных местах, но и передавать знания из поколения в поколение. Согласно исследованиям университета Чикаго, письменность появилась около 3500 до н.э. и это событие стало «началом информационной революции». По-моему, лучше и не скажешь.
Перфокарты
Иллюстрация в журнале Scientific American от 30 августа 1890 г. Источник: Wikipedia
Перфокарты громко заявили о себе при переписи населения США 1890 года; машина, изобретенная Германом Холлеритом, обработала ее результаты в течение года – людям понадобилось бы на это в 10 раз больше времени. Идею для устройства подсказали кондукторы в поездах, компостировавшие билеты пассажиров; большое влияние оказали также машины французского ткача Жозефа-Мари Жаккарда, использовавшие перфоленту для управления ткацким процессом.
Триггер
Схема триггера из патента Екклеса и Джордана, 1918 г. Источник: Wikipedia
Триггер, изобретенный в 1918 году, дает нам подсказку, как работает современная компьютерная память. Эти старомодные громоздкие устройства, способные сохранять и изменять свое состояние, зависящее от внешнего электрического сигнала, принципиально не так далеки от того, как компьютеры работают сейчас.
MT4C1024 — интегрированный DRAM модуль производства Micron Technology. Источник: Wikipedia
DRAM (Dynamic random access memory, Динамическая память с произвольным доступом), изобретенная в 1966 году (не путать с древней монетой!), использовала конденсаторы для хранения информации. Заряженный конденсатор представлял собой единицу, разряженный – ноль. Упоминавшийся в названии термин «динамический» означал не функциональную особенность, а свойство конденсаторов со временем терять свой заряд, что вызывало необходимость в перезарядке.
SDRAM
Source: Royan/Wikipedia commons
SDRAM (Synchronous Dynamic Random Access Memory, Синхронная динамическая память с произвольным доступом) имела ограниченное применение еще в 70-х, однако заявила о себе широко только в 1993. Ранее RAM изменяла свое состояние так быстро, как было возможно, чтобы принять данные, синхронная же DRAM использовала тактовый генератор компьютера для настройки процесса хранения. Это позволило разделить данные на отдельные банки для синхронного исполнения нескольких операций с памятью одновременно.
EPROM
Первый EPROM Intel, 1971 г. Источник: Wikipedia
Дов Фроман разработал стираемую программируемую память только для чтения (EPROM, Erasable Programmable Read Only Memory) в 1971 году в Intel. Она энергонезависима, то есть содержимое памяти не уничтожается при потере питания. Эти чипы программируются с помощью электрического тока, информация стирается путем облучения ультрафиолетовым светом.
Дисковод
EEPROM
Источник: Amit Bhawani
Электрически стираемая программируемая память только для чтения (EPROM, Electrically Erasable Programmable Read Only Memory) появилась в 1978 году. Ее преимуществом по сравнению с EPROM стала возможность программирования и стирания данных во время использования. Имелось и одно существенное ограничение – в количестве циклов перепрограммирования. Однако в современных чипах количество циклов чтения-записи было значительно увеличено.
Жесткий диск
Источник: Ian Wilson/Wikipedia
Seagate произвел свой первый 5-дюймовый жесткий диск в 1980 году. С этого времени компоненты памяти начинают напоминать те, которые мы имеем сейчас, однако есть и нюансы. Скажем, в том же году IBM выпустила первый винчестер емкостью 1 Гб – он весил 550 кг.
Аудио CD
Флеш память
Чип слева — флеш память, справа — контроллер. Источник: Wikimedia Commons
Флеш память была изобретена в 80-х и представлена публике в 1988. Технически представляя собой разновидность EEPROM, флеш память существенно превосходит предшественников по скорости. Были разработаны две разновидности, основанные на логических вентилях NAND и NOR соответственно. Технология эксплуатируется по сегодняшний день, одним из наиболее ее распространенных примеров являются карты памяти Compact Flash.
DDR SDRAM
Источник: Toshiba
JDEC опубликовала стандарт UFS (Universal Flash Storage, Универсальный флеш-накопитель) в 2012 году и обновила его в сентябре 2013. В дополнение в функциям энергосбережения, эти чипы обеспечат дуплексную пропускную способность данных 300 Мбит/с. Будет интересно посмотреть, как этот тип памяти будет развиваться в будущем.
Трехмерная память
1 ТБ USB-носитель
Источник: HardwareZone
Как я уже отмечал ранее, Kingston в 2013 году выпустил терабайтный USB-носитель. До сих пор поражаюсь плотности данных в этом устройстве размером в несколько сантиметров.
Удивительно, как далеко зашел прогресс в области памяти. Неужели и в дальнейшем мы будем наблюдать столь гигантские прорывы?
В рамках как совместно используемой, так и распределенной памяти реализуется несколько моделей архитектур системы памяти.
Классификация моделей архитектур памяти вычислительных систем
На этом рисунке приведена классификация таких моделей, применяемых в вычислительных системах класса MIMD (верна и для класса SIMD).
Модели архитектур совместно используемой памяти
В системах с общей памятью все процессоры имеют равные возможности по доступу к единому адресному пространству. Единая память может быть построена как одноблочная или по модульному принципу, но обычно практикуется второй вариант.
Вычислительные системы с общей памятью, где доступ любого процессора к памяти производится единообразно и занимает одинаковое время, называют системами с однородным доступом к памяти и обозначают аббревиатурой UMA (Uniform Memory Access). Это наиболее распространенная архитектура памяти параллельных ВС с общей памятью.
Технически UMА-системы предполагают наличие узла, соединяющего каждый из n процессоров с каждым из m модулей памяти. Простейший путь построения таких ВС - объединение нескольких процессоров (P) с единой памятью (Mp) посредством общей шины - показан на рисунке ниже (а). В этом случае, однако, в каждый момент времени обмен по шине может вести только один из процессоров, то есть процессоры должны соперничать за доступ к шине. Когда процессор Рi, выбирает из памяти команду, остальные процессоры Pj (i не равно j) должны ожидать, пока шина освободится. Если в систему входят только два процессора, они в состоянии работать с производительностью, близкой к максимальной, поскольку их доступ к шине можно чередовать; пока один процессор декодирует и выполняет команду, другой вправе использовать шину для выборки из памяти следующей команды. Однако когда добавляется третий процессор, производительность начинает падать. При наличии на шине десяти процессоров кривая быстродействия шины (рисунок ниже - в) становится горизонтальной, так что добавление 11-го процессора уже не дает повышения производительности. Нижняя кривая на этом рисунке иллюстрирует тот факт, что память и шина обладают фиксированной пропускной способностью, определяемой комбинацией длительности цикла памяти и протоколом шины, и в многопроцессорной системе с общей шиной эта пропускная способность распределена между несколькими процессорами. Если длительность цикла процессора больше по сравнению с циклом памяти, к шине можно подключать много процессоров. Однако фактически процессор обычно намного быстрее памяти, поэтому данная схема широкого применения не находит.
а — объединение процессоров с помощью шины;
б — система с локальными кэшами;
в — производительность системы как функция от числа процессоров на Шине;
г — многопроцессорная ВС с общей памятью, состоящей из отдельных модулей.
Альтернативный способ построения многопроцессорной ВС, с общей памятью на основе UMA показан на рисунке выше (г). Здесь шина заменена коммутатором, маршрутизирующим запросы процессора к одному из нескольких модулей памяти. Несмотря на то что имеется несколько модулей памяти, все они входят в единое виртуальное адресное пространство. Преимущество такого подхода в том, что коммутатор в состоянии параллельно обслуживать несколько запросов. Каждый процессор может быть соединен со своим модулем памяти и иметь доступ к нему на максимально допустимой скорости. Соперничество между процессорами может возникнуть при попытке одновременного доступа к одному и тому же модулю памяти, В этом случае доступ получает только один процессор, а прочие — блокируются.
К сожалению, архитектура UMA не очень хорошо масштабируется. Наиболее распространенные системы содержат 4-8 процессоров, значительно реже 32-64 процессора. Кроме того, подобные системы нельзя отнести к отказоустойчивым, так как отказ одного процессора или модуля памяти влечет отказ всей ВС.
Другим подходом к построению ВС с общей памятью является неоднородный доступ к памяти, обозначаемый как NUMA (Non-Uniform Memory Access). Здесь по-прежнему фигурирует единое адресное пространство, но каждый процессор имеет локальную память. Доступ процессора к собственной Локальной памяти производится напрямую, что намного быстрее, чем доступ к удаленной памяти через коммутатор или сеть. Такая система может быть дополнена глобальной памятью, тогда локальные запоминающие устройства играют роль быстрой кэш-памяти для глобальной памяти. Подобная схема может улучшить производительность ВС, но не в состоянии неограниченно отсрочить выравнивание прямой производительности. При наличии у каждого процессора локальной кэш-памяти (рисунок выше - б) существует высокая вероятность (р > 0,9) того, что нужные команда или данные уже находятся в локальной памяти. Разумная вероятность попадания в локальную память существенно уменьшает число обращений процессора к глобальной памяти и, таким образом, ведет к повышению эффективности. Место излома кривой производительности (верхняя кривая на рисунке выше - в), соответствующее точке, в которой добавление процессоров еще остается эффективным, теперь перемещается в область 20 процессоров, а точка, где кривая становится горизонтальной, в область 30 процессоров.
В рамках концепции NUMA реализуется несколько различных подходов, обозначаемых аббревиатурами СОМА, CC-NUMA и NCC-NUMA.
В архитектуре только с кэш-памятью (СОМА, Cache Only Memory Architecture) локальная память каждого процессора построена как большая кэш-память для быстрого доступа со стороны «своего» процессора. Кэши всех процессоров в совокупности рассматриваются как глобальная память системы. Собственно глобальная память отсутствует. Принципиальная особенность концепции СОМА выражается в динамике. Здесь данные не привязаны статически к определенному модулю памяти и не имеют уникального адреса, остающегося неизменным в течение всего времени существования переменной. В архитектуре СОМА данные переносятся в кэш-память того процессора, который последним их запросил, при этом переменная не фиксирована уникальным адресом и в каждый момент времени может размещаться в любой физической ячейке. Перенос данных из одного локального кэша в другой не требует участия в этом процессе операционной системы, но подразумевает сложную и дорогостоящую аппаратуру управления памятью. Для организации такого режима используют так называемые каталоги кэшей. Отметим также, что последняя копия элемента данных никогда из кэш-памяти не удаляется.
Поскольку в архитектуре СОМА данные перемещаются в локальную кэш-память процессора-владельца, такие ВС в плане производительности обладают существенным преимуществом над другими архитектурами NUMА. С другой стороны, если единственная переменная или две различные переменные, хранящиеся в одной строке одного и того же кэша, требуются двум процессорам, эта строка кэша должна перемещаться между процессорами туда и обратно при каждом доступе к данным. Такие эффекты могут зависеть от деталей распределения памяти и приводить к непредсказуемым ситуациям.
Отличие модели с кэш-некогерентным доступом к неоднородной памяти (NCC-NUMA, Non-Cache Coherent Non-Uniform Memory Architecture) от CC-NUMA очевидно из названия. Архитектура памяти предполагает единое адресное пространство, но не обеспечивает согласованности глобальных данных на аппаратном уровне. Управление использованием таких данных полностью возлагается на программное обеспечение (приложения или компиляторы). Несмотря на это обстоятельство, представляющееся недостатком архитектуры, она оказывается весьма полезной при повышении производительности вычислительных систем с архитектурой памяти типа DSM, рассматриваемой в разделе «Модели архитектур распределенной памяти».
В целом, ВС с общей памятью, построенные по схеме NUMA, называют архитектурами с виртуалъной общей памятью (virtual shared memory architectures). Данный вид архитектуры, в частности CC-NUMA, в последнее время рассматривается как самостоятельный и довольно перспективный вид вычислительных систем класса MIMD, поэтому такие ВС ниже будут обсуждены более подробно.
Модели архитектур распределенной памяти:
Подобная организация характеризуется рядом достоинств. Во-первых, при доступе к данным не возникает конкуренции за шину или коммутаторы — каждый процессор может полностью использовать полосу пропускания тракта связи с собственной локальной памятью. Во-вторых, отсутствие общей шины означает, что нет и связанных с этим ограничений на число процессоров: размер системы ограничивает только сеть, объединяющая процессоры. В-третьих, снимается проблема когерентности кэш-памяти. Каждый процессор вправе самостоятельно менять свои данные, не заботясь о согласовании копий данных в собственной локальной кэш-памяти с кэшами других процессоров.
Вычислительная система с распределенной памятью:
а - процессорный элемент;
б - объединение процессорных элементов
Обращаем Ваше внимание, что в соответствии с Федеральным законом N 273-ФЗ «Об образовании в Российской Федерации» в организациях, осуществляющих образовательную деятельность, организовывается обучение и воспитание обучающихся с ОВЗ как совместно с другими обучающимися, так и в отдельных классах или группах.
Рабочие листы и материалы для учителей и воспитателей
Более 2 500 дидактических материалов для школьного и домашнего обучения
Столичный центр образовательных технологий г. Москва
Получите квалификацию учитель математики за 2 месяца
от 3 170 руб. 1900 руб.
Количество часов 300 ч. / 600 ч.
Успеть записаться со скидкой
Форма обучения дистанционная
- Онлайн
формат - Диплом
гособразца - Помощь в трудоустройстве
Видеолекции для
профессионалов
- Свидетельства для портфолио
- Вечный доступ за 120 рублей
- 311 видеолекции для каждого
Память ЭВМ, виды, краткая характеристика
3.2 Внешняя память
Внешняя память предназначена для длительного хранения программ и данных, и целостность её содержимого не зависит от того, включен или выключен компьютер. В отличие от оперативной памяти, внешняя память не имеет прямой связи с процессором. Устройства внешней памяти или, иначе, внешние запоминающие устройства весьма разнообразны. Их можно классифицировать по целому ряду признаков: по виду носителя, типу конструкции, по принципу записи и считывания информации, методу доступа и т.д. 5 Рассмотрим классификацию по виду носителей.
Гибкий диск, дискета — устройство для хранения небольших объёмов информации (максимально до 2,88 МБ), представляющее собой гибкий пластиковый диск в защитной оболочке. Используется для переноса данных с одного компьютера на другой и для распространения программного обеспечения. Способ записи двоичной информации на магнитной среде называется магнитным кодированием.
Накопитель на жёстких магнитных дисках или винчестерский накопитель — это наиболее массовое запоминающее устройство большой ёмкости, в котором носителями информации являются круглые алюминиевые или стеклянные пластины — плоттеры, обе поверхности которых покрыты слоем ферромагнитного материала. С момента создания первых жёстких дисков, в результате непрерывного совершенствования технологии записи данных, их максимально возможная ёмкость непрерывно увеличивается. Ёмкость современных жёстких дисков достигает нескольких Тб. НЖМД используется для постоянного хранения информации — программ и данных, и является основным накопителем данных в большинстве ЭВМ.
Существуют внешние или портативные жесткие диски, которые подключаются к компьютеру с помощью USB-кабеля.
CD-ROM состоит из прозрачной полимерной основы диаметром 12 см и толщиной 1,2 мм. Одна сторона покрыта тонким алюминиевым слоем, защищенным от повреждений слоем лака. Двоичная информация представляется последовательным чередованием углублений и основного слоя.
Со временем на смену CD-ROM пришли цифровые видеодиски DVD . Эти диски имеют тот же размер, что и обычные CD, но вмещают 4,7 Гбайт данных, т.е. по объёму заменяют семь стандартных дисков CD-ROM. На таких дисках могут выпускаться полноэкранные видеофильмы отличного качества, программы-тренажёры, мультимедийные игры и многое другое. 6
Blu-ray Disc , BD — формат оптического носителя, используемый для записи с повышенной плотностью и хранения цифровых данных, включая видео высокой чёткости. Первый прототип нового носителя был представлен в октябре 2000 года. Более короткая длина волны сине-фиолетового лазера позволяет хранить больше информации на 12-сантиметровых дисках того же размера, что и у CD/DVD. Уменьшение длины волны, использование числовой апертуры (0,85, в сравнении с 0,6 для DVD), высококачественной двухлинзовой системы, а также уменьшение толщины защитного слоя в шесть раз (0,1 мм вместо 0,6 мм) предоставило возможность проведения более качественного и корректного течения операций чтения/записи. Это позволило записывать информацию в меньшие точки на диске, а значит, хранить больше информации в физической области диска, а также увеличить скорость считывания до 432 Мбит/с.
Флеш-накопитель — запоминающее устройство, использующее в качестве носителя флеш-память (разновидность полупроводниковой технологии электрически перепрограммируемой памяти). Благодаря компактности, дешевизне, механической прочности, большому объёму, скорости работы и низкому энергопотреблению, флеш-память широко используется в цифровых портативных устройствах и носителях информации. Очень распространены USB флеш-накопители (флеш-брелоки) – устройства, подключаемое к компьютеру или иному считывающему устройству по интерфейсу USB.
Серьёзным недостатком данной технологии является ограниченный срок эксплуатации носителей, а также чувствительность к электростатическому разряду.
4 Заключение
Первые ЭВМ использовали запоминающие устройства исключительно для хранения обрабатываемых данных. Их программы реализовывались на аппаратном уровне в виде жёстко заданных выполняемых последовательностей. Любое перепрограммирование требовало огромного объёма ручной работы по подготовке новой документации, перестройки блоков и устройств и т. д. Использование архитектуры фон Неймана, предусматривающей хранение компьютерных программ и данных в общей памяти, коренным образом переменило ситуацию.
К настоящему времени создано множество устройств, предназначенных для хранения данных. Универсального решения не существует, у каждого имеются свои достоинства и свои недостатки, поэтому компьютерные системы оснащаются несколькими видами систем хранения, основные свойства которых обуславливают их использование и назначение.
5 Литература
Организация ЭВМ. 5-е изд. /К.Хамахер, З. Вранешич, С. Заки. – СПб.: Питер; Киев: Издательская группа BHV , 2003. – 848с.
Информатика: Учебник / Под ред. проф. Н.В. Макаровой - М.: Финансы и статистика -2006. - 768 с.
2. Определение
Память ЭВМ – совокупность технических устройств и процессов, обеспечивающих запись, хранение и воспроизведение информации в ЭВМ. Компьютерная память обеспечивает поддержку одной из функций ЭВМ — способность длительного хранения информации.
Память — основная часть любой вычислительной системы или отдельной вычислительной машины, она реализуется аппаратно — в виде комплекса взаимосвязанных запоминающих устройств (ЗУ) — и программными средствами. Максимальное количество информации, которое может храниться в памяти ЭВМ (ёмкость), определяется суммарной ёмкостью всех ЗУ, а быстродействие памяти ЭВМ зависит как от быстродействия отдельных ЗУ, так и от принципов их организации в единую систему памяти и способов обмена информацией внутри этой системы.
Задачей памяти является хранение программ и данных. Существует два класса запоминающих устройств, а именно первичные и вторичные. Первичное запоминающее устройство – это память, быстродействие которой определяется скоростью работы электронных микросхем. Пока программа выполняется, она должна храниться в первичной памяти. Эта память состоит из большого количества полупроводниковых ячеек, каждая из которых может хранить один бит информации. Ячейки редко считываются по отдельности – обычно они обрабатываются группами фиксированного размера, называемыми словами… Для облегчения доступа к словам в памяти с каждым словом связывается отдельный адрес. Адрес – это числа, идентифицирующие конкретные местоположения слов в памяти. Для того чтобы прочитать слово из памяти или записать его в таковую, необходимо указать его адрес и задать управляющую команду, которая начнет соответствующую операцию. 1 Для каждого компьютера характерна определенная длина слова — два, четыре или восемь байтов. Это не исключает использования ячеек памяти другой длины (например, полуслово, двойное слово).
Как правило, в одном машинном слове может быть представлено либо одно целое число, либо одна команда, но допускаются переменные форматы представления информации.
3.1 Внутренняя память
Оперативная память.
Назначение оперативной памяти – хранение данных, работа с которыми осуществляется в данный момент времени. Если для этого использовать жесткий диск, то время доступа к данным заметно увеличится, так как производительность оперативной памяти намного выше, чем дисковой. Это скажется на быстродействии всей системы. Оперативная память обеспечивает возможность обращения процессора к любой ее ячейке, поэтому называется памятью с произвольным доступом (RAM – Random Access Memory) 2 .
Из определения следует, что в оперативной памяти на стадии выполнения могут одновременно находится несколько программ. Кроме того, в оперативной памяти могут находиться как обрабатываемые, так и уже обработанные программой данные. Можно считать, что оперативная память представляет собой последовательность пронумерованных байтов. Каждый байт имеет свой собственный номер, который называют адресом. Содержимое любого байта памяти может обрабатываться независимым от остальных байтов образом. Указав адрес байта, можно прочитать код, который в нем записан или записать в этот байт какой – либо другой код.
Максимально возможный объем оперативной памяти, который иногда называют адресным пространством, и объем памяти, фактически присутствующий в составе машины, являются важнейшими характеристиками данной модели в целом и конкретного экземпляра компьютера. Адресное пространство является величиной постоянной для данной модели, в то время как фактический объем оперативной памяти может у разных экземпляров быть разным, но он не может быть больше, чем адресное пространство для данной модели. Современные модули памяти RAM бывают: DDR, DDR2, DDR3 и DDR4. Характеристики оперативной памяти каждого вида значительно лучше, чем характеристики предшествующего поколения. Рассмотрим их:
DDR. Самая древняя оперативная память. Время ее господства на IT рынке уже давно ушло. Но кое-где еще иногда встречаются системы, в которых используется эта оперативная память. Как правило, это довольно старые системы. Эта память потребляет напряжение 2.5 В. Обычно, напряжение увеличивается при разгоне процессора. DDR является самым прожорливым представителем оперативной памяти, так как требует для своей работы самое высокое напряжение. Эта память работала на частотах 266/333/400 Mhz и использовалась на компьютерах класса Intel Pentium 4.
DDR2. Основное отличие DDR2 от DDR — вдвое большая частота работы шины (533/800/1066 Mhz), по которой данные передаются в буфер микросхемы памяти. При этом чтобы обеспечить необходимый поток данных, передача на шину осуществляется из четырёх мест одновременно.
DDR3. Этот тип памяти основан на технологиях DDR2 со вдвое увеличенной частотой передачи данных по шине памяти. Отличается пониженным энергопотреблением по сравнению с предшественниками (1,5 В, по сравнению с 1,8 В для DDR2 и 2,5 В для DDR). Частота полосы пропускания лежит в пределах от 800 до 2400 Mhz (рекорд частоты — более 3000 Mhz), что обеспечивает большую пропускную способность по сравнению со всеми предшественниками. В целом скорость работы DDR3 выше, чем у DDR2, на 15-20 процентов.
DDR4 — новый тип оперативной памяти, являющийся эволюционным развитием предыдущих поколений DDR. Отличается повышенными частотными характеристиками и пониженным напряжением питания. В массовое производство вышла во 2 квартале 2014 года 3
Кроме оперативной памяти в состав внутренней памяти входят кэш-память и постоянная память.
Постоянная память .
Постоянная — энергонезависимая память, используется для хранения данных, которые никогда не потребуют изменения. Содержание памяти специальным образом “зашивается” в устройстве при его изготовлении для постоянного хранения. Из ПЗУ можно только читать. Прежде всего, в постоянную память записывают программу управления работой самого процессора. В ПЗУ находятся программы управления дисплеем, клавиатурой, принтером, внешней памятью, программы запуска и остановки компьютера, тестирования устройств.
Важнейшая микросхема постоянной или Flash-памяти — модуль BIOS, предназначенная для автоматического тестирования устройств после включения питания компьютера и загрузки операционной системы в оперативную память.
Разновидность постоянного ЗУ — CMOS RAM. Это память с невысоким быстродействием и минимальным энергопотреблением от батарейки. Используется для хранения информации о конфигурации и составе оборудования компьютера, а также о режимах его работы. Содержимое CMOS изменяется специальной программой Setup, находящейся в BIOS.
По сравнению с быстродействием современных процессоров скорость функционирования основной памяти мала. Однако процессор не может тратить много времени в ожидании команд и данных из основной памяти. Поэтому нужны механизмы, сокращающие время доступа к необходимой информации. Поскольку быстродействие основной памяти физически ограничено, здесь потребуется архитектурное решение. Таким решением является использование быстрой кэш-памяти, благодаря которой основная память представляется процессору более быстрой, чем она есть на самом деле. 4
Кэш — это память с большей скоростью доступа, предназначенная для ускорения обращения к данным, содержащимся постоянно в памяти с меньшей скоростью доступа. Кэширование применяется ЦПУ, жёсткими дисками, браузерами, веб-серверами, службами DNS и WINS.
Кэш состоит из набора записей. Каждая запись ассоциирована с элементом данных или блоком данных (небольшой части данных), которая является копией элемента данных в основной памяти. Каждая запись имеет идентификатор, определяющий соответствие между элементами данных в кэше и их копиями в основной памяти.
Аллокатор
У динамической памяти есть две явные проблемы. Во-первых, любое выделение/освобождение памяти в ОС — системный вызов, замедляющий работу программы. Решением этой проблемы является аллокатор.
Аллокатор — это часть программы, которая запрашивает память большими кусками напрямую у ОС через системные вызовы (в POSIX-совместимых ОС это mmap для выделения памяти и unmap — для освобождения), затем по частям отдаёт эту память приложению (в Си это могут быть функции malloc() / free() ). Такой подход увеличивает производительность, но может вызвать фрагментацию памяти при длительной работе программы.
malloc() / free() и mmap / unmap — это не одно и то же. Первый является простейшим аллокатором в libc , второй является системным вызовом. В большинстве языков можно использовать только аллокатор по умолчанию, но в языках с более низкоуровневой моделью памяти можно использовать и другие аллокаторы.
Например, boost::pool аллокаторы, созданные для оптимальной работы с контейнерами ( boost::pool_allocator для линейных ( std::vector ), boost::fast_pool_allocator для нелинейных ( std::map, std::list )). Или аллокатор jemalloc, оптимизированный для решения проблем фрагментации и утилизации ресурсов CPU в многопоточных программах. Более подробно о jemalloc можно узнать из доклада с конференции C++ Russia 2018.
Виды памяти
Существует 3 типа памяти: статический, автоматический и динамический.
Статический — выделение памяти до начала исполнения программы. Такая память доступна на протяжении всего времени выполнения программы. Во многих языках для размещения объекта в статической памяти достаточно задекларировать его в глобальной области видимости.
Автоматический, также известный как «размещение на стеке», — самый основной, автоматически выделяет аргументы и локальные переменные функции, а также прочую метаинформацию при вызове функции и освобождает память при выходе из неё.
Стек, как структура данных, работает по принципу LIFO («последним пришёл — первым ушёл»). Другими словами, добавлять и удалять значения в стеке можно только с одной и той же стороны.
Автоматическая память работает именно на основе стека, чтобы вызванная из любой части программы функция не затёрла уже используемую автоматическую память, а добавила свои данные в конец стека, увеличивая его размер. При завершении этой функции её данные будут удалены с конца стека, уменьшая его размер. Длина стека останется той же, что и до вызова функции, а у вызывающей функции указатель на конец стека будет указывать на тот же адрес.
Проще всего это понять из примера на С++:
Стек при вызове последней рекурсивной функции будет выглядеть следующим образом:
Детали реализации автоматической памяти могут быть разными в зависимости от конкретной платформы. Например, кому очищать из стека метаинформацию функции и её аргументы: вызывающей функции или вызываемой? Как передавать результат: через стек или, что намного быстрее, через регистры процессора (память, расположенную прямо на кристалле процессора. В этой статье не рассматривается, т. к. в языках программирования высокого уровня зачастую нет прямого доступа к регистрам процессора). На все эти вопросы отвечает конкретная реализация calling convention — описание технических особенностей вызова подпрограмм, определяющее способы передачи параметров/результата функции и способы вызова/возврата из функции.
Таким образом, когда одна функция вызывает другую, последняя всегда в курсе, где ей взять свои аргументы: на конце стека. Но откуда ей знать, где конец стека? В процессоре для этого есть специальный регистр, хранящий указатель на конец стека. В большинстве случаев стек расположен ближе к концу виртуальной памяти и растёт в сторону начала.
Размер автоматической памяти, а он тоже фиксированный, определяется линковщиком (обычно — 1 мегабайт), максимальный размер зависит от конкретной системы и настроек компилятора/линковщика.
Если приложение выйдет за максимум автоматической памяти, его там может ждать Page Fault (сигнал SIGSEGV в POSIX-совместимых системах: Mac OS X, Linux, BSD и т. д.) — ошибка сегментации, приводящая к аварийному завершению программы.
Динамическая — выделение памяти из ОС по требованию приложения.
Автоматическая и статическая память выделяются единоразово перед запуском программы. При их нехватке, либо если модель LIFO не совсем подходит, используется динамическая память.
Приложение при необходимости может запросить у ОС дополнительную память через аллокатор или напрямую через системный вызов. Пример использования динамической памяти с помощью аллокатора ниже на примере языка Си.
После выделения памяти в распоряжение программы поступает указатель на начало выделенной памяти, который, в свою очередь, тоже должен где-то храниться: в статической, автоматической или также в динамической памяти. Для возвращения памяти обратно в аллокатор необходим только сам указатель. Попытка использования уже очищенной памяти может привести к завершению программы с сигналом SIGSEGV.
Языки сверхвысокого уровня используют динамическую память как основную: создают все или почти все объекты в динамической памяти, а на стеке или в статической памяти держат указатели на эти объекты.
Максимальный размер динамической памяти зависит от многих факторов: среди них ОС, процессор, аппаратная архитектура в целом, не говоря уже о самом очевидном — максимальном размере ОЗУ у конкретного устройства. Например x86_64 процессоры используют только 48 бит для адресации виртуальной памяти, что позволяет использовать до 256 ТБ памяти. В следующей статье про более низкоуровневую архитектуру памяти будет объяснено, почему не все 64 бита.
Читайте также: