Автор: Пользователь скрыл имя, 25 Октября 2011 в 17:24, курсовая работа
Иерархия памяти современных компьютеров строится на нескольких уровнях, причем более высокий уровень меньше по объему, быстрее и имеет большую стоимость в пересчете на байт, чем более низкий уровень. Уровни иерархии взаимосвязаны: все данные на одном уровне могут быть также найдены на более низком уровне, и все данные на этом более низком уровне могут быть найдены на следующем нижележащем уровне и так далее, пока мы не достигнем основания иерархии.
Введение:
Мы часто сталкиваемся с проблемой «Как запомнить большой объем информации?», ведь человеческий мозг устроен так, что мы не можем запомнить все. Поэтому в наше время, создание устройств, которые помогут нам сохранять информацию, не нужную на данном этапе, но необходимую в дальнейшем, становится все актуальней.
Объектом исследования в данной курсовой работе есть память ЭВМ. Одним из основных факторов увеличения производительности ЭВМ есть использование многоуровневой организации памяти, что позволяет увеличить скорость обработки данных за счет работы верхних уровней иерархии памяти. Предметом исследования в данной курсовой работе есть иерархия памяти ЭВМ.
Большинство программистов обычно предполагают, что память делится на два уровня, оперативную память и дисковые накопители, хотя в ассемблерных языках и ассемблерно-совместимых языках (типа C), существует возможность непосредственной работы с регистрами. Получение преимуществ от иерархии памяти требует совместных действий от программиста, аппаратуры и компиляторов (а также базовая поддержка в операционной системе):
Многие программисты не учитывают многоуровневость памяти при программировании. Этот подход работает, пока, приложение не столкнется с падением производительности из-за нехватки производительности подсистемы памяти (memory wall). При исправлении кода (Рефакторинг) необходимо учесть наличие и особенность работы верхних уровней иерархии памяти для достижения наивысшей производительности.
Иерархия памяти современных компьютеров строится на нескольких уровнях, причем более высокий уровень меньше по объему, быстрее и имеет большую стоимость в пересчете на байт, чем более низкий уровень. Уровни иерархии взаимосвязаны: все данные на одном уровне могут быть также найдены на более низком уровне, и все данные на этом более низком уровне могут быть найдены на следующем нижележащем уровне и так далее, пока мы не достигнем основания иерархии.
Поэтому, ставим перед собой задачи:
Регистр процессора — сверхбыстрая оперативная память (СОЗУ) внутри процессора, предназначенная прежде всего для хранения промежуточных результатов вычисления — РОН (регистр общего назначения) или содержащая данные, необходимые для работы процессора — смещения базовых таблиц, уровни доступа и т. д. (специальные регистры).
Регистр представляет собой цифровую электронную схему, служащую для временного хранения двоичных чисел. В процессоре имеется значительное количество регистров, большая часть которых используется самим процессором и недоступна программисту(например, при выборке из памяти очередной команды она помещается в регистр команд, и программист обратиться к этому регистру не может). Имеются также регистры, которые в принципе программно доступны, но обращение к ним осуществляется из программ операционной системы (например, управляющие регистры и теневые регистры дескрипторов сегментов). Этими регистрами пользуются в основном разработчики операционных систем. Существуют также так называемые регистры общего назначения(РОН), представляющие собой часть регистров процессора, использующихся без ограничения в арифметических операциях, но имеющие определенные ограничения, например в строковых. РОН, не характерные для эпохи мейнфреймов типа IBM/370 стали популярными в микропроцессорах архитектуры X86 — i8085, i8086 и последующих.
Доступ к значениям, хранящимся в регистрах, как правило, в несколько раз быстрее, чем доступ к ячейкам оперативной памяти (даже если кеш-память содержит нужные данные), но объём оперативной памяти намного превосходит суммарный объём регистров (объём среднего модуля оперативной памяти сегодня составляет 1-4 Гб, суммарная «ёмкость» регистров общего назначения/данных для процессора Intel 80x86 16 битов * 4 = 64 бита (8 байт)).
Регистром называется функциональный узел, осуществляющий приём, хранение и передачу информации. Регистры состоят из группы триггеров, обычно D. По типу приёма и выдачи информации различают 2 типа регистров:
Сдвиговые регистры представляют собой последовательно соединённую цепочку триггеров. Основной режим работы — сдвиг разрядов кода от одного триггера к другому на каждый импульс тактового сигнала.
По назначению регистры различаются на:
Регистровый файл (register file) — модуль микропроцессора (CPU), содержащий в себе реализацию регистров процессора. Современные регистровый файлы, используемые в СБИС обычно реализованы как многопортовый массив быстрой статической памяти SRAM. Такие массивы SRAM отличаются явным разделением портов чтения и записи, тогда как классическая многопортовая SRAM обычно позволяет как читать так и записывать через любой порт.
Система команд микропроцессора (архитектура) практически всегда определяет набор регистров, которые будут хранить данные для обработки функциональными устройствами чипа. В простейших процессорах такие архитектурные регистры отображаются один-в-один в физический регистровый файл. В более сложных ЦПУ используется переименование регистров (register renaming), которое позволяет динамически изменять соответствие между аппаратными и архитектурными регистрами во время исполнения.
Традиционно регистровый файл реализуется как массив запоминающих ячеек, считываемый вертикально. Слова расположены в горизонтальных строках (word lines), и при чтении ячейки выдают свое значение на вертикальные битовые линии (Bit lines). В нижней части эти линии подключены к усилителям, которые преобразуют сигналы с ячеек, ослабленные при передаче, в булевые сигналы полной амплитуды. В левой части расположены декодеры, активирующие строку, соответствующую заказанному регистру или регистрам. Большие регистровые файлы иногда организуются как мозаика из нескольких отраженных и повернутых более простых регистровых файлов.
Регистровые файлы содержат по одной строке слов на каждый порт, по одной битовой линии на бит слова для каждого порта чтения и по две битовые линии на бит слова для каждого порта записи. Также каждая ячейка должна иметь входы питания Vdd и земли Vss. Следовательно, с увеличением количества портов площадь, требуемая под разводку растет квадратично, а площадь, занимаемая транзисторами — линейно. В какой-то момент, возможно, будет более оптимально по площади или по задержкам иметь несколько регистровых файлов с дублирующейся информацией и половиной портов чтения в каждом, чем один большой регистровый файл сразу со всеми портами чтения.
Например, регистровый файл в целочисленном АЛУ микропроцессора MIPS R8000, имеющий 9 портов чтения, 4 порта записи, содержащий 32 64хбитных регистра и реализованный на техпроцессе 0.7 мкм, имеет такие размеры, что хорошо различим невооруженным глазом даже на расстоянии порядка 30 см.
Рисунок 1. Типичный регистровый файл с 3 портами, в котором возможно одновременное чтение из 2 регистров и запись в 1 регистр, состоит из ячеек похожих на изображенную.
Между тем, триггер как минимум по двум позициям обыгрывает конденсатор: а) состояния триггера устойчивы и при наличии питания могут сохраняться бесконечно долго, в то время как конденсатор требует периодической регенерации; б) триггер, обладая мизерной инертностью, без проблем работает на частотах вплоть до нескольких ГГц, тогда как конденсаторы "сваливаются" уже на 75-100 МГц.
К недостаткам триггеров следует отнести их высокую стоимость и низкую плотность хранения информации. Если для создания ячейки динамической памяти достаточного всего одного транзистора и одного конденсатора, то ячейка статической памяти состоит как минимум из четырех, а в среднем шести - восьми транзисторов, поэтому мегабайт статической памяти оказывается по меньшей мере в несколько раз дороже.
В основе всех триггеров лежит кольцо из двух логических элементов "НЕ" (инверторов), соединенных по типу "защелки" (см. рис. 2). Рассмотрим, как он работает. Если подать на линию Q сигнал, соответствующий единице, то, пройдя сквозь элемент D.D1 он обратится в ноль. Но, поступив на вход следующего элемента, - D.D2 - этот ноль вновь превратится в единицу. Поскольку, выход элемента D.D2 подключен ко входу элемента D.D1, то даже после исчезновения сигнала с линии Q, он будет поддерживать себя самостоятельно, т.е. триггер перейдет в устойчивое состояние. Образно это можно уподобить дракону, кусающему себя за хвост.
Естественно, если на линию Q подать сигнал, соответствующий логическому нулю, - все будет происходить точно так же, но наоборот!
Рисунок 2. Устройство простейшего триггера (слева). Образно это можно представить драконом, кусающим свой хвост
Как устроен элемент "НЕ"? На этот вопрос нельзя ответить однозначно. В зависимости от имеющейся у нас элементарной базы, конечная реализация варьируется в очень широких пределах. Ниже в качестве примера приведена принципиальная схема простейшего инвертора, сконструированного из двух последовательно соединенных комплементарных /* взаимно дополняемых */ CMOS-транзисторов - p- и n- канального (см. рис. 3). Если на затворы подается нулевой уровень, то открывается только p-канал, а n-канал остается разомкнутым. В результате, на выходе мы имеем питающее напряжение (т. е. высокий уровень). Напротив, если на затворы подается высокий уровень, размыкается n-канал, а p-канал - замыкается. Выход оказывается закорочен на массу и на нем устанавливается нулевое напряжение (т. е. низкий уровень).