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

Динамические ОЗУ

Основа


Рис 2.1 ДОЗУ. Базовая ячейка

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

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


Рис 2.2 Ямочный конденсатор

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

Время хранения при использовании такого конденсатора порядка 500 нс.


Рис 2.3 Динамические ОЗУ. Общая схема

Основа ДОЗУ — матрица элементов памяти.

Данные хранятся в виде зарядов конденсаторов, образованных элементами МОП-структур. Саморазряд конденсаторов ведёт к разрушению данных, поэтому они должны периодически (раз в несколько мс) регенерироваться. В тоже время плотность упаковки динамических элементов в памяти в несколько раз превышает плотность упаковки, достижимую в статических ОЗУ.

Адресация: шина адреса приходит и на дешифратор и на селектор.

При считывании с конденсатора информация «уходит» («схема разрушающего считывания»).

RAS — «Row Access Select» (strobe)

Адрес на шине адреса — следовательно, RAS = 1. Дешифратор выбирает строку и записывает её в регистр записи. Затем CT и стробирующий сигнал CAS на селектор считывают данные и направляют их на выход.

Для записи значения:

С селектора выбирается вся строка и записывается обратно в матрицу.

Особенности:

  1. Теперь адрес делится на:
Адрес строки
Адрес столбца
  1. Схема дополнена регистром-«защёлкой»
  2. Схема дополнена двумя стробами (для строки и столбца)

16384 (214) ячеек = 128×128 (27 x 27)
Считывание осуществляется построчно

Временные диаграммы

Цикл чтения


Рис 2.4 Временная диаграмма цикла чтения

tPRRAS — время записи содержимого регистра в ЭП матрицы (копирование во внутреннюю схему).

Пока RAS активен копирование строки в регистр, а когда деактивен, данные уходят в ЭП матрицы.

Если RAS активен, то значение строки в регистре, а для перезаписи содержимого регистра в матрицу ЭП требуется tPRRAS.

Время цикла = tCASD.

Время доступа = tSUARAS + tRAS-CAS + tCAS-OE + tOE-D.

При подаче информации: первый адрес строки, длительность сигнала RAS; через какое-нибдуь время приходит CAS, т.к за tRAS-CAS выборка строки и запись её в регистр.

tCASD — время выбора селектором и передача данных на выход: от момента перехода от строки к столбцу до момента прихода данных на выходе.

tPRRAS — время восстановления содержимого строки.

Регистр работает в обе стороны (от матрицы элементов памяти и от селектора идут сигналы)

Цикл записи


Рис 2.5 Временная диаграмма цикла записи

tSUWR — время до момента прихода строба записи.

tUP — время удержания записи

tWR так же нормируется

Цикл регенерации


Рис 2.6 Временная диаграмма цикла регенерации

Осуществляется автоматически через 300-500 нс. Работает независимо от WR, RD.

150 нс — время доступа.

Циклы регенерации (нужен счётчик для перечисления строб)

  1. Отдельный цикл регенерации.
Процессор работает с памятью на основе базовой частоты, а процесс регенерации работал, когда процессор не взаимодействовал с памятью.
  1. Делали теневую регенерацию (совместно с каким-либо процессом).
Совместно с процессом последовательного чтения ЯП экранного ОЗУ (при обновлении ЯП графической системой).

Общая схема: отключение процессора от памяти — работа цикла регенерации — подключение процессора к памяти.

Что такое оперативная память?

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

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

Динамическое выделение памяти для одномерных массивов

Форма обращения к элементам массива с помощью указателей имеет следующий вид:

int a, *p; // описываем статический массив и указательint b;p = a; // присваиваем указателю начальный адрес массива… // ввод элементов массиваb = *p; // b = a;b = *(p+i) // b = a;

Пример на Си

123456789101112131415161718192021222324252627

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <malloc.h>#include <stdlib.h>int main(){  int *a;  // указатель на массив  int i, n;  system(«chcp 1251»);  system(«cls»);  printf(«Введите размер массива: «);  scanf(«%d», &n);  // Выделение памяти  a = (int*)malloc(n * sizeof(int));  // Ввод элементов массива  for (i = 0; i<n; i++)  {    printf(«a = «, i);    scanf(«%d», &a);  }  // Вывод элементов массива  for (i = 0; i<n; i++)    printf(«%d «, a);  free(a);  getchar();   getchar();  return 0;}

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

SRAM (Триггеры SRAMТриггер

  1. состояния триггера устойчивы и при наличии питания могут сохраняться бесконечно долго, в то время как конденсатор требует периодической регенерации;
  1. триггер, обладая мизерной инертностью, без проблем работает на частотах вплоть до нескольких ГГц, тогда как у конденсаторов могут возникать проблемы уже на 75-100 МГц.

Матрицы SRAMИнтерфейсная обвязкаЦикл чтения / записиТипы статической памяти

  1. Async SRAM (Asynchronous Static Random Access Memory) — асинхронная статическая память с произвольным порядком выборки, интерфейс которой похож на интерфейс DRAM и включает в себя шины адреса, данных и управления.
  1. SyncBurst SRAM (Synchronous Burst Random Access Memory) – синхронная пакетная статическая память с произвольным порядком выборки. Этот тип памяти синхронизирован с системной шиной и лучше всего подходит для выполнения пакетных операций Синхронная статическая память выполняет все операции одновременно с тактовыми сигналами, в результате чего время доступа к ячейке укладывается в один-единственный такт. Именно на синхронной статической памяти реализуется кэш первого уровня современных процессоров;
  1. PipBurst SRAM (Pipelined Burst Random Access Memory) – конвейерная пакетная статическая память с произвольным порядком выборки. Интерфейс этого типа SRAM схож с интерфейсом SyncBurst SRAM, но позволяет получать данные без тактов ожидания.

Утечка памяти

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

void doSomething()
{
int *ptr = new int;
}

1
2
3
4

voiddoSomething()

{

int*ptr=newint;

}

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

Это называется утечкой памяти. Утечка памяти происходит, когда ваша программа теряет адрес некоторой динамически выделенной части памяти (например, переменной или массива), прежде чем вернуть её обратно в операционную систему. Когда это происходит, то программа уже не может удалить эту динамически выделенную память, поскольку она больше не знает, где она находится. Операционная система также не может использовать эту память, поскольку считается, что она по-прежнему используется вашей программой.

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

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

int value = 7;
int *ptr = new int; // выделяем память
ptr = &value; // старый адрес утерян — произойдёт утечка памяти

1
2
3

intvalue=7;

int*ptr=newint;// выделяем память

ptr=&value;// старый адрес утерян — произойдёт утечка памяти

Это легко решается удалением указателя перед операцией переприсваивания:

int value = 7;
int *ptr = new int; // выделяем память
delete ptr; // возвращаем память обратно в операционную систему
ptr = &value; // переприсваиваем указателю адрес value

1
2
3
4

intvalue=7;

int*ptr=newint;// выделяем память

delete ptr;// возвращаем память обратно в операционную систему

ptr=&value;// переприсваиваем указателю адрес value

Кроме того, утечка памяти также может произойти и через двойное выделение памяти:

int *ptr = new int;
ptr = new int; // старый адрес утерян — произойдёт утечка памяти

1
2

int*ptr=newint;

ptr=newint;// старый адрес утерян — произойдёт утечка памяти

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

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

Как увеличить оперативную память

Тут, в принципе, нет ничего сложного. Чтобы увеличить оперативную память, предварительно отключаем блок питания компьютера с помощью кнопки или вытаскиваем кабель питания из сети; у ноутбука вытаскиваем зарядное устройство, снимаем аккумуляторную батарею. Открываем корпус компьютера или ноутбука, на материнской плате возле модулей оперативной памяти указан форм фактор ОЗУ, по нему вы сможете понять какой тип памяти поддерживает ваше устройство. Но я рекомендую снять модуль, установленный в вашем ПК и посмотреть поколение, тип, название и подобрать схожий с вашими характеристиками.

Что касается увеличения оперативки DDR3. Все материнские платы, поддерживающие DDR3, также поддерживают DDR3L, но не наоборот. То есть, материнки, выпущенные под DDR3L, не поддерживают оперативную память DDR3.

Управление динамической памятью

Последнее обновление: 28.05.2017

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

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

  • Указатель определен в блоке кода. В этом случае указатель будет доступен только в пределах данного блока кода.
    Соответственно память необходимо освобождать при выходе из этого блока.

  • Указатель определен как статический объект. В этом случае динамическая память выделяется один раз и доступна через указатель при каждом
    повторном входе блок. В этом случае память нужно освобождать только после завершения ее использования.

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

Первый вариант, если указатель определен в функции:

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

void createPointer()
{
	int *p = NULL;
	int n = 1;
	if(p==NULL)
	{
		p = malloc(n * sizeof(int));
		*p = 1;
	}
	printf("%d \t", (*p));
	(*p)++;
	free(p);
}

int main(void)
{
	createPointer();
	createPointer();
	createPointer();
	return 0;
}

В целях демонстрации указатель p указывает на блок выделенной динамической памяти размером в 4 байта, то есть для одного элемента типа int.
Переменная указателя определена в автоматической памяти как локальная переменная функции createPointer, поэтому выделенная динамическая память доступна только
в рамках этой функции createPointer. Соответственно в конце выполнения этой функции нужно освободить память вызовом функции .

При каждом новом вызове функции createPointer в main будет заново выделяться динамическая память.

Консольный вывод:

1	1	1

Теперь рассмотрим второй вариант — указатель определен как статический объект:

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

int * createPointer()
{
	static int *p = NULL;
	int n = 1;
	if(p==NULL)
	{
		p = malloc(n * sizeof(int));
		*p = 1;
	}
	printf("%d \t", (*p));
	(*p)++;
	return p;
}

int main(void)
{
	int *ptr;
	ptr=createPointer();
	ptr=createPointer();
	ptr=createPointer();
	free(ptr);
	return 0;
}

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

Так как статический указатель перестает быть нужен в конце работы программы, то при вызове функции createPointer мы получаем указатель в переменную ptr. И в конце функции
main освобождаем выделенную память с помощью функции free.

Консольный вывод:

1	2	3

Третий вариант, когда указатель является глобальным объектом:

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

int *p = NULL; // глобальный объект

void createPointer()
{
	printf("%d \t", (*p));
	(*p)++;
}

int main(void)
{
	int n = 1;
	p = malloc(n * sizeof(int));
	*p = 1;
		
	createPointer();
	createPointer();
	createPointer();
	
	free(p);
	return 0;
}

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

НазадВперед

История

См. также: История вычислительной техники

В 1834 году Чарльз Бэббидж начал разработку аналитической машины. Одну из важных частей этой машины он называл «складом» (store), эта часть предназначалась для хранения промежуточных результатов вычислений. Информация в «складе» запоминалась в чисто механическом устройстве в виде поворотов валов и шестерней.

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

  • на электромагнитных реле;
  • на акустических линиях задержки;
  • на электронно-лучевых трубках;
  • на электростатических трубках.

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

Второе поколение требовало более технологичных, дешёвых и быстродействующих ОЗУ. Наиболее распространённым видом ОЗУ в то время стала ферритовая память на магнитных сердечниках.

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

  • статическая память (SRAM), в виде массива триггеров;
  • динамическая память (DRAM), в виде массива конденсаторов.

SRAM хранит бит данных в виде состояния триггера. Этот вид памяти является более дорогим в расчёте на хранение 1 бита, но, как правило, имеет меньшее время доступа но большее энергопотребление, чем DRAM. В современных компьютерах часто используется в качестве кэш-памяти процессора.

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

Статические и динамические ОЗУ являются энергозависимыми, так как информация в них теряется при отключении питания. Энергонезависимые устройства (постоянная память, ПЗУ) сохраняют информацию вне зависимости от наличия питания. К ним относятся флэш-накопители, карты памяти для фотоаппаратов и портативных устройств и т. д.

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

Термин RAM относится только к устройствам твёрдотельной памяти SRAM или DRAM — основной памяти большинства современных компьютеров. Для оптических дисков термин DVD-RAM не совсем корректен, так как, в отличие от дисков типа CD-RW или DVD-RW, старые данные не должны стираться перед записью новых. Тем не менее, информационно DVD-RAM больше похож на жёсткий диск, хотя время обращения к нему намного больше.

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

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

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

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

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

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

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

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

История

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

5.1 Устройство памяти

У каждого компьютера есть оперативная память. Что же это такое, какими свойствами обладает и, самое главное, какая нам от этого польза?

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

Что же такое оперативная память и на что она похожа?

Представьте себе Excel Страница в Exсel’е состоит из ячеек, и у каждой ячейки есть её уникальный номер (, , … , ). Зная номер ячейки, всегда можно записать в неё какое-то значение или же получить значение, которое там хранится. Память компьютера устроена очень похоже.

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

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

Объединяя сотни простых команд, мы получаем сложные и полезные команды.

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

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

DVD

DVDDigital Video Disc

  1. используется лазер с меньшей длиной волны. Если в накопителях CD – ROM длина волны равна 780-нанометров, то в накопителях DVD – 635 нанометров. Это позволяет уменьшить длину штриха и повысить скорость считывания данных.
  2. вследствие применения более совершенных материалов, DVD используют для записи данных в два слоя на одной стороне диска или по одному слою, но с двух сторон диска или по два слоя с двух сторон диска, в зависимости от формата DVD. Емкость дисков варьируется от 2,6 Gb до 17 Gb.
  3. используется совершенно новый формат секторов, более надежный код коррекции ошибок, и улучшенная модуляция каналов. Теперь давайте-ка, более подробно о слоях.

Single Side/Single Layer (односторонний/однослойный)Single Side/Dual Layer (односторонний/двуслойный)Double Side/Single Layer (двусторонний/однослойный) Double Side/Double Layer (двусторонний/двуслойный)

  1. применяют более совершенный лазер
  2. уменьшают длину штриха
  3. уменьшают расстояние между витками
  4. увеличивают область данных без изменения общих размеров диска
  5. увеличивают эффективность ECC
  6. применяют более эффективную модуляцию

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

  • DVD-RAM
  • DVD-Video
  • DVD-Audio
  • CD-R/RW
  • DVD-R

DRAM-память (мировой рынок)

В настоящее время DRAM используется в большинстве современных компьютеров. Главное преимущество этого типа памяти заключается в чрезвычайно плотной упаковке ячеек, что позволяет создавать память большой ёмкости, при этом само устройство занимает очень мало места. Каждая ячейка это микро конденсатор, который удерживает заряды (наличием или отсутствием зарядов и кодируются биты информации). Главная проблема такой памяти это необходимость постоянно регенерировать заряд иначе конденсатор «стечёт», что приведёт к потере данных. За обновление которых и, следовательно, сохранность отвечает встроенный контролёр с частотой регенерации 15 мкс. В современных компьютерах, работающих на сверхвысоких частотах, процесс регенерации отнимает не более 1 % времени работы процессора. Поэтому нет смысла увеличивать время между циклами — на работу процессора это существенно не повлияет, и к тому же может привести к разрядке конденсатора и, как следствие, к потере данных.

Объём рынка DRAM-памяти в 2008 г. сократился на 19,8% до $25,2 млрд по сравнению с $31,5 млрд в 2007 г. Это произошло вследствие падения цен, сообщает purchasing.com со ссылкой на исследование iSuppli.

«Многие поставщики включились в гонку за рыночной долей, инвестируя значительные средства в дополнительное производственное оборудование, — комментирует Нэм Хьюнг Ким (Nam Hyung Kim), директор и главный аналитик iSuppli в области систем хранения данных и чипов памяти. – Одни компании надеялись, что другие выйдут из гонки, однако этого не произошло». В результате объемы производства были наращены значительно, а спрос упал. Память DRAM используется в ОЗУ.

  • 30% — доля Samsung. За последние восемь лет компания вложила в производство DRAM-памяти около $27 млрд, но это не помогло увеличить ее рыночную долю, которая в 2008 г. осталась на уровне 2000 г. (30%).
  • Компании Powerchip, Promos, Nanya и Qimonda плетутся в хвосте. Для того чтобы противостоять экономическому спаду 2008-2009 годов им потребовалась помощь правительства.

Принципы работы статической памяти

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

   P-N переходы транзисторов, на которые поданы постоянные смещения, надежно держат разность потенциалов, либо питание, либо землю (без учета падения напряжения на самом переходе), и возможно лишь два стабильных состояния, условно называемые «0» и «1». Располагаются транзисторы на кремниевой подложке, внутри которой формируются P-N переходы.

   Таким образом, простейшим статическим элементом памяти емкостью 1 бит можно считать триггер, построенный на четырех P-N переходах. Теперь, если эти триггеры рассортировать, скажем, по 8, и на каждый из них вывести ножку дешифратора 3×8, то получится простейшая ячейка памяти емкостью 1 байт, которую уже можно адресовать, подав соответствующее значение на дешифратор. Выстроив линейку из таких дешифраторов, и применив к ней дешифратор более высокого порядка, мы уже получим полноценную микросхему статической памяти. Скорость выборки данных из статической памяти будет определяться лишь временем переходного процесса в полупроводниках, а скорость эта довольно большая. Поэтому время доступа к статической памяти исчисляется единицами наносекунд. Что же касается энергопотребления, то оно будет определяться, в основном, током через P-N переходы. Ну и, наконец, наиболее привлекательной стороной статической памяти является возможность прямого сопряжения с процессором, так как адресация осуществляется напрямую по шине адреса с указанием номера (адреса) ячейки.

   При всех плюсах, у статической памяти есть достаточно серьезные недостатки. Что же получится, если мы захотим сделать статическую память очень большого объема? Для этого, помимо монтажа огромного количества триггеров, нужно как-то выворачиваться с дешифратором на огромное количество выводов. Не для кого не секрет, что сложность дешифратора растет с увеличением количества адресуемых объектов. Дешифратор 1×2 выполняется на одном триггере с прямым и инверсным выходами, 2×4, уже на 4-х элементах, а попробуйте сделать дешифратор 10×1024! А это всего 1 килобит! Применяется каскадирование дешифраторов, но от этого страдает скорость. Сделать можно, конечно же, все, но за это надо платить, что и доказывается стоимостью быстрой статической памяти большого объема.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector