Изучение режимов работы динамической и статической памяти

Работа по теме: Глава 5.Память. Глава: Оперативные запоминающие устройства. ВУЗ: НГТУ.
article placeholder

Оперативные запоминающие устройства

Большинство из применяемых
в настоящее время типов микросхем
оперативной памяти не в состоянии
сохранять данные без внешнего источника
энергии, т.е. являются энергозависимыми
(volatile
memory).
Широкое распространение таких устройств
связано с рядом их достоинств по сравнению
с энергонезависимыми типами ОЗУ
(non-volatile
memory):
большей емкостью, низким энергопотреблением,
более высоким быстродействием и невысокой
себестоимостью хранения единицы
информации.

Энергозависимые ОЗУ можно
подразделить на две основные подгруппы:
динамическую память (DRAM
— Dynamic
Random
Access
Memory)
и статическую память (SRAM
— Static
Random
Access
Memory).

Статическая и динамическая оперативная память

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

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

img zOa258

Рис. 5.7.
Запоминающий
элемент статического ОЗУ

Запоминающий элемент динамической
памяти значительно проще. Он состоит
из одного конденсатора и запирающего
транзистора (рис. 5.8).

img 78Jhzy

Рис. 5.8.
Запоминающий
элемент динамического ОЗУ

Наличие или отсутствие
заряда в конденсаторе интерпретируются
как 1 или 0 соответственно. Простота
схемы позволяет достичь высокой плотности
размещения ЗЭ и, в итоге, снизить
стоимость. Главный недостаток подобной
технологии связан с тем, что накапливаемый
на конденсаторе заряд со временем
теряется. Даже при хорошем диэлектрике
с электрическим сопротивлением в
несколько тераом (1012
Ом)
используемом при
изготовлении элементарных конденсаторов
ЗЭ, заряд теряется достаточно быстро.
Размеры у такого конденсатора
микроскопические, а емкость имеет
порядок 1СГ15
Ф. При такой емкости на одном конденсаторе
накапливается всего около 40 000 электронов.
Среднее время утечки заряда ЗЭ динамической
памяти составляет сотни или даже десятки
миллисекунд, поэтому заряд необходимо
успеть восстановить в течение данного
отрезка времени, иначе хранящаяся
информация будет утеряна. Периодическое
восстановление заряда ЗЭ называется
регенерацией
и
осуществляется каждые 2-8 мс,

В различных типах ИМС динамической
памяти нашли применение три основных
метода регенерации:

— одним
сигналом
RAS (ROR — RAS Only Refresh);

— сигналом
CAS, предваряющим
сигнал
RAS (CBR — CAS Before RAS);

— автоматическая регенерация
(SR
— Self
Refresh).

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

Особенность метода CBR
в том, что если в обычном цикле чтения/записи
сигнал RAS
всегда предшествует сигналу CAS,
то при появлении сигнала CAS
первым начинается специальный цикл
регенерации. В этом случае адрес строки
не передается, а микросхема использует
свой внутренний счетчик, содержимое
которого увеличивается на единицу при
каждом очередном CBR-цикле.
Режим позволяет регенерировать память,
не занимая шину адреса, то есть более
эффективен.

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

Область применения статической
и динамической памяти определяется
скоростью и стоимостью. Главным
преимуществом SRAM
является более высокое быстродействие
(примерно на порядок выше, чем у DRAM).
Быстрая синхронная SRAM
может работать со временем доступа к
информации, равным времени одного
тактового импульса процессора. Однако
из-за малой емкости микросхем и высокой
стоимости применение статической
памяти, как правило, ограничено
относительно небольшой по емкости
кэш-памятью первого (L1),
второго (L2)
или третьего (L3)
уровней. В то же время самые быстрые
микросхемы динамической памяти на
чтение первого байта пакета все еще
требуют от пяти до десяти тактов
процессора, что замедляет работу всей
ВМ. Тем не менее благодаря высокой
плотности упаковки ЗЭ и низкой стоимости
именно DRAM
используется при построении основной
памяти ВМ.

Содержание

  1. # факты | Как работает оперативная память?
  2. Ячейка памяти подобна дырявому ведру
  3. Устройство ячейки динамической оперативной памяти (DRAM)
  4. Статическая оперативная память
  5. Что такое оперативная память в компьютере и зачем она нужна
  6. Программная и аппаратная части компьютера
  7. Статическая и динамическая память
  8. Модули с коррекцией ошибок
  9. Микросхема SPD
  10. Быстродействие динамической оперативной памяти и нелепая идея как ее увеличить
  11. Немного истории
  12. Вкратце о статической и динамической памяти
  13. Подробнее о работе динамической памяти в союзе с кэшем
  14. Теперь немного математики
  15. Собственно здесь пошли нелепые идеи

# факты | Как работает оперативная память?

Оперативная память (ОЗУ, RAM), самая известная из всех рассмотренных ранее форм компьютерной памяти. Эту память называют памятью «произвольного доступа» («random access»), поскольку вы можете получить доступ к любой ее ячейке непосредственно. Для этого достаточно знать строку и столбец, на пересечении которых находится нужная ячейка. Известны два основных вида оперативной памяти: динамическая и статическая. Сегодня мы подробно рассмотрим принцип «дырявого ведра», на котором основана динамическая память. Некоторое внимание будет уделено и статической памяти, быстрой, но дорогой.

1 operativnaya pamyat

Ячейка памяти подобна дырявому ведру

2 operativnaya pamyat

Подобно подробно рассмотренному ранее микропроцессору, чип памяти является интегральной микросхемой (ИС, IC), собранной из миллионов транзисторов и конденсаторов. Одним из наиболее распространенных видов памяти произвольного доступа является DRAM (динамическая память произвольного доступа, dynamic random access memory). В ней транзистор и конденсатор спарены и именно они образуют ячейку, содержащую один бит информации. Конденсатор содержит один бит информации, то есть «0» или «1». Транзистор же играет в этой паре роль переключателя (свитча), позволяющего управляющей схеме чипа памяти считывать или менять состояние конденсатора.

Конденсатор можно представить себе в виде небольшого дырявого «ведерка», которое при необходимости заполняется электронами. Если оно заполнено электронами, его состояние равно единице. Если опустошено, то нулю. Проблемой конденсатора является утечка. За считанные миллисекунды (тысячные доли секунды) полный конденсатор становится пустым. А это значит, что или центральный процессор, или контроллер памяти вынужден постоянно подзаряжать каждый из конденсаторов, поддерживая его в наполненном состоянии. Подзарядку следует осуществлять до того, как конденсатор разрядится. С этой целью контроллер памяти осуществляет чтение памяти, а затем вновь записывает в нее данные. Это действие обновления состояния памяти осуществляется автоматически тысячи раз за одну только секунду.

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

Устройство ячейки динамической оперативной памяти (DRAM)

3 operativnaya pamyat

Итак, представим себе тетрадный лист. Некоторые клеточки закрашены красным фломастером, а некоторые остались белыми. Красные клеточки это ячейки, состояние которых «1», а белые — «0».

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

Динамическая оперативная память передает заряд по определенному столбцу. Этот заряд называют стробом адреса столбца (CAS, Column Adress Strobe) или просто сигналом CAS. Этот сигнал может активировать транзистор любого бита столбца. Управляющий сигнал строки именуется стробом адреса строки (RAS, Row Adress Strobe). Для указания адреса ячейки следует задать оба управляющих сигнала. В процессе записи конденсатор готов принять в себя заряд. В процессе чтения усилитель считывания (sense-amplifier) определяет уровень заряда конденсатора. Если он выше 50 %, бит читается, как «1»; в остальных случаях, как «0».

Осуществляется также обновление заряда ячеек. За порядком обновления следит счетчик. Время, которое требуется на все эти операции, измеряется в наносекундах (миллиардных долях секунды). Если чип памяти 70-наносекундный, это значит, полное чтение и перезарядка всех его ячеек займет 70 наносекунд.

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

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

Статическая оперативная память

4 operativnaya pamyat

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

В современном мире чипы памяти комплектуются в компонент, именуемый модулем. Порой компьютерные специалисты называют его «планкой памяти». Один модуль или «планка» содержит несколько чипов памяти. Не исключено, что вам приходилось слышать такие определения, как «память 8×32» или «память 4×16». Разумеется, цифры могли быть иными. В этой простой формуле первым множителем является количество чипов в модуле, а вторым емкость каждого модуля. Только не в мегабайтах, а в мегабитах. Это значит, что результат действия умножения следует разделить на восемь, чтобы получить объем модуля в привычных нам мегабайтах.

К примеру: 4×32 означает, что модуль содержит четыре 32-мегабитных чипа. Умножив 4 на 32, получаем 128 мегабит. Поскольку нам известно, что в одном байте восемь бит, нам нужно разделить 128 на 8. В итоге узнаем, что «модуль 4×32» является 16-мегабайтным и устарел еще в конце минувшего века, что не мешает ему быть превосходным простым примером для тех вычислений, которые нам потребовались.

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

Источник

Что такое оперативная память в компьютере и зачем она нужна

Добрый день, друзья! Сегодня мы поговорим об оперативной памяти компьютера. Но сначала кратко вспомним, что такое

Программная и аппаратная части компьютера

RAM old newСовременный компьютер включает в себя аппаратную и программную части.

Аппаратная часть – это то, что можно увидеть, потрогать, это то, что жаргонно называют «железом».

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

Грубо, говоря, программная часть «прокачивает» через аппаратную потоки цифровой информации.

Информационный поток состоит из мельчайших частиц, как бы квантов информации, при этом каждый квант может иметь два значения – «0» и «1». Все современные компьютеры основаны на двоичной логике. Информационный поток распределяется процессором компьютера по ячейкам памяти. Так как логика двоичная, то и ячейка может иметь только два состояния.

В компьютере имеется:

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

В оперативной памяти при выключении питания компьютера данные стираются, в постоянной – остаются. Если они почему-то сотрутся и в постоянной памяти, то компьютер превратится в мертвую кучку «железа».

Статическая и динамическая память

Основой ячейки динамической памяти служит миниатюрный конденсатор. Если он заряжен до какого-то определенного порога – это соответствует «единице», если разряжен (до определенного порога и ниже) – это соответствует «нулю».

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

Кроме того, процессор работает на значительно более высокой частоте, чем основная (динамическая) память. И если поднимать только тактовую частоту процессора – особого толку не будет. Быстродействие компьютера будет определяться более медленной скоростью работы памяти.

Поднять быстродействие можно, если между процессором и основной памятью установить статическую память (SRAM, Static RAM), которая работает на более высокой частоте (в идеале – равной тактовой частоте процессора).

Она будет являться как бы посредником, процессор будет считывать данные из нее, а не из медленной RAM. Раньше SRAM устанавливали в виде отдельных микросхем на материнской плате, теперь же она перекочевала в процессор и стала называться «кэш первого уровня L1» и «кэш второго уровня L2».

RAM newТактовые частоты оперативной памяти все время растут, и объем ее увеличивается.

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

К настоящему времени емкость модулей исчисляется гигабайтами (Гб). Со времени 286-х компьютеров — с их 1-2 Mб RAM — объемы выросли в тысячи раз!

Модули с коррекцией ошибок

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

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

Модули с коррекцией ошибок (ЕСС — Error Correction Code) применяется в серверах, где циркулируют большие информационные потоки и велика цена ошибки.

В бытовых и офисных компьютерах применяются модули без коррекции ошибок, которые стоят существенно дешевле. Эти два вида модулей можно легко отличить по внешнему виду. Память без коррекции ошибок имеет четное количество микросхем в модуле (чаще всего – 8), память с коррекцией ошибок – нечетное (чаще всего – 9).

Микросхема SPD

RAM SPDВ модуле, вместе собственно с микросхемами динамической памяти, обычно установлена и маленькая микросхемка EEPROM (электрически перепрограммируемое постоянное запоминающее устройство) с последовательным доступом, где хранятся настройки для этого модуля. Это микросхема SPD (Serial Presense Detect – схема последовательного детектирования).

Для устойчивой работы и безошибочного считывания данных из микросхем необходимо выдержать определенные временнЫе параметры (задержки) между различными управляющими сигналами. В программе конфигурации SETUP компьютера имеется возможность настройки параметров памяти — как автоматически (опция «By SPD»), так и вручную.

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

Скучноватый сегодня у нас получился урок… Но зато вы, уважаемые читатели, узнали о микросхеме SPD. Об этом редко пишут. Раньше, в первых модулях DDR наиболее продвинутые пользователи перепрограммировали эту микросхему с целью разгона памяти. Производитель ведь всегда закладывает какой-то резерв.

И этот резерв использовался для разгона. Такое вмешательство на самом низком – аппаратном — уровне было чревато сбоями в работе. Но когда получалось, дотошный пользователь радовался как гонщик «Формулы-1», которому удалось выжать из своего «болида» последние лошадиные силы.

На этом закончим краткое знакомство с компьютерной памятью. В следующей статье мы познакомимся с тем, что такое BIOS в компьютере. Будет интересно!

Надеюсь, информация оказалась Вам полезной.

Источник

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

Немного истории

На заре вычислительной техники динамическая память вполне себе работала на частоте процессора. Мой первый опыт работы с компьютером был связан с клоном компьютера «ZX Spectrum». Процессор Z80 осуществлял обработку инструкций в среднем по 4 такта на операцию, при этом два такта использовалось на осуществление регенерации динамической памяти, что дает нам при частоте в 3,5 МГц, не более 875 000 операций в секунду.

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

Давайте рассмотрим что представляет из себя оперативная память компьютера сейчас, и что с ней можно сделать, чтобы увеличить быстродействие компьютерной системы.
image loader

Вкратце о статической и динамической памяти

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

Ячейка статической памяти строится на основе триггера, который обычно находиться в одном из стабильных состояний «А» или «Б»(А =! Б). Минимальное количество транзисторов для одной ячейки составляет 6 штук, при этом сложность трассировки в ячейках видимо не позволяет сделать модули статической памяти в 1 гиг, по цене обычного модуля в 8 гиг.

Ячейка динамической памяти состоит из одного конденсатора отвечающего за хранение информации и одного транзистора отвечающего за изоляцию конденсатора от шины данных. При этом в качестве конденсатора используется не навесной электролит, а паразитная емкость p-n перехода между «подложкой» и электродом транзистора (специально для этих целей увеличенная, обычно от нее стараются избавиться). Недостатком конденсатора является ток утечки (как в нем самом, так и в ключевом транзисторе) от которого очень сложно избавиться, кроме того с увеличением температуры он увеличивается что влечет вероятность искажения хранимой информации. Для поддержки достоверности, в динамической памяти применяется «регенерация», она заключается в периодическом обновлении хранимой информации не реже заданного периода в течении которого информация сохраняет достоверное значение. Типовой период регенерации составляет 8 мс, при этом чаще обновлять информацию можно, реже не рекомендуется.

В остальном принцип функционирования идентичен и заключается в следующем:

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

Если на заре вычислительной техники каждая операция чтения или записи завершалась полным циклом памяти:

— выбор строки;
— операция чтения/записи из ячейки;
— смена/перевыбор строки.

Современный операции работы с микросхемами «синхронной памяти а ля DDRX» заключается в следующем:

— выбор строки;
— операции чтения/записи ячеек строки группами по 4-8 бит/слов (допускается множественное обращение в рамках одной строки);
— закрытие строки с записью информации на место;
— смена/перевыбор строки.

Такое решение позволило сэкономить время доступа к данным когда после чтения значения из ячейки «1», требуется обращение к ячейкам «2, 3, 4, или 7» расположенным в той-же строке, либо сразу после операции чтения, необходимо записать назад измененное значение.

Подробнее о работе динамической памяти в союзе с кэшем

Контроллер памяти (в чипсете или встроенный в процессор) выставляет адрес блока и номер строки (старшую часть адреса блока) в микросхему/модуль памяти. Выбирается соответствующий блок (дальше будет рассматриваться работа в рамках одного блока) и полученный «двоичный номер» декодируется в позиционный адрес строки, после чего происходит передача информации в буфер, из которого в последствии осуществляется доступ к данным. Время в тактах необходимое на данную операцию называется tRCD и отображается в схемах «9-9-9/9-9-9-27» на втором месте.

После того как строка активизирована можно обращаться к «столбцам» для этого контроллер памяти передает адрес ячейки в строке, и спустя время «CL» (указывается в выше обозначенной схеме «х-х-х» на 1 месте) данные начинают передаваться от микросхемы памяти в процессор (почему во множественном числе? потому что здесь вмешивается КЭШ) в виде пакета из 4-8 бит (для отдельно взятой микросхемы) в строку кэша (размер зависит от процессора, типовое значение 64 байта — 8 слов по 64 бита, но встречаются и другие значения). Спустя определенное количество тактов, необходимых для передачи пакета данных можно сформировать следующий запрос на чтение данных из других ячеек выбранной строки, или выдать команду на закрытие строки которая выражается в виде tRP указанное в виде третьего параметра из «х-х-х-. ». Во время закрытия строки, данные из буфера записываются обратно в строку блока, после окончания записи можно выбрать другую строку в данном блоке. Кроме этих трех параметров есть минимальное время в течении которого строка должна быть активна «tRAS», и минимальное время полного цикла работы со строкой разделяющего две команды по активизации строки (влияет на случайный доступ).

grossws 19 апреля 2016 в 12:40

CL — CAS latency, tRCD — RAS to CAS delay, tRP — row precharge, CAS — column address strobe, RAS — row address strobe.

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

Если блок находится в состоянии покоя (нет активной строки), контроллер выдает команду выбора строки, в результате двоичный номер строки преобразуется в позиционный номер, и происходит чтение содержимого строки за время «tRCD».

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

Перед тем как сменить/закрыть строку, необходимо записать данные на место, так как во время чтения, информация была фактически уничтожена. Время необходимое на восстановление информации в строке «tRP».

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

Сигнал RAS определяет факт выдачи адреса строки;
Сигнал CAS определяет факт выдачи адреса столбца.

Если раньше все управление перекладывалось на сторону контроллера памяти и управлялось данными сигналами, то сейчас идет режим команд, когда в модуль/микросхему выдается команда, а спустя некоторое время идет передача данных. Более подробно лучше ознакомиться в спецификации стандарта, например DDR4.

Если говорить о работе с dram в общем, то при массовом чтении она обычно выглядит следующим образом:

выставили адрес строки,
выставили RAS (и через такт сняли),
выждали tRCD,
выставили адрес колонки с которой читаем (и каждый следующий такт выставляем следующий номер колонки),
выставили CAS,
выждали CL, начали читать данные,
сняли CAS, прочитали остаток данных (ещё CL тактов).

При переходе не следующий ряд делается precharge (RAS + WE), выжидается tRP, выполняется RAS с установленным адресом строки и далее выполняется чтение как описано выше.

Latency чтения случайной ячейки естественным образом вытекает из описанного выше: tRP + tRCD + CL.

В действительности зависит от предыдущего состояния «банка памяти» к которому идет обращение.

Нужно обязательно помнить что у оперативной памяти DDR есть две частоты:

— основная тактовая частота определяющая темп передачи команд и тайминги;
— эффективная частота передачи данных (удвоенная тактовая частота, которой и маркируются модули памяти).

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

image loader
Обработка одного элемента связного списка с разным шагом (1 шаг = 16 байт)

Теперь немного математики

Процессор: рабочие частоты процессоров сейчас достигают 5 ГГц. По заявлениям производителей, схемотехнические решения (конвейеры, предсказания и прочие хитрости) позволяют выполнять одну инструкцию за такт. Для округления расчетов возьмем значение тактовой частоты в 4 ГГц что даст нам одну операцию за 0,25 нс.

Оперативная память: возьмем для примера оперативную память нового формата DDR4-2133 с таймингом 15-15-15.

процессор
Fтакт = 4 ГГц
Tтакт = 0,25 нс (по совместительству время выполнения одной операции «условно»)

Оперативная память DDR4-2133
Fтакт = 1066 МГц
Fдата = 2133 МГц
tтакт = 0,94 нс
tдата = 0,47 нс
СПДмакс = 2133 МГц * 64 = 17064 Мбайт/с (скорость передачи данных)
tRCmin = 50 нс (минимальное время между двумя активациями строк)

Время получения данных

Из регистров и кэша, данные могут быть предоставлены в течении рабочего такта (регистры, кэш 1 уровня) или с задержкой в несколько тактов процессора для кэша 2-го и 3-го уровня.

Для оперативной памяти ситуация похуже:

— время выбора строки составляет: 15 clk * 0,94 нс = 14 нс
— время до получения данных с команды выбора столбца: 15 clk * 0,94 нс = 14 нс
— время закрытия строки: 15 clk * 0,94 нс = 14 нс (кто бы подумал)

Из чего следует что время между командой запрашивающей данные из ячейки памяти (в случае если в кэш не попали) может варьироваться:

14 нс — данные находятся в уже выбранной строке;
28 нс — данные находятся в невыбранной строке при условии что предыдущая строка уже закрыта (блок в состоянии «idle»);
42-50 нс — данные находятся в другой строке, при этом текущая строка нуждается в закрытии.

Количество операций которые может выполнить (вышеобозначенный) процессор за это время составляет от 56 (14 нс) до 200 (50 нс смена строки). Отдельно стоить отметить что ко времени между командой выбора столбца и получением всего пакета данных добавляется задержка загрузки строки кэша: 8 бит пакета * 0,47 нс = 3,76 нс. Для ситуации когда данные будут доступны «программе» только после загрузки строки кэша (кто знает что и как там накрутили разработчики процессоров, память по спецификации позволяет выдать нужные данные вперед), мы получаем еще до 15-и пропущенных тактов.

В рамках одной работы я проводил исследование скорости работы памяти, полученные результаты показали, что полностью «утилизировать» пропускную способность памяти возможно только в операциях последовательного обращения к памяти, в случае произвольного доступа увеличивается время обработки (на примере связного списка из 32-х битного указателя и трех двойных слов одно из которых обновляется) с 4-10 (последовательный доступ) до 60-120 нс (смена строк) что дает разницу в скорости обработки в 12-15 раз.

Скорость обработки данных

Для выбранного модуля имеем пиковую пропускную способность в 17064 Мбайт/с. Что для частоты в 4 ГГц дает возможность обрабатывать за такт 32-х битные слова (17064 Мб / 4000 МГц = 4,266 байт на такт). Здесь накладываются следующие ограничения:

— без явного планирования загрузки кэша, процессор будет вынужден простаивать (чем выше частота, тем больше ядро просто ждет данные);
— в циклах «чтение модификация запись» скорость обработки снижается в два раза;
— многоядерные процессоры разделят между ядрами пропускную способность шины памяти, а для ситуации когда будут конкурирующие запросы (вырожденный случай), производительность работы памяти может ухудшиться в «200 раз (смена строк) * Х ядер».

17064 Мбайт/с / 8 ядер = 2133 Мбайт/с на ядро в оптимальном случае.
17064 Мбайт/с / (8 ядер * 200 пропущенных операций) = 10 Мбайт/с на ядро для вырожденного случая.

В переводе на операции получаем для 8-и ядерного процессора: от 15 до 400 операций на обработку байта данных, или от 60 до 1600 операций/тактов на обработку 32-х битного слова.

На мой взгляд медленно как-то. По сравнению с памятью DDR3-1333 9-9-9, где время полного цикла примерно равно 50 нс, но отличаются время таймингов:

— время доступа к данным уменьшается до 13,5 нс (1,5 нс * 9 тактов);
— время передачи пакета из восьми слов 6 нс (0,75 * 8 вместо 3.75 нс) и при случайном доступе к памяти, разница в скорости передачи данных практически исчезает;
— пиковая скорость составит 10 664 МБайт/с.

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

Собственно здесь пошли нелепые идеи

Таблица памяти, содержит в себе заданное количество столбцов, равное 512, 1024, 2048 бит. С учетом времени цикла по активации строк в 50 нс, мы получаем потенциальную скорость обмена данными: «1/0,00000005 с * 512 столбцов * 64 бит слово = 81 920 Мбайт/с» вместо текущих 17 064 Мбайт/с (163 840 и 327 680 МБайт/с для строк из 1024 и 2048 столбцов). Скажете: «всего раз в 5 (4,8) быстрее», на что я отвечу: «это скорость обмена, когда все конкурирующие запросы обращены к одному банку памяти, и доступная пропускная возможность увеличивается пропорционально количеству банков, и увеличением длины строки каждой таблицы (потребует увеличение длины операционной строки), что в свою очередь упирается главным образом в скорость шины обмена данными».

Смена режима обмена данными потребует передачи всего содержимого строки в кэш нижнего уровня, для чего надо разделить уровни кэша не только по скорости работы, но и по размеру кэш строки. Так например реализовав «длину» строки кэша N-го уровня в (512 столбцов * 64 размер слова) 32 768 бит, мы можем за счет уменьшения количества операций сравнения увеличить общее количество строк кэша и соответственно увеличить максимальный его объем. Но если сделать параллельную шину в кэше такого размера, мы можем получить уменьшение частоты функционирования, из чего можно применить другой подход организации кэша, если разбить указанную «Jumbo»-строку кэша на блоки по длине строки верхнего кэша и производить обмен с небольшими порциями, это позволит сохранить частоту функционирования, разделив задержку доступа на этапы: поиск строки кэша, и выборку нужного «слова», в найденной строке.

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

Оценим скорость такого канала:

1/0,00000005 нс = 20 МГц (частота смены строк в рамках одного блока)
20 Мгц * 32 768 бит = 655 360 Мбит/с
Для дифференциальной передачи с тем-же размером шины данных получаем:
655 360 Мбит/с / 32 канала = 20 480 Мбит/с на канал.

Такая скорость выглядит приемлемо для электрического сигнала (10 Гбит/с для сигнала со встроенной синхронизацией на 15 метров доступен, почему бы и 20 ГБит/с с внешней синхронизацией на 1 метр не осилить), однако необходимое дальнейшее увеличение скорости передачи для уменьшения задержки передачи между первым и последним битом информации, может потребовать увеличения пропускной способности, с возможной интеграцией оптического канала передачи, но это уже вопрос к схемотехникам, у меня маловато опыта работы с такими частотами.

и тут Остапа понесло

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

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

Источник

Существует много различных видов оперативной памяти, но их все можно подразделить на две основные подгруппы — статическая память (Static RAM) и динамическая память (Dynamic RAM).

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

Рассмотрим достоинства и недостатки SRAM и DRAM:

1. Память типа DRAM, в силу своей технологии, имеет гораздо большую плотность размещения данных, чем SRAM.

2. DRAM гораздо дешевле SRAM,

3. но последняя производительнее и надежнее, поскольку всегда готова к считыванию.

СТАТИЧЕСКАЯ RAM

В современных компьютерах SRAM используется как кэш второго уровня и имеет сравнительно небольшой объем (обычно 128…1024 Кб). В кэше она используется именно потому, что к нему предъявляются очень серьезные требования в плане надежности и производительности. Основную же память компьютера составляют микросхемы динамической памяти.

Статическую память делят на синхронную и асинхронную. Асинхронная память уже не используется в персональных компьютерах, она была вытеснена синхронной еще со времен 486-ых компьютеров.

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

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

Поэтому в 1997 г. несколько компаний представили свои технологии статической RAM без такой задержки. Это технологии ZBT (Zero-Bus Turnaround — нуль-переключение шины) SRAM от IDT, и похожая NoBL (No Bus Latency — шина без задержек). ДИНАМИЧЕСКАЯ RAM(вся память за исключением сегмента данных-64кб,стекопамяти-16кб,собственным телом программ)

Память типа DRAM гораздо шире распространена в вычислительной технике благодаря двум своим достоинствам перед SRAM — дешевизне и плотности хранения данных. Эти две характеристики динамической памяти компенсируют в некоторой степени ее недостатки — невысокое быстродействие и необходимость в постоянной регенерации данных.

Сейчас существуют около 25-ти разновидностей DRAM, так как производители и разработчики памяти пытаются угнаться за прогрессом в области центральных процессоров.

основные типы динамической памяти — от старых Conventional и FPM DRAM до еще не воплощенных в жизнь QDR, DDR SDRAM, RDRAM.

Оперативная память имеет 3 раздела:

  • 640 кб. DOS – осн. ОЗУ
  • 1мб основные модули Windows – верхняя ОЗУ
  • оставшиеся модули – расширенная ОЗУ

18. МОДУЛЬ ПАМЯТИ DIMM. ДРУГИЕ ТИПЫ МОДУЛЕЙ ПАМЯТИ.

Оперативная память компьютера относится к одному из важнейших элементов компьютера, определяющих производительность и функциональные возможности всей системы. Оперативная память представлена определенным количеством микросхем ОЗУ на материнской плате. Если сравнительно недавно микросхемы ОЗУ подключались через специальные панельки — разъемы, позволявшие менять отдельные микросхемы без пайки, то в настоящее время архитектура компьютера предусматривает их размещение на небольших платах-модулях. Такие модули памяти устанавливаются в специальные разъемы-слоты на материнской плате. Одним из вариантов такого решения явились SIMM-модули (SIMM — single in-line memory modules).

Миниатюрные SIMM-модули, или просто SIMM, представляют собой блоки оперативной памяти разной емкости. Широкое распространение нашли SIMM на 4, 8, 16, 32 и даже 64 Мбайт.

SIMM бывают двух разных типов: на 30 pin и 72 pin, где pin (пин) означает число контактов подключения к специализированному разъему ОЗУ на материнской плате. При этом 30 pin и 72 pin SIMM — не взаимозаменяемые элементы.

staticheskaja i dinamicheskaja operativnaja pamjat 1

Внешний вид модуля DIMM

Модули типа DIMM наиболее распространены в виде 168-контактных модулей, устанавливаемых в разъём вертикально и фиксируемых защёлками. В портативных устройствах широко применяются SO DIMM — разновидность DIMM малого размера (англ. SO — small outline), они предназначены в первую очередь для портативных компьютеров.

staticheskaja i dinamicheskaja operativnaja pamjat 2

Внешний вид модуля RIMM

Модули типа RIMM менее распространены, в таких модулях выпускается память типа Direct RDRAM. Они представлены 168/184-контактными[1] прямоугольными платами, которые обязательно должны устанавливаться только в парах, а пустые разъёмы на материнской плате занимаются специальными заглушками. Это связано с особенностями конструкции таких модулей.

staticheskaja i dinamicheskaja operativnaja pamjat 3

19. ВНЕШНЯЯ ПАМЯТЬ. РАЗНОВИДНОСТИ УСТРОЙСТВ ВНЕШНЕЙ ПАМЯТИ.

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

Взу oОЗУ o Кэш o Процессор

В состав внешней памяти компьютера входят:

  • накопители на жёстких магнитных дисках;
  • накопители на гибких магнитных дисках;
  • накопители на компакт-дисках;
  • накопители на магнито-оптических компакт-дисках;
  • накопители на магнитной ленте (стримеры) и др.

1. Накопители на гибких магнитных дисках

Гибкий диск (англ. floppy disk), или лискета, — носитель небольшого объема информации, представляющий собой гибкий пластиковый диск в защитной оболочке. Используется для переноса данных с одного компьютера на другой и для распространения программного обеспечения.

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

ивается однозначное соответствие между двоичной информацией и ориентацией магнитных доменов.

Информация записывается по концентрическим дорожкам (трекам), которые делятся на секторы. Количество дорожек и секторов зависит от типа и формата дискеты. Сектор хранит минимальную порцию информации, которая может быть записана на диск или считана. Ёмкость сектора постоянна и составляет 512 байтов.

В настоящее время наибольшее распространение получили дискеты со следующими характеристиками: диаметр 3,5 дюйма (89 мм), ёмкость 1,44 Мбайт, число дорожек 80, количество секторов на дорожках 18.

Дискета устанавливается в накопитель на гибких магнитных дисках (англ. floppy-disk drive), автоматически в нем фиксируется, после чего механизм накопителя раскручивается до частоты вращения 360 мин-1. В накопителе вращается сама дискета, магнитные головки остаются неподвижными. Дискета вращается только при обращении к ней. Накопитель связан с процессором через контроллер гибких дисков.

В последнее время появились трехдюймовые дискеты, которые могут хранить до 3 Гбайт информации. Они изготовливаются по новой технологии Nano2 и требуют специального оборудования для чтения и записи.

2. Накопители на жестких магнитных дисках

Если гибкие диски — это средство переноса данных между компьютерами, то жесткий диск — информационный склад компьютера.

Накопитель на жёстких магнитных дисках (англ. HDD — Hard Disk Drive) или винчестерский накопитель — это наиболее массовое запоминающее устройство большой ёмкости, в котором носителями информации являются круглые алюминиевые пластины — платтеры, обе поверхности которых покрыты слоем магнитного материала. Используется для постоянного хранения информации — программ и данных.

Как и у дискеты, рабочие поверхности платтеров разделены на кольцевые концентрические дорожки, а дорожки — на секторы. Головки считывания-записи вместе с их несущей конструкцией и дисками заключены в герметически закрытый корпус, называемый модулем данных. При установке модуля данных на дисковод он автоматически соединяется с системой, подкачивающей очищенный охлажденный воздух. Поверхность платтера имеет магнитное покрытие толщиной всего лишь в 1,1 мкм, а также слой смазки для предохранения головки от повреждения при опускании и подъёме на ходу. При вращении платтера над ним образуется воздушный слой, который обеспечивает воздушную подушку для зависания головки на высоте 0,5 мкм над поверхностью диска.

Винчестерские накопители имеют очень большую ёмкость: от 10 до 100 Гбайт. У современных моделей скорость вращения шпинделя (вращающего вала) обычно составляет 7200 об/мин, среднее время поиска данных 9 мс, средняя скорость передачи данных до 60 Мбайт/с. В отличие от дискеты, жесткий диск вращается непрерывно. Все современные накопители снабжаются встроенным кэшем (обычно 2 Мбайта), который существенно повышает их производительность. Винчестерский накопитель связан с процессором через контроллер жесткого диска.

4. Накопители на компакт-дисках

staticheskaja i dinamicheskaja operativnaja pamjat 4

Здесь носителем информации является CD-ROM (Сompact Disk Read-Only Memory — компакт диск, из которого можно только читать).

CD-ROM представляет собой прозрачный полимерный диск диаметром 12 см и толщиной 1,2 мм, на одну сторону которого напылен светоотражающий слой алюминия, защищенный от повреждений слоем прозрачного лака. Толщина напыления составляет несколько десятитысячных долей миллиметра.

Информация на диске представляется в виде последовательности впадин (углублений в диске) и выступов (их уровень соответствует поверхности диска), расположеных на спиральной дорожке, выходящей из области вблизи оси диска. На каждом дюйме (2,54 см) по радиусу диска размещается 16 тысяч витков спиральной дорожки. Для сравнения — на поверхности жесткого диска на дюйме по радиусу помещается лишь несколько сотен дорожек. Емкость CD достигает 780 Мбайт. Информация наносится на диск при его изготовлении и не может быть изменена.

CD-ROM обладают высокой удельной информационной емкостью, что позволяет создавать на их основе справочные системы и учебные комплексы с большой иллюстративной базой. Один CD по информационной емкости равен почти 500 дискетам. Cчитывание информации с CD-ROM происходит с достаточно высокой скоростью, хотя и заметно меньшей, чем скорость работы накопителей на жестком диске. CD-ROM просты и удобны в работе, имеют низкую удельную стоимость хранения данных, практически не изнашиваются, не могут быть поражены вирусами, c них невозможно случайно стереть информацию.

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

Для работы с CD-ROM нужно подключить к компьютеру накопитель CD-ROM (рис. 2.9), преобразующий последовательность углублений и выступов на поверхности CD-ROM в последовательность двоичных сигналов. Для этого используется считывающая головка с микролазером и светодиодом. Глубина впадин на поверхности диска равна четверти длины волны лазерного света. Если в двух последовательных тактах считывания информации луч света лазерной головки переходит с выступа на дно впадины или обратно, разность длин путей света в этих тактах меняется на полуволну, что вызывает усиление или ослабление совместно попадающих на светодиод прямого и отраженного от диска света.

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

Различная длина оптического пути луча света в двух последовательных тактах считывания информации соответствует двоичным единицам. Одинаковая длина соответствует двоичным нулям.

Сегодня почти все персональные компьютеры имеют накопитель CD-ROM. Но многие мультимедийные интерактивные программы слишком велики, чтобы поместиться на одном CD. На смену технологии СD-ROM стремительно идет технология цифровых видеодисков DVD. Эти диски имеют тот же размер, что и обычные CD, но вмещают до 17 Гбайт данных, т.е. по объему заменяют 20 стандартных дисков CD-ROM. На таких дисках выпускаются мультимедийные игры и интерактивные видеофильмы отличного качества, позволяющие зрителю просматривать эпизоды под разными углами камеры, выбирать различные варианты окончания картины, знакомиться с биографиями снявшихся актеров, наслаждаться великолепным качеством звука.

4. Накопитель на магнито-оптических компакт-дисках DVD

4,7 17 50-hd dvd 200 blue ray

Накопитель WARM (Write And Read Many times), позволяет производить многократную запись и считывание.

5. Накопители на магнитной ленте (стримеры)

Стример (англ. tape streamer) — устройство для резервного копирования больших объёмов информации. В качестве носителя здесь применяются кассеты с магнитной лентой ёмкостью 1 — 2 Гбайта и больше.

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

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

  1. Флешка

Кристалл на который записывается информация –32гб

20. ЖИДКОКРИСТАЛЛИЧЕСКИЕ МОНИТОРЫ. МОНИТОРЫ, ПОСТОРЕННЫЕ НА ОСНОВЕ ЭЛТ

Видеосистема компьютера состоит из трех компонент:

монитор (называемый также дисплеем);

видеоадаптер;

программное обеспечение (драйверы видеосистемы).

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

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

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

1. Монитор на базе электронно-лучевой трубки

Основной элемент дисплея — электронно-лучевая трубка. Её передняя, обращенная к зрителю часть с внутренней стороны покрыта люминофором — специальным веществом, способным излучать свет при попадании на него быстрых электронов.

staticheskaja i dinamicheskaja operativnaja pamjat 5 staticheskaja i dinamicheskaja operativnaja pamjat 1

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

Наборы точек люминофора располагаются по треугольным триадам. Триада образует пиксел — точку, из которых формируется изображение (англ. pixel — picture element, элемент картинки).

Расстояние между центрами пикселов называется точечным шагом монитора. Это расстояние существенно влияет на чёткость изображения. Чем меньше шаг, тем выше чёткость. Обычно в цветных мониторах шаг составляет 0,24 мм. При таком шаге глаз человека воспринимает точки триады как одну точку сложного цвета.

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

Величиной электронного тока пушек и, следовательно, яркостью свечения пикселов, управляет сигнал, поступающий с видеоадаптера.

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

Количество отображённых строк в секунду называется строчной частотой развертки. А частота, с которой меняются кадры изображения, называется кадровой частотой развёртки. Последняя не должна быть ниже 85 Гц, иначе изображение будет мерцать.

2. Жидкокристаллические мониторы

Все шире используются наряду с традиционными ЭЛТ-мониторами. Жидкие кристаллы — это особое состояние некоторых органических веществ, в котором они обладают текучестью и свойством образовывать пространственные структуры, подобные кристаллическим. Жидкие кристаллы могут изменять свою структуру и светооптические свойства под действием электрического напряжения. Меняя с помощью электрического поля ориентацию групп кристаллов и используя введённые в жидкокристаллический раствор вещества, способные излучать свет под воздействием электрического поля, можно создать высококачественные изображения, передающие более 15 миллионов цветовых оттенков.

Большинство ЖК-мониторов использует тонкую плёнку из жидких кристаллов, помещённую между двумя стеклянными пластинами. Заряды передаются через так называемую пассивную матрицу — сетку невидимых нитей, горизонтальных и вертикальных, создавая в месте пересечения нитей точку изображения (несколько размытого из-за того, что заряды проникают в соседние области жидкости).

Активные матрицы вместо нитей используют прозрачный экран из транзисторов и обеспечивают яркое, практически не имеющее искажений изображение. Экран при этом разделен на независимые ячейки, каждая из которых состоит из четырех частей (для трёх основных цветов и одна резервная). Количество таких ячеек по широте и высоте экрана называют разрешением экрана. Современные ЖК-мониторы имеют разрешение 642х480, 1280х1024 или 1024х768. Таким образом, экран имеет от 1 до 5 млн точек, каждая из которых управляется собственным транзистором. По компактности такие мониторы не знают себе равных. Они занимают в 2 — 3 раза меньше места, чем мониторы с ЭЛТ и во столько же раз легче; потребляют гораздо меньше электроэнергии и не излучают электромагнитных волн, воздействующих на здоровье людей.

21. ПРИНТЕРЫ. ПЛОТТЕР. СКАНЕР

Принтер — печатающее устройство. Осуществляет вывод из компьютера закодированной информации в виде печатных копий текста или графики.

Существуют тысячи наименований принтеров. Но основных видов принтеров три: матричные, лазерные и струйные.

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

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

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

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

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

Плоттер (графопостроитель) — устройство, которое чертит графики, рисунки или диаграммы под управлением компьютера.

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

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

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

Сканер — устройство для ввода в компьютер графических изображений. Создает оцифрованное изображение документа и помещает его в память компьютера.

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

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

22. ПОРТЫ УСТРОЙСТВ. ОХАРАКТЕРИЗОВАТЬ ОСНОВНЫЕ ВИДЫ ПОРТОВ.

Принцип открытой архитектуры заключается в следующем:

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

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

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

Если интерфейс является общепринятым, например, утверждённым на уровне международных соглашений, то он называется стандартным.

Каждый из функциональных элементов (память, монитор или другое устройство) связан с шиной определённого типа — адресной, управляющей или шиной данных.

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

staticheskaja i dinamicheskaja operativnaja pamjat 2

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

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

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

Последовательный порт обменивается данными с процессором побайтно, а с внешними устройствами — побитно. Параллельный порт получает и посылает данные побайтно.

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

23. АУДИОАДАПТЕР. ВИДЕОАДАПТЕР. ГРАФИЧЕСКИЙ АКСЕЛЕРАТОР. МОДЕМ.

Аудиоадаптер (Sound Blaster или звуковая плата) это специальная электронная плата, которая позволяет записывать звук, воспроизводить его и создавать программными средствами с помощью микрофона, наушников, динамиков, встроенного синтезатора и другого оборудования.

Аудиоадаптер содержит в себе два преобразователя информации:

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

Профессиональные звуковые платы позволяют выполнять сложную обработку звука, обеспечивают стереозвучание, имеют собственное ПЗУ с хранящимися в нём сотнями тембров звучаний различных музыкальных инструментов. Звуковые файлы обычно имеют очень большие размеры. Так, трёхминутный звуковой файл со стереозвучанием занимает примерно 30 Мбайт памяти. Поэтому платы Sound Blaster, помимо своих основных функций, обеспечивают автоматическое сжатие файлов.

Область применения звуковых плат — компьютерные игры, обучающие программные системы, рекламные презентации, голосовая почта (voice mail) между компьютерами, озвучивание различных процессов, происходящих в компьютерном оборудовании, таких, например, как отсутствие бумаги в принтере и т.п.

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

Наиболее распространенный видеоадаптер на сегодняшний день — адаптер SVGA (Super Video Graphics Array — супервидеографический массив), который может отображать на экране дисплея 1280х1024 пикселей при 256 цветах и 1024х768 пикселей при 16 миллионах цветов.

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

  • Графические акселераторы (ускорители) — специализированные графические сопроцессоры, увеличивающие эффективность видеосистемы. Их применение освобождает центральный процессор от большого объёма операций с видеоданными, так как акселераторы самостоятельно вычисляют, какие пиксели отображать на экране и каковы их цвета.
  • Фрейм-грабберы, которые позволяют отображать на экране компьютера видеосигнал от видеомагнитофона, камеры, лазерного проигрывателя и т. п., с тем, чтобы захватить нужный кадр в память и впоследствии сохранить его в виде файла.
  • TV-тюнеры — видеоплаты, превращающие компьютер в телевизор. TV-тюнер позволяет выбрать любую нужную телевизионную программу и отображать ее на экране в масштабируемом окне. Таким образом можно следить за ходом передачи, не прекращая работу.

Модем — устройство для передачи компьютерных данных на большие расстояния по телефонным линиям связи.

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

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

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

Управление модемом осуществляется с помощью специального коммутационного программного обеспечения.

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

24. МУЛЬТИМЕДИА. ТЕХНОЛОГИИ МУЛЬТИМЕДИА.

Термин “мультимедиа” образован из слов “мульти” — много, и “медиа” — среда, носитель, средства сообщения, и в первом приближении его можно перевести как “многосредность” [47].

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

Статьи к прочтению:

  • Статическое и динамическое связывание методов. полиморфизм
  • Статистика количества утечек по годам

Что такое динамическая память. Утечка памяти. Стек и куча. Статическая память. Обзорный урок #45

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

  • Микросхемы оперативной памяти

    Обычно оперативная память является динамической (Dynamic RAM – DRAM), т.е. значение бита информации в элементе памяти определяется наличием или…

  • Сновные типы оперативной памяти по архитектурным особенностям.

    ам.работа №6 Оперативная память (RAM – Random Access Memory, оперативное запоминающее устройство – ОЗУ, системная память) – непосредственно адресуемая…

Работа с памятью

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

Статическая память

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

Существует два типа статических переменных:

  • глобальные переменные — это переменные, определенные вне функций, в описании которых отсутствует слово static. Обычно описания глобальных переменных, включающие слово extern, выносятся в заголовочные файлы (h-файлы). Слово extern означает, что переменная описывается, но не создается в данной точке программы. Определения глобальных переменных, т.е. описания без слова extern, помещаются в файлы реализации (c-файлы или cpp-файлы). Пример: глобальная переменная maxind описывается дважды:

    • в h-файле с помощью строки

      это описание сообщает о наличии такой переменной, но не создает эту переменную!

    • в cpp-файле с помощью строки

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

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

  • статические переменные — это переменные, в описании которых присутствует слово static. Как правило, статические переменные описываются вне функций. Такие статические переменные во всем подобны глобальным, с одним исключением: область видимости статической переменной ограничена одним файлом, внутри которого она определена, — и, более того, ее можно использовать только после ее описания, т.е. ниже по тексту. По этой причине описания статических переменных обычно выносятся в начало файла. В отличие от глобальных переменных, статические переменные никогда не описываются в h-файлах (модификаторы extern и static конфликтуют между собой).
    Совет: используйте статические переменные, если нужно, чтобы они были доступны только для функций, описанных внутри одного и того же файла. По возможности не применяйте в таких ситуациях глобальные переменные, это позволит избежать конфликтов имен при реализации больших проектов, состоящих из сотен файлов.

    • Статическую переменную можно описать и внутри функции, хотя обычно так никто не делает. Переменная размещается не в стеке, а в статической памяти, т.е. ее нельзя использовать при рекурсии, а ее значение сохраняется между различными входами в функцию. Область видимости такой переменной ограничена телом функции, в которой она определена. В остальном она подобна статической или глобальной переменной.
      Заметим, что ключевое слово static в языке Си используется для двух различных целей:

      • как указание типа памяти: переменная располагается в статической памяти, а не в стеке;
      • как способ ограничить область видимости переменной рамками одного файла (в случае описания переменной вне функции).
  • Слово static может присутствовать и в заголовке функции. При этом оно используется только для того, чтобы ограничить область видимости имени функции рамками одного файла. Пример:
    static int gcd(int x, int y);  // Прототип ф-ции
    . . .
    static int gcd(int x, int y) { // Реализация
        . . .
    }

    Совет: используйте модификатор static в заголовке функции, если известно, что функция будет вызываться лишь внутри одного файла. Слово static должно присутствовать как в описании прототипа функции, так и в заголовке функции при ее реализации.

Стековая, или локальная, память

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

Локальные переменные можно использовать при рекурсии, поскольку при повторном входе в функцию в стеке создается новый набор локальных переменных, а предыдущий набор не разрушается. По этой же причине локальные переменные безопасны при использовании нитей в параллельном программировании (см. раздел 2.6.2). Программисты называют такое свойство функции реентерабельностью, от англ. re-enter able — возможность повторного входа. Это очень важное качество с точки зрения надежности и безопасности программы! Программа, работающая со статическими переменными, этим свойством не обладает, поэтому для защиты статических переменных приходится использовать механизмы синхронизации (см. 2.6.2), а логика программы резко усложняется. Всегда следует избегать использования глобальных и статических переменных, если можно обойтись локальными.

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

Динамическая память, или куча

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

Под динамическую память отводится пространство виртуальной памяти процесса между статической памятью и стеком. (Механизм виртуальной памяти был рассмотрен в разделе 2.6.) Обычно стек располагается в старших адресах виртуальной памяти и растет в сторону уменьшения адресов (см. раздел 2.3). Программа и константные данные размещаются в младших адресах, выше располагаются статические переменные. Пространство выше статических переменных и ниже стека занимает динамическая память:

адрес содержимое памяти
0
4
8

код программы и данные,

защищенные от изменения

статические переменные

программы

динамическая память
max.
адрес
(232-4)
стек uparrow

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

В языке Си для захвата и освобождения динамической памяти применяются стандартные функции malloc и free, описания их прототипов содержатся в стандартном заголовочном файле » stdlib.h «. (Имя malloc является сокращением от memory allocate — «захват памяти».) Прототипы этих функций выглядят следующим образом:

void *malloc(size_t n); // Захватить участок памяти
                        // размером в n байт
void free(void *p); // Освободить участок
                    // памяти с адресом p

Здесь n — это размер захватываемого участка в байтах, size_t — имя одного из целочисленных типов, определяющих максимальный размер захватываемого участка. Тип size_t задается в стандартном заголовочном файле » stdlib.h » с помощью оператора typedef (см. c. 117). Это обеспечивает независимость текста Си-программы от используемой архитектуры. В 32-разрядной архитектуре тип size_t определяется как беззнаковое целое число:

typedef unsigned int size_t;

Функция malloc возвращает адрес захваченного участка памяти или ноль в случае неудачи (когда нет свободного участка достаточно большого размера). Функция free освобождает участок памяти с заданным адресом. Для задания адреса используется указатель общего типа void*. После вызова функции malloc его необходимо привести к указателю на конкретный тип, используя операцию приведения типа, см. раздел 3.4.11. Например, в следующем примере захватывается участок динамической памяти размером в 4000 байтов, его адрес присваивается указателю на массив из 1000 целых чисел:

int *a;     // Указатель на массив целых чисел
. . .
a = (int *) malloc(1000 * sizeof(int));

Выражение в аргументе функции malloc равно 4000, поскольку размер целого числа sizeof(int) равен четырем байтам. Для преобразования указателя используется операция приведения типа (int *) от указателя обобщенного типа к указателю на целое число.

Пример: печать n первых простых чисел

Рассмотрим пример, использующий захват динамической памяти. Требуется ввести целое цисло n и напечатать n первых простых чисел. (Простое число — это число, у которого нет нетривиальных делителей.) Используем следующий алгоритм: последовательно проверяем все нечетные числа, начиная с тройки (двойку рассматриваем отдельно). Делим очередное число на все простые числа, найденные на предыдущих шагах алгоритма и не превосходящие квадратного корня из проверяемого числа. Если оно не делится ни на одно из этих простых чисел, то само является простым; оно печатается и добавляется в массив найденных простых.

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

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main() {
    int n;  // Требуемое количество простых чисел
    int k;  // Текущее количество найденных простых чисел
    int *a; // Указатель на массив найденных простых
    int p;  // Очередное проверяемое число
    int r;  // Целая часть квадратного корня из p
    int i;  // Индекс простого делителя
    bool prime; // Признак простоты

    printf("Введите число простых: ");
    scanf("%d", &n);
    if (n <= 0)   // Некорректное значение =>
        return 1; // завершаем работу с кодом ошибки

    // Захватываем память под массив простых чисел
    a = (int *) malloc(n * sizeof(int));

    a[0] = 2; k = 1;     // Добавляем двойку в массив
    printf("%d ", a[0]); // и печатаем ее

    p = 3;
    while (k < n) {

        // Проверяем число p на простоту
        r = (int)(               // Целая часть корня
            sqrt((double) p) + 0.001
        );
        i = 0;
        prime = true;
        while (i < k && a[i] <= r) {
            if (p % a[i] == 0) { // p делится на a[i]
                prime = false;   // => p не простое,
                break;           // выходим из цикла
            }
            ++i; // К следующему простому делителю
        }

        if (prime) {  // Если нашли простое число,
            a[k] = p; // то добавляем его в массив
            ++k;      // Увеличиваем число простых
            printf("%d ", p); // Печатаем простое число
            if (k % 5 == 0) { // Переход на новую строку
                printf("n"); // после каждых пяти чисел
            }
        }

        p += 2; // К следующему нечетному числу
    }

    if (k % 5 != 0) {
        printf("n"); // Перевести строку
    }

    // Освобождаем динамическую память
    free(a);
    return 0;
}

Пример работы данной программы:

Введите число простых: 50
2 3 5 7 11
13 17 19 23 29
31 37 41 43 47
53 59 61 67 71
73 79 83 89 97
101 103 107 109 113
127 131 137 139 149
151 157 163 167 173
179 181 191 193 197
199 211 223 227 229

Операторы new и delete языка C++

В языке C++ для захвата и освобождения динамической памяти используются операторы new и delete. Они являются частью языка C++, в отличие от функций malloc и free, входящих в библиотеку стандартных функций Си.

Пусть T — некоторый тип языка Си или C++, p — указатель на объект типа T. Тогда для захвата памяти размером в один элемент типа T используется оператор new:

Например, для захвата восьми байтов под вещественное число типа double используется фрагмент

double *p;
p = new double;

При использовании new, в отличие от malloc, не нужно приводить указатель от типа void* к нужному типу: оператор new возвращает указатель на тип, записанный после слова new. Сравните два эквивалентных фрагмента на Си и C++:

double *p;
p = (double*)  malloc(sizeof(double));
double *p;
p = new double;

Конечно, второй фрагмент гораздо короче и нагляднее.

Оператор new удобен еще и тем, что можно присвоить начальное значение объекту, созданному в динамической памяти (т.е. выполнить инициализацию объекта). Для этого начальное значение записывается в круглых скобках после имени типа, следующего за словом new. Например, в приведенной ниже строке захватывается память под вещественное число, которому присваивается начальное значение 1.5:

double *p = new double(1.5);

Этот фрагмент эквивалентен фрагменту

double *p = new double;
*p = 1.5;

С помощью оператора new можно захватывать память под массив элементов заданного типа. Для этого в квадратных скобках указывается длина захватываемого массива, которая может представляться любым целочисленным выражением. Например, в следующем фрагменте в динамической памяти захватывается область для хранения вещественной матрицы размера m*n:

double *a;
int m = 100, n = 101;
a = new double[m * n];

Такую форму оператора new иногда называют векторной.

Оператор delete освобождает память, захваченную ранее с помощью оператора new, например,

double *p = new double(1.5); // Захват и инициализация
. . .
delete p; // Освобождение памяти

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

double *a = new double[100]; // Захватываем массив
. . .
delete[] a; // Освобождаем массив
  • Для массивов, состоящих из элементов базовых типов Си, при освобождении
    памяти можно использовать и обычную форму оператора delete. Единственное
    отличие векторной формы: при освобождении массива элементов класса, в
    котором определен деструктор, т.е. завершающее действие перед
    уничтожением объекта, этот деструктор вызывается для каждого элемента
    уничтожаемого массива. Поскольку для базовых типов деструкторы не
    определены, векторная и обычная формы оператора delete для них эквивалентны.

Приятная особенность оператора delete состоит в том, что при освобождении нулевого указателя ничего не происходит. Например, следующий фрагмент вполне корректен:

double *a = 0;  // Нулевой указатель
bool b;
. . .
if (b) {
    a = new double[1000];
    . . .
}
. . .
delete[] a;

Здесь в указатель a вначале записывается нулевой адрес. Затем, если справедливо некоторое условие, захватывается память под массив. Таким образом, при выполнении оператора delete указатель a содержит либо нулевое значение, либо адрес массива. В первом случае оператор delete ничего не делает, во втором освобождает память, занятую массивом. Такая технология применяется практически всеми программистами на C++: всегда инициализировать указатели на динамическую память нулевыми значениями и в результате не иметь никаких проблем при освобождении памяти.

Попытка освобождения нулевого указателя с помощью стандартной функции free может привести к аварийному завершению программы (это зависит от используемой Си-библиотеки: нормальная работа не гарантируется стандартом ANSI).

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

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

Виды памяти

Существует 3 типа памяти: статический, автоматический и динамический.

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

int id = 150; // определение статической глобальной переменной

int main()
{
    std::cout << id + 8; // её использование
}

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

Стек, как структура данных, работает по принципу LIFO («последним пришёл — первым ушёл»). Другими словами, добавлять и удалять значения в стеке можно только с одной и той же стороны.

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

Проще всего это понять из примера на С++:

int main()
{
    int a = 3;
    int result = factorial(a);
    std::cout << result;
}

int factorial(int n) 
{
    if (n <= 1) return 1; 
    return n * factorial(n - 1); 
} 

Стек при вызове последней рекурсивной функции будет выглядеть следующим образом:

afF0f85 68w

Детали реализации автоматической памяти могут быть разными в зависимости от конкретной платформы. Например, кому очищать из стека метаинформацию функции и её аргументы: вызывающей функции или вызываемой? Как передавать результат: через стек или, что намного быстрее, через регистры процессора (память, расположенную прямо на кристалле процессора. В этой статье не рассматривается, т. к. в языках программирования высокого уровня зачастую нет прямого доступа к регистрам процессора). На все эти вопросы отвечает конкретная реализация calling convention — описание технических особенностей вызова подпрограмм, определяющее способы передачи параметров/результата функции и способы вызова/возврата из функции.

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

Размер автоматической памяти, а он тоже фиксированный, определяется линковщиком (обычно — 1 мегабайт), максимальный размер зависит от конкретной системы и настроек компилятора/линковщика.

Если приложение выйдет за максимум автоматической памяти, его там может ждать Page Fault (сигнал SIGSEGV в POSIX-совместимых системах: Mac OS X, Linux, BSD и т. д.) — ошибка сегментации, приводящая к аварийному завершению программы.

Динамическая — выделение памяти из ОС по требованию приложения.

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

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

char *i = malloc(sizeof(char)); // просим у аллокатора память для char 
if (i != NULL) // аллокатор может вернуть NULL (0) 
{ 
    *i = 120; // делаем что-то с памятью, на которую указывает указатель i 
    printf("Чтение символа из выделенной памяти: %cn", *i); 
    free(i); // возвращаем память обратно аллокатору 
}

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

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

Максимальный размер динамической памяти зависит от многих факторов: среди них ОС, процессор, аппаратная архитектура в целом, не говоря уже о самом очевидном — максимальном размере ОЗУ у конкретного устройства. Например x86_64 процессоры используют только 48 бит для адресации виртуальной памяти, что позволяет использовать до 256 ТБ памяти. В следующей статье про более низкоуровневую архитектуру памяти будет объяснено, почему не все 64 бита.

Аллокатор

У динамической памяти есть две явные проблемы. Во-первых, любое выделение/освобождение памяти в ОС — системный вызов, замедляющий работу программы. Решением этой проблемы является аллокатор.

Аллокатор — это часть программы, которая запрашивает память большими кусками напрямую у ОС через системные вызовы (в 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.

Способы контроля динамической памяти

Из-за сложности программ очень трудно определить, когда необходимо освобождать память в ОС, и это вторая явная проблема динамической памяти. Если забыть вызвать munmap() или free(), то произойдет следующая ситуация: приложению память уже не нужна, но ОС всё ещё будет считать, что эта память используется программой. Эту проблему называют «утечкой памяти». Существуют несколько способов автоматического или полуавтоматического решения этой проблемы:

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

class String 
{ 
public: 
        explicit String(const char *const c_string) 
        { 
                size = strlen(c_string) + 1; 
                this->c_string = new char[size]; // выделяем память
                strcpy(this->c_string, c_string);
        }

        ~String() noexcept
       {
                delete[] c_string; // очищаем память
       }

private:
        char *c_string;
        size_t size;
};

Умные указатели на основе 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).

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

Иван Борисов

Когда я писал в начале года статью “Кто есть кто в мировой микроэлектронике”, меня удивило, что в десятке самых больших полупроводниковых компаний пять занимаются производством памяти, в том числе две – только производством памяти. Общий объем мирового рынка полупроводниковой памяти оценивается в 110 миллиардов долларов и является постоянной головной болью участников и инвесторов, потому что, несмотря на долгосрочный рост вместе со всей индустрией микроэлектроники, локально рынок памяти очень сильно лихорадит – 130 миллиардов в 2017 году, 163 в 2018, 110 в 2019 и 110 же ожидается по итогам 2020 года. 

Топ-10 мировых микроэлектронных компаний, производители памяти выделены красным.

Топ-10 мировых микроэлектронных компаний, производители памяти выделены красным.

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

Особую важность памяти придает то, что ее всегда нужно много. Я бы даже сказал, что ее всегда нужно больше, чем есть. Билл Гейтс, которого вы наверняка сейчас вспомнили, на самом деле никогда ничего не говорил про 640 Кб, примерно как Мария-Антуанетта ничего не говорила про пирожные. Впрочем, в начале восьмидесятых 640 КБ были огромной цифрой. “И что с того, что памяти нужно много?” – спросите вы. Очень просто – большие тиражи позволяют разработчикам концентрироваться на одном продукте и оптимизировать не только дизайн, но и технологию производства. Сейчас в большинстве случаев чипы памяти производятся на фабриках, специально предназначенных для чипов памяти и принадлежащих производителям памяти. Это принципиальное отличие от всех остальных типов микросхем, где пути разработчиков и производителей давным-давно разошлись, и бал правят контрактные фабрики типа TSMC.

Начнем, собственно, с определения и классификации. Точнее, с классификаций, потому что типов памяти очень много, и различных применений тоже. Классическое разделение памяти по применению – на кэш-память, оперативную память и память хранения данных. Оно же примерно соответствует делению на статическую (SRAM), динамическую память (DRAM) и “диски” (HDD и SSD).

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

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

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

Кэш-память

Самый первый уровень памяти в вычислительной системе – это регистровый файл и кэш-память. Для них определяющее значение имеет скорость доступа, а вот объем может быть небольшим, особенно если его вдумчиво наполнять. Кэш обычно делается на основе статической памяти. Ячейка статической памяти может быть выполнена по-разному, но обязательно содержит в себе положительную обратную связь, которая позволяет хранить информацию и не терять ее (в отличие от динамической памяти, которой требуется периодическая перезапись). В КМОП-технологии ячейка статической памяти состоит из четырех транзисторов собственно запоминающего элемента и одного и более транзисторов, обеспечивающих чтение и запись информации. “Промышленный стандарт” – так называемая 6T-ячейка.

Электрическая схема 6T-ячейки SRAM

Электрическая схема 6T-ячейки SRAM

Шесть транзисторов – это очень много, особенно в сравнении с DRAM или флэш-памятью, где для хранения одного бита информации требуется два, а то и всего один элемент. Тем не менее, скорость работы сделала свое дело, и в большинстве современных цифровых микросхем статическая память занимает десятки процентов площади. Этот факт, кстати, сделал ячейку SRAM точкой опоры в определении проектных норм производства чипов: когда маркетинговые цифры – те самые пресловутые 28, 7 или 5 нм – отвязались от физических размеров элементов на кристалле, улучшение плотности упаковки стали считать как соотношение площади ячейки SRAM на старом и новом техпроцессах. Если в новой технологии ячейка стала в два раза меньше, значит проектные нормы уменьшились в корень из двух раз.

Разные варианты топологии шеститранзисторной ячейки статической памяти. Источник — G. Apostolidis et. al., «Design and Simulation of 6T SRAM Cell Architectures in 32nm Technology», Journal of Engineering Science and Technology Review, 2016

Разные варианты топологии шеститранзисторной ячейки статической памяти. Источник — G. Apostolidis et. al., «Design and Simulation of 6T SRAM Cell Architectures in 32nm Technology», Journal of Engineering Science and Technology Review, 2016

Отдельные чипы SRAM были популярны в составе многокристалльных микропроцессоров, таких как девайсы, построенные на базе серии Am2900 или советской 581 серии. При этом, как только появилась возможность поместить достаточно транзисторов на один чип, кэш-память стали размещать на том же кристалле, что и вычислитель, чтобы сэкономить мощность и увеличив скорость работы, избавившись от медленных и громоздких соединений между чипами. В современных микропроцессорах на одном кристалле помещается многоуровневый набор блоков кэш-памяти объемом в несколько Мегабайт. Это, кстати, привело к тому, что рынок SRAM как отдельного продукта практически перестал существовать: его объем оценивается всего в 420 миллионов долларов, то есть в 0.3% от всего рынка полупроводниковой памяти, и продолжает сокращаться. Последние из остающихся могикан – чипы для тяжелых условий эксплуатации, вроде космоса, высокотемпературных промышленных установок или медицинской техники, где нельзя свободно применять обычные коммерческие микросхемы и где из-за этого микроэлектронный прогресс несколько отстает. Есть некоторые перспективы роста в автомобильной электронике и в интернете вещей, где для постоянно включенных устройств не играет роли главный недостаток SRAM – неспособность хранить информацию после отключения питания. Только хранить, а не обрабатывать SRAM может с минимальным энергопотреблением, так что это может быть интересным вариантом. Впрочем, в этой конкретной нише, кроме флэш-памяти, есть еще активно развивающиеся новые виды памяти, такие как MRAM, так что перспективы на самом деле весьма туманны, а производители один за одним уходят из стагнирующего сегмента, что позволило Cypress получить больше половины рынка – повторюсь, крошечного по мировым меркам.

Оперативная память и динамическая память

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

Схемы ячейки динамической и статической памяти

Схемы ячейки динамической и статической памяти

Намного более простая ячейка позволяет существенно увеличить количество памяти на кристалле. Уже самый первый серийный кристалл DRAM (Intel 1103) в 1970 году содержал 1024 бита, а современные чипы умещают уже 16 Гигабит! Это стало возможным благодаря постоянному прогрессу технологии производства, а именно разнообразным улучшениям конструкции интегрального конденсатора. Если в самых первых чипах использовалась просто МОП-емкость, крайне похожая по конструкции на транзистор, в современных чипах DRAM конденсатор для экономии площади располагается не горизонтально, а вертикально, под или над транзистором.

Условная схема прогресса технологии производства DRAM.

Условная схема прогресса технологии производства DRAM.

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

Небольшой исторический экскурс, про Intel

Компания Intel была основана в 1968 году с прицелом на рынок памяти. Основатели фирмы считали, что относительно новые тогда интегральные схемы имеют потенциал вытеснить с рынка вычислительных машин память на магнитных сердечниках. Первыми продуктами Intel были чипы биполярной статической памяти, почти сразу же за ними последовала серия крайне успешных чипов DRAM, а вот заказы на разработку микропроцессоров очень долго рассматривались как что-то временное и побочное до середины восьмидесятых, когда серьезная конкуренция со стороны японских производителей DRAM, таких как Toshiba, вынудила компанию уйти с рынка памяти.

Позднее, Intel развивал бизнес по производству флэш-памяти, совместно с другой американской компанией, Micron, но буквально на днях продал эти активы ей же, и в ближайшем будущем под маркой Intel будет выпускаться только память Optane, основанная на фазовых эффектах.

Общий объем мирового рынка DRAM оценивается в 60-80 миллиардов долларов и составляет чуть больше половины мирового рынка памяти. Оставшуюся часть почти целиком занимает NAND Flash, а на долю всего остального разнообразия приходится не более трех процентов рынка. Производство чипов DRAM держится на трех китах – корейских Samsung и SK Hynix, а также американской компании Micron. Все три – в пятерке крупнейших полупроводниковых компаний мира, причем если Samsung чем только не занимается, то Micron и SK Hynix производят только память, DRAM и Flash. Три гиганта занимают без малого 95% рынка, а остатки рынка почти полностью разделены между несколькими тайваньскими компаниями.

Основные рыночные ниши – это потребительская электроника, включая смартфоны (40-50%), а также персональные компьютеры (15-20% ), серверное и телекоммуникационное оборудование (20-25%). Самые большие перспективы роста при этом ожидаются в автомобильном секторе, благодаря разного рода автопилотам и другим системам помощи водителю, а также в вычислениях, связанных с искусственным интеллектом.

Стоит отметить, что все чаще речь идет не о привычных нам “планках памяти”, а об аккуратной интеграции чипов на плату телефона или даже непосредственно в корпус процессора, в виде так называемой HBM – high bandwidth memory. Такая конфигурация позволяет увеличить пропускную способность памяти за счет использования многоразрядных шин, которые нет возможности реализовать при соединении корпусов на печатной плате, уменьшить задержки и потребление, а также эффективно разместить кристаллы памяти в несколько слоев, разместить большую емкость на меньшей площади.

Внутренности корпуса графического ускорителя AMD Fiji. Центральный кристалл – собственно вычислитель, по обеим сторонам – упакованные в несколько слоев чипы HBM DRAM.

Внутренности корпуса графического ускорителя AMD Fiji. Центральный кристалл – собственно вычислитель, по обеим сторонам – упакованные в несколько слоев чипы HBM DRAM.

Впрочем, и планки памяти тоже никуда не денутся в обозримом будущем, и спрос на них стабильно растет – стараниями не только геймеров, но и производителей серверов. Объем рынка модулей памяти составляет приблизительно 16 миллиардов долларов, и он выглядит как Гулливер в окружении лилипутов – рыночная доля Kingston Technology превышает 80%, против 2-3% у ближайших конкурентов. При этом сами чипы Kingston закупают у двух из трех больших производителей – Micron и SK Hynix. Samsung не привлекается, видимо, в силу того, что большинство их чипов DRAM предназначено для мобильных телефонов.

Еще один небольшой исторический экскурс, про Kingston

Kingston – американская компания, основанная в 1987 году,  стала одним из пионеров внедрения SIMM-модулей как удобной альтернативы прямому поверхностному монтажу микросхем памяти. Быстро развиваясь на фоне роста рынка персональных компьютеров, Kingston стали “единорогом” с миллиардной капитализацией уже к 1995 году, и с тех пор выросли еще на порядок, увеличив долю на рынке модулей DRAM c 25% до 80% и расширившись на производство других продуктов, таких как SSD, где Kingston тоже является мировым лидером, правда с более скромными 26% мирового рынка против 8% и 6% у ближайших конкурентов.

Модуль оперативной памяти Kingston. Обратите внимание на плотность упаковки чипов на плате.

Модуль оперативной памяти Kingston. Обратите внимание на плотность упаковки чипов на плате.

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

А что же японцы, правившие бал в восьмидесятых и вытеснившие с рынка DRAM Intel? В 1999 году профильные подразделения Hitachi и NEC объединились в компанию Elpida, которая позже поглотила DRAM-бизнес Mitshibishi. В двухтысячных компания активно развивалась, много вкладывала в перспективные производства и была поставщиком, например, для Apple. Но финансовый кризис 2009 года очень сильно подкосил Elpida, и в 2012 году она была вынуждена подать на банкротство, после чего была куплена Micron.

На этой печальной ноте давайте заканчивать с DRAM и переходить к flash-памяти, где все еще есть по крайней мере одна успешная японская компания.

Флэш-память и системы хранения данных

Главный недостаток как SRAM, так и DRAM – то, что информация в них пропадает в случае, если им отключить питание. Но, сами понимаете, никогда не отключать питание довольно затруднительно, поэтому всю историю вычислительной техники использовались какие-нибудь системы для постоянного хранения данных – начиная от перфокарт. Большую часть времени в качестве систем постоянного хранения данных использовались магнитные носители – лента или жесткий диск. Жесткие диски – сложные электромеханические системы, которые прошли огромный путь от первого образца IBM размером с небольшой холодильник, до 2.5-дюймовых HDD для ноутбуков. Тем не менее, прогресс в микроэлектронной технологии был быстрее, и сейчас мы с вами наблюдаем процесс практически полного замещения жестких дисков полупроводниковыми SSD. Последним годом денежного роста для рынка HDD был 2012, и сейчас он составляет уже не более трети от рынка флэш-памяти.

Разные поколения жестких дисков.

Разные поколения жестких дисков.

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

Структура ячейки флэш-памяти

Структура ячейки флэш-памяти

Чтение из флэш-памяти происходит следующим образом: на сток транзистора подается напряжение, после чего измеряется ток через транзистор. Если ток есть, значит на одном из двух затворов есть напряжение, если тока нет – на обоих затворах ноль.

На практике структура чипов флэш-памяти несколько сложнее, потому что, кроме самого транзистора, есть еще металлизация управляющих линий, и инженерам пришлось пойти на некоторые ухищрения, чтобы уменьшить ее площадь. Изначально типов флэш-памяти было два – NOR Flash и NAND Flash, различающихся как раз способом доступа к ячейкам. Названы они так по подобию соединения ячеек с соответствующими логическими элементами – в NAND последовательно, в NOR параллельно.

Сравнение архитектур NOR Flash и NAND Flash

Сравнение архитектур NOR Flash и NAND Flash

Чтение из NOR Flash происходит ровно так, как описано выше, и позволяет удобно добраться до любого интересующего нас куска памяти. Чтение из NAND Flash несколько более занятно: для того, чтобы узнать значение интересующего нас бита в последовательно включенном стеке, нужно открыть управляющие затворы всех остальных транзисторов – тогда на состояние выхода будет влиять только интересующий нас бит. Согласитесь, заряжать-разряжать множество управляющих затворов ради того, чтобы узнать значение только одного бита – это как-то чересчур расточительно? Особенно с учетом того, что мы должны открыть управляющие затворы всех транзисторов не только в интересующем нас стеке, но и во всех соседних стеках, подключенных к тем же word line. Именно поэтому на практике NAND Flash читается не побитно, а целыми страницами. Это может показаться неудобным, ведь мы, по сути, делаем нашу память не совсем random-access.

Любые рассуждения на тему того, что лучше – NAND Flash или NOR Flash, неизбежно натыкаются на мнение рынка, сделавшего однозначный выбор: объем рынка NAND – 40-60 миллиардов долларов, а NOR – около четырех. Почему же побеждает менее удобная память? Дело на самом деле не в удобстве или неудобстве, а в целевых приложениях и в стоимости. NOR Flash удобнее и быстрее читается, но очень медленно записывается, зато ячейка NAND Flash в два с лишним раза меньше, что, разумеется, критично в ситуации, когда вам нужно БОЛЬШЕ ПАМЯТИ.

Кроме того, если немного подумать над главным недостатком NAND Flash – чтением только большими кусками, то в обычной вычислительной системе чтение из долгосрочной памяти в любом случае происходит большими кусками – чтобы оптимизировать работу кэш-памяти и минимизировать число кэш-промахов. То есть этот недостаток на самом деле и не недостаток вовсе. Так что по факту единственное настоящее преимущество NOR Flash – быстрота чтения, и ее основные применения – как раз те, где требуется быстрое чтение, но не нужна частая и быстрая запись. Например, прошивки разнообразных embedded девайсов, где NOR Flash активно заменяет другие виды EEPROM.

Небольшое отступление: PROM

И, раз уж я упомянул EEPROM, нелишне обсудить и экстремальный случай – когда память только читается, но не перезаписывается – то есть Read-Only Memory или ROM. Такая память гораздо чаще используется в промышленных применениях и для разнообразных прошивок. Такая память может быть запрограммирована на этапе производства с помощью наличия или отсутствия металлических соединений (или транзисторов, как это было сделано в Intel 8086. Но что, если раз-другой записать память все-таки нужно, причем уже после того, как чип произведен? На этот случай существует довольно много разновидностей PROM (P – programmable), довольно часто встраиваемых на кристалл вычислительной системы, например, микроконтроллера, но продолжающих активно использоваться и в качестве отдельных чипов.

Самый простой вариант – это однократно программируемая память типа Antifuse, она же память на пережигаемых перемычках. Идея очень проста: у нас есть структура (транзистор или резистор), которая может быть необратимо разрушена, превратившись в короткое замыкание или разрыв цепи. Чтение такой памяти выглядит как проверка на наличие замыкания или разрыва, а запись возможна только один раз, потому что изменение структуры необратимо.

Внешний вид памяти на пережигаемых перемычках

Внешний вид памяти на пережигаемых перемычках

В случае, если может быть нужно записывать память несколько раз, например изредка обновлять прошивку, в дело вступают разные варианты EPROM (E – erasable) и EEPROM (EE – electrically erasable). Технологически они базируются на транзисторах с плавающим затвором и являются примитивной разновидностью флэш-памяти. Сейчас под термином EEPROM обычно подразумевают NOR Flash c возможностью побайтной записи и удаления данных.

NAND Flash

Что же касается NAND Flash, то ее стоимость за бит уже давно снизилась настолько, что этот вид памяти стремительно завоевывает рынок памяти для хранения информации, один за одним забивая гвозди в крышку гроба HDD и, например, дав нам возможность иметь много памяти в крошечных мобильных телефонах. Ключевые производители чипов NAND Flash – Samsung (33% и почти половина накопителей для телефонов), Kioxia (бывшая Toshiba, 20% рынка), Western Digital (14%), SK Hynix (11%), Micron (10%), Intel (8%).

Из этого списка, впрочем, надо исключить Intel, которые недавно объявили о переходе своей доли в совместном с Micron производстве к последним и об уходе с рынка флэш-памяти. Еще один интересный игрок – Western Digital, один из гигантов HDD, ныне стремительно переориентирующийся на твердотельные диски и ставший для этого уникальным зверем – fabless-производителем памяти. WD выкупили для этого больше трети производственных мощностей Kioxia, которые делают одни и те же чипы для себя и для клиента. Еще одно неожиданное последствие переориентации WD – они стали одним из наиболее заметных участников коммьюнити RISC-V, активно внедряя эту систему команд в свои контроллеры накопителей.

И в завершение рассказа про NAND Flash, надо непременно рассказать о произошедшей в последние годы технологической революции. Флэш-память, как и “обычная” микроэлектроника, уже уперлась в технологический предел миниатюризации транзисторов, и если в вычислительных системах можно хотя бы попробовать отыграть что-то за счет архитектуры, то в памяти плотность упаковки – это главное и единственное, что по-настоящему волнует. Поэтому, пока разговоры о переходе обычных КМОП-микросхем в третье измерение все еще остаются разговорами, 3D NAND уже четыре года как массово присутствует на рынке, позволяя разместить на кристалле в десятки, а то и в сотни раз больше ячеек памяти, чем обычное планарное решение.

Схематичный разрез двухмерной и трехмерной NAND Flash памяти

Схематичный разрез двухмерной и трехмерной NAND Flash памяти

На электрической схеме выше транзисторы размещены последовательно, сверху вниз, тогда как в планарном варианте изготовления они расположены на плоскости, занимая ценную площадь на кристалле. Однако простая и монотонная структура позволила реализовать самое логичное, что можно сделать – сквозной вертикальный канал транзистора, выглядящий примерно так же, как и электрическая схема (и показанный на схеме справа желтым, идущим сквозь зеленые затворы). Разумеется, оно только звучит логично и просто, а на практике создание глубокого отверстия с вертикальными стенками – это одна из самых сложных операций, возможных в микроэлектронной технологии. Тем не менее, инженерные задачи были решены, и сейчас такие этажерки, как на рисунке выше, включают в себя уже до 128 транзисторов в серийно производимых чипах и до 192 слоев в девайсах, ожидаемых через год-два. Проектные нормы производства современной флэш-памяти примерно соответствуют уровню 15-20 нм, так что такая плотность упаковки – это эквивалент норм 0.1-0.2 нм! В обычном КМОП повторить этот фокус в точности не удастся, но свежие исследования по GAAFET предполагают упаковку нескольких горизонтальных каналов друг поверх друга. Samsung рассчитывает таким образом выйти на уровень 1 нм, а то и чуть меньше.

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

Новые типы энергонезависимой памяти

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

Три наиболее зрелых технологии такого рода – это MRAM (магнитная RAM), FRAM (ферроэлектрическая или сегнетоэлектрическая RAM) и PCM (phase-change memory).

FRAM основана на сегнетоэлектрическом эффекте – свойстве некоторых материалов менять свои свойства под действием высокого напряжения. В частности, в FRAM используется изменение емкости конденсатора. Эта память появилась в серийных продуктах, например в микроконтроллерах MSP430, еще двадцать лет назад, но почти тогда же проявился ее главный недостаток – пленки сегнетоэлектрических слоев оказались плохо масштабируемыми, и развитие технологии остановилось на уровне 130 нм, а существующие до сих пор продукты – в основном довольно старые радиационностойкие микросхемы. Впрочем, в последние годы работы по сегнетоэлектрикам снова активизировались, и возможно нас ждет новое пришествие FRAM, на этот раз в виде FeFET, где из сегнетоэлектрика будет делаться затвор транзистора.

Разные варианты MRAM используют несколько физических эффектов, позволяющих манипулировать спином магнитных материалов и посредством него, на их электрические свойства. По сути, мы говорим о физической реализации концепции мемристора – резистора, сопротивление которого зависит от его предыдущего состояния. Первые серийные чипы MRAM появились еще в 2004, но проиграли технологическую войну флэш-памяти. Тем не менее, технология продолжает активно развиваться, подогреваемая тем, что у MRAM потенциально на несколько порядков большее количество циклов перезаписи, чем у флэш, а значит ее можно использовать как гибрид кэша и памяти долгосрочного хранения. Считается, что такое сочетание может быть востребовано в малопотребляющих микросхемах интернета вещей, и сейчас встраиваемые блоки MRAM предлагают такие именитые фабрики, как Samsung и GlobalFoundries.

PCM – класс памяти, основанной на изменении фазового состояния некоторых веществ, например с кристаллического в аморфное, под действием внешних факторов типа высокого напряжения или кратковременного нагрева (обычно проводимого при помощи пропускания большого тока через запоминающий элемент). Потенциальные преимущества PCM примерно такие же, как у MRAM – быстрое чтение и большое количество циклов перезаписи, что в теории может позволить заменить даже все три типа памяти одним унифицированным решением. На практике же изначальное внедрение PCM обернулось грандиозным провалом: в 2012 году Micron с помпой представили серийную линейку для применения в мобильных телефонах, однако уже к 2014 году все эти продукты были отозваны с рынка. Их вторая попытка стала более успешной – совместно с Intel в 2017 году была представлена память 3D Xpoint и линейка SSD Optane (Intel) X100 (Micron). Продажи пока что невелики, но отзывы потребителей довольно хорошие. Посмотрим, выдержит ли новая технология проверку временем и сможет ли действительно потеснить традиционные SSD на основе NAND Flash.

Традиционная невеселая рубрика “А что в России?”

И, конечно же, мой рассказ был бы неполон без упоминания о том, что происходит в России. К сожалению, хорошего можно рассказать немного. Производство памяти – это именно что производство, а с микроэлектронными заводами у России довольно печальная ситуация. Соответственно, речи о собственных чипах DRAM и flash-памяти нет и в обозримом будущем не предвидится. А что есть?

Во-первых, есть какое-то количество микросхем SRAM. Самый технологически продвинутый продукт – микросхема 1663РУ1, представляющая собой 16 Мбит статической памяти по нормам 90 нм, производства завода “Микрон”. Кроме этого чипа, есть и другие, в основном предназначенные для аэрокосмических применений.

Во-вторых, «Микрон» на нормах 180 нм имеет опцию производства EEPROM, с максимальным заявленным в серийных продуктах (RFID-микроконтрроллерах) размером блока в 16 кбит. Это отличное решение для недорогих МК, но, к сожалению, мало подходящее для производства больших накопителей информации.

Кроме статической памяти и EEPROM, есть еще одно производство – “Крокус-наноэлектроника”, производящая MRAM. Расположенная в Москве фабрика КНЭ – единственная в России, умеющая работать с пластинами диаметром 300 мм. Правда, Крокус-нано не обладает полным циклом производства, а может делать только металлизацию и совмещенные с ней магнитные слои, формирующие ячейку MRAM. Транзисторная часть при этом должна быть изготовлена на другой фабрике (иностранной, потому что в России с пластинами 300 мм работать некому). На сайте КНЭ заявлена доступность микросхем объемом от 1 до 4 Мбит, скоростью считывания 35 нс и записи 35/90/120/150 нс. Еще немного света на функционирование и происхождение этих чипов проливают также заявленные в качестве продуктов на официальном сайте сложнофункциональные блоки MRAM, совместимые с техпроцессами китайской фабрики SMIC и израильской TowerJazz. Вероятно, именно эти производители являются технологическими партнерами и при производстве собственных чипов КНЭ.

Последнее, о чем стоит упомянуть в контексте производства памяти в России – это твердотельные системы хранения данных, являющиеся одним из важных драйверов импортозамещения в российской электронике. Российский рынок подобных систем оценивается в 122 миллиона долларов, доля отечественной продукции растет, идут жаркие споры насчет протекционистского законодательства и сравнения качества отечественных и импортных решений – в общем, настоящая жизнь. К сожалению, как уже было сказано выше, о собственном производстве чипов NAND flash речи не идет, и под импортозамещением понимается сборка импортных чипов в корпус и на плату, а также разработка или адаптация встроенного ПО. Из хороших новостей – в России ведутся разработки микросхем контроллеров флэш-памяти. Собственные контроллеры, хоть и не смогут решить проблему технологического отставания и зависимости от импорта, позволяют обеспечить контроль за функционированием импортных кристаллов памяти и безопасность решений на их основе. На этой позитивной ноте, я пожалуй, и закончу на сегодня.

Оперативная память (ОЗУ, RAM), самая известная из всех рассмотренных ранее форм компьютерной памяти. Эту память называют памятью «произвольного доступа» («random access»), поскольку вы можете получить доступ к любой ее ячейке непосредственно. Для этого достаточно знать строку и столбец, на пересечении которых находится нужная ячейка. Известны два основных вида оперативной памяти: динамическая и статическая. Сегодня мы подробно рассмотрим принцип «дырявого ведра», на котором основана динамическая память. Некоторое внимание будет уделено и статической памяти, быстрой, но дорогой.

Оперативная память

Ячейка памяти подобна дырявому ведру

Оперативная память

Совсем иначе работает память с последовательным доступом (SAM). Как и следует из ее названия, доступ к ячейкам этой памяти осуществляется последовательно. Этим она напоминает пленку в магнитофонной кассете. Когда данные ищутся в такой памяти, проверяется каждая ячейка до тех пор, пока не будет найдена нужная информация. Память этого типа используется для реализации буферов, в частности буфера текстур видеокарт. То есть SAM имеет смысл применять в тех случаях, когда данные будут расположены в том порядке, в котором их предполагается использовать.

Подобно подробно рассмотренному ранее микропроцессору, чип памяти является интегральной микросхемой (ИС, IC), собранной из миллионов транзисторов и конденсаторов. Одним из наиболее распространенных видов памяти произвольного доступа является DRAM (динамическая память произвольного доступа, dynamic random access memory). В ней транзистор и конденсатор спарены и именно они образуют ячейку, содержащую один бит информации. Конденсатор содержит один бит информации, то есть «0» или «1». Транзистор же играет в этой паре роль переключателя (свитча), позволяющего управляющей схеме чипа памяти считывать или менять состояние конденсатора.

Конденсатор можно представить себе в виде небольшого дырявого «ведерка», которое при необходимости заполняется электронами. Если оно заполнено электронами, его состояние равно единице. Если опустошено, то нулю. Проблемой конденсатора является утечка. За считанные миллисекунды (тысячные доли секунды) полный конденсатор становится пустым. А это значит, что или центральный процессор, или контроллер памяти вынужден постоянно подзаряжать каждый из конденсаторов, поддерживая его в наполненном состоянии. Подзарядку следует осуществлять до того, как конденсатор разрядится. С этой целью контроллер памяти осуществляет чтение памяти, а затем вновь записывает в нее данные. Это действие обновления состояния памяти осуществляется автоматически тысячи раз за одну только секунду.

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

Устройство ячейки динамической оперативной памяти (DRAM)

Оперативная память

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

Итак, представим себе тетрадный лист. Некоторые клеточки закрашены красным фломастером, а некоторые остались белыми. Красные клеточки это ячейки, состояние которых «1», а белые — «0».

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

Динамическая оперативная память передает заряд по определенному столбцу. Этот заряд называют стробом адреса столбца (CAS, Column Adress Strobe) или просто сигналом CAS. Этот сигнал может активировать транзистор любого бита столбца. Управляющий сигнал строки именуется стробом адреса строки (RAS, Row Adress Strobe). Для указания адреса ячейки следует задать оба управляющих сигнала. В процессе записи конденсатор готов принять в себя заряд. В процессе чтения усилитель считывания (sense-amplifier) определяет уровень заряда конденсатора. Если он выше 50 %, бит читается, как «1»; в остальных случаях, как «0».

Осуществляется также обновление заряда ячеек. За порядком обновления следит счетчик. Время, которое требуется на все эти операции, измеряется в наносекундах (миллиардных долях секунды). Если чип памяти 70-наносекундный, это значит, полное чтение и перезарядка всех его ячеек займет 70 наносекунд.

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

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

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

Статическая оперативная память

Оперативная память

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

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

В современном мире чипы памяти комплектуются в компонент, именуемый модулем. Порой компьютерные специалисты называют его «планкой памяти». Один модуль или «планка» содержит несколько чипов памяти. Не исключено, что вам приходилось слышать такие определения, как «память 8×32» или «память 4×16». Разумеется, цифры могли быть иными. В этой простой формуле первым множителем является количество чипов в модуле, а вторым емкость каждого модуля. Только не в мегабайтах, а в мегабитах. Это значит, что результат действия умножения следует разделить на восемь, чтобы получить объем модуля в привычных нам мегабайтах.

К примеру: 4×32 означает, что модуль содержит четыре 32-мегабитных чипа. Умножив 4 на 32, получаем 128 мегабит. Поскольку нам известно, что в одном байте восемь бит, нам нужно разделить 128 на 8. В итоге узнаем, что «модуль 4×32» является 16-мегабайтным и устарел еще в конце минувшего века, что не мешает ему быть превосходным простым примером для тех вычислений, которые нам потребовались.

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

По материалам computer.howstuffworks.com

Понравилась статья? Поделить с друзьями:
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Изучение правил внутреннего распорядка и режима работы предприятия
  • Изумрундия нижний новгород рио режим работы
  • Изумрудный парк барнаул режим работы