Организация обработки прерываний в ЭВМ
Прерывание - это прекращение выполнения текущей команды или текущей последовательности команд для обработки некоторого события специальной программой - обработчиком прерывания, с последующим возвратом к выполнению прерванной программы. Событие может быть вызвано особой ситуацией, сложившейся при выполнении программы, или сигналом от внешнего устройства. Прерывание используется для быстрой реакции процессора на особые ситуации, возникающие при выполнении программы и взаимодействии с внешними устройствами.
Механизм прерывания обеспечивается соответствующими аппаратно-программными средствами компьютера.
Любая особая ситуация, вызывающая прерывание, сопровождается сигналом, называемым запросом прерывания (ЗП). Запросы прерываний от внешних устройств поступают в процессор по специальным линиям, а запросы, возникающие в процессе выполнения программы, поступают непосредственно изнутри микропроцессора. Механизмы обработки прерываний обоих типов схожи. Рассмотрим функционирование компьютера при появлении сигнала запроса прерывания, опираясь в основном на обработку аппаратных прерываний (рис. 14.1).
Рис. 14.1. Выполнение прерывания в компьютере: tр - время реакции процессора на запрос прерывания; tс - время сохранения состояния прерываемой программы и вызова обработчика прерывания; tв - время восстановления прерванной программы
После появления сигнала запроса прерывания ЭВМ переходит к выполнению программы - обработчика прерывания. Обработчик выполняет те действия, которые необходимы в связи с возникшей особой ситуацией. Например, такой ситуацией может быть нажатие клавиши на клавиатуре компьютера. Тогда обработчик должен передать код нажатой клавиши из контроллера клавиатуры в процессор и, возможно, проанализировать этот код. По окончании работы обработчика управление передается прерванной программе.
Время реакции - это время между появлением сигнала запроса прерывания и началом выполнения прерывающей программы (обработчика прерывания) в том случае, если данное прерывание разрешено к обслуживанию.
Время реакции зависит от момента, когда процессор определяет факт наличия запроса прерывания. Опрос запросов прерываний может проводиться либо по окончании выполнения очередного этапа команды (например, считывание команды, считывание первого операнда и т.д.), либо после завершения каждой команды программы.
Первый подход обеспечивает более быструю реакцию, но при этом необходимо при переходе к обработчику прерывания сохранять большой объем информации о прерываемой программе, включающей состояние буферных регистров процессора, номера завершившегося этапа и т.д. При возврате из обработчика также необходимо выполнить большой объем работы по восстановлению состояния процессора.
Во втором случае время реакции может быть достаточно большим. Однако при переходе к обработчику прерывания требуется запоминание минимального контекста прерываемой программы (обычно это счетчик команд и регистр флагов). В настоящее время в компьютерах чаще используется распознавание запроса прерывания после завершения очередной команды.
Время реакции определяется для запроса с наивысшим приоритетом.
Глубина прерывания - максимальное число программ, которые могут прерывать друг друга. Глубина прерывания обычно совпадает с числом уровней приоритетов, распознаваемых системой прерываний. Работа системы прерываний при различной глубине прерываний (n) представлена на рис. 14.2. Здесь предполагается, что с увеличением номера запроса прерывания увеличивается его приоритет.
Рис. 14.2. Работа системы прерываний при различной глубине прерываний
Без учета времени реакции, а также времени запоминания и времени восстановления:
t11+t12=t1,
t21+t22=t2.
Прерывания делятся на аппаратные и программные [4]
Аппаратныепрерывания используются для организации взаимодействия с внешними устройствами. Запросы аппаратных прерываний поступают на специальные входы микропроцессора. Они бывают:
1. маскируемые, которые могут быть замаскированы программными средствами компьютера;
2. немаскируемые, запрос от которых таким образом замаскирован быть не может.
Программныепрерывания вызываются следующими ситуациями:
1. особый случай, возникший при выполнении команды и препятствующий нормальному продолжению программы (переполнение, нарушение защиты памяти, отсутствие нужной страницы в оперативной памяти и т.п.);
2. наличие в программе специальной команды прерывания INT n, используемой обычно программистом при обращениях к специальным функциям операционной системы для ввода-вывода информации.
Каждому запросу прерывания в компьютере присваивается свой номер (тип прерывания), используемый для определения адреса обработчика прерывания.
При поступлении запроса прерывания компьютер выполняет следующую последовательность действий:
1. определение наиболее приоритетного незамаскированного запроса на прерывание (если одновременно поступило несколько запросов);
2. определение типа выбранного запроса;
3. сохранение текущего состояния счетчика команд и регистра флагов;
4. определение адреса обработчика прерывания по типу прерывания и передача управления первой команде этого обработчика;
5. выполнение программы - обработчика прерывания;
6. восстановление сохраненных значений счетчика команд и регистра флагов прерванной программы;
7. продолжение выполнения прерванной программы.
Этапы 1-4 выполняются аппаратными средствами ЭВМ автоматически при появлении запроса прерывания. Этап 6 также выполняется аппаратно по команде возврата из обработчика прерывания.
Задача программиста - составить программу - обработчик прерывания, которая выполняла бы действия, связанные с появлением запроса данного типа, и поместить адрес начала этой программы в специальной таблице адресов прерываний. Программа-обработчик, как правило, должна начинаться с сохранения состояния тех регистров процессора, которые будут ею изменяться, и заканчиваться восстановлением состояния этих регистров. Программа-обработчик должна завершаться специальной командой, указывающей процессору на необходимость возврата в прерванную программу.
Прямой доступ к памяти (Direct Memory Access, DMA) – существеннейшая часть любой современной компьютерной архитектуры. DMA позволяет процессору делегировать другим компонентам задачи интенсивного доступа к памяти. Таким образом процессор освобождается от этих простых задач и может больше времени уделить сложным задачам, для которых он и предназначен.
Например, предположим, что вам понадобится сохранить эту статью на жестком диске. Если вы решили так поступить, и знаете место на диске, куда нужно записать статью, зачем вам нужен процессор? Вы ведь не производите никаких расчетов? Не считая индикации прогресса или одновременного обновления файловой системы, больше ведь ничего и не происходит. Данные забираются вашей сетевой картой, потом они направляются в требуемое место на вашем жестком диске. Все просто. Использование возможностей процессора для такого типа операций было бы излишеством.
Хотя основная идея и основная причина обращения к режиму прямого доступа к памяти довольна проста, операции прямого доступа к памяти могут оказаться довольно сложными. Можно себе представить, что будет происходить, если несколько периферийных устройств попытаются получить доступ к памяти одновременно. Поэтому есть необходимость в DMA-контроллере. DMA-контроллер – это устройство, контролирующее все операции по прямому доступу к памяти.
Чтобы контролировать операции прямого доступа к памяти, DMA-контроллер сначала нужно запрограммировать информацией о следующей операции. Эта информация включает в себя такие вещи как: адреса источника и приемника, режим работы и объем передаваемых данных. После этого у DMA-контроллера появляется знание о том, что передавать, куда передавать, как передавать и сколько передавать. Имея такую информацию, DMA-контроллер запрашивает контроль над памятью у ЦП. Когда ЦП готов передать контроль над шиной памяти, он отправляет оповещающий сигнал в ответ на запрос DMA-контроллера.
19.
При решении задач может возникнуть необходимость повторить одни и те же действия несколько или множество раз. В программировании блоки кода, которые требуется повторять не единожды, оборачиваются в специальные конструкции – циклы. У циклов выделяют заголовок и тело. Заголовок определяет, до каких пор или сколько раз тело цикла будет выполняться. Тело содержит выражения, которые выполняются, если в заголовке цикла выражение вернуло логическую истину (True, не ноль). После того как достигнута последняя инструкция тела, поток выполнения снова возвращается к заголовку цикла. Снова проверяется условие выполнения цикла. В зависимости от результата тело цикла либо повторяется, либо поток выполнения переходит к следующему выражению после всего цикла.
В языке программирования Паскаль существует три вида циклических конструкций.
Цикл for
Часто цикл for называют циклом со счетчиком. Этот цикл используется, когда число повторений не связано с тем, что происходит в теле цикла. Т.е. количество повторений может быть вычислено заранее (хотя оно не вычисляется).
В заголовке цикла указываются два значения. Первое значение присваивается так называемой переменной-счетчику, от этого значения начинается отсчет количества итераций (повторений). Отсчет идет всегда с шагом равным единице. Второе значение указывает, при каком значении счетчика цикл должен остановиться. Другими словами, количество итераций цикла определяется разностью между вторым и первым значением плюс единица. В Pascal тело цикла не должно содержать выражений, изменяющих счетчик.
Цикл for существует в двух формах:
for счетчик:=значение to конечное_значение do тело_цикла; for счетчик:=значение downto конечное_значение do тело_цикла;Счетчик – это переменная любого из перечисляемых типов (целого, булевого, символьного, диапазонного, перечисления). Начальные и конечные значения могут быть представлены не только значениями, но и выражениями, возвращающими совместимые с типом счетчика типы данных. Если между начальным и конечным выражением указано служебное слово to, то на каждом шаге цикла значение параметра будет увеличиваться на единицу. Если же указано downto, то значение параметра будет уменьшаться на единицу.
Количество итераций цикла for известно именно до его выполнения, но не до выполнения всей программы. Так в примере ниже, количество выполнений цикла определяется пользователем. Значение присваивается переменной, а затем используется в заголовке цикла. Но когда оно используется, циклу уже точно известно, сколько раз надо выполниться.
var i, n: integer; begin write ('Количество знаков: '); readln (n); for i := 1 to n do write ('(*) '); readlnend.Цикл while
Цикл while является циклом с предусловием. В заголовке цикла находится логическое выражение. Если оно возвращает true, то тело цикла выполняется, если false – то нет.
Когда тело цикла было выполнено, то ход программы снова возвращается в заголовок цикла. Условие выполнения тела снова проверяется (находится значение логического выражения). Тело цикла выполнится столько раз, сколько раз логическое выражение вернет true. Поэтому очень важно в теле цикла предусмотреть изменение переменной, фигурирующей в заголовке цикла, таким образом, чтобы когда-нибудь обязательно наступала ситуация false. Иначе произойдет так называемое зацикливание, одна из самых неприятных ошибок в программировании.
var i, n: integer; begin write ('Количество знаков: '); readln (n); i := 1; while i <= n do begin write ('(*) '); i := i + 1 end; readlnend.Цикл repeat
Цикл while может не выполниться ни разу, если логическое выражение в заголовке сразу вернуло false. Однако такая ситуация не всегда может быть приемлемой. Бывает, что тело цикла должно выполниться хотя бы один раз, не зависимо оттого, что вернет логическое выражение. В таком случае используется цикл repeat – цикл с постусловием.
В цикле repeat логическое выражение стоит после тела цикла. Причем, в отличие от цикла while, здесь всё наоборот: в случае true происходит выход из цикла, в случае false – его повторение.
var i, n: integer; begin write ('Количество знаков: '); readln (n); i := 1; repeat write ('(*) '); i := i + 1 until i > n; readlnend.20.
Локальная вычислительная сеть – вычислительная система, состоящая из нескольких ПК или устройств, размещенных на небольшом расстоянии друг от друга, соединенных между собой и имеющих возможность обмена информацией.
Цель использования ЛВС обеспечение следующих возможностей:
- Совместное использование данных несколькими пользователями и обмен их
- Совместное использование периферийных оборудований
- Эффективная координация действий пользователей
- Эффективное управления системы, обеспечивающих безопасность данных
Сервер – компьютер, который предоставляет данные и устройства другим компьютеров сети
Клиент – компьютер, который использует данные устройств другой сети
Трафик – объем информации, предоставляемый в ЛВС от одного ПК к другому
ЛВС (одноранговые сети, сети с выделенными серверами)
В одноранговой сети все ПК равноправны, каждый ПК является и сервером и клиентом одновременно.
Сеть с выделенным сервером имеет компьютер, который играет роль только сервера.
Кроме того на сервер возлагается ответственность на право управления работой сети, включением, управлением за доступом и обеспечением безопасности данных.
Функции серверов:
- Управление доступом пользователей к файлам
- Управление принтерами
- Управление приложениями
- Управление электронной почтой
- Взаимодействие между данными ЛВС и клиентами
На сервер устанавливается специальное ПО [сетевая ос], которая обеспечивает выполнение сервером своих функций и общее управление ЛВС.
Для соединения ПК в сети используется электронный кабель, кабель из стекловолокна (для передачи оптических сигналов), радиосредства, оптоволокно
Топология – физическое расположение компьютера или схема расположения соединения или сетевых устройств.
Топология влияет на состав сетевого оборудования, его характеристики и способы управления.
Шина имеет общий кабель (магистраль) к которому при помощи отрезков кабеля непосредственно подключается ПК.
Каждый компьютер в кольце подсоединен к двум соседним.
В звезде все ПК подключены к центральному устройству называемому концентратором [хабом]. Он бывает активным (усиливает приходящий сигнал) и пассивными (просто пропускает канал через себя).
При топологии типа шина только один компьютер в каждый момент времени может вести передачу данных, причем эти данные имеют адрес 1, остальные компьютеры видят, что шина занята. Таким образом с ростом числа компьютеров в сети скорость передачи информации снижается.
При топологии типа кольцо , время действия компьютеров увеличивается. Маркер –короткое сообщение передаваемое по кольцу. Начать передачу может только ПК, которое имеет маркер.
В звезде обмен информации может осуществляться как с помощью шины, так и с помощью топологии кольца. Для того чтобы обеспечить функции сети любое соответствующее ПО должно выполнять ряд задач. При этом выполняется определенный набор процедур над протоколами.
Протокол - Набор правил, определяющих в каком виде должны быть представлены данные передаваемые по сети.
Поскольку задачи решаемые при организации работы в сети различны по сложности и характеру, то все они распределены по уровням. Имеется международный стандарт на архитектуру вычислительной сети под названием OSI (Open System Interconnection), в котором имеется 7 уровней каждому из которых соответствуют сетевые операции.
1 уровень. Физический
Определяет физические, механические, электрические характеристики, линии связи разъемов, а также электрические параметры предаваемых сигналов.
2 уровень. Канальный
Определяет методы кодировки данных, осуществляет контроль ошибок при переходе данных.
3 уровень. Сетевой
Определят адресацию сообщений и маршруты передачи сообщений сети.
4 уровень. Транспортный
Определяет способы доставки пакетов данных без потерь и дублирования.
5 уровень. Сеансовый
Определяет координацию действий между программами работ на различных компьютерах.
6 уровень. Представительский
Определяет преобразование данных из одного формата в другой. Особенно при использовании в сети компьютеров различных типов.
7 уровень. Прикладной
Определяет взаимодействия между программой выполняемой на компьютере и сетью.
Взаимодействия между уровнями организованы таким образом, что каждый уровень не зависит от того как реализован нижний уровень. Для передачи данных по сети необходимо разбивать данные на небольшие блоки называемые пакетами. Это необходимо для того, чтобы:
- Один компьютер, передавая большой объем информации, давал возможность работать и другим компьютерам, не занимая сеть слишком долго
- В случае ошибки при передачи данных необходимо повторять передачу тех блоков, где была ошибка. Небольшие размеры блоков уменьшают объем повторно передаваемых данных
Каждому уровню модели OSI соответствуют свои протоколы:
- Etherrnet нижние уровни 1,2
- NET BIOS, TCP/IP, IPX/SPX средние уровни 3,4
- FTP, PPP верхние уровни 5,6,7
Протокол Etherrnet включает в себя способ соединения компьютеров, метод доступа ПК к кабелю, формат передаваемого пакета. Компьютеры в Etherrnet соединяются топологией шина.
Формат пакета в сети
преамбула | Адрес приемника | Адрес источника | Тип пакета | данные | Контрольная сумма |
8 байт | 6 байт | 6 байт | 2 байт | 46-1500 байт | 4 байт |
Преамбула служит для определения начала пакета
Тип определяет какой протокол используется
Контрольная сумма вычисляется на основании переданных данных
Затем на приемной стороне снова вычисляется сумма по принятым данным. Если обе суммы совпадают, то пакет принят правильно.
21.
Подпрограммасамостоятельный фрагмент программы, реализующий определенный алгоритм и допускающий многократное обращение к нему из различных частей программы.
В языке Турбо-Паскаль существует большой набор стандартных (библиотечных) процедур и функций. Процедуры и функции содержатся в стандартных модулях и подключаются к любой программе либо с помощью предложения Uses(например: CRT, GRAPH и др.) либо автоматически (например, System).
Принципы хорошего стиля программирования требуют широкое использование собственных подпрограмм, которые составляются и используются также как и библиотечные.
Применение подпрограмм позволяет использовать современные технологии конструирования программ: структурное, модульное, объектное. А также использовать современные методы проектирования т.н. нисходящее проектирование. При этом сложная задача разбивается на ряд подзадач, для каждой из которых составляется набор подпрограмм, из которых компонуется общая программа.
Язык Турбо-Паскаль содержит два типа подпрограмм:
1. Процедуры.
2. Функции.
Процедуры в Паскале
Структура процедуры аналогична структуре программы и состоит из заголовка и блока (тела процедуры).
PROCEDURE <имя>(<сп. форм. пар.>);
<блок>
где
PROCEDURE – зарезервированное слово процедура;
<имя> - имя процедуры, является уникальным, выбирается по общим пра-
вилам, желательно чтобы оно отражало смысл процедуры;
<сп. форм. пар.> - список формальных параметров т.е. список имен обозначаю-
щих исходные данные и результат работы процедуры с указани-
ем их типов;
<блок>- тело процедуры представляющее разделы описаний и раздел
операторов, представляющий составной оператор (совокупность
операторов, заключенных в операторные скобкиBEGIN END).
Разделы описаний процедуры содержат те же разделы что и основная программа, в том числе описания подпрограмм низшего уровня (вложенных).
Глобальные объекты – это объекты, описанные в разделах описаний основной программе. Областью их действия является программа и все, содержащиеся в ней подпрограммы.
Локальные объекты – это объекты, описанные в разделах описаний подпрограммы. Областью их действия является подпрограмма и все содержащиеся в ней подпрограммы низшего уровня.
Локальные описания отменяют глобальные.
Оператор вызова процедуры активизирует процедуру.
Он имеет вид:
<имя>(<сп. факт. пар.>);
где:
<имя> -имя процедуры;
<сп. факт. пар.> - список фактических параметров.
Это список конкретных значений, имен и выражений подставляемых вместо формальных параметров и передаваемых в подпрограмму, а так же возвращаемые результаты обработки.
Список фактических параметров может отсутствовать.
Между формальными и фактическими параметрами существует взаимно - однозначное соответствие по количеству, порядку следования и типу.
Виды параметров в Паскале
Различают четыре вида параметров:
- параметры- значения;
- параметры- переменные;
- параметры- процедуры;
- параметры- функции.
Параметры- значения– используются для передачи исходных данных в подпрограмму. Формальные параметры при этом записываются через запятую с указанием их типов. Они получают значения фактических параметров, но не могут передавать свои значения фактическим параметрам.
Параметры- переменные – играют роль как входных, так и выходных (возвращаемых) параметров процедуры. В списке формальных параметров они перечисляются после слова Var с указанием их типов.
Параметры- процедуры – указываются после словаProcedure.
Параметры- функции -. указываются после словаFunction.
Функции в Паскале
Структура описания и механизм использования функции аналогичен процедуре с учетом некоторых особенностей. Описание состоит из заголовка и блока (тела функции).
FUNCTION <имя>(<сп. форм. пар.>):<тип>;
<блок>;
где:FUNCTION – зарезервированное слово функция;
<имя>- имя функции, является уникальным, выбирается по общим правилам, желательно чтобы оно отражало смысл функции;
<сп. форм. пар.> - список формальных параметров т.е. список имен обозначающих исходные данные функции с указанием их типов;
<тип> -тип результата возвращаемого функцией и присваиваемого имени
функции;
<блок>- тело процедуры представляющее разделы описаний и раздел
операторов, представляющий составной оператор (совокупность операторов, заключенных в операторные скобкиBEGIN END).
Разделы описаний функции содержат те же разделы что и основная программа, в том числе описания подпрограмм низшего уровня (вложенных).
В содержательной части функции ее имени должен быть присвоен результат работы функции.
Вызов функциипредставляет собой операнд (указатель функции) в отличии от процедуры обращение к которой представляет оператор.
Он имеет вид:
<имя>(<сп. факт. пар.>);
где:
<имя> -имя функции (указатель);
<сп. факт. пар.> - список фактических параметров.
Это список конкретных значений, имен и выражений подставляемых вместо формальных параметров и передаваемых в функцию.