|
|
(1 промежуточная версия не показана) |
Строка 1: |
Строка 1: |
- | = Информация и её измерения. =
| + | #redirect [[ПОД (3 поток), Ответы]] |
- | | + | |
- | Термин "информация" происходит от латинского слова "informatio", что означает сведения, разъяснения, изложение. Несмотря на широкое распространение этого термина, понятие информации является одним из самых дискуссионных в науке. В настоящее время наука пытается найти общие свойства и закономерности, присущие многогранному понятию информация, но пока это понятие во многом остается интуитивным и получает различные смысловые наполнения в различных отраслях человеческой деятельности:
| + | |
- | в обиходе информацией называют любые данные или сведения, которые кого-либо интересуют. Например, сообщение о каких-либо событиях, о чьей-либо деятельности и т.п. "Информировать" в этом смысле означает "сообщить нечто, неизвестное раньше";
| + | |
- | в технике под информацией понимают сообщения, передаваемые в форме знаков или сигналов;
| + | |
- | в кибернетике под информацией понимает ту часть знаний, которая используется для ориентирования, активного действия, управления, т.е. в целях сохранения, совершенствования, развития системы (Н. Винер).
| + | |
- | | + | |
- | Клод Шеннон, американский учёный, заложивший основы теории информации — науки, изучающей процессы, связанные с передачей, приёмом, преобразованием и хранением информации, — рассматривает информацию как снятую неопределенность наших знаний о чем-то.
| + | |
- | | + | |
- | Приведем еще несколько определений:
| + | |
- | :Информация — это сведения об объектах и явлениях окружающей среды, их параметрах, свойствах и состоянии, которые уменьшают имеющуюся о них степень неопределенности, неполноты знаний (Н.В. Макарова);
| + | |
- | :Информация — это отрицание энтропии (Леон Бриллюэн);
| + | |
- | :Информация — это мера сложности структур (Моль);
| + | |
- | :Информация — это отраженное разнообразие (Урсул);
| + | |
- | :Информация — это содержание процесса отражения (Тузов);
| + | |
- | :Информация — это вероятность выбора (Яглом).
| + | |
- | | + | |
- | Современное научное представление об информации очень точно сформулировал Норберт Винер, "отец" кибернетики. А именно:
| + | |
- | Информация — это обозначение содержания, полученного из внешнего мира в процессе нашего приспособления к нему и приспособления к нему наших чувств.
| + | |
- | | + | |
- | ===Подходы к определению количества информации. Формулы Хартли и Шеннона. ===
| + | |
- | | + | |
- | Американский инженер Р. Хартли в 1928 г. процесс получения информации рассматривал как выбор одного сообщения из конечного наперёд заданного множества из N равновероятных сообщений, а количество информации I, содержащееся в выбранном сообщении, определял как двоичный логарифм N. Формула Хартли:
| + | |
- | : <math>~I(N)= \log_2 N.</math>
| + | |
- | | + | |
- | Допустим, нужно угадать одно число из набора чисел от единицы до ста. По формуле Хартли можно вычислить, какое количество информации для этого требуется: <math>I = \log_2 100 > 6,644</math>. Таким образом, сообщение о верно угаданном числе содержит количество информации, приблизительно равное 6,644 единицы информации.
| + | |
- | | + | |
- | Для задач такого рода американский учёный Клод Шеннон предложил в 1948 г. другую формулу определения количества информации, учитывающую возможную неодинаковую вероятность сообщений в наборе. Формула Шеннона:
| + | |
- | : <math>H =-\sum_{i=1}^N p_i \log_2 p_i</math>
| + | |
- | | + | |
- | где <math>p_i</math> — вероятность того, что именно i-е сообщение выделено в наборе из N сообщений.
| + | |
- | | + | |
- | Легко заметить, что если вероятности <math>p_1, ..., p_N</math> равны, то каждая из них равна <math>1 / N</math>, и формула Шеннона превращается в формулу Хартли.
| + | |
- | | + | |
- | Помимо двух рассмотренных подходов к определению количества информации, существуют и другие. Важно помнить, что любые теоретические результаты применимы лишь к определённому кругу случаев, очерченному первоначальными допущениями.
| + | |
- | | + | |
- | В качестве единицы информации Клод Шеннон предложил принять один бит (англ. bit от binary digit — двоичная цифра).
| + | |
- | Бит в теории информации — количество информации, необходимое для различения двух равновероятных сообщений (типа "орел"—"решка", "чет"—"нечет" и т.п.).
| + | |
- | | + | |
- | В вычислительной технике битом называют наименьшую "порцию" памяти компьютера, необходимую для хранения одного из двух знаков "0" и "1", используемых для внутримашинного представления данных и команд.
| + | |
- | | + | |
- | == Замечание ==
| + | |
- | "Боюсь соврать, но на одной из первых лекций Фисун задал вопрос как раз на тему а что же такое информация. Ответом, в конечном итоге, явилось, что в современном мире информация - понятие самодостаточное и в пояснениях не нуждаещееся(атомарное, как выразился сам лектор). То есть, по ходу, ответом на вопрос что такое информация будет такое:-"Информация это информация""(c)
| + | |
- | [http://www.cmcspec.ru/ipb/index.php?showtopic=647&view=findpost&p=20167 Источник]
| + | |
- | | + | |
- | = Арифметические вычисления до эры ЭВМ. =
| + | |
- | Первым устройством для счета, известным еще задолго до нашей эры (V в. до н.э.) был простой '''абак''', с которого и началось развитие вычислительной техники. Придумали абак в Греции и Египте.
| + | |
- | | + | |
- | Греческий (египетский) абак – это дощечка, покрытая слоем пыли, на которой острой палочкой проводились линии и какие-нибудь предметы, размещавшиеся в полученных колонках по позиционному принципу. В Древнем Риме абак появился, вероятно в V–VI вв н.э., и назывался calculi или abakuli. Изготовлялся абак из бронзы, камня, слоновой кости и цветного стекла. До нашего времени дошёл бронзовый римский абак, на котором камешки передвигались в вертикально прорезанных желобках. Внизу помещались камешки для счета до пяти, а в верхней части имелось отделение для камешка, соответствующего пятёрке.
| + | |
- | | + | |
- | Китайский суан-пан – состояли из деревянной рамки, разделенной на верхние и нижние секции. Палочки соотносятся с колонками, а бусинки с числами. У китайцев в основе счета лежала не десятка, а пятерка. Она разделена на две части: в нижней части на каждом ряду располагаются по 5 косточек, в верхней части – по две. Таким образом, для того чтобы выставить на этих счетах число 6, ставили сначала косточку, соответствующую пятерке, и затем прибавляли одну в разряд единиц.
| + | |
- | | + | |
- | Японский соробан – прямоугольная рама содержит произвольное количество вертикальных бамбуковых палочек (чем больше их число, тем с большим разрядом цифр можно проводить операции). На каждой палочке по 5 деревянных косточек, разделённых поперечной полосой – над полосой одна косточка, под полосой – 4.
| + | |
- | | + | |
- | На Руси долгое время считали по косточкам, раскладываемым в кучки. Примерно с XV века получил распространение "дощаный счет", завезенный, видимо, западными купцами вместе с [[wikipedia:ru:Ворвань|ворванью]] и текстилем.
| + | |
- | | + | |
- | «Дощаный счет» – «Русский абак» почти не отличался от обычных счетов и представлял собой рамку с укрепленными горизонтальными веревочками, на которые были нанизаны просверленные сливовые или вишневые косточки. Счеты, которые появились в XV в.в. состоят на особом месте, т.к. используют десятичную, а не пятеричную систему счисления, как все остальные абаки.
| + | |
- | | + | |
- | Основная заслуга изобретателей абака (''какого именно абака? в греко-латинском не было позиционной!'') – создание позиционной системы представления чисел. Вычисления на абаке производились перемещением камешке по желобам на доске.
| + | |
- | | + | |
- | Начало XVII века: вводом понятия логарифма шотландским математиком Джоном Непером и публикацией таблицы логарифмов послужило созданию '''логарифмической линейки'''. Одной из первых «вычислительных» машин была суммирующая машина французского ученого Блеза Паскаля, которую изобрел он в 1642 году. '''Машина Паскаля''' могла суммировать десятичные числа.
| + | |
- | | + | |
- | Первую арифметическую машину, выполняющую все четыре арифметических действия, создал в 1673 году немецкий математик Лейбниц – механический арифмометр. '''Арифметическая машина Лейбница''' послужила прототипом арифмометров, которые начали производиться серийно с 1820 года и использовались вплоть до 60х годов XX в. '''Арифмометр''' был предшественником современного калькулятора.
| + | |
- | Арифмометр, как и простой калькулятор – это средство механизации вычисления. Человек, производя на таком устройстве, сам управляет его работой, определяет последовательность выполнения операций.
| + | |
- | XIX в.: автором первого проекта вычислительного автомата был профессор Кембриджского университета английский математик Чарльз Бэббидж.
| + | |
- | | + | |
- | '''Аналитическая машина Бэббиджа'''
| + | |
- | | + | |
- | Основные идеи заложенные в проекте этой машины, в нашем веке были использованы конструкторами ЭВМ. Все главные компоненты современного компьютера присутствовали в конструкции аналитической машины:
| + | |
- | * СКЛАД (в современной технологии – ПАМЯТЬ), где хранятся все исходные числа и промежуточные результаты.
| + | |
- | * МЕЛЬНИЦА (арифметическое устройство), в которой осуществляются операции над числами, взятыми из склада.
| + | |
- | * КОНТОРА (устройство управления), производящая управление последовательностью операций над числами, соответственно над заданной программой.
| + | |
- | * БЛОКИ ВВОДА исходных данных.
| + | |
- | * БЛОКИ ПЕЧАТИ РЕЗУЛЬТАТОВ.
| + | |
- | | + | |
- | Для программного управления использовались перфокарты – картонные карточки с пробитыми в них отверстиями (перфорацией).
| + | |
- | Проект машины так и не был реализован из-за сложности механического износа деталей проекта, которые опережали технические возможности своего времени, но программы для этой машины были созданы. Их составила дочь Джона Байрона герцогиня Ада Лавлейс, которая по праву считается первым программистом.
| + | |
- | | + | |
- | Эра '''электронных вычислительных машин''' началась в 30-х годах XX в. В 40-х годах удалось создать первую программируемую счетную машину на основе электромеханических реле.
| + | |
- | | + | |
- | = Эволюционная классификация ЭВМ. =
| + | |
- | | + | |
- | Одна из форм классификации ЭВМ - по "поколениям" связана с эволюцией аппаратного и программного оборудования, причем основным классификационным параметром является технология производства. Классификация рассматривается на примерах из отечественной техники, что дает возможность перечислить хотя бы основных творцов отечественной информационной технологии. История отечественных исследований в данной области пока малоизвестна<!-- но чаще они отсутствуют как таковые -->. Это связано с тем, что работы в данной области длительное время носили закрытый характер. В России (в СССР) начало эры вычислительной техники принято вести от 1946г. <!-- наш собственный революционный календарь с блэкджеком и бэсмами -->, когда под руководством Сергея Алексеевича Лебедева закончен проект малой электронной счетной машины (МЭСМ - 50 оп./сек. ОЗУ на 63 команды и 31 константы) - фон Нейманновская универсальная ЭВМ. В 1950/51 гг. она пущена в эксплуатацию. Далее, приводятся некоторые крупные отечественные достижения в области вычислительной техники.
| + | |
- | | + | |
- | ===Первое поколение===
| + | |
- | Первое поколение ЭВМ /1946-1957гг/ использовало в качестве основного элемента электронную лампу. Быстродействие их не превышало 2-3 т. оп./сек; емкость ОЗУ - 2-4 К слов. Это ЭВМ: БЭСМ-1 (В.А. Мельников,1955г.), Минск-1 (И.С. Брук 1952/59 гг.), Урал-4 (Б. И. Рамеев), Стрела (Ю.Я. Базилевский, 1953 г.), М-20 (М.К. Сулим 1860 г. <!-- Парень явно опередил своё время! -->). А.Н. Мямлиным была разработана и несколько лет успешно эксплуатировалась "самая большая в мире ЭВМ этого поколения" <!-- Ох уж эти советские микросхемы, самые большие микросхемы в мире! -->- машина Восток. Программирование для этих машин: однозадачный, пакетный режим, машинный язык, ассемблер (совковый аналог - [[wikipedia:ru:Автокод#Происхождение и критика термина «язык ассемблера»|Автокод]]).
| + | |
- | | + | |
- | ===Второе поколение===
| + | |
- | В ЭВМ второго поколения /1958-1964гг/ элементной базой служили транзисторы. Отечественные: Урал-14, Минск-22, БЭСМ-4, М-220, Мир-2, Наири и БЭСМ-6 (1 млн. оп./сек , 128К), Весна (В.С. Полин, В.К. Левин), М-10 (М.А. Карцев). ПС-2000, ПС-3000, УМШМ, АСВТ, Сетунь. Программирование: мультипрограммный режим, языки высокого уровня, библиотеки подпрограмм.
| + | |
- | | + | |
- | ===Третье поколение===
| + | |
- | Элементная база ЭВМ третьего поколения, /1965-1971гг/ интегральные схемы - логически законченный функциональный блок, выполненный печатным монтажом. Отечественные ЭВМ этого поколения ЭВМ ЕС (Единой Системы):ЕС-1010,ЕС-1020, ЕС-1066 (2 млн. оп./сек , 8192К) и др. Программирование: мультипрограммный, диалоговый режимы, ОС, виртуальная память.
| + | |
- | | + | |
- | В 1996 г. в России работают 5 тысяч ЕС ЭВМ из 15 т., уставленных а СССР. НИИЦЭВТ на базе комплектующих IBM/390 разработал 23 модели производительностью от 1.5 до 167 Мфлоп (ЕС1270, ЕС1200, аналоги серверов 9672)). IBM предоставляет также лицензионные программные продукты (ОС-390). Используются в России для сохранения программного задела прикладных систем (проблема наследия ЕС ЭВМ).
| + | |
- | | + | |
- | ===Четвертое поколение===
| + | |
- | ЭВМ четвертого поколения /1972-1977гг/ базируются на "больших интегральных схемах"(БИС) и "микропроцессорах". Отечественные - проект "Эльбрус", ПК. Программирование: диалоговые режимы, сетевая архитектура, экспертные системы.
| + | |
- | | + | |
- | ===Пятое поколение===
| + | |
- | ЭВМ пятого поколения /начиная с 1978г/ используют "сверхбольшие интегральные схемы" (СБИС). Выполненные по такой технологии процессорные элементы на одном кристалле могут быть основным компонентом различных платформ - серверов: от супер-ЭВМ (вычислительных серверов), до интеллектуальных коммутаторов в файл-серверах.
| + | |
- | | + | |
- | На этом поколении технологические новации приостанавливаются и в восьмидесятые годы в ряде стран появляются проекты создания новых вычислительных систем на новых архитектурных принципах. Так, в 1982 японские разработчики приступили к проекту "компьютерные системы пятого поколения", ориентируясь на принципы искусственного интеллекта, но в 1991 японское министерство труда и промышленности принимает решение о прекращении программы по компьютерам пятого поколения; вместо этого запланировано приступить к разработке компьютеров шестого поколения на основе нейронных сетей.
| + | |
- | | + | |
- | В СССР под руководством А.Н. Мямлина в рамках такого проекта велась разработка вычислительной системы, состоящей из специализированных процессоров: процессоров ввода/вывода, вычислительного, символьного, архивного процессоров.
| + | |
- | | + | |
- | В настоящее время в России создаются мультисистемы на базе зарубежных микропроцессоров: вычислительные кластеры (НИИЦЭВТ), супер-ЭВМ МВС-1000 (В.К. Левин, А.В.Забродин). Под руководством Б.А.Бабаяна проектируется микропроцессор Мерсед-архитектектуры. В.С. Бурцев разрабатывает проект суперЭМВ на принципах потоковых машин.
| + | |
- | | + | |
- | Эволюция отечественного программного обеспечения непосредственно связана с эволюцией архитектуры ЭВМ, первая Программирующая Программа ПП, Интерпретирующая Система- ИС создавались для М-20 (ИПМ). Для ЭВМ этого семейства были реализованы компиляторы с Алгола: ТА-1 (С.С.Лавров), ТФ-2 (М.Р.Шура-Бура), Альфа(А.П.Ершов). ''Этот абзац нужно написать более понятным языком, если кто-то-таки вкурит, о чём в нём речь''
| + | |
- | | + | |
- | Для БЭСМ-6 создан ряд операционные системы: от Д-68 до ОС ИПМ (Л.Н. Королев, В.П. Иванников, А.Н. Томилин, В.Ф.Тюрин, Н.Н. Говорун, Э.З. Любимский).
| + | |
- | | + | |
- | Под руководством С.С.Камынина и Э.З. Любимского был реализован проект Алмо: создание машинно-ориентированного языка и на его базе системы мобильных трансляторов.
| + | |
- | | + | |
- | В.Ф.Турчин предложил функциональный язык Рефал, системы программирования на базе этого языка используются при создании систем символьной обработки и в исследованиях в области [[wikipedia:Metasystem transition|метавычислений]].
| + | |
- | | + | |
- | = Принципы фон Неймановской архитектуры. =
| + | |
- | [[wikipedia:von Neumann architecture]]
| + | |
- | | + | |
- | В основу построения подавляющего большинства компьютеров положены следующие общие принципы, сформулированные в 1945 г. американским ученым Джоном фон Нейманом.
| + | |
- | | + | |
- | ===Принцип программного управления.===
| + | |
- | Из него следует, что программа состоит из набора команд, которые выполняются процессором автоматически друг за другом в определенной последовательности.
| + | |
- | Выборка программы из памяти осуществляется с помощью счетчика команд. Этот регистр процессора последовательно увеличивает хранимый в нем адрес очередной команды на длину команды.
| + | |
- | А так как команды программы расположены в памяти друг за другом ('''принцип последовательного программного управления'''), то тем самым организуется выборка цепочки команд из последовательно расположенных ячеек памяти.
| + | |
- | Если же нужно после выполнения команды перейти не к следующей, а к какой-то другой, используются команды условного или безусловного переходов, которые заносят в счетчик команд номер ячейки памяти, содержащей следующую команду. (иногда выделяют '''принцип условного перехода''') Выборка команд из памяти прекращается после достижения и выполнения команды “стоп”.
| + | |
- | Таким образом, процессор исполняет программу автоматически, без вмешательства человека.
| + | |
- | | + | |
- | ===Принцип однородности памяти.===
| + | |
- | Программы и данные хранятся в одной и той же памяти s двоичной системе счисления (иногда выделяют '''принцип двоичного представления данных'''). Поэтому компьютер не различает, что хранится в данной ячейке памяти — число, текст или команда. Над командами можно выполнять такие же действия, как и над данными. Это открывает целый ряд возможностей. Например, программа в процессе своего выполнения также может подвергаться переработке, что позволяет задавать в самой программе правила получения некоторых ее частей (так в программе организуется выполнение циклов и подпрограмм). Более того, команды одной программы могут быть получены как результаты исполнения другой программы. На этом принципе основаны методы трансляции — перевода текста программы с языка программирования высокого уровня на язык конкретной машины.
| + | |
- | | + | |
- | ===Принцип адресности.===
| + | |
- | Структурно основная память состоит из перенумерованных ячеек; процессору в произвольный момент времени доступна любая ячейка. Отсюда следует возможность давать имена областям памяти, так, чтобы к запомненным в них значениям можно было впоследствии обращаться или менять их в процессе выполнения программ с использованием присвоенных имен.
| + | |
- | Компьютеры, построенные на этих принципах, относятся к типу фон-неймановских. Но существуют компьютеры, принципиально отличающиеся от фон-неймановских. Для них, например, может не выполняться принцип программного управления, т.е. они могут работать без “счетчика команд”, указывающего текущую выполняемую команду программы. Для обращения к какой-либо переменной, хранящейся в памяти, этим компьютерам не обязательно давать ей имя. Такие компьютеры называются не-фон-неймановскими.
| + | |
- | | + | |
- | == Замечание ==
| + | |
- | У лектора немного другая структура принципов.
| + | |
- | === Программное управление работой ЭВМ ===
| + | |
- | Программа -- последовательность комманд, хранимая в ОЗУ. Каждая программа задает единичный акт преобразования информации. В каждый момент времени выполняется только 1 команда программы.
| + | |
- | === Принцип условного перехода ===
| + | |
- | Возможен переход в процессе вычисления на тот или иной участок программы в зависимости от промежуточных, получаемых а ходе вычисления, результатов.
| + | |
- | === Принцип хранимой программы ===
| + | |
- | Команды представляются в числовой форме и хранятся в ОЗУ, в том же виде, что и исходные данные, следовательно над командо йможно производить арифметические действия, изменяя ее динамически.
| + | |
- | === Принцип использования двоичной системы счисления для представления информации ===
| + | |
- | | + | |
- | = Виды запоминающих устройств. =
| + | |
- | Система построена из разнообразных элементов, поэтому для того, чтобы она правильно функционировала, применяются специальные средства, сглаживающие дисбаланс (историческое решение – регистры общего назначения), достигается минимум реальной частоты обращения к памяти - расслоение памяти (это параллельность передачи данных и передача управления). Считывание в память фрагментов данных – организация ассоциативной памяти – кэша (cache) – сверхоперативной памяти, которая аккумулирует наиболее частые команды и минимизирует обращения к оперативной памяти. Также широко используется аппарат прерываний- средство, аппаратно-ориентированное на своевременную обработку поступающей информации, осуществляющее реакцию на ошибки.
| + | |
- | | + | |
- | Система внешних запоминающих устройств (ВЗУ) компьютера очень широка, она включает в себя типовой набор внешних устройств Традиционно это:
| + | |
- | *внешние запоминающие устройства, предназначенные для организации хранения данных и программ;
| + | |
- | *устр-ва ввода и отображения, предназначенные для ввода извне данных и программ и отображения этой инф-ции;
| + | |
- | *устр-ва приема данных, предназначенные для получения данных от других компьютеров и извне.
| + | |
- | | + | |
- | Обмен данными:
| + | |
- | * записями фиксированного размера – блоками
| + | |
- | * записями произвольного размера
| + | |
- | | + | |
- | Доступ к данным:
| + | |
- | * операции чтения и записи (жесткий диск, CDRW).
| + | |
- | * только операции чтения (CDROM, DVDROM, …).
| + | |
- | | + | |
- | По доступу к данным различают устройства:
| + | |
- | | + | |
- | ====Последовательного доступа:====
| + | |
- | В устройствах последовательного доступа для чтения i-ого блока памяти необходимо пройти по первым i-1 блокам. (Пример: пульт дистанционного управления ТВ, кнопки «канал+» и «канал-» или бытовые кассетные магнитофоны - ВЗУ большинства бытовых компьютеров 80-х годов). Устройства последовательного доступа менее эффективны чем устройства прямого доступа.
| + | |
- | * '''Магнитная лента'''. Это тип ВЗУ широко известный всем пользователям бытовых компьютеров (БК). Его принцип основывается на записи/чтении информации на магнитной ленте. При этом перед началом и после окончания записи на ленту заносится специальный признак - маркер начала или, соответственно, конца. Головка проходит на нужный номер цилиндра и не более чем за 1 оборот находит нужный сектор. ''Какие блин секторы в магнитной ленте??''
| + | |
- | | + | |
- | ====Прямого доступа:====
| + | |
- | В устройствах прямого доступа для того, чтобы прочесть i-ый блок данных, не нужно читать первые i-1 блоков данных. (Пример: пульт дистанционного управления Вашего телевизора, кнопки - каналы; для того, чтобы посмотреть i-ый канал не нужно «перещелкивать» первые i-1).
| + | |
- | *'''Магнитные диски'''. Конструкция ВЗУ данного типа состоит в том, что имеется несколько дисков (компьютерный жаргон - «блины»), обладающих возможностью с помощью эффекта перемагничивания хранить информацию, размещенных на оси, которые вращаются с некоторой постоянной скоростью. Каждый такой диск имеет одну или две поверхности, покрытые слоем, позволяющим записывать информацию
| + | |
- | *'''Магнитный барабан'''.металлический цилиндр большой массы, вращающийся вокруг своей оси. Роль большой массы - поддержание стабильной скорости вращения. Поверхность этого цилиндра покрыта магнитным слоем, позволяющим хранить, читать и записывать информацию. Поверхность барабана разделена на n равных частей (в виде колец), которые называются треками (track). Над барабаном расположен блок неподвижных головок так, что над каждым треком расположена одна и только одна головка. (Головок, соответственно, тоже n штук). Головки способны считывать и записывать информацию с барабана. Каждый трек разделен на равные сектора. В каждый момент времени в устройстве может работать только одна головка. Запись информации происходит по трекам барабана, начиная с определенного сектора. При заказе на обмен поступают следующие параметры: № трека, № сектора, объем информации.
| + | |
- | *''' Магнито-электронные ВЗУ прямого доступа (память на магнитных доменах)'''. В конструкции этого устройства опять-таки используется барабан, но на этот раз он неподвижен. Барабан опять-таки разделен на треки и над каждым треком имеется своя головка. За счет некоторых магнитно-электрических эффектов происходит перемещение по треку цепочки доменов. При этом каждый домен однозначно ориентирован, то есть он бежит стороной, с зарядом «+», либо стороной, заряженной «-». Так кодируется ноль и единица. Эта память очень быстродейственна, т.к. в ней нет «механики». Память на магнитных доменах очень дорога и используется в большинстве случаев в военной и космической областях.
| + | |
- | | + | |
- | ===Иерархия памяти===
| + | |
- | Выглядит следующим образом:
| + | |
- | | + | |
- | [[Изображение:ВЗУ.PNG]]
| + | |
- | | + | |
- | = Адресация ОЗУ. =
| + | |
- | ОЗУ - устройство, предназначенное для хранения оперативной информации. В ОЗУ размещается исполняемая в данный момент программа и используемые ею данные. ОЗУ состоит из ячеек памяти, каждая из которых содержит поле машинного слова и поле служебной информации.
| + | |
- |
| + | |
- | Машинное слово – поле программно изменяемой информации, в машинном слове могут располагаться машинные команды (или части машинных команд) или данные, которыми может оперировать программа. Машинное слово имеет фиксированный для данной ЭВМ размер (обычно размер машинного слова – это количество двоичных разрядов, размещаемых в машинном слове).
| + | |
- | Служебная информация (иногда ТЭГ) – поле ячейки памяти, в котором схемами контроля процессора и ОЗУ автоматически размещается информация, необходимая для осуществления контроля за целостностью и корректностью использования данных, размещаемых в машинном слове.
| + | |
- | | + | |
- | [[Изображение:Адресация_ОЗУ_1.PNG]]
| + | |
- | | + | |
- | Использование содержимого поля служебной информации
| + | |
- | * контроль за целостностью данных.: (при записи машинного слова подсчет числа единиц в коде машинного слова и дополнение до четного или нечетного в контрольном разряде), при чтении контроль соответствия; Пример контроля за целостностью данных по четности:
| + | |
- | | + | |
- | [[Изображение:Адресация_ОЗУ_2.PNG]]
| + | |
- | | + | |
- | * контроль доступа к командам/данным (обеспечение блокировки передачи управления на область данных программы или несанкционированной записи в область команд);
| + | |
- | * контроль доступа к машинным типам данных – осуществление контроля за соответствием машинной команды и типа ее операндов;
| + | |
- | Конкретная структура, а также наличие поля служебной информации зависит от конкретной ЭВМ.
| + | |
- | | + | |
- | В ОЗУ все ячейки памяти имеют уникальные имена, имя - адрес ячейки памяти. Обычно адрес – это порядковый номер ячейки памяти (нумерация ячеек памяти возможна как подряд идущими номерами, так и номерами, кратными некоторому значению). Доступ к содержимому машинного слова осуществляется посредством использования адреса.
| + | |
- | Производительность оперативной памяти – скорость доступа процессора к данным, размещенным в ОЗУ.
| + | |
- | * время доступа (access time - taccess) – время между запросом на чтение слова из оперативной памяти и получением содержимого этого слова.
| + | |
- | * длительность цикла памяти (cycle time – tcycle) – минимальное время между началом текущего и последующего обращения к памяти.
| + | |
- | tcycle > taccess: мы можем быстро получить значение из памяти, но ей ещё нужно время восстановиться.
| + | |
- | | + | |
- | Обычно скорость доступа к данным ОЗУ существенно ниже скорости обработки информации в ЦП. (tcycle >> tprocess). Необходимо, чтобы итоговая скорость выполнения команды процессором как можно меньше зависела от скорости доступа к коду команды и к используемым в ней операндам из памяти. Это составляет проблему, которая системным образом решается на уровне архитектуры ЭВМ.
| + | |
- | | + | |
- | = Расслоение оперативной памяти. =
| + | |
- | Расслоение ОЗУ – один из аппаратных путей решения проблемы дисбаланса в скорости доступа к данным, размещенным в ОЗУ и производительностью ЦП. Суть расслоения ОЗУ состоит в следующем. Все ОЗУ состоит из k блоков, каждый из которых может работать независимо. Ячейки памяти распределены между блоками таким образом, что у любой ячейки ее соседи размещаются в соседних блоках.
| + | |
- | Возможность предварительной буферизации при чтении команд/данных. Оптимизация при записи в ОЗУ больших объемов данных.
| + | |
- | | + | |
- | [[Изображение:Расслоение_ОЗУ.PNG]]
| + | |
- | | + | |
- | При конвейерном доступе при М-кратном расслоении и регулярной выборке на обращение к одной ячейке памяти может тратиться 1/М цикла памяти. Но возможны конфликты по доступу, если шаг регулярной выборки достаточно большой или кратен числу банков памяти.
| + | |
- | | + | |
- | = Ассоциативная память. =
| + | |
- | Оперативную память (ОП) можно представить в виде двумерной таблицы, строки которой хранят в двоичном коде команды и данные. Обращения за содержимом строки производится заданием номера (адреса) нужной строки. При записи, кроме адреса строки указывается регистр, содержимое которого следует записать в эту строку. Запись занимает больше времени, чем чтение. Пусть в памяти из трех строк хранятся номера телефонов.
| + | |
- | | + | |
- | {| border=1
| + | |
- | |1924021
| + | |
- | |-
| + | |
- | |9448304
| + | |
- | |-
| + | |
- | |3336167
| + | |
- | |}
| + | |
- | | + | |
- | Для получения номера телефона второго абонента следует обратиться: load (2) и получить в регистре ответа R = 9448304. Такой вид памяти, при котором необходимая информация определяется номером строки памяти, называется адресной. Другой вид оперативной памяти – ассоциативной можно рассматривать также как двумерную таблицу, но у каждой строки которой есть дополнительное поле, поле ключа.
| + | |
- | | + | |
- | Например:
| + | |
- | | + | |
- | {| border=1
| + | |
- | !Ключ
| + | |
- | !Содержимое
| + | |
- | |-
| + | |
- | |Иванов
| + | |
- | |1924021
| + | |
- | |-
| + | |
- | |Петров
| + | |
- | |9448304
| + | |
- | |-
| + | |
- | |Сидоров
| + | |
- | |3336167
| + | |
- | |}
| + | |
- | | + | |
- | После обращение к ассоциативной памяти с запросом : load (Петров) для данного примера получим ответ: R = 9448304. Здесь задание координаты строки памяти производится не по адресу, а по ключу. Но при состоянии ассоциативной памяти:
| + | |
- | | + | |
- | {| border=1
| + | |
- | !Ключ
| + | |
- | !Содержимое
| + | |
- | |-
| + | |
- | |1
| + | |
- | |1924021
| + | |
- | |-
| + | |
- | |2
| + | |
- | |9448304
| + | |
- | |-
| + | |
- | |3
| + | |
- | |3336167
| + | |
- | |}
| + | |
- | | + | |
- | можно получить номер телефона из второй строки запросом: load (2). Таким образом на ассоциативной памяти можно моделировать работу адресной. Ассоциативная память имеет очевидное преимущества перед адресной, однако, у нее есть большой недостаток - ее аппаратная реализация невозможна для памяти большого объема.
| + | |
- | | + | |
- | Телефонная книга, реализованная на обычной памяти требует перебор для поиска n/2. А в ассоциативной памяти все находится за 1 такт.
| + | |
- | | + | |
- | '''ВОПРОС:''' Предложите схему реализации модели ассоциативной памяти при помощи адресной.
| + | |
- | | + | |
- | '''Ответ:''' Область памяти делим ровно пополам. Первая половина заполняется ключами, вторая соответствующими ключам значениями. Когда найден ключ, известен его адрес как смещение относительно начала памяти. Тогда адрес содержимого по ключу – это смещение + размер области ключей, то есть адрес ячейки из второй половины памяти, которая соответствует ключу. ''А не имеется ли тут в виду реализация hash или индексных деревьев?''
| + | |
- | | + | |
- | = Виртуальная память. =
| + | |
- | Внутри программы к моменту образования исполняемого модуля используется модель организации адресного пространства программы (эта модель, в общем случае не связана с теми ресурсами ОЗУ, которые предполагается использовать позднее). Для простоты будем считать, что данная модель представляет собой непрерывный фрагмент адресного пространства в пределах которого размещены данные и команды программы. Будем называть подобную организацию адресации в программе программной адресацией или '''логической/виртуальной адресацией'''.
| + | |
- |
| + | |
- | Итак, повторяем, на уровне исполняемого кода имеется программа в машинных кодах, использующая адреса данных и команд. Эти адреса в общем случае не являются адресами конкретных физических ячеек памяти, в которых размещены эти данные, более того, в последствии мы увидим, что виртуальным (или программным) адресам могут ставиться в соответствие произвольные физические адреса памяти. То есть при реальном исполнении программы далеко не всегда виртуальная адресация, используемая в программе совпадает с физической адресацией, используемой ЦП при выполнении данной программы.
| + | |
- | | + | |
- | ===Базирование адресов.===
| + | |
- | | + | |
- | Элементарное программно-аппаратное решение – использование возможности базирования адресов.
| + | |
- |
| + | |
- | Суть его состоит в следующем: пусть имеется исполняемый программный модуль. Виртуальное адресное пространство этого модуля лежит в диапазоне [0, A_кон]. В ЭВМ выделяется специальный регистр базирования R_баз, который содержит физический адрес начала области памяти, в которой будет размещен код данного исполняемого модуля. При этом исполняемые адреса, используемые в модуле будут автоматически преобразовываться в адреса физического размещения данных путем их сложения с регистром R_баз. Таким образом, код используемого модуля может загрузиться в любое свободное место в памяти. Эта схема является элементарным решением организации простейшего аппарата виртуальной памяти. '''Аппарат виртуальной памяти''' – аппаратные средства компьютера, обеспечивающие преобразование (установление соответствия) программных (виртуальных) адресов, используемых в программе адресам физической памяти в которой размещена программа при выполнении.
| + | |
- |
| + | |
- | Пусть имеется вычислительная система, функционирующая в мультипрограммном режиме. То есть одновременно в системе обрабатываются несколько программ/процессов. Один из них занимает ресурсы ЦП. Другие ждут завершения операций обмена, третьи – готовы к исполнению и ожидают предоставления ресурсов ЦП. При этом происходит завершение выполнявшихся процессов и ввод новых, это приводит к возникновению проблемы фрагментации ОЗУ. Суть ее следующая. При размещении новых программ/процессов в ОЗУ ЭВМ (для их мультипрограммной обработки) образуются свободные фрагменты ОЗУ между программами/процессами. Суммарный объем свободных фрагментов может быть достаточно большим, но, в то же время, размер самого большого свободного фрагмента недостаточно для размещения в нем новой программы/процесса. В этой ситуации возможна деградация системы – в системе имеются незанятые ресурсы ОЗУ, но они не могут быть использованы. Путь решения этой проблемы – использование более развитых механизмов организации ОЗУ и виртуальной памяти, позволяющие отображать виртуальное адресное пространство программы/процесса не в одну непрерывную область физической памяти, а в некоторую совокупность областей.
| + | |
- | | + | |
- | ===Страничная организация памяти===
| + | |
- | Страничная организация памяти предполагает разделение всего пространства ОЗУ на блоки одинакового размера – страницы. Обычно размер страницы равен 2^k. В этом случае адрес, используемый в данной ЭВМ, будет иметь следующую структуру:
| + | |
- | | + | |
- | [[Изображение:Виртуальная_память_1.PNG]]
| + | |
- |
| + | |
- | Модельная (упрощенная) схема организации функционирования страничной памяти ЭВМ следующая: Пусть одна система команд ЭВМ позволяет адресовать и использовать m страниц размером 2^k каждая. То есть, виртуальное адресное пространство программы/процесса может использовать для адресации команд и данных до m = 2^r страниц, где r - разрядность поля "номер страницы".
| + | |
- | | + | |
- | '''Физическое адресное пространство''' – оперативная память, подключенная к данному компьютеру. Физическое адресное пространство в общем случае может иметь произвольное число физических страниц (их может быть больше m, а может быть и меньше). Соответственно структура исполнительного физического адреса будет отличаться от структуры исполнительного виртуального адреса за счет размера поля ”номер страницы”.
| + | |
- | | + | |
- | В '''виртуальном адресе''' размер поля определяется максимальным числом виртуальных страниц – m.
| + | |
- | | + | |
- | В '''физическом адресе''' – максимально возможным количеством физических страниц, которые могут быть подключены к данной ЭВМ (это также фиксированная аппаратная характеристика ЭВМ).
| + | |
- | | + | |
- | В ЦП ЭВМ имеется аппаратная таблица страниц (иногда таблица приписки) следующей структуры:
| + | |
- | | + | |
- | [[Изображение:Виртуальная_память_2.PNG]]
| + | |
- |
| + | |
- | Таблица содержит m строк. Содержимое таблицы определяет соответствие виртуальной памяти физической для выполняющейся в данный момент программы/процесса. Соответствие определяется следующим образом: i-я строка таблицы соответствует i-й виртуальной странице. Содержимое строки αi определяет, чему соответствует i-я виртуальная страница программы/процесса. Если αi ≥ 0, то это означает, что αi есть номер физической страницы, которая соответствует виртуальной странице программы/процесса. Если αi= -1, то это означает, что для i-й виртуальной страницы нет соответствия физической странице ОЗУ (обработка этой ситуации ниже).
| + | |
- |
| + | |
- | Итак, рассмотрим последовательность действий при использовании аппарата виртуальной страничной памяти.
| + | |
- | | + | |
- | [[Изображение:Виртуальная_память_3.PNG]]
| + | |
- | | + | |
- | # При выполнении очередной команды схемы управления ЦП вычисляют некоторый адрес операнда (операндов) A_исп. Это виртуальный исполнительный адрес.
| + | |
- | # Из A_исп выделяется значение поля "номер страницы" (номер виртуальной страницы). По этому значению происходит индексация и доступ к соответствующей строке таблицы страниц.
| + | |
- | # Если значение строки ≥ 0, то происходит замена содержимого поля номер страницы на соответствующее значение строки таблицы, таким образом, получается физический адрес. И далее ЦП осуществляет работу с физическим адресом. Если значение строки таблицы равно –1 это означает, что полученный виртуальный адрес не размещен в ОЗУ. Причины такой ситуации? Их две. Первая – данная виртуальная страница отсутствует в перечне станиц, доступных для программы/процесса, то есть имеет место попытка обращения в “чужую”, нелегитимную память. Вторая ситуация, когда операционная система в целях оптимизации использования ОЗУ, откачала некоторые страницы программы/процесса в ВЗУ(свопинг).
| + | |
- | | + | |
- | = Алгоритмы управления страницами ОЗУ. =
| + | |
- | | + | |
- | Проблема загрузки «новой» страницы в память. Необходимо выбрать страницу для удаления из памяти (с учетом ее модификации и пр.)
| + | |
- | | + | |
- | Существуют разные алгоритмы:
| + | |
- | | + | |
- | ===Алгоритм NRU===
| + | |
- | (Not Recently Used – "не использовавшийся в последнее время"), который использует биты статуса страницы в записях таблицы страниц. R - обращение, M - изменение. Эти биты устанавливаются аппаратно.
| + | |
- |
| + | |
- | #При запуске процесса M и R для всех страниц процесса обнуляются
| + | |
- | #По таймеру происходит обнуление всех битов R
| + | |
- | #При возникновении страничного прерывания ОС делит все страниц на классы по изменению.
| + | |
- | #Случайная выборка страницы для удаления в непустом классе с минимальным номером
| + | |
- | | + | |
- | '''Стратегия:''' лучше выгрузить измененную страницу, к которой не было обращений как минимум в течение 1 «тика» таймера, чем часто используемую страницу
| + | |
- | | + | |
- | ===Алгоритм FIFO===
| + | |
- | «Первым прибыл – первым удален» - простейший вариант FIFO. (проблемы «справедливости»)
| + | |
- | | + | |
- | '''Модификация алгоритма (алгоритм вторая попытка)''':
| + | |
- | #Выбирается самая «старая страница». Если R=0, то она заменяется
| + | |
- | #Если R=1, то R – обнуляется, обновляется время загрузки страницы в память (т.е. переносится в конец очереди). На п.1
| + | |
- | | + | |
- | ===Алгоритм «Часы»===
| + | |
- | #Если R=0, то выгрузка страницы и стрелка на позицию вправо.
| + | |
- | #Если R=1, то R-обнуляется, стрелка на позицию вправо и на П.1.
| + | |
- | | + | |
- | ===Алгоритм LRU===
| + | |
- | Least Recently Used – наиболее давно используемая страница
| + | |
- | | + | |
- | Вариант реализации:
| + | |
- | * Памяти N страниц. Существует битовая матрица NxN (изначально полностью обнулена).
| + | |
- | * При каждом обращении к i-ой странице происходит присваивание 1 всем битам i-ой строки и 0 - всем битам i-ого столбца.
| + | |
- | * Строка с наименьшим двоичным кодом - искомая
| + | |
- |
| + | |
- | ===Алгоритм NFU===
| + | |
- | Not Frequently Used – редко использовавшаяся страница (Программная модификация LRU (?))
| + | |
- | | + | |
- | Для каждой физической страницы i – программный счетчик Counti0. Изначально Counti – обнуляется для всех i.
| + | |
- | | + | |
- | # По таймеру Counti = Counti + Ri (R - бит обращения)
| + | |
- | # Выбор страницы с минимальным значением {Counti}
| + | |
- | | + | |
- | Недостаток – «помнит» всю активность по использованию страниц
| + | |
- | | + | |
- | Модификация NFU – '''алгоритм старения'''
| + | |
- | | + | |
- | # Значение счетчика сдвигается на 1 разряд вправо.
| + | |
- | # Значение R добавляется в крайний левый разряд счетчика.
| + | |
- | | + | |
- | = Использование в ЭВМ принципа локальности вычислений. =
| + | |
- | | + | |
- | Суть принципа локальных вычислений в том, что соседние инструкции программы, как правило, обращаются к соседним ячейкам памяти. Это можно использовать по-разному:
| + | |
- | * расслоение памяти - ускорение доступа к последовательным ячейкам
| + | |
- | * страничная организация - пока используются данные с одной страницы, не нужно менять базовый регистр. Если мы используем всего несколько локаций в памяти, то будет немного страниц, и они все поместятся в память - не нужно будет свопить
| + | |
- | * spatial reuse в cache - если мы считали cache line, то там, помимо нужной ячейки, окажутся и соседние
| + | |
- | | + | |
- | = Полностью ассоциативная кэш-память. =
| + | |
- | | + | |
- | [http://www.intuit.ru/department/hardware/csorg/9/2.html Кэш-память]
| + | |
- | | + | |
- | Для полностью ассоциативного кэша характерно, что кэш-контроллер может поместить любой блок оперативной памяти в любую строку кэш-памяти. В этом случае физический адрес разбивается на две части: смещение в блоке (строке кэша) и номер блока. При помещении блока в кэш номер блока сохраняется в теге соответствующей строки. Когда ЦП обращается к кэшу за необходимым блоком, кэш-промах будет обнаружен только после сравнения тегов всех строк с номером блока.
| + | |
- | | + | |
- | Одно из основных достоинств данного способа отображения - хорошая утилизация оперативной памяти, т.к. нет ограничений на то, какой блок может быть отображен на ту или иную строку кэш-памяти. К недостаткам следует отнести сложную аппаратную реализацию этого способа, требующую большого количества схемотехники (в основном компараторов), что приводит к увеличению времени доступа к такому кэшу и увеличению его стоимости. Intractable при размерах кэша порядка мегабайта (нужно перебирать десятки/сотни тысяч строк).
| + | |
- | | + | |
- | [[Изображение:9 1.gif]]
| + | |
- | | + | |
- | = Кэш-память с прямым отображением. =
| + | |
- | | + | |
- | Альтернативный способ отображения оперативной памяти в кэш - это кэш прямого отображения (или одновходовый ассоциативный кэш). В этом случае адрес памяти (номер блока) однозначно определяет строку кэша, в которую будет помещен данный блок. Физический адрес разбивается на три части: смещение в блоке (строке кэша), номер строки кэша и тег. Тот или иной блок будет всегда помещаться в строго определенную строку кэша, при необходимости заменяя собой хранящийся там другой блок. Когда ЦП обращается к кэшу за необходимым блоком, для определения удачного обращения или кэш-промаха достаточно проверить тег лишь одной строки.
| + | |
- | | + | |
- | Очевидными преимуществами данного алгоритма являются простота и дешевизна реализации. К недостаткам следует отнести низкую эффективность такого кэша из-за вероятных частых перезагрузок строк. Например, при обращении к каждой 64-й ячейке памяти в системе на кэш-контроллер будет вынужден постоянно перегружать одну и ту же строку кэш-памяти, совершенно не задействовав остальные.
| + | |
- | | + | |
- | [[Изображение:9 2.gif]]
| + | |
- | | + | |
- | Пример:
| + | |
- | Если объем ОЗУ – 4 Гбайт, тогда полный адрес - 32 бита можно представить в виде полей: 20 рр. – тэг (T), 7 рр – номер строки таблиц кэша (S), 5 рр – номер байта в строке (N). Поиск запрошенного байта (T-S-N) в кэше с прямым распределением производится так:
| + | |
- | # Из памяти данных и памяти тэгов кэша одновременно считываются S-ные строки.
| + | |
- | # Если содержимое считанной строки памяти тэгов равно Т – кэш попадание, это значит, что считанная S строка памяти данных кэша содержит запрашиваемый байт и его номер в строке есть N.
| + | |
- | # Если содержимое считанной строки памяти тэгов не равно Т – кэш промах, и тогда T-S строка ОЗУ переписывается в S строку памяти данных кэша, а Т записывается в S строку памяти тэгов. Затем, см по п. 1.
| + | |
- | | + | |
- | = Частично-асссоциативная кэш-память. =
| + | |
- | | + | |
- | Компромиссным вариантом между первыми двумя алгоритмами является множественный ассоциативный кэш или частично-ассоциативный кэш (рис.). При этом способе организации кэш-памяти строки объединяются в группы, в которые могут входить 2, 4, 8, и т.д. строк. В соответствии с количеством строк в таких группах различают 2-входовый, 4-входовый и т.п. ассоциативный кэш. При обращении к памяти физический адрес разбивается на три части: смещение в блоке (строке кэша), номер группы (набора) и тег. Блок памяти, адрес которого соответствует определенной группе, может быть размещен в любой строке этой группы, и в теге строки размещается соответствующее значение. Очевидно, что в рамках выбранной группы соблюдается принцип ассоциативности. С другой стороны, тот или иной блок может попасть только в строго определенную группу, что перекликается с принципом организации кэша прямого отображения. Для того чтобы процессор смог идентифицировать кэш-промах, ему надо будет проверить теги лишь одной группы (2/4/8/… строк).
| + | |
- | | + | |
- | [[Изображение:9 4.gif]]
| + | |
- | | + | |
- | = Изменение данных в кэш памяти. =
| + | |
- | | + | |
- | Стратегии обновления данных в кэш памяти.
| + | |
- | | + | |
- | '''WriteBack'''
| + | |
- | | + | |
- | В схеме обновления с обратной записью используется бит "изменения" в поле тэга. Этот бит устанавливается, если блок был обновлен новыми данными и является более поздним, чем его оригинальная копия в основной памяти. Перед тем как записать блок из основной памяти в кэш-память, контроллер проверяет состояние этого бита. Если он установлен, то контроллер переписывает данный блок в основную память перед загрузкой новых данных в кэш-память (то есть только тогда, когда уже не нужны обновленные данные в кэш и они замещаются).
| + | |
- | Обратная запись быстрее сквозной, так как обычно число случаев, когда блок изменяется и должен быть переписан в основную память, меньше числа случаев, когда эти блоки считываются и перезаписываются.
| + | |
- | Однако обратная запись имеет несколько недостатков. Во-первых, все измененные блоки должны быть переписаны в основную память перед тем, как другое устройство сможет получить к ним доступ. Во-вторых, в случае катастрофического отказа, например, отключения питания, когда содержимое кэш-памяти теряется, но содержимое основной памяти сохраняется, нельзя определить, какие места в основной памяти содержат устаревшие данные. Наконец, контроллер кэш-памяти для обратной записи содержит больше (и более сложных) логических микросхем, чем контроллер для сквозной записи. Например, когда система с обратной записью осуществляет запись измененного блока в память, то она формирует адрес записи из тэга и выполняет цикл обратной записи точно так же, как и вновь запрашиваемый доступ.
| + | |
- | | + | |
- | '''Writethrough'''
| + | |
- | | + | |
- | При обновлении кэш-памяти методом сквозной записи контроллер кэш-памяти одновременно обновляет содержимое основной памяти. Иначе говоря, основная память отражает текущее содержимое кэш-памяти. Быстрое обновление позволяет перезаписывать любой блок в кэш-памяти в любое время без потери данных. Система со сквозной записью проста, но время, требуемое для записи в основную память, снижает производительность и увеличивает количество обращений по шине (что особенно заметно с мультизадачной системе).
| + | |
- | | + | |
- | '''Буферизованная сквозная запись.'''
| + | |
- | | + | |
- | В схеме обновления с буферизованной сквозной записью любая запись в основную память буферизуется, то есть информация задерживается в кэш-памяти перед записью в основную память (схемы кэш-памяти управляют доступом к основной памяти асинхронно по отношению к работе процессора). Затем процессор начинает новый цикл до завершения цикла записи в основную память. Если за записью следует чтение, то это кэш-попадание, так как чтение может быть выполнено в то время, когда контроллер кэш-памяти занят обновлением основной памяти. Эта буферизация позволяет избежать снижения производительности, характерного для системы со сквозной записью (запись производится в тот момент, пока процессор читает из кэша и занят чем чем-то кроме обновления данных).
| + | |
- | У этого метода есть один существенный недостаток. Так как обычно буферизуется только одиночная запись, то две последовательные записи в основную память требуют цикла ожидания процессора. Кроме этого, запись с пропущенным последующим чтением также требует ожидания процессора. Состояние ожидания - это внутреннее состояние, в которое входит процессор при отсутствии синхронизирующих сигналов. Состояние ожидания используется для синхронизации процессора с медленной памятью.
| + | |
- | | + | |
- | '''Запись с размещением и без.'''
| + | |
- | | + | |
- | Предыдущие подходы описывают только случаи кэш-попадания при записи результата процессором. Однако случаи, когда обновляемые данные в КЭШе отсутствуют, также возможны. Тогда данные пишутся в ОЗУ и потом копируются в кэш. Запись без размещения – данные не копируются в кэш. Обычно при использовании стратегии WriteThru размещение не делается, а при использовании обратной записи делается – есть надежда, что не придется снова лезть в память для записи в след. раз.
| + | |
- | | + | |
- | '''Случай записи новых данных из памяти в кэш при кэш-промахе.'''
| + | |
- | | + | |
- | Для случая прямого отображения стратегия тривиальна – замещается строка, в которой может располагаться данных блок ОЗУ. Для ассоциативной организации кэша (полностью или частично) надо выбирать, какую из строк замещать новыми данными. Две стратегии: случайная или LRU (Least Recently Used) – заменяется та, которую дольше всех не использовали. Сложность – надо фиксировать все обращения к строкам кэша, чтобы вычислять наиболее неиспользуемую строку. Стоит отметить, что доли промахов с ростом кэша для случайного алгоритма уменьшаются быстрее, так что эффективность применения LRU снижается.
| + | |
- | | + | |
- | = Учет параметров кэша при программировании задач. =
| + | |
- | Cache-oblivious algorithms. Это скорее всего тема, обратная к тому, что требуется рассказать в этом вопросе.
| + | |
- | | + | |
- | Основная идея cache-oblivious алгоритмов -- достижение оптимального использования кэша на всех уровнях иерархии памяти без знания его размера.
| + | |
- | | + | |
- | == Cache-aware ==
| + | |
- | Cache-aware алгоритмы -- это алгоритмы, учитывающие параметры кеша.
| + | |
- | | + | |
- | === Структуры данных ===
| + | |
- | В современных компьютерах многоуровневая структура кэша, которая позволяет очень быстро выполнять обход массива. Попадание кэша настолько быстрая операция, что можно учитывать только промахи. Если строка кэша имеет размер B, то колличество промахов в массиве равно n/B. Если рассматривать связный список, то в худшем случае на доступ к каждому узлу будет приходится промах. Но даже в лучшем случае, когда узлы списка расположенны последовательно, из-за того, что узел у списка больше, может потребоваться в несколько раз больше кэша для прохода по списку.
| + | |
- | | + | |
- | Пусть у нас есть массив из 60 миллионов элементов и мы хотим вставить элементы в середину. Несмотря на преимущества, которые дает кэш, эта операция займет недели.
| + | |
- | Поэтому в программах, где вставка и удаление элементов является частой операцией, массивы неприменимы. Также недостатком массивов явлеется то, что они медленно увеличиваются и фрагментируют память.
| + | |
- | | + | |
- | Поэтому нужна структура, которая сочетает в себе преимущества кэша, которые дает массив, но при этом позволяет быстро вставлять элементы и увеличивать размер, как это свойственно спискам.
| + | |
- | | + | |
- | Такой структурой будет связный список маленьких массивов. А, чтобы эту структуру сделать cache-aware, нужно, чтобы каждый узел такого связного списка был размером B (т.е. размером со строку кэша).
| + | |
- | | + | |
- | === Оптимизация сортировки слиянием ===
| + | |
- | | + | |
- | Особенность Cache-aware версий алгоритма [[wikipedia:Merge sort|сортировки слиянием]] -- его операции были специально выбраны для сведения к минимуму перемещения страниц в и из кэш-памяти машины. Например, tiled алгоритм сортировки слиянием останавливает разбиение на подмассивы, когда размер подмассива становится равным S, где S -- это колличествр элементов данных, которые можно разместить на одной странице в памяти. Каждый из этих подмассивов сортируется сортировкой для которой не требуется дополнительной памяти, чтобы избежать подкачки, отсортированние подмассивы сортируются обычным слиянием.
| + | |