Современная ЭВМ представляет собой комплекс автономных устройств, каждое из которых выполняет свои функции под управлением местного устройства управления независимо oi других устройств машины. Устройство включается в работу центральным процессором (ЦП). Он передает устройству команду и все необходимые для ее исполнения параметры. После начала работы устройства центральный процессор отключается от него и переходит к обслуживанию других устройств или к выполнению других функций.
Можно считать, что центральный процессор переключает свое внимание с устройства на устройство и с функции на функцию. На что именно обращено внимание ЦП в каждый данный момент, определяется выполняемой им программой.
Во время работы в ЦП поступает (и вырабатывается в нем самом) большое количество различных сигналов. Сигналы, которые выполняемая в ЦП программа способна воспринять, обработать и учесть, составляют поле зрения ЦП или, другими словами, входят в зону его внимания.
Например, если процессором исполняется программа сложения двух двойных слов, которая анализирует регистр флагов ЦП, то в ее «поле зрения» находятся флаги микропроцессора, определяющие знаки исходных данных и результата, наличие переноса из тетрады или байта, переполнения разрядной сетки и др. Такая программа готова реагировать на любой из сигналов, находящихся в ее зоне внимания (а поскольку именно программа управляет работой ЦП, то она определяет и «зону внимания» центрального процессора). Но если во время выполнения такой программы нажать какую-либо клавишу, то эта программа «не заметит» сигнала от этой клавиши, так как он не входит в ее «поле зрения».
AVR 11# Прерывания
Для того чтобы ЦП, выполняя свою работу, имел возможность реагировать на события, происходящие вне его зоны внимания, и наступления которых он «не ожидает», существует система прерываний ЭВМ. При отсутствии системы прерываний все заслуживающие внимания события должны находиться в поле зрения процессора, что сильно усложняет программы и требует большой их избыточности. Кроме того, поскольку момент наступления события заранее неизвестен, процессор в ожидании какого-либо события может находиться длительное время, и, чтобы не пропустить его появления, ЦП не может «отвлекаться» на выполнение другой работы. Такой режим работы (режим сканирования ожидаемого события) связан с большими потерями времени ЦП на ожидание.
Кроме сокращения потерь на ожидание, режим прерываний позволяет организовать выполнение такой работы, которую без него реализовать просто невозможно. Например, при появлении неисправностей, нештатных ситуаций режим прерываний позволяет организовать, работу по диагностике и автоматическому восстановлению в момент возникновения нештатной ситуации, прервав выполнение основной работы таким образом, чтобы сохранить полученные к этому времени правильные результаты. Тогда как без режима прерываний обратить внимание на наличие неисправности система могла только после окончания выполняемой работы (или ее этапа) и получения неправильного результата.
Лекция 11: Прерывания
Таким образом, система прерываний позволяет микропроцессору выполнять основную работу, не отвлекаясь на проверку состояния сложных систем при отсутствии такой необходимости, или прервать выполняемую работу и переключиться на анализ возникшей ситуации сразу после ее появления.
Помимо требующих внимания нештатных ситуаций, которые могут возникнуть при работе микропроцессорной системы, процессору полезно уметь «переключать внимание» и на различные виды работ, одновременно выполняемые в системе. Поскольку управление работой системы осуществляется программой, этот вид прерываний должен формироваться программным путем.
В зависимости от места нахождения источника прерываний они могут быть разделены на: внутренние (программные и аппаратные) и внешние прерывания (поступающие в ЭВМ от внешних источников, например от клавиатуры или модема).
Принцип действия системы прерываний заключается в следующем: при выполнении программы после каждого рабочего такта микропроцессора изменяется содержимое регистров, счетчиков, состояние отдельных управляющих триггеров, т.е. изменяется состояние процессора. Информация о состоянии процессора лежит в основе многих процедур управления вычислительным процессом. Не вся информация одинаково актуальна, есть существенные элементы, без которых невозможно продолжение работы. Эта информация должна сохраняться при каждом «переключении внимания процессора».
Совокупность значений наиболее существенных информационных элементов называется вектором состояния или словом состояния процессора (в некоторых случаях оно называется словом состояния программы),
Вектор состояния в каждый момент времени должен содержать информацию, достаточную для продолжения выполнения программы или повторного пуска ее с точки, соответствующей моменту формирования данного вектора.
Вектор состояния формируется в соответствующем регистре процессора или в группе регистров, которые могут использоваться и для других целей.
Наборы информационных элементов, образующих векторы состояния, отличаются у ЭВМ разных типов. В IBM PC вектор состояния включает содержимое счетчика команд, сегментных регистров, регистра флагов и аккумулятора (регистра АХ).
При возникновении события, требующего немедленной реакции со стороны машины, ЦП прекращает обработку текущей программы и переходит к выполнению другой программы, специально предназначенной для данного события, по завершении которой возвращается к выполнению отложенной программы. Такой режим работы называется прерыванием.
Каждое событие, требующее прерывания, сопровождается специальным сигналом, который называется запросом прерывания. Программа, затребованная запросом прерывания, называется обработчиком прерывания.
Запросы на прерывание могут возникать из-за сбоев в аппаратуре (зафиксированных схемами контроля), переполнения разрядной сетки, деления на нуль, выхода за установленные для данной программы области памяти, затребования периферийным устройством операции ввода-вывода, завершения операции ввода-вывода или возникновения при этой операции особых условий и т.д.
Некоторые из этих запросов порождаются самой программой, но время их возникновения невозможно предсказать заранее.
При наличии нескольких источников запросов прерывания часть из них может поступать одновременно. Поэтому в ЭВМ устанавливается определенный порядок (дисциплина) обслуживания поступающих запросов. Кроме того, в ЭВМ предусматривается возможность разрешать или запрещать прерывания определенных видов.
ПЭВМ IBM PC может выполнять 256 различных прерываний, каждое из которых имеет свой номер (двухразрядное шестнадцатеричное число).
Все прерывания делятся на две группы: прерывания с номера OOh по номер IFh называются прерываниями базовой системы ввода-вывода (BIOS — Basic Input-Output System); прерывания с номера 20h no номер FFh называются прерываниями DOS. Прерывания DOS имеют более высокий уровень организации, чем прерывания BIOS, они строятся на использовании модулей BIOS в качестве элементов.
Прерывания делятся на три типа: аппаратные, логические и программные.
Аппаратные прерывания вырабатываются устройствами, требующими внимания микропроцессора: прерывание № 2 — отказ питания; № 8 — от таймера; № 9 — от клавиатуры; № 12 — от адаптера связи; № 14 — от НГМД; № 15 — от устройства печати и др.
Запросы на логические прерывания вырабатываются внутри микропроцессора при появлении «нештатных» ситуаций: прерывание № 0 — при попытке деления на 0; № 4 — при переполнении разрядной сетки арифметико-логического устройства; № 1 — при переводе микропроцессора в пошаговый режим работы; № 3 — при достижении программой одной из контрольных точек. Последние два прерывания используются отладчиками программ для организации пошагового режима выполнения программ (трассировка) и для остановки программы в заранее намеченных контрольных точках.
Запрос на программное прерывание формируется по команде «INT п», где п — номер вызываемого прерывания. Запрос на аппаратное или логическое прерывание вырабатывается в виде специального электрического сигнала.
Дата добавления: 2017-01-26 ; просмотров: 2973 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ
Источник: poznayka.org
Общая организация системы прерываний
Появление системы прерывания в компьютерах конца 50-х годов позволило существенно продвинуться в разработках ЭВМ, по-новому переосмыслив их возможности и среды применения. Действительно, уже на первых ЭВМ, обладающих этим свойством, появилась возможность автономной работы устройств ввода-вывода после их запуска центральным процессором. По окончании работы или в связи с другой причиной устройство ввода-вывода могло через прерывание заставить центральный процессор обратить на себя внимание. Это открыло путь к широкому совмещению операций, что повлекло за собой естественное усложнение математического обеспечения. Современные операционные системы полностью разрабатываются и базируются на развитой системе прерываний.
Суть работы любой системы прерываний сводится к следующему. При возникновении события, требующего немедленной реакции со стороны ЭВМ, ЦП прекращает обработку текущей программы и переходит к выполнению другой программы, специально предназначенной для данного события, по завершении которой возвращается к выполнению отложенной программы. Такой режим работы называется прерыванием.
Каждое событие, требующее прерывания, сопровождается специальным сигналом, который называется запросом прерывания (ЗП). Программа, затребованная запросом прерывания, называется обработчиком прерыванияили прерывающей программой. Каждому запросу прерывания в ЭВМ присваивается свой номер(тип прерывания), используемый для определения адреса обработчика прерывания.
Запросы на прерывание могут возникать из-за сбоев в аппаратуре, зафиксированных схемами контроля, переполнения разрядной сетки, деления на нуль, выхода за установленные для данной программы области памяти, затребования внешним устройством операции ввода-вывода, завершения этой операции ввода-вывода или возникновения при этой операции особых условий и т.д. Некоторые из этих запросов порождаются самой программой, но время их возникновения невозможно предсказать заранее.
По окончании работы обработчика прерывания переход может быть осуществлен либо к прерванной программе, либо к другой прерывающей программе. Так как всевозможные запросы на прерывание вырабатываются независимо и асинхронно, то возможны такие ситуации:
· приход запросов последовательный;
· одновременный приход нескольких запросов;
· приход запроса во время выполнения обработчика прерывания.
Поступившие запросы должны обрабатываться в определенном порядке. Если в ЭВМ имеются средства для обслуживания запросов в порядке присвоенного им приоритета, то такие системы прерывания называются приоритетными.
Прерывания можно разделить на аппаратные, логические и программные.
Аппаратные прерывания вырабатываются аппаратурой ЭВМ или устройствами ввода-вывода с целью переключить внимание процессора на обработку того или иного внешнего события. Примерами аппаратных прерываний могут служить сигнал о сбое питания, сигналы от внешних устройств – клавиатуры, модема, принтера и др. Запросы прерываний от ВУ поступают в ЦП по специальным линиям.
Запросы на логические прерывания вырабатываются внутри процессора при появлении исключительных ситуаций: при попытке деления на ноль, при переполнении разрядной сетки арифметико-логического устройства, при нарушении защиты памяти; при достижении программой одной из контрольных точек и т.п. Общим для аппаратных и логических прерываний является то, что запрос на них вырабатывается в виде специального электрического сигнала. Аппаратные и логические прерывания определенных типов могут быть запрещены в определенные моменты времени, т.е. запрос на прерывание запрещенного типа будет проигнорирован системой. Запрещенные в данный момент времени прерывания называются замаскированными.
Программные прерывания вырабатываются самой программой путем выполнения специальной команды вызова прерывания. Программные прерывания используются для обращения прикладной программы к сервисным функциям операционной системы (чтение-запись файла, взаимодействие с различными устройствами ввода-вывода, межпроцессное взаимодействие и т.п.).
При выполнении программы после каждого рабочего такта процессора изменяются содержимое регистров, счетчиков, состояние отдельных управляющих триггеров, т.е. изменяется состояние процессора. Информация о состоянии процессора лежит в основе многих процедур управления вычислительным процессом. Например, важнейшим элементом является значение программного счетчика, определяющее адрес следующей команды выполняемой программы. Информация, без которой невозможно продолжение работы процессора, должна сохраняться при каждом переключении процессора с прерываемой программы на обработчик прерывания и обратно.
Совокупность значений наиболее существенных информационных элементов называется вектором состоянияили словом состояния процессора — ССП(в некоторых случаях ССП называют словом состояния программы).
ССП в каждый момент времени должно содержать информацию, достаточную для продолжения выполнения программы или повторного пуска ее с точки, соответствующей моменту формирования данного вектора. ССП формируется в соответствующем регистре процессора или в группе регистров, которые могут использоваться и для других целей. ССП, как минимум, включает в себя текущие значения программного счетчика и регистра флагов программы.
При поступлении запроса прерывания ЭВМ выполняет следующую последовательность действий:
1. Определение наиболее приоритетного незамаскированного запроса на прерывание (если одновременно поступило несколько запросов);
2. Определение типа выбранного запроса;
3. Сохранение слова состояния текущей (прерываемой) программы;
4. Определение адреса обработчика прерывания и передача управления первой команде этого обработчика;
5. Выполнение программы-обработчика прерывания;
6. Восстановление сохраненного ССП прерванной программы;
7. Продолжение выполнения прерванной программы.
Этапы 1-4 выполняются аппаратными средствами ЭВМ автоматически при появлении запроса прерывания. Этап 6 также выполняется аппаратно по команде возврата из обработчика прерывания. Обработчик прерывания, как и любая другая программа, пишется человеком-программистом. Как правило, эта программа должна начинаться с сохранения состояния тех регистров ЯП, которые будут ею изменяться и заканчивается восстановлением состояния этих регистров. Завершается она специальной командой, указывающий ЦП на необходимость возврата в прерванную программу.
Рис. 2.8. Временная диаграмма прерывания
Рассмотрим временную диаграмму прерывания (рис. 2.8). Запрос прерывания приходит в некоторый момент работы прерываемой программы.
Как бы ни была организована система прерываний в ЭВМ, между поступлением запроса прерывания и началом выполнения программы-обработчика прерывания неизбежно проходит некоторое время tр, называемое временем реакциисистемы прерываний. Время реакции определяется для запроса прерывания, имеющего наивысший приоритет. Прежде чем обработчик прерывания приступит непосредственно к обработке, он должен обеспечить полноценное восстановление прерываемой программы.
Общее время tо выполнения программы-обработчика прерывания складывается из следующих составляющих:
· времени tс сохранения слова состояния прерываемой программы, другой информации, необходимой для ее продолжения, а также тех регистров, значения которых будут изменяться программой-обработчиком прерывания;
· времени tп исполнения так называемых «полезных» команд, т.е. тех команд, с помощью которых непосредственно происходит обработка события, вызвавшего прерывание;
· времени tв восстановления слова состояния прерываемой программы и прочей сохраненной информации.
Кроме указанных временных характеристик часто выделяют время обслуживания прерывания tобс – разность между полным временем выполнения прерывающей программы (tо) и временем выполнения всех полезных команд, т.е. tобс = tс + tв.
Под глубиной прерывания понимают максимальное число программ, которые могут прерывать друг друга. Возможны случаи:
· только один запрос воспринимается системой;
· глубина прерывания фиксирована (n);
· программы могут сколько угодно раз прерывать друг друга.
Очевидно, что чем больше глубина прерывания, тем с большей эффективностью можно организовать приоритетное обслуживание. Так, если при глубине прерывания nво время обработки n-го запроса пришел n+1-й запрос, то он будет принят к исполнению только после обработки n-го прерывания, даже если n+1-й запрос имеет наивысший приоритет.
Если время реакции tp или время обработки запроса tо настолько велики, что запрос окажется необслуженным к моменту прихода нового запроса того же типа, то возникает явление, называемое насыщением системы прерывания. В этом случае очередной запрос того или иного типа может быть утрачен. Параметры системы прерываний должны быть согласованы таким образом, чтобы насыщение системы не наступило.
Рассмотрим последовательность действий системы прерываний по обработке поступившего запроса более подробно.
Источник: www.megapredmet.ru
Организация системы прерывания программ
Во время выполнения микропроцессором текущей программы внутри системы и связанной с ней внешней среде (например, в технологическом процессе, управляемом МП системой) могут возникать события, требующие немедленной реакции на них со стороны микропроцессора.
Реакция состоит в том, что микропроцессор прерывает обработку текущей программы и переходит к выполнению некоторой другой программы, специально предназначенной для данного события. По завершению этой программы микропроцессор возвращается к выполнению прерванной программы. Рассмотренный процесс называется прерыванием программы.
Каждое событие, требующее прерывание программы, сопровождается сигналом, оповещающим микропроцессор, который называется запросом прерывания (). Программа, затребованная запросом прерывания, называется прерывающей программой.
Чтобы микропроцессорная система могла реализовать прерывания программ ей необходимо иметь соответствующие аппаратные и программные средства, совокупность которых получила название системы прерывания программ или контроллера прерываний.
Основное назначение системы прерывания – это автоматическое прерывание программ с целью увеличения его скорости переключения.
Основными функциями системы прерывания являются: запоминание состояния прерываемой программы, идентификация прерывающего устройства и осуществления перехода к прерывающей программе, а также восстановление состояния прерванной программы и возврат к ней.
Практически в каждом микропроцессоре реализована особая структура системы прерываний, а программируемые БИС управления прерываниями еще более увеличивают число разновидностей этой структуры.
Однако общая последовательность реакции различных микропроцессоров на сигнал прерывания примерно одинакова и содержит следующие действия:
— устройство генерирует сигнал прерывания, который подается на вход прерывания микропроцессора (INT); на этой линии по схеме ИЛИ объединяются запросы всех устройств, работающих в режиме прерывания;
— микропроцессор завершает текущую команду и, если прерывания разрешены (не замаскированы), формируют сигнал INTA подтверждения прерывания; до получения этого сигнала устройство сохраняет активный уровень сигнала INT;
— осуществляется запоминание содержимого программного счетчика и некоторых РОН в стеке;
— микропроцессор идентифицирует прерывающее устройство для перехода к соответствующей подпрограмме обслуживания;
— выполняется короткая (30-50 байт) подпрограмма обслуживания прерывания, в которой запрограммированы действия по передаче данных, модификации указателей, проверке окончания операций ввода-вывода и др.;
— восстанавливается состояние прерванной программы, для чего запомненное содержимое регистров извлекаются из стека;
— возобновляется выполнение прерываемой программы; это действие инициируется командой возврата из прерывания, являющейся последней командой подпрограммы обслуживания прерывания.
При наличии нескольких источников запросов прерывания между запросами должны быть установлены приоритетные соотношения, определяющие, какой из нескольких поступающих запросов подлежит обработке в первую очередь, и устанавливающие, имеет право или нет, данный запрос прерывать ту или иную программу.
Для оценки эффективности систем прерывания могут быть использованы следующие характеристики.
Время реакции — время между появлением сигнала прерывания и началом выполнения прерывающей программы (включая время выполнения цикла прерывания микропроцессора).
Время обслуживания есть сумма времени, затраченной на сохранение состояния прерванной программы, и времени на возврат к ней:
Глубина прерывания – максимальное число программ, которые могут прерывать друг друга. Если после перехода к прерывающей программе и вплоть до ее окончания прием других запросов прерываний запрещен, то система имеет глубину прерывания равную 1. Глубина равна , если допускается последовательное прерывание до программ. Глубина прерываний обычно совпадает с числом уровней приоритета в системе прерываний.
Если время реакции системы прерываний настолько велико, что запрос оказывается не обслуженным до момента прихода нового запроса от того же источника, то возникает насыщение системы прерывания. В этом случае предыдущий запрос прерывания от данного источника будет системой утрачен. Быстродействие микропроцессора, логические возможности системы прерывания и количество источников прерывания должны быть согласованы таким образом, чтобы насыщение было невозможным.
Число уровней (классов) прерывания – совокупность запросов, инициирующих одну и ту же прерывающую программу.
Существуют два основных вида прерывания: программное прерывание и аппаратное прерывание.
Программное прерывание реализуется введением специальных команд прерывания в систему команд процессора. Введение таких специальных команд позволяет создавать гибкие и мощные программные средства (например, операционные системы).
Аппаратные прерывания могут инициироваться как операционными блоками микропроцессора, так и устройствами внешними по отношению к нему. Аппаратные прерывания подразделяются на маскируемые прерывания и немаскируемые прерывания.
Маскируемые прерывания реализуется только при условии разрешения прерывания. Процессор реагирует на запросы маскируемых прерываний по линии INT, если установлен внутренний триггер разрешения прерываний INTE, называемой также маской. На рисунке 1.7 приведена функциональная внутренняя схема прерываний.
Рисунок 1.7. Внутренняя схема прерываний
Состояние триггера разрешения прерывания INTE идентифицируется выходным сигналом разрешения прерывания с такой же мнемоникой INTE. Если INTE=0, прерывания запрещены (замаскированы) и процессор не реагирует на сигнал INT=1. С помощью команд разрешения EI и запрещения DI прерываний можно программно управлять состоянием триггера INTE, и пользователь может защитить от прерываний критические сегменты прикладной программы.
При восприятии прерывания триггер прерывания IFF переводиться в нулевое состояние, что приводит к запрещению инкремента программного счетчика и генерированию сигнала подтверждения прерывания INTA.
При этом сбрасывается триггер INTE и в дальнейшем разрешить прерывание можно только командой EI. Для программного управления ПУ в их регистрах управления и состояния предусмотрен специальный бит INTEN разрешения прерывания (маска). Иногда биты масок всех устройств объединяются в специальный регистр. Наконец, в некоторых микропроцессорах бит маскирования прерывания входит в слово состояния процессора PSW.
Немаскируемые прерывания реализуют режим безусловного прерывания. Микропроцессор воспринимает запросы прерывания независимо от того, в каком состоянии находится триггер разрешения прерывания. Эти прерывания должны отражать ситуации, в которых желательно немедленное прерывание (например, ошибка аппаратуры контроля, уменьшение напряжения сети до критического уровня и т.д.).
Одним из распространенных способов организации системы прерывания является векторное приоритетное прерывание. Этот способ реализуется с помощью дополнительных аппаратных средств в виде интерфейсных БИС, которые называются контроллерами прерываний.
Система прерывания при такой организации имеет несколько уровней прерываний (линий запросов прерываний), к которым могут подключаться различные устройства, причем каждый уровень имеет свой вектор прерывания.
Для реализации векторного приоритетного прерывания необходимо распределить приоритеты между уровнями и обеспечить механизм взаимодействия подпрограмм обслуживания прерывания соответствующих уровней.
Распределение приоритетов между уровнями могут реализовываться различными способами.
Одним из этих способов является векторное прерывание с фиксированным приоритетом. Каждому уровню (входу) запросов прерывания присваивается фиксированный приоритет в порядке возрастания. Запрос с более высоким приоритетом прерывает обслуживание прерывания с меньшим приоритетом.
Вторым способом является векторное прерывание с циклическим приоритетом. Каждому входу, как и в предыдущем случае, присваивается фиксированный приоритет. После запроса прерывания и выполнения соответствующей подпрограммы обслуживания приоритеты изменяются в круговом порядке таким образом, что последний обслуженный вход будет иметь низший приоритет.
Этот способ характерен для таких применений, в которых устройства имеют одинаковый приоритет и ни одному из них нельзя отдать предпочтения.
Реализация векторного прерывания с адресуемым приоритетом аналогична второму способу, но допускает программное определение уровня запросов прерывания, которому назначается низший приоритет.
Запрещение прерывания на время обслуживания любого устройства может привести к потере запросов прерываний высокоприоритетных устройств, появляющихся при обслуживании устройств с меньшими приоритетами. Для исключения такой ситуации возникает необходимость использования механизма вложения прерываний, который позволит обеспечить взаимодействие подпрограмм обслуживания соответствующих уровней между собой.
Прерывание подпрограмм обслуживания прерываний называется вложенным прерыванием.
Для того чтобы процессор реагировал на запросы прерываний в начале каждой подпрограммы обслуживания их необходимо разрешать командой EI.
Для организации вложенных прерываний в каждой подпрограмме обслуживания прерываний необходимо выполнить следующие действия:
— временно запомнить приоритет прерванной программы;
— загрузить в схему приоритетных прерываний новый текущий приоритет;
— собственно обслужить прерывание;
— восстановить прежний приоритет;
— возобновить прерванную программу с помощью команды RTI.
При определении приоритета прерывания программ различают два его значения: приоритет между запросами прерывания и приоритет между прерывающими программами.
Приоритет между запросами прерываний устанавливает очередность восприятия запросов, поступивших одновременно от различных уровней. Такой приоритет может быть реализован способами, которые указаны выше при организации векторного приоритетного прерывания.
Приоритет между прерывающими программами устанавливает старшинство в выполнении прерывающих программ разных уровней. Он определяет фактический порядок, в котором программы будут использоваться. Обычно этот приоритет реализуется как программно — управляемый на основе маски прерывания.
Маска прерывания представляет собой двоичный код, разряды которого поставлены в соответствие уровням или источникам прерывания. Маска загружается командой программы в регистр маски. Состояние «1» в данном разряде регистра маски разрешает, а «0» запрещает (маскирует) прерывание текущей программы от запросов соответствующего уровня или источника прерывания.
Порядок расположения разрядов в регистре маски и нумерация уровней не имеют значения. Для каждой прерывающей программы может быть установлена своя маска. И, наконец, программа, изменяя биты в регистре маски, может устанавливать произвольные приоритетные соотношения между уровнями с любыми номерами без коммутации линий, по которым поступают запросы прерывания.
Таким образом, используя различные виды и способы организации прерываний, можно строить гибкие в то же время сложные системы многоуровневых прерываний, которые позволят подключать значительное число периферийных устройств с различным быстродействием.
Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:
Источник: studopedia.ru