Логическое строение оперативной памяти в графическом виде. Ячейки памяти, порты и регистры. Вопросы для самопроверки

Министерство образования и науки нижегородской области

Государственное бюджетное образовательное учреждение

среднего профессионального образования

«Борский Губернский колледж»

Специальность 230701 Прикладная информатика (по отраслям)

Реферат

На тему: Структура оперативной памяти.

По дисциплине: Операционные системы и среды.

Выполнил:

студент гр. ИТ-41

Родов А.Е.

Проверил:

Марков А.В.

Городской округ города Бор

Введение

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

1. Структура оперативной памяти

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

2. Сегментная модель памяти

Когда-то давно, на заре рождения компьютерной техники, оперативная память была очень маленькой и для ее адресации использовались 2 байта (так называемое «слово»). Такой подход позволял адресовать 64 Кб памяти, и адресация была линейной – для указания адреса использовалось одно-единственное число. Позже, с усовершенствованием техники, производители поняли, что имеется возможность поддерживать большие объемы памяти, но для этого нужно сделать размер адреса больше. Для совместимости с уже написанным программным обеспечением было решено сделать так: адресация теперь двухкомпонентная (сегмент и смещение) , каждая из которых 16-битная, а старые программы как использовали одну 16-битную компоненту и ничего не знают о сегментах, так и продолжают работать


4. DRAM – Dynamic Random Access Memory

DRAM – это очень старый тип микросхем оперативной памяти, который сейчас уже давно не применяется. По другому DRAM – это динамическая память с произвольным порядком выборки. Минимальной единицей информации при хранении или передаче данных в компьютере является бит. Каждый бит может быть в двух состояниях: включен (да, 1) или выключен (нет, 0). Любой объем информации в конечном итоге состоит из включенных и выключенных битов. Таким образом, что бы сохранить или передать какой либо объем данных, необходимо сохранить или передать каждый бит, не зависимо от его состояния, этих данных.

Для хранения битов информации в оперативной памяти есть ячейки. Ячейки состоят из конденсаторов и транзисторов. Вот примерная и упрощенная схема ячейки DRAM:

Каждая ячейка способна хранить только один бит. Если конденсатор ячейки заряжен, то это означает, что бит включен, если разряжен – выключен. Если необходимо запомнить один байт данных, то понадобится 8 ячеек (1 байт = 8 битам). Ячейки расположены в матрицах и каждая из них имеет свой адрес, состоящий из номера строки и номера столбца.

Теперь рассмотрим, как происходит чтение. Сначала на все входы подается сигнал RAS (Row Address Strobe) – это адрес строки. После этого, все данные из этой строки записываются в буфер. Затем на регистр подается сигнал CAS (Column Address Strobe) – это сигнал столбца и происходит выбор бита с соответствующим адресом. Этот бит и подается на выход. Но во время считывания данные в ячейках считанной строки разрушаются и их необходимо перезаписать взяв из буфера.

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

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

Это означает, что за один раз будет считан не один бит, а несколько. Если параллельно расположено 8 матриц, то сразу считан будет один байт. Это называется разрядностью. Количество линий, по которым будут передаваться данные от (или на) параллельных матриц, определяется разрядностью шины ввода/вывода микросхемы.
Говоря о работе DRAM необходимо учитывать один момент. Все заключается в том, что конденсаторы не могут бесконечно долго хранить заряд и он в конце концов «стекает», Поэтому конденсаторы необходимо перезаряжать. Операция перезарядки называется Refresh или регенерацией. Происходит эта операция примерно каждые 2 мс и порой занимает до 10 % (а то и больше) рабочего времени процессора.

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

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

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

Все это хорошо, до тех пор, пока ячеек ОЗУ хватает. А если нет? Тогда в работу вступает файл подкачки. Этот файл расположен на жестком диске и туда записывается все, что не влезает в ячейки оперативной памяти. Поскольку быстродействие винта значительно ниже ОЗУ, то работа файла подкачки сильно замедляет работу системы. Кроме этого, это снижает долговечность самого жесткого диска.

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

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

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

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

Так ладно, хватит о печальном, переходим к делу.
Рассмотрим адресное пространство программного режима 32 битного процессора (для 64 бит все по аналогии)
Адресное пространство этого режима будет состоять из 2^32 ячеек памяти пронумерованных от 0 и до 2^32-1.
Программист работает с этой памятью, если ему нужно определить переменную, он просто говорит ячейка памяти с адресом таким-то будет содержать такой-то тип данных, при этом сам програмист может и не знать какой номер у этой ячейки он просто напишет что-то вроде:
int data = 10;
компьютер поймет это так: нужно взять какую-то ячейку с номером стопицот и поместить в нее цело число 10. При том про адрес ячейки 18894 вы и не узнаете, он от вас будет скрыт.

Все бы хорошо, но возникает вопрос, а как компьютер ищет эту ячейку памяти, ведь память у нас может быть разная:
3 уровень кэша
2 уровень кэша
1 уровень кэша
основная память
жесткий диск

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

Архитектура х86 поддерживает стек.

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

Push operand
помещает операнд в стек

Pop operand
изымает из вершины стека значение и помещает его в свой операнд

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

Теперь кратко рассмотрим что такое регистры.
Это ячейки памяти в самом процессоре. Это самый быстрый и самый дорогой тип памяти, когда процессор совершает какие-то операции со значением или с памятью, он берет эти значения непосредственно из регистров.
В процессоре есть несколько наборов логик, каждая из которых имеет свои машинные коды и свои наборы регистров.
Basic program registers (Основные программные регистры) Эти регистры используются всеми программами с их помощью выполняется обработка целочисленных данных.
Floating Point Unit registers (FPU) Эти регистры работают с данными представленными в формате с плавающей точкой.
Еще есть MMX и XMM registers эти регистры используются тогда, когда вам надо выполнить одну инструкцию над большим количеством операндов.

Рассмотрим подробнее основные программные регистры. К ним относятся восемь 32 битных регистров общего назначения: EAX, EBX, ECX, EDX, EBP, ESI, EDI, ESP
Для того чтобы поместить в регистр данные, или для того чтобы изъять из регистра в ячейку памяти данные используется команда mov:

Mov eax, 10
загружает число 10 в регистр eax.

Mov data, ebx
копирует число, содержащееся в регистре ebx в ячейку памяти data.

Регистр ESP содержит адрес вершины стека.
Кроме регистров общего назначения, к основным программным регистрам относят шесть 16битных сегментных регистров: CS, DS, SS, ES, FS, GS, EFLAGS, EIP
EFLAGS показывает биты, так называемые флаги, которые отражают состояние процессора или характеризуют ход выполнения предыдущих команд.
В регистре EIP содержится адрес следующей команды, которая будет выполнятся процессором.
Я не буду расписывать регистры FPU, так как они нам не понадобятся. Итак наше небольшое отступление про регистры и стек закончилось переходим обратно к организации памяти.

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

Логический адрес --> Линейный (виртуальный)--> Физический
Все линейное адресное пространство разбито на сегменты. Адресное пространство каждого процесса имеет по крайней мере три сегмента:
Сегмент кода. (содержит команды из нашей программы, которые будут исполнятся.)
Сегмент данных. (Содержит данные, то бишь переменные)
Сегмент стека, про который я писал выше.


Линейный адрес вычисляется по формуле:
линейный адрес=Базовый адрес сегмента(на картинке это начало сегмента) + смещение
Сегмент кода
Базовый адрес сегмента кода берется из регистра CS. Значение смещения для сегмента кода берется из регистра EIP, в котором хранится адрес инструкции, после исполнения которой, значение EIP увеличивается на размер этой команды. Если команда занимает 4 байта, то значение EIP увеличивается на 4 байта и будет указывать уже на следующую инструкцию. Все это делается автоматически без участия программиста.
Сегментов кода может быть несколько в нашей памяти. В нашем случае он один.
Сегмент данных
Данные загружаются в регистры DS, ES, FS, GS
Это значит что сегментов данных может быть до 4х. На нашей картинке он один.
Смещение внутри сегмента данных задается как операнд команды. По дефолту используется сегмент на который указывает регистр DS. Для того чтобы войти в другой сегмент надо это непосредственно указать в команде префикса замены сегмента.
Сегмент стека
Используемый сегмент стека задается значением регистра SS.
Смещение внутри этого сегмента представлено регистром ESP, который указывает на вершину стека, как вы помните.
Сегменты в памяти могут друг друга перекрывать, мало того базовый адрес всех сегментов может совпадать например в нуле. Такой вырожденный случай называется линейным представлением памяти. В современных системах, память как правило так организована.

Теперь рассмотрим определение базовых адресов сегмента, я писал что они содержаться в регистрах SS, DS, CS, но это не совсем так, в них содержится некий 16 битный селектор, который указывает на некий дескриптор сегментов, в котором уже хранится необходимый адрес.


Так выглядит селектор, в тринадцати его битах содержится индекс дескриптора в таблице дескрипторов. Не хитро посчитать будет что 2^13 = 8192 это максимальное количество дескрипторов в таблице.
Вообще дескрипторных таблиц бывает два вида GDT и LDT Первая называется глобальная таблица дескрипторов, она в системе всегда только одна, ее начальный адрес, точнее адрес ее нулевого дескриптора хранится в 48 битном системном регистре GDTR. И с момента старта системы не меняется и в свопе не принимает участия.
А вот значения дескрипторов могут меняться. Если в селекторе бит TI равен нулю, тогда процессор просто идет в GDT ищет по индексу нужный дескриптор с помощью которого осуществляет доступ к этому сегменту.
Пока все просто было, но если TI равен 1 тогда это означает что использоваться будет LDT. Таблиц этих много, но использоваться в данный момент будет та селектор которой загружен в системный регистр LDTR, который в отличии от GDTR может меняться.
Индекс селектора указывает на дескриптор, который указывает уже не на базовый адрес сегмента, а на память в котором хранится локальная таблица дескрипторов, точнее ее нулевой элемент. Ну а дальше все так же как и с GDT. Таким образом во время работы локальные таблицы могут создаваться и уничтожаться по мере необходимости. LDT не могут содержать дескрипторы на другие LDT.
Итак мы знаем как процессор добирается до дескриптора, а что содержится в этом дескрипторе посмотрим на картинке:

Дескрипторы состоит из 8 байт.
Биты с 15-39 и 56-63 содержат линейный базовый адрес описываемым данным дескриптором сегмента. Напомню нашу формулу для нахождения линейного адреса:

линейный адрес = базовый адрес + смещение
С помощью такой нехитрой операции процессор может обращаться по нужному адресу линейной памяти.
Рассмотрим другие биты дескриптора, очень важным является Segment Limit или предел, он имеет 20битное значение от 0-15 и 48-51 бит. Предел задает размер сегмента. Для сегментов данных и кода доступными являются все адреса, расположенные в интервале:
[база; база+предел)
В зависимости от 55 G-бита(гранулярити), предел может измеряться в байтах при нулевом значении бита и тогда максимальный предел составит 1 мб, или в значении 1, предел измеряется страницами, каждая из которых равна 4кб. и максимальный размер такого сегмента будет 4Гб.
Для сегмента стека предел будет в интервале:
(база+предел; вершина]
Кстати интересно почему база и предел так рвано располагаются в дескрипторе. Дело в том что процессоры х86 развивались эволюционно и во времена 286х дескрипторы были по 8 бит всего, при этом старшие 2 байта были зарезервированы, ну а в последующих моделях процессоров с увеличением разрядности дескрипторы тоже выросли, но для сохранения обратной совместимости пришлось оставить структуру как есть.
Значение адреса «вершина» зависит от 54го D бита, если он равен 0, тогда вершина равна 0xFFF(64кб-1), если D бит равен 1, тогда вершина равна 0xFFFFFFFF (4Гб-1)
С 41-43 бит кодируется тип сегмента.
000 - сегмент данных, только считывание
001 - сегмент данных, считывание и запись
010 - сегмент стека, только считывание
011 - сегмент стека, считывание и запись
100 - сегмент кода, только выполнение
101- сегмент кода, считывание и выполнение
110 - подчиненный сегмент кода, только выполнение
111 - подчиненный сегмент кода, только выполнение и считывание

44 S бит если равен 1 тогда дескриптор описывает реальный сегмент оперативной памяти, иначе значение S бита равно 0.

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

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

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

Пример 3.5. Процессор Intel 8086 (1978 г.) имел кодовую шину адреса разрядности 20 бит. В этом случае может быть непосредственно адресовано 2 20 ячеек емкостью 1 байт каждая. Следовательно, адресное пространство будет равно 2 20 байт = 1 Мб.

Процессор Intel 80486 (1989 г.) имел кодовую шину адреса разрядности 32 бита. Его адресное пространство было равным 2 32 байт = 2 2 ·2 30 байт = 2 2 Гб = 4 Гб.

Начиная с процессора Intel Pentium Pro (1995 г.) появилась возможность использования режима Physical Address Extension (PAE), в котором для адресации используется 36 бит. В этом случае может быть адресовано 2 36 байт = 2 6 ·2 30 байт = 2 6 Гб = 64 Гб.

В компьютерах существуют два способа адресации памяти – реальный режим и защищенный режим. Реальный режим применялся в операционной системе MS DOS. Вычисление физического адреса в реальном режиме выполняется по правилу

CS 16 · 10 16 + IP 16 ,

где CS, IP – значения сегмента и смещения, заданные в соответствующих регистрах процессора.

Таким образом, максимальный физический адрес равен

FFFF 16 ·10 16 + FFFF 16 = FFFF0 16 + FFFF 16 = 10FFEF 16 = 1114095 10 ,

а адресное пространство – 1114096 байт = 1 Мб + 64 Кб – 16 байт.

Кроме того, это адресное пространство может быть ограничено разрядностью кодовой шины адреса процессора Intel 8086, т. е. числом 2 20 байт = 1Мб.

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

Пример 3.6. Компьютер на базе процессора Intel 80486 имеет оперативную память емкостью 16 Мб. Процессор может непосредственно адресовать 1 Мб + 64 Кб – 16 байт оперативной памяти. Тогда расширенная память будет составлять 16 Мб –
–(1 Мб + 64 Кб – 16 байт) = 15 Мб – 64 Кб + 16 байт.

Таким образом, соотношение между непосредственно адресуемой и расширенной памятью будет следующим:

1 114 096 байт: 15 663 120 байт или 6,64: 93,36.

Следовательно, в реальном режиме работы более 90% оперативной памяти компьютера будут недоступны.

Существуют два способа доступа к расширенной памяти в реальном режиме работы компьютера. Однако они возможны лишь при использовании специальных программ – драйверов по спецификациям XMS и EMS.

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

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

Доступ к расширенной памяти согласно спецификации XMS (eXtended Memory Specification ) организуется при использовании драйверов типа XMM (например, HIMEM.SYS). Согласно спецификации EMS (Expanded Memory Specification ) доступ к расширенной памяти реализуется путем отображения по мере необходимости отдельных ее полей в определенную область непосредственно адресуемой памяти. При этом хранится не обрабатываемая информация, а лишь адреса, обеспечивающие доступ к ней. Для организации памяти по спецификации EMS используются драйверы EMM386.EXE или Quarterdeck EMM.

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

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

■ индекс дескриптора (13 бит) в таблице дескрипторов;

■ флаг (1 бит), определяющий, к какой из двух таблиц дескрипторов (локальной или глобальной) будет выполняться обращение;

■ запрашиваемый уровень привилегий (2 бита).

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

Использование защищенного режима позволило адресовать процессором Intel 80286 (1982 г.) 2 24 байт = 2 4 · 2 20 байт = 16 Мб памяти, в то время как в реальном режиме адресное пространство по-прежнему ограничивалось 1 Мб.

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

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

Рис. 3.7. Уровни привилегий при использовании многозадачного режима

Архитектура компьютера

Основные элементы компьютера.

Компьютер состоит из 4-х структурных компонентов:

1) Процессор.

Осуществляет контроль за действиями компьютера, а также выполняет функции обработки данных. Если в системе есть только один процессор, он часто называется центральным процессором (CPU – central processing unit)

2) Основная память.

Здесь хранятся данные и программы. Эта память является временной. Часто её называют реальной или оперативной памятью.

3) Устройства ввода-вывода.

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

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

Основная память

PC – программный счетчик

IR – регистр команд

MAR – регистр адреса памяти

MBR – регистр буфера памяти

I/O AR – регистр адреса ввода-вывода

I/O BR – регистр буфера ввода-вывода

Рисунок 1. Компоненты компьютера: общая структура.

Одной из функций процессора является обмен данными с памятью. Для этого он обычно использует два внутренних (по отношению к процессору) регистра: регистр адреса памяти (memory address register – MAR), куда заносится адрес ячейки памяти, в которой будет производиться операция чтения – записи, и регистр буфера памяти (memory buffers register – MBR), куда заносятся данные, предназначенные для записи в память, или те, которые были прочитаны из неё. Аналогично, номер устройства ввода-вывода задается в регистре адреса ввода-вывода (I/O address register – I/O AR). Регистр буфера ввода-вывода (I/O buffer register – I/O BR) служит для обмена данными между устройством ввода-вывода и процессором.

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

Регистры процессора

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

Регистры процессора (выполняют две функции) делятся на 2 группы:

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

Регистры управления и регистры состояния. Используются в процессоре для контроля над выполняемыми операциями; с их помощью привилегированные программы операционной системы могут контролировать ход выполнения других программ.

Регистры, доступные пользователю:

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

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

Управляющие регистры и регистры состояния.

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

Кроме упомянутых регистров MAR, MBR, I/O AR, I/O BR, важными для выполнения команд, являются следующие:

Программный счетчик (program counter – PC). Содержит адрес команды, которая должна быть выбрана из памяти.

Регистр команд (instruction register – IR). Содержит последнюю выбранную из памяти команду.

В состав всех процессоров входит также регистр, известный под названием регистра слова состояния программы (program status word – PSW). В нем, как правило, содержатся коды условий и другая информация о состоянии, например, бит разрешения/запрещения прерываний или бит режима системный/пользовательский.

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


Данные в ЭВМ - это наборы битов, байтов и записей, которые должны быть записаны в памяти машины.

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

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

Как устроена память компьютера

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

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

Например, целое плюсовое число от 0 до 2 8 -1=255 занимает 1 байт памяти. Для хранения целого плюсового числа от 2 8= 256 до 2 16 -1=65536 нужно уже два последовательных байта.

Основная задача при работе с памятью состоит в том, чтобы найти место в памяти, где находится необходимая информация.

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

Например, если слово "информатика", которое состоит из 11 букв, занимает байты с номерами от 1234 до 1244 (всего 11 байтов), то адрес этого слова равняется 1234.

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

Чем же определяется объем доступной памяти компьютера или какое наибольшее число можно использовать для указания адреса?

Адрес, как и любая информация в компьютере, подается в двоичном виде. Значит, наибольшее значение адреса определяется количеством битов, которые используются для его двоичной подачи. В одном байте (8 битов) можно сохранять 2 8 (=256) чисел от 0 до 255, в двух байтах (16 битов) - 2 16 чисел от 0 до 65536, в четырех байтах (32 бита) – 2 32 чисел от 0 до 4294967295.

Виды памяти

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

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

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

Объем ОЗУ обычно составляет от 32 до 512 Мбайт. Для не сложных административных задач бывает достаточно и 32 Мбайт ОЗУ, но сложные задачи компьютерного дизайна могут потребовать от 512 Мбайт до 2 Гбайт ОЗУ.

Обычно ОЗУ исполняется из интегральных микросхем памяти SDRAM (синхронное динамическое ОЗУ). Каждый информационный бит в SDRAM запоминается в виде электрического заряда крохотного конденсатора, образованного в структуре полупроводникового кристалла. Из-за утечки токов такие конденсаторы быстро разряжаются и их периодически (примерно каждые 2 миллисекунды) подзаряжают специальные устройства. Этот процесс называется регенерацией памяти (Refresh Memory). Микросхемы SDRAM имеют емкость от 16 до 256 Мбит и более. Они устанавливаются в корпусе и собираются в модули памяти. Большинство современных компьютеров комплектуются модулями типа DIMM (Dual-In-line Memory Module - модуль памяти с двухрядным расположением микросхем). В компьютерных системах на самых современных процессорах используются

Высокоскоростные модули Rambus DRAM (RIMM) и DDR DRAM.

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

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

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

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

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

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

Одной из первых исполняется подпрограмма, выполняющая самотестирование компьютера. Она так и называется: Тест при включении (по-английски - POST - Power-On Self Test). В ходе ее работы проверяется многое, но на экране мы видим только, как мелькают цифры, соответствующие проверенным ячейкам оперативной памяти.

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

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

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

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

Для изменения настроек, хранящихся в CMOS-памяти, в ПЗУ содержится специальная программа - SETUP. Чтобы ее запустить, надо в самый первый момент после запуска компьютера нажать и удерживать клавишу DELETE. Навигацию в системе меню программы SETUP выполняют с помощью клавиш управления курсором. Нужные пункты меню выбирают клавишей ENTER, а возврат в меню верхнего уровня - клавишей ESC. Для изменения установленных значений служат клавиши Page Up и Page Down.

Кэш-память

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

Кэш-память напрямую влияет на скорость вычислений и помогает процессору работать с более равномерной загрузкой. Представьте себе массив информации, используемой в вашем офисе. Небольшие объемы информации, необходимой в первую очередь, скажем список телефонов подразделений, висят на стене над вашим столом. Точно так же вы храните под рукой информацию по текущим проектам. Реже используемые справочники, к примеру, городская телефонная книга, лежат на полке, рядом с рабочим столом. Литература, к которой вы обращаетесь совсем редко, занимает полки книжного шкафа. Компьютеры хранят данные в аналогичной иерархии. Когда приложение начинает работать, данные и команды переносятся с медленного жесткого диска в оперативную память произвольного доступа, откуда процессор может быстро их получить. Оперативная память играет роль КЭШа для жесткого диска. Для достаточно быстрых компьютеров необходимо обеспечить быстрый доступ к оперативной памяти, иначе микропроцессор будет простаивать, и быстродействие компьютера уменьшится. Для этого такие компьютеры могут оснащаться кэш-памятью, т.е. "сверхоперативной" памятью относительно небольшого объема (обычно от 64 до 256 Кбайт), в которой хранятся наиболее часто используемые участки оперативной памяти. Кэш-память располагается "между" микропроцессором и оперативной памятью, и при обращении микропроцессора к памяти сначала производится поиск нужных данных в кэш-памяти. Поскольку время доступа к кэш-памяти в несколько раз меньше, чем к обычной памяти, а в большинстве случаев необходимые микропроцессору данные содержаться в кэш-памяти, среднее время доступа к памяти уменьшается. Для компьютеров на основе intel-80386dx или 80486sx размер кэш-памяти в 64 кбайт является удовлетворительным, 128 кбайт - вполне достаточным. Компьютеры на основе intel-80486dx и dx2 обычно оснащаются кэш-памятью емкостью 256 Кбайт.




Top