Почему любую программу перед выполнением нужно загрузить в оперативную память

от admin

3.5 Оперативная память (ram).

Оперативная память, называемая также ОЗУ (оперативное запоминающее устройство) или RAM (Random Access Memory, память с произвольным доступом) – это устройство, в котором находятся работающие в данный момент программы и данные для них. Любая программа перед выполнением должна быть загружена в оперативную память, после чего процессор сможет последовательно извлекать из памяти команды этой программы и выполнять их. Оперативная память, как и процессор, является необходимым устройством – без нее компьютер работать не сможет.

Данные в оперативной памяти хранятся только во время работы компьютера, при его выключении оперативная память очищается.

Оперативная память для ПК выполняется в виде модулей, представляющих собой набор микросхем закрепленных на специальной плате с контактами. Модули памяти вставляются в специальные слоты на материнской плате. Тип модулей памяти должен быть согласован с типом материнской платы и с типом процессора.

Модули памяти отличаются как по конструктивному исполнению (форм-фактор), так и по функциональному типу.

Форм-фактор — это стандарт, определяющий размеры модуля памяти, а также количество и расположение контактов. Существует несколько физически несовместимых форм-факторов памяти: SIMM (30 или 72 контактов, в настоящее время почти не используются), DIMM(168, 184, 200 или 240 контактов), SODIMM (72, 144, 168 или 200 контактов, уменьшенный размер), MicroDIMM (60 контактов, уменьшенный размер), RIMM (168, 184 или 242 контакта, для памяти типа Rambus).

Любая микросхема (чип) модуля памяти состоит из большого количества одинаковых элементарных ячеек, каждая ячейка способна хранить 1 бит данных, т.е. может находиться в одном из 2-х состояний: 0 (выключено) или 1 (включено), переход из одного состояния в другое осуществляется подачей управляющего импульса на эту ячейку. В настоящее время используются 2 типа элементарных ячеек памяти.

Триггеры. Это ячейки, состоящие из 6-7 транзисторов каждая. Триггер способен удерживать состояние 0 или 1 неограниченно долго, пока на него подано напряжение питания.

Емкостные ячейки. Каждая такая ячейка состоит из одного транзистора и одного микроконденсатора. Емкостные ячейки значительно меньше и проще по структуре, чем триггеры, но они обладают одним существенным недостатком – сохраняют свое состояние очень ограниченное время.

В соответствии с используемыми типами ячеек, строятся различные функциональные типы памяти.

1) Статическая память SRAM (Static RAM) строится из триггеров это наиболее надежный, но и наиболее дорогой, громоздкий и энергоемкий тип памяти. Статическая память используется для построения кэш-памяти, буфера жесткого диска и для других наиболее ответственных узлов.

2) Динамическая память DRAM (Dynamic RAM) строится из емкостных ячеек. Однако ограничиться только емкостными ячейками нельзя – такая память сможет хранить данные только в течение долей секунды. Поэтому, необходимым элементом динамической памяти является буфер, состоящий из триггеров, а необходимым условием работы такой памяти — процесс регенерации, состоящий в постоянном автоматическом считывании в буфер данных из различных блоков емкостных ячеек и перезаписи этих данных обратно. Таким образом, в динамической памяти реализуется непрерывный процесс перезаписи данных через буфер, что и объясняет ее название.

Объем оперативной памяти, установленной в ПК – это одна из главных характеристик, определяющих производительность компьютера. Быстродействие компьютера зависит от объема оперативной памяти не меньше (а часто и больше!), чем от тактовой частоты процессора. Это объясняется тем, что современное программное обеспечение характеризуется большим объемом кода программ, а для эффективной работы компьютера необходимо, чтобы все выполняющиеся в данный момент программы и все данные к ним находились в оперативной памяти. Если выполняющаяся программа не помещается в оперативную память, сбоя не происходит – вся программа или ее часть выгружается на жесткий диск,- но работа компьютера при этом резко замедляется. Таким образом, объем оперативной памяти должен быть достаточным с точки зрения используемого программного обеспечения. Например, для офисного компьютера при использовании в основном программ пакета Microsoft Office (MS Word, MS Excel, MS Power Point, MS Access) под операционной системой Windows XP необходимо не менее 256 MB оперативной памяти. При использовании же компьютера в качестве графической станции, для видеомонтажа или для трехмерных игр потребуется уже не менее 1 GB памяти.

Следует отметить, что если объем оперативной памяти таков, что всегда все выполняющиеся программы помещаются в оперативную память, дальнейшее увеличение объема памяти не приведет к повышению производительности компьютера. Поэтому объем памяти всегда нужно выбирать оптимальным, исходя из тех задач, для которых будет использоваться компьютер.

Еще одним важным параметром памяти является ее пиковое быстродействие (пропускная способность), т.е. максимальная скорость, с которой могут происходить операции чтения/записи данных. Эта величина определяется типом памяти, который, в свою очередь, определяется типом материнской платы. Пропускная способность обозначается количеством передаваемых в секунду бит, например, PC-4200 (4200 Mб/с), PC-6000 (6000 Mб/с).

Как работает оперативная память вашего компьютера?

Любые данные в компьютере — это нули и единички. Текст, который вы читаете прямо сейчас, передался с нашего сервера прямо на ваш компьютер и записался в памяти — он представляет собой последовательность нулей и единичек. Прямо сейчас вы смотрите на ваш монитор, который состоит из пикселей и отображает наш сайт. Изображение — это тоже нули и единицы. Видео — это нули и единицы. Музыка — нули и единицы. Любой контент, доступный на вашем компьютере можно представить в виде нулей и единиц. Но как?

Оперативная память — это сложное устройство, и знать его работу будет полезно каждому

Стоит начать с того, что компьютер понимает только двоичную систему счисления. В жизни мы используем десятичную, так как у нас 10 пальцев и нам она попросту удобнее, но у компьютера нет 10 пальцев — он может работать только с логическими устройствами, которые работают только в двух состояниях — включен или выключен, есть подача тока или нет подачи тока. Если логическое устройство активно, значит подача тока есть и бит равен единице, если подачи тока нет, значит бит равен нулю. Бит — это самая маленькая единица измерения. 1 бит может иметь всего два состояния 1 и 0. 1 байт — это 8 бит. Таким образом, если перебрать все возможные комбинации нулей и единиц, получим, что в 1 байте может храниться 256 комбинаций битов или 2 в степени 8. Например, «0000001», «0000010» или «10110010» — любую букву английского алфавита можно представить в виде 8 битов (1 байта).

Как работает оперативная память вашего компьютера? Двоичный код выглядит именно так! Фото.

Двоичный код выглядит именно так!

Благодаря различным кодировкам мы можем представить любую информацию в двоичном виде. То же касается и наших программ, написанных на различных языках программирования. Чтобы запустить какую-либо программу, её необходимо скомпилировать в двоичный код. Таким образом, в двоичном виде можно представлять как данные, так и инструкции (код) для работы с этими данными. Существуют еще и интерпретируемые языки (JavaScript, Python), в этом случае интерпретатор по ходу выполнения программы анализирует код и компилирует его в язык, понятный нашему компьютеру, то есть в последовательность нулей и единиц, и в этом случае нет необходимости компилировать программу каждый раз при желании запустить её.

Как работает процессор?

Нельзя говорить о памяти, не сказав пару слов о процессоре. Процессор и оперативной память довольно похожи, так как в обоих случаях используются логические устройства, которые могут принимать лишь два состояния. Однако процессор выполняет задачи, связанные с вычислениями. Для этого у него имеется устройство управления — именно на него поступают наши инструкции, арифметико-логическое устройство — оно отвечает за все арифметические операции (сложение, вычитание и так далее) и регистры.

Помимо оперативной памяти, в компьютере имеется кэш-память. Если вам интересна эта тема, можете изучить наш недавний материал.

Так как инструкции, поступающие на процессор, работают с данными из памяти, эти данные нужно где-то хранить. Брать их постоянно из оперативной памяти — слишком долго, поэтому в процессоре имеется своя память, представленная в виде нескольких регистров — она является самой быстрой памятью в компьютере.

Что такое регистр? Регистр в процессоре представлен в виде триггера, который может хранить 1 бит информации. Триггер — это один из множества логических элементов в микрочипах. Благодаря своей логике он способен хранить информацию. Вот так выглядит D-триггер:

Это D-триггер и он способен хранить информацию. Каждое простейшее логическое устройство, включая D-триггер, состоит из логических операций. На фото выше можно заметить знак «&» — это логическое И

Как работает процессор? Таблица истинности для логического «И». Фото.

Таблица истинности для логического «И»

Верхний переключатель «D» в D-триггере меняет значение бита, а нижний «C» включает или отключает его хранение. Вам наверняка интересно, как устроен этот «D-триггер». Подробнее работу триггеров вы можете изучить по видеоролику ниже:

Как работает оперативная память вашего компьютера? Как работает процессор? Фото.

Помимо D-триггера, существуют также RS-триггер, JK-триггер и другие. Этой теме посвящена не одна книга, можете изучить логические устройства микрочипов самостоятельно. Было бы неплохо углубиться еще и в тему квантовых процессоров, потому что очевидно, что будущее именно за ними.

Из чего состоит оперативная память?

Теперь вернемся к нашей памяти, она представляет собой большую группу регистров, которые хранят данные. Существует SRAM (статическая память) и DRAM (динамическая память). В статической памяти регистры представлены в виде триггеров, а в динамический в виде конденсаторов, которые со временем могут терять заряд. Сегодня в ОЗУ используется именно DRAM, где каждая ячейка — это транзистор и конденсатор, который при отсутствии питания теряет все данные. Именно поэтому, когда мы отключаем компьютер, оперативная память очищается. Все драйвера и другие важные программы компьютер в выключенном состоянии хранит на SSD, а уже при включении он заносит необходимые данные в оперативную память.

Вам наверняка будет интересно узнать виды оперативной памяти. На эту тему у нас есть отличный материал

Ячейка динамической оперативной памяти, как уже было сказано выше, состоит из конденсатора и транзистора, хранит она 1 бит информации. Точнее, саму информацию хранит конденсатор, а за переключения состояния отвечает транзистор. Конденсатор мы можем представить в виде небольшого ведерка, который наполняется электронами при подаче тока. Подробнее работу динамической оперативной памяти мы рассмотрели еще 7 лет назад. С тех пор мало что изменилось в принципах её работы. Если конденсатор заполнен электронами, его состояние равно единице, то есть на выходе имеем 1 бит информации. Если же нет, то нулю.

Как компьютер запоминает данные в ОЗУ?

Последовательность битов или 1 байт «01000001», записанный в ОЗУ, может означать что угодно — это может быть число «65», буква «А» или цвет картинки. Чтобы операционная система могла понимать, что означают эти биты, были придуманы различные кодировки для разных типов данных: MP3, WAV, MPEG4, ASCII, Unicode, BMP, Jpeg. Например, давайте попытаемся записать кириллическую букву «р» в нашу память. Для этого сначала необходимо перевести её в формат Unicode-символа (шестнадцатеричное число). «р» в Unicode-таблице это «0440». Далее мы должны выбрать, в какой кодировке будем сохранять число, пусть это будет UTF-16. Тогда в двоичной системе Unicode-символ примет вид «00000100 01000000». И уже это значение мы можем записывать в ОЗУ. Оно состоит из двух байт. А вот если бы мы взяли английскую «s», в двоичном виде она бы выглядела вот так «01110011».

Дело в том, что английский алфавит занимает лишь 1 байт, так как в UTF-кодировке он умещается в диапазон чисел от 0 до 255. В 256 комбинаций спокойно вмещаются числа от 0 до 9 и английский алфавит, а вот остальные символы уже нет, поэтому, например, для русских символов нужно 2 байта, а для японских или китайских символов нам понадобится уже 3 и даже 4 байта.

Вот мы и разобрались с тем, как работает оперативная память и как можно записать в неё данные. Понравился материал? Делитесь им с друзьями и давайте обсудим его в нашем чате.

Компьютерная грамотность с Надеждой

Заполняем пробелы — расширяем горизонты!

Постоянная и оперативная память компьютеров и мобильных телефонов

Стационарные компьютеры и мобильные устройства (ноутбуки, планшеты, мобильные телефоны) могут быть в двух состояниях:

  1. когда устройство включено и работает,
  2. либо когда устройство выключено и не работает.

Непрерывно работать, вообще никогда не отключаясь, компьютеры и смартфоны не могут. Поэтому при каждом включении компьютер или мобильный телефон должен каким-то образом «вспомнить» свое состояние до выключения. И восстановить это состояние.

Иначе компьютеры и мобильные устройства были бы «одноразовыми». Они работали бы только до момента их первого выключения. А затем они навсегда бы «забывали» все то, что умели делать до выключения.

Зачем нужна память компьютерам и мобильным телефонам

Чтобы компьютеры и гаджеты «помнили», что они умеют делать, и что они должны делать во включенном состоянии, для этого в их составе есть память.

Именно в памяти устройства хранятся все необходимые сведения о том, что должен делать компьютер или мобильный телефон. В памяти находятся следующие данные:

  • операционная система для управления компьютером или мобильным устройством;
  • приложения (прикладные программы) для активного пользования компьютером или гаджетом;
  • различные файлы с данными (фотографии, тексты, видео, контакты, заметки и прочее).

Постоянная и оперативная память на компьютерах и в мобильных устройствах

Память устройства, которая не зависит от того, включено это устройство или нет, называют энергонезависимой памятью. Только в такой памяти могут храниться данные, когда устройство выключено.

Энергонезависимая память называется также постоянной (или иногда внутренней) памятью устройства.

– Если память «постоянная», то в ней никогда ничего не меняется?
– Нет. Постоянная память потому, что в ней все «постоянно» сохраняется при выключении компьютера или смартфона.

Как только мы включаем компьютер или гаджет, устройство из постоянной памяти «извлекает» программу своего запуска, и с ее помощью загружает операционную систему:

  • В компьютерах – это операционная система Windows (но может быть и другая система).
  • Для смартфонов и планшетов – чаще всего операционная система Андроид (хотя и тут могут быть иные варианты).
  • В «яблочных» компьютерах MAC, айфонах iPhone и планшетах iPAD – это операционная система iOS (здесь тоже бывают исключения).

Итак, загружается операционная система из постоянной памяти. Но куда она загружается? Так вот, для загрузки операционной системы служит так называемая оперативная память.

Почему «оперативная»? Да потому, что в отличие от постоянной памяти, в оперативной памяти «оперативная обстановка» меняется с калейдоскопической скоростью.

Про объёмы памяти компьютеров и гаджетов

От объёма оперативной памяти зависит количество запущенных программ и задач, которые может одновременно выполнить компьютер или гаджет.

Объем оперативной памяти компьютеров и гаджетов когда-то измеряли в килобайтах, затем перешли на мегабайты. А в настоящее время не редкость, когда размер оперативной памяти исчисляется десятками гигабайт. На очереди объёмы памяти в сотни гигабайт и даже единицы, а то и десятки терабайт (например, для серьезных серверов).

От объёма постоянной памяти зависит, сколько разных приложений и прикладных программ можно установить на компьютер или мобильный телефон, а также количество сохраненных фотографий, видео, фильмов, документов и других полезных файлов пользователя. Объёмы постоянной памяти современных устройств измеряются гигабайтами и терабайтами.

В компьютерах и ноутбуках могут применяться жесткие диски в качестве носителей постоянной памяти. В мобильных гаджетах, в основном, применяются специальные микросхемы памяти, надежно сохраняющие все данные при отключении электроэнергии. Технологии производства микросхем памяти постоянно совершенствуются. Поэтому в компьютерах и даже в серверах происходит активный переход с традиционных жестких дисков на микросхемы.

Почему оперативная память постоянно должна быть подключена к источнику электричества

В постоянную память однажды записывают операционную систему, приложения (программы), различные файлы данных. Затем в них могут, конечно, вноситься какие-то изменения и дополнения. Например, происходят обновления операционной системы. Но это бывает не часто и не постоянно. Поэтому от постоянной памяти не требуется высокая скорость работы – это не главная характеристика постоянной памяти.

Главное требование для постоянной памяти – это безупречное хранение данных даже при отключении от электропитания.

А вот в оперативной памяти работающая операционная система что-то меняет без преувеличения десятки и сотни миллионов (точнее, миллиардов!) раз в размещенных там данных.

Оперативная память должна обладать очень высокой скоростью записи и чтения данных, чтобы «не тормозить» работу компьютера или смартфона (планшета).

Высокая скорость работы оперативной памяти обеспечивается совершенно другими технологиями, чем технологии хранения данных в постоянной памяти. Такие скоростные технологии требуют постоянного подключения к источнику электропитания (220В или аккумуляторная батарея). Оперативная память должна быть энергозависимой, то есть она должна быть постоянно «под напряжением» и бесперебойно снабжаться электроэнергией.

По объемам (по мощности) потребления электрической энергии на первом месте, как правило, стоит процессор – основной элемент любого компьютера или мобильного гаджета. А на втором месте стоит оперативная память, которая тоже «с большим аппетитом» потребляет электроэнергию.

Благодаря энергетической «подпитке» оперативная память по своим техническим характеристикам несравнимо быстрее, чем энергонезависимая постоянная память устройства. Тем самым оперативная память задает тон в работе компьютера и телефона, обеспечивает их быструю работу «без тормозов» и зависаний.

постоянная и оперативная память компьютеров и телефонов

Рис. 1. Примерно так выглядят микросхемы оперативной памяти компьютера. В мобильных гаджетах микросхемы будут значительно меньшего размера даже при сопоставимом с компьютером объеме памяти.

Оперативная память предназначена для хранения данных во время работы компьютера, ноутбука, планшета, смартфона, айфона, телефона. Все данные из оперативной памяти бесследно стираются при выключении устройства. Причем, данные стираются как при нормальном, так и при аварийном отключении компьютера или гаджета. Аварийно компьютер может отключиться, например, из-за отключения электроэнергии, питающей его, а мобильное устройство либо ноутбук – из-за полного разряда аккумуляторной батареи.

Как в оперативной памяти размещаются одновременно несколько работающих программ и приложений

Оперативная память современных устройств является достаточно объемной. Это необходимо, чтобы там можно было разместить несколько программ или приложений, работающих одновременно. Важный аспект работы оперативной памяти – это деление всей оперативной памяти на множество разделов. Такую работу проводят операционные системы компьютеров и гаджетов.

Читать:
Как сделать текст слева в html

Процессор благодаря своей архитектуре и быстродействию может одновременно обслуживать несколько задач. По этой причине в оперативной памяти используется динамическое распределение памяти. При таком делении под каждую обрабатываемую процессором программу, приложение, задачу отводятся динамические разделы оперативной памяти.

Динамический характер работы оперативной памяти рассчитан на то, чтобы распоряжаться имеющейся памятью более эффективно и экономно. Операционная система может своевременно «изымать» «лишние» участки памяти у одних программ и «добавлять» дополнительные участки памяти другим программам в зависимости от их важности, объема обрабатываемой информации, срочности выполнения и т.п.

Приложение (прикладная программа) работает в пределах отведенного ей участка оперативной памяти. Оно не «видит» других приложений (программ), «не знает» об их наличии, и не представляет себе, что происходит в остальных разделах оперативной памяти. Такая автономность приложений в оперативной памяти позволяет сразу нескольким приложениям (программам) одновременно работать в компьютере или в мобильном телефоне, не мешая друг другу.

Почему могут зависать программы и приложения в оперативной памяти?

Причины могут быть самые разные. От банальной нехватки оперативной памяти, если ее мало, и она уже занята другими программами и приложениями. До сложных и непредсказуемых ошибок в программном коде приложений.

Зависания также могут быть из-за аппаратных сбоев, когда начинает отказывать оборудование, «железо». Например, из-за перегрева комплектующих компьютера или мобильного телефона, из-за технического брака. Не все компьютеры и гаджеты одинаковые и постоянно работоспособные. Попадаются среди них неисправные, у которых может что-то отказать, к сожалению.

Как бороться с частыми зависаниями программ и приложений на компьютере или смартфоне, планшете?

Первое, что желательно сделать, если зависания стали часто повторяться, это снизить нагрузку на компьютер или гаджет. Удалить из него «лишние» программы и файлы. Надо постараться сделать так, чтобы на компьютере или на мобильном устройстве одновременно работало как можно меньше программ и приложений.

Действия компьютера или мобильного гаджета при нехватке оперативной памяти и что делать пользователю

Оперативная память стоит относительно дорого. Поэтому в бюджетных моделях компьютеров и мобильных телефонов производители часто экономят на объеме оперативной памяти. Это значительно удешевляет стоимость устройства.

В дорогих гаджетах, компьютерах, ноутбуках, планшетах оперативной памяти значительно больше. Но даже если оперативной памяти много, то, как ни странно это звучит, ее может быть мало. Ведь память быстро израсходуется, если на компьютере или на мобильном телефоне

  • запустить одновременно много разных приложений,
  • открыть множество окон в браузерах,
  • запустить одновременно несколько мессенджеров
  • и т.п.

Все это расходует оперативную память.

Как только оперативная память подходит к концу, операционная система компьютера или гаджета «задумывается» о том, как бы ее расчистить. Автоматически запускаются всяческие процедуры по поиску «залежавшейся» в оперативной памяти информации и по ее сбросу, например, в специальную область постоянной памяти. На выполнение подобных процедур тратится драгоценное время работы процессора, задействуется оперативная и постоянная память. И всё это для того, чтобы лишь продолжить выполнение запущенных приложений.

В итоге – приложения «висят» в ожидании, пока операционная система решит проблему с дефицитом оперативной памяти. А пользователь вынужден ждать, когда то или иное приложение станет доступно.

Совсем плохо, когда программа или приложение изначально требует оперативной памяти больше, чем она есть в наличии на устройстве. Попытка установить и запустить, скажем, мощную игру, требующую оперативной памяти больше, чем есть на компьютере или на ноутбуке – это путь в никуда. Будут одни зависания и тормоза.

– А как операционная система может выделить приложению оперативной памяти больше, чем у нее есть в наличии?
– Да, никак!

В подобных приложениях (играх, программах) всегда есть описание требований к конфигурации компьютера (ноутбука). И их нужно смотреть перед установкой программы на компьютер, а также сравнивать с конфигурацией компьютера (ноутбука).

Достаточный объем оперативной памяти

Оперативной памяти должно быть достаточно для работы одновременно всех приложений (программ), которые требуются пользователю. В противном случае компьютеру или смартфону не хватит оперативной памяти, и он сильно замедлит свою работу. При этом не исключены подвисания и даже полные зависания вплоть до перезагрузки.

Если же оперативной памяти в устройстве мало, что называется, по определению, то не стоит запускать одновременно несколько приложений (программ). Все равно это не ускорит работу, а наоборот, только замедлит. Лучше работать в однозадачном режиме, по очереди запуская программы и приложения. В итоге получится все равно быстрее, чем бесконечно долго ждать, пока операционная система высвободит хоть небольшой кусочек оперативной памяти для одновременной работы сразу нескольких программ и приложений.

Можно ли увеличить размер оперативной памяти в компьютере или в мобильном телефоне

Модуль оперативной памяти на материнской плате

Рис. 2. Модуль оперативной памяти на материнской плате в компьютере

Размер оперативной памяти определяют микросхемы памяти, установленные в компьютере или в мобильном аппарате.

В стационарном (не переносном) компьютере есть возможность заменить микросхемы памяти с одних на другие. Например, можно попытаться вместо микросхем одного объема памяти поставить микросхемы другого, бОльшего объема памяти. Или можно увеличить число микросхем оперативной памяти, если это технически возможно. Тогда оперативная память может заметно вырасти.

В ноутбуках возможностей замены микросхем значительно меньше. Очень часто конструкция ноутбука не позволяет менять микросхемы памяти. Тогда увеличить объем оперативной памяти, увы, не получится.

Что же касается мобильных устройств: планшеты, смартфоны, айфоны и другие, то в них пока нет возможностей для увеличения (изменения) объема оперативной памяти. Мы покупаем эти устройства сразу с тем, что заложено в них внутри. Поменять на другой объем будет невозможно.

Как быть, если со временем перестает удовлетворять размер оперативной памяти мобильного телефона? Увы, выход пока один: приобретение нового устройства взамен теперь уже «технически» устаревшего телефона с маленьким объемом оперативной памяти.

Об увеличении объема постоянной памяти компьютера или мобильного телефона

В стационарных компьютерах, практически, всегда есть возможность подключить дополнительные внутренние или внешние жесткие диски, что значительно увеличивает размер постоянной памяти. Можно наращивать постоянную память в разы и даже на порядки.

В ноутбуках возможностей для установки внутренних жестких дисков очень мало, редко где это возможно. Чаще всего для ноутбуков подходит вариант подключения внешних жестких дисков, флешек, карт памяти. Подобное подключение дает прирост размера постоянной памяти в разы.

В смартфонах, работающих под операционной системой Андроид, весьма часто предусматривают места для установки карт памяти. И, начиная с операционной системы Андроид версии 6.0 и выше, именно на карты памяти можно устанавливать приложения. В более ранних версиях Андроида карты памяти использовались лишь для размещения данных, фотографий, текстов, видео и других файлов пользователя.

Применение карт памяти в Андроиде позволяет в несколько раз увеличивать объем постоянной памяти устройства.

А вот «яблочные» гаджеты такой возможности, как установка дополнительных карт памяти, не предоставляют. Там предлагается использовать облачные сервисы для расширения постоянной памяти. Правда, для этого нужно иметь хороший и стабильный скоростной интернет.

Все дополнительные устройства памяти, включая облачные сервисы от Apple, разумеется, стоят денег. Чем больше объем дополнительной памяти, тем она дороже.

Кстати, далеко не в любой компьютер, не в любой мобильный гаджет можно установить дополнительную память большого размера. Нужно предварительно ознакомиться с ограничениями, которые обычно публикуют на сайтах производителей. Иначе можно «выбросить деньги на ветер». А приобретенная дополнительная память может быть не распознана в компьютере или в мобильном телефоне. Либо будет распознана не вся новая память, а лишь ее мЕньшая часть.

Почему увеличение размера постоянной памяти не ускоряет компьютер или мобильный телефон

Увеличить оперативную память не всегда возможно. Однако производители компьютеров и мобильных устройств предусмотрели значительно больше возможностей для увеличения размера постоянной памяти устройств.

Увеличение размера постоянной памяти никак не отражается на производительности устройства.

Дополнительная постоянная память не приводит к ускорению работы операционной системы, программ и приложений. Скорее даже наоборот: чем больше постоянная память, тем больше приложений (программ) пользователь может установить в компьютер или в смартфон. А значит, тем больше будет соблазн все эти программы (приложения) запустить одновременно. Что в конечном итоге может привести к «тормозам» и «зависаниям».

Увеличение размера постоянной памяти дает возможность хранить на устройстве (в компьютере, в смартфоне, на планшете) больше фотографий, видео, текстов, других файлов данных. Дополнительная постоянная память позволяет устанавливать больше новых приложений и программ.

Но, к сожалению, рост постоянной памяти не влияет на увеличение скорости работы компьютера или мобильного гаджета. На скорость работы влияет в первую очередь мощность процессора устройства. И во вторую очередь – объем оперативной памяти.

Статья впервые опубликована 27.06.2011.
Последнее обновление 23.01.2020.

Анатомия программы в памяти

Управление памятью – одна из главных задач ОС. Она критична как для программирования, так и для системного администрирования. Я постараюсь объяснить, как ОС работает с памятью. Концепции будут общего характера, а примеры я возьму из Linux и Windows на 32-bit x86. Сначала я опишу, как программы располагаются в памяти.

Каждый процесс в многозадачной ОС работает в своей «песочнице» в памяти. Это виртуальное адресное пространство, которое в 32-битном режиме представляет собою 4Гб блок адресов. Эти виртуальные адреса ставятся в соответствие (mapping) физической памяти таблицами страниц, которые поддерживает ядро ОС. У каждого процесса есть свой набор таблиц. Но если мы начинаем использовать виртуальную адресацию, приходится использовать её для всех программ, работающих на компьютере – включая и само ядро. Поэтому часть пространства виртуальных адресов необходимо резервировать под ядро.

image

Это не значит, что ядро использует так много физической памяти – просто у него в распоряжении находится часть адресного пространства, которое можно поставить в соответствие необходимому количеству физической памяти. Пространство памяти для ядра отмечено в таблицах страниц как эксклюзивно используемое привилегированным кодом, поэтому если какая-то программа пытается получить в него доступ, случается page fault. В Linux пространство памяти для ядра присутствует постоянно, и ставит в соответствие одну и ту же часть физической памяти у всех процессов. Код ядра и данные всегда имеют адреса, и готовы обрабатывать прерывания и системные вызовы в любой момент. Для пользовательских программ, напротив, соответствие виртуальных адресов реальной памяти меняется, когда происходит переключение процессов:

image

Голубым отмечены виртуальные адреса, соответствующие физической памяти. Белым – пространство, которому не назначены адреса. В нашем примере Firefox использует гораздо больше места в виртуальной памяти из-за своей легендарной прожорливости. Полоски в адресном пространстве соответствуют сегментам памяти таким, как куча, стек и проч. Эти сегменты – всего лишь интервалы адресов памяти, и не имеют ничего общего с сегментами от Intel. Вот стандартная схема сегментов у процесса под Linux:

image

Когда программирование было белым и пушистым, начальные виртуальные адреса сегментов были одинаковыми для всех процессов. Это позволяло легко удалённо эксплуатировать уязвимости в безопасности. Зловредной программе часто необходимо обращаться к памяти по абсолютным адресам – адресу стека, адресу библиотечной функции, и т.п. Удаленные атаки приходилось делать вслепую, рассчитывая на то, что все адресные пространства остаются на постоянных адресах. В связи с этим получила популярность система выбора случайных адресов. Linux делает случайными стек, сегмент отображения в память и кучу, добавляя смещения к их начальным адресам. К сожалению, в 32-битном адресном пространстве особо не развернёшься, и для назначения случайных адресов остаётся мало места, что делает эту систему не слишком эффективной.

Самый верхний сегмент в адресном пространстве процесса – это стек, в большинстве языков хранящий локальные переменные и аргументы функций. Вызов метода или функции добавляет новый кадр стека (stack frame) к существующему стеку. После возврата из функции кадр уничтожается. Эта простая схема приводит к тому, что для отслеживания содержимого стека не требуется никакой сложной структуры – достаточно всего лишь указателя на начало стека. Добавление и удаление данных становится простым и однозначным процессом. Постоянное повторное использование районов памяти для стека приводит к кэшированию этих частей в CPU, что добавляет скорости. Каждый поток выполнения (thread) в процессе получает свой собственный стек.

Можно прийти к такой ситуации, в которой память, отведённая под стек, заканчивается. Это приводит к ошибке page fault, которая в Linux обрабатывается функцией expand_stack(), которая, в свою очередь, вызывает acct_stack_growth(), чтобы проверить, можно ли ещё нарастить стек. Если его размер не превышает RLIMIT_STACK (обычно это 8 Мб), то стек увеличивается и программа продолжает исполнение, как ни в чём не бывало. Но если максимальный размер стека достигнут, мы получаем переполнение стека (stack overflow) и программе приходит ошибка Segmentation Fault (ошибка сегментации). При этом стек умеет только увеличиваться – подобно государственному бюджету, он не уменьшается обратно.

Динамический рост стека – единственная ситуация, в которой может осуществляться доступ к свободной памяти, которая показана белым на схеме. Все другие попытки доступа к этой памяти вызывают ошибку page fault, приводящую к Segmentation Fault. А некоторые занятые области памяти служат только для чтения, поэтому попытки записи в эти области также приводят к Segmentation Fault.

После стека идёт сегмент отображения в память. Тут ядро размещает содержимое файлов напрямую в памяти. Любое приложение может запросить сделать это через системный вызов mmap() в Linux или CreateFileMapping() / MapViewOfFile() в Windows. Это удобный и быстрый способ организации операций ввода и вывода в файлы, поэтому он используется для подгрузки динамических библиотек. Также возможно создать анонимное место в памяти, не связанное с файлами, которое будет использоваться для данных программы. Если вы сделаете в Linux запрос на большой объём памяти через malloc(), библиотека C создаст такую анонимное отображение вместо использования памяти из кучи. Под «большим» подразумевается объём больший, чем MMAP_THRESHOLD (128 kB по умолчанию, он настраивается через mallopt().)

Сама куча расположена на следующих позициях в памяти. Она обеспечивает выделение памяти во время выполнения программы, как и стек – но, в отличие от него, хранит те данные, которые должны пережить функцию, размещающую их. В большинстве языков есть инструменты для управления кучей. В этом случае удовлетворение запроса на размещение памяти выполняется совместно программой и ядром. В С интерфейсом для работы с кучей служит malloc() с друзьями, а в языке, имеющем автоматическую сборку мусора, типа С#, интерфейсом служит ключевое слово new.

Если в куче оказывается недостаточно места для выполнения запроса, эту проблему может обработать сама программа без вмешательства ядра. В ином случае куча увеличивается системным вызовом brk(). Управление кучей – дело сложное, оно требует хитроумных алгоритмов, которые стремятся работать быстро и эффективно, чтобы угодить хаотичному методу размещению данных, которым пользуется программа. Время на обработку запроса к куче может варьироваться в широких пределах. В системах реального времени есть специальные инструменты для работы с ней. Кучи тоже бывают фрагментированными:

image

И вот мы добрались до самой нижней части схемы – BSS, данные и текст программы. BSS и данные хранят статичные (глобальные) переменные в С. Разница в том, что BSS хранит содержимое непроинициализированных статичных переменных, чьи значения не были заданы программистом. Кроме этого, область BSS анонимна, она не соответствует никакому файлу. Если вы пишете static int cntActiveUsers , то содержимое cntActiveUsers живёт в BSS.

Сегмент данных, наоборот, содержит те переменные, которые были проинициализированы в коде. Эта часть памяти соответствует бинарному образу программы, содержащему начальные статические значения, заданные в коде. Если вы пишете static int cntWorkerBees = 10 , то содержимое cntWorkerBees живёт в сегменте данных, и начинает свою жизнь как 10. Но, хотя сегмент данных соответствует файлу программы, это приватное отображение в память (private memory mapping) – а это значит, что обновления памяти не отражаются в соответствующем файле. Иначе изменения значения переменных отражались бы в файле, хранящемся на диске.

Пример данных на диаграмме будет немного сложнее, поскольку он использует указатель. В этом случае содержимое указателя, 4-байтный адрес памяти, живёт в сегменте данных. А строка, на которую он показывает, живёт в сегменте текста, который предназначен только для чтения. Там хранится весь код и разные другие детали, включая строковые литералы. Также он хранит ваш бинарник в памяти. Попытки записи в этот сегмент оканчиваются ошибкой Segmentation Fault. Это предотвращает ошибки, связанные с указателями (хотя не так эффективно, как если бы вы вообще не использовали язык С). На диаграмме показаны эти сегменты и примеры переменных:

image

Изучить области памяти Linux-процесса можно, прочитав файл /proc/pid_of_process/maps. Учтите, что один сегмент может содержать много областей. К примеру, у каждого файла, сдублированного в память, есть своя область в сегменте mmap, а у динамических библиотек – дополнительные области, напоминающие BSS и данные. Кстати, иногда, когда люди говорят «сегмент данных», они имеют в виду данные + bss + кучу.

Бинарные образы можно изучать при помощи команд nm и objdump – вы увидите символы, их адреса, сегменты, и т.п. Схема виртуальных адресов, описанная в этой статье – это т.н. «гибкая» схема, которая по умолчанию используется уже несколько лет. Она подразумевает, что переменной RLIMIT_STACK присвоено какое-то значение. В противном случае Linux использует «классическую» схему:

Похожие статьи