logo
LEKZII

Основные принципы работы компьютера.

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

1. Компьютер должен состоять из следующих основных устройств:

• арифметико-логического устройства (АЛУ), выполняющего арифметические и логические операции над данными;

• центрального устройства управления (ЦУУ), которое организует процесс автоматического выполнения программ;

• оперативного запоминающего устройства (ОЗУ) для хранения программ и данных;

• внешнего запоминающего устройства (ВЗУ);

• внешних устройств ввода–вывода информации (УВВ).

Рис. 10

2. Компьютер должен быть не механическим, а электронным.

3. Компьютер должен оперировать с двоичными числами при параллельной организации вычислений.

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

5. Программы и данные хранятся в одной и той же памяти. Команды от данных отличаются месторасположением в памяти, но не способом кодирования.

Такая организация получила название классической архитектуры фон Неймана и приведена на рис. 10.

Кратко рассмотрим некоторые важные принципы работы компьютера.

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

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

Принцип программного управления компьютером реализуется следующим образом. При запуске программы на исполнение операционная система загружает ее в оперативную память и передает в программный счетчик устройства управления адрес первой машинной команды программы. Эта команда может быть любой (выполнение арифметической или логической операции, чтение из памяти данных, ввод данных из внешнего устройства в память или вывод данных из памяти на внешнее устройство и т.д.). По заданному адресу устройство управления считывает команду в регистр команд (там она хранится во время выполнения) и организует ее выполнение. Код команды расшифровывается и обрабатывается АЛУ путем выработки устройством управления последовательности управляющих импульсов, воздействующих на АЛУ и другие устройства. Схемы АЛУ переключаются в соответствии с ними и выполняют то, что определено командой. Адресная часть команды заносится в регистры адреса, откуда передается на шину адресов для пересылки данных в соответствии с выполняемой командой. Устройство управления по коду команды определяет ее длину, и после выполнения первой команды к заданному первоначальному адресу прибавляет длину в байтах выполненной команды, получая новый адрес, после чего считывает из памяти по этому адресу следующую команду программы. Поэтому в ячейках памяти, следующих за расположением первой команды, должна находиться именно вторая команда, а не что-то другое. Затем устройство управления организует выполнение второй команды, определяет адрес следующей и т.д. Таким образом, устройство управления выполняет программу автоматически без вмешательства человека, заставляя бесконечно переключаться схемы АЛУ из одного состояния в другое. Вот почему, в отличие от расположения данных, которые адресуются в командах, программа должна располагаться в оперативной памяти непрерывным участком. Иначе устройство управления не найдет следующую команду для выполнения.

Устройство управления вырабатывает серии управляющих импульсов, реализуя еще один важнейший принцип, вытекающий из принципа программного управления фон Неймана и являющийся его развитием – принцип микропрограммного управления. Выполнение любой машинной операции, например, сложения, выливается в довольно емкую последовательность элементарных действий: сдвигов влево или вправо при выравнивании порядков чисел, проверок условий выравнивания порядков, анализа цепочек переносов из одного разряда в другой при сложении мантисс и т.д. Такая последовательность действий управляется сериями импульсов (микрооперациями), вырабатываемых устройством управления и воздействующих на схемы АЛУ. Для выполнения каждой такой микрооперации оказывается возможным задать простейший набор импульсов (микрокоманду). Совокупности таких микрокоманд образуют своего рода программы для выполнения той или иной команды процессора. Эти программы хранятся в постоянном запоминающем устройстве (ПЗУ) процессора. Устройство управления, функции которого заключаются в том, чтобы считать очередную команду программы из памяти, расшифровать ее и подключить необходимые электронные схемы и цепи АЛУ для ее выполнения, после считывания команды, обращается к ПЗУ и вызывает необходимую программу из микроопераций, которая задает распределение серий импульсов по элементам АЛУ и другим устройствам, и выполняет команду процессора.

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

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

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

Суть прерываний заключается в следующем. Процессор выполняет программу, пока не возникает событие, требующее ее приостановления и выполнения других действий (например, ввод данных с клавиатуры или с диска, требование от системы диспетчеризации на выполнение другой программы, запрос от внутреннего таймера на обновление текущего времени и т.д.). Процессору выставляется запрос на прерывание, то есть подается специальная команда INT n, где n – номер прерывания. Процессор на некоторое время прекращает выполнение текущей программы и занимается обслуживанием прерывания. Так как любые действия процессор может выполнять только по программе, то и обслуживание прерывания он тоже осуществляет путем выполнения специальной программы – обработчика прерывания. Каждое событие или устройство, требующие внимания процессора, имеют свой номер прерывания и соответственно программу-обработчик. Данные из регистров процессора (адрес выполняемой команды, ее код и операнды, значения флагов и др.) перемещаются в специально организованный участок памяти – стек командами процессора PUSH регистр. В освободившиеся регистры процессора заносится первая команда программы-обработчика прерывания и процессор, не замечая, что это новая программа, выполняет уже ее. Заканчивается выполнение программы-обработчика прерывания несколькими командами процессора POP регистр, извлекающими из стека в его регистры запомненную там информацию, после чего по команде IRET процессор возвращается из прерывания и снова продолжает выполнять ранее прерванную программу.

Сама программа-обработчик тоже может быть прервана, как и любая другая программа, новым прерыванием, то есть прерывания могут многократно “накладываться” одно на другое. В этом случае чаще всего прерывания “маскируются” (на них накладывается маска – ставится специальный признак). Они не обслуживаются немедленно, а становятся в очередь и обрабатываются поочередно, одно за другим. Есть прерывания, которые не маскируются и не имеют на это права. Например, прерывание от источника питания должно немедленно обрабатываться вне всякой очереди.

Каждый номер прерывания имеет указатель адреса начала его программы-обработчика. Эти указатели называются векторами прерываний. Они состоят из 4-х байт каждый и хранятся в начале оперативной памяти. В байтах вектора прерывания и указывается адрес первой команды программы-обработчика этого прерывания.

Следует подчеркнуть, что большинство векторов прерываний содержат именно адреса программ-обработчиков. Вместе с тем некоторые адреса указывают не на программы-обработчики, а на специальные таблицы с информацией. Так, вектор 1Fh указывает на таблицу – знакогенератор, содержащую битовые комбинации (шаблоны символов), используемые ROM BIOS при выводе на экран монитора символов текста, а прерывания 41h и 46h указывают на таблицу с параметрами жесткого диска (винчестера). Такие вектора прерываний используются для удобства доступа к нужной информации, а не для выполнения программы-обработчика.

Прерывания программируются на любом языке программирования высокого уровня.

Управление прерываниями осуществляет специальная микросхема– контроллер прерываний.

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

Источники аппаратных прерываний – аппаратные средства. Например, запрос на прерывание выставляется при падении напряжения источника питания, нажатии клавиши на клавиатуре, приходе очередного импульса от счетчика времени, возникновении специального сигнала от накопителей на гибких и жестких магнитных дисках и др. Каждому устройству на системной шине выделена специальная отдельная линия запроса прерывания (не путать с номером прерывания). Например, с номером 7-прерывание от параллельного порта LPT1, с номером 1-прерывание от контроллера клавиатуры, с номером 3-прерывание от последовательных портов COM2 и COM4 и т.д. Всего, например, на системной шине ISA имеется 15 линий. Когда устройство хочет “пообщаться” с процессором, оно по своей линии запроса прерывания выдает сигнал контроллеру прерываний, а он формирует команду INT n и посылает ее процессору.

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

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

Прерывания с номерами 031 обслуживаются программами базовой системы ввода-вывода BIOS. Они называются прерываниями нижнего уровня. Эти прерывания управляют непосредственно аппаратными средствами компьютера и недоступны пользователю. Прерывания с номерами свыше 32 относятся к более высокому уровню, и их обслуживание возлагается на операционную систему.

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

В Windows 9x (NT) программные прерывания как таковые отсутствуют, хотя сам принцип работы процессора остается неизменным. Процессор, в силу мультизадачности этих систем, постоянно работает в режиме прерываний (одновременно работает несколько программ, но процессор-то только один!). Такой режим работы обеспечивает метод диспетчеризации, предоставляющий операционной системе возможность захвата CPU в любой момент времени, независимо от состояния работающих в данный момент приложений. Это позволяет Windows время работы процессора предоставлять приложениям поочередно, с перерывами, которые из-за большого быстродействия процессора пользователь не замечает.

Приложения же получают любой сервис от Windows при помощи интерфейса прикладного программирования API Win32, который содержит более 2000 различных функций и макросов. Доступ ко всем функциям API Win 32 осуществляется по имени, а не по номерам, как к прерываниям. Например, для удаления файла вместо функций 41h или 7141h прерывания INT 21h MS-DOS, используется функция API WIN32 с именем DeleteFile(). Для поддержания всеми приложениями длинных имен файлов, введенных в Windows, фирма Microsoft расширила набор функций прерывания MS-DOS INT 21h, которые полностью эквивалентны функциям API WIN32. Для того чтобы обратиться к любой функции, программист в тексте попросту использует ее имя. Так, для вызова функции MessageBox() в выполняемый файл при компоновке программы будет включена ссылка на точку входа номер 1 модуля User. Вызов приложением функции LineTo() будет заменен ссылкой на точку входа номер 19 модуля GDI (оба модуля являются ядром Windows). Во время загрузки программы в память Windows заменит эти ссылки адресами, по которым находятся указанные программы-функции. Любой модуль, предоставляющий подобные ссылки при компоновке, называется динамически компонуемой библиотекой (DLL). Каждая DLL декларирует набор точек входа, которые соответствуют внешним ссылкам. Бóльшая часть Windows представляет собой совокупность DLL, которые используются для взаимодействия между различными компонентами.

Приложения MS-DOS, работающие под управлением Windows, по-прежнему используют прерывания, в частности 21h, включающее всевозможные функции, обеспечивающие услуги MS-DOS. Специальный модуль Windows преобразует эти прерывания в функции интерфейса API WIN32, которые фактически и выполняются.

Работа современных компьютеров без системы прерываний немыслима.

Защита памяти. Память адресуется сегментами и смещениями внутри сегмента. Возникновение сегментов связано с внутренней структурой процессоров фирмы Intel, в которых под адресацию памяти выделяются два регистра: в одном хранится адрес сегмента, а в другом – смещение внутри сегмента от его начала, например, 0040:0017. Сегментом является участок памяти. При 32-х разрядных регистрах процессора сегмент составляет около 4 Гбайт. Встроенный менеджер памяти за счет использования виртуальной памяти позволяет работать программам так, как будто имеется до 16536 сегментов доступных каждой задаче. В защищенном режиме работы процессора (основной режим работы современных процессоров) сегментный адрес является селектором (индексом-указателем) на дескриптор истинного адреса сег-

мента (рис. 11). Дескрипторы группируются либо в частную для процесса локальную таблицу описателей (LDT), либо в глобальную (GDT), которая используется совместно с различными процессами.

Таблицы дескрипторов хранятся в ОЗУ, а информация об их местонахождении хранится в регистрах CPU специ-

Рис. 11 ального назначения. Каждый генерируемый CPU адрес включает селектор, который указывает, какую таблицу дескрипторов следует использовать и порядковый номер дескриптора в этой таблице. Позиции таблицы имеют длину в 8 байт. В каждой позиции хранится дескриптор истинный адрес сегмента и его описание: пустой сегмент, хранит программу, хранит данные, используется только для чтения, уровень доступа к нему или привилегию.

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

В современных персональных компьютерах центральное устройство управления, АЛУ и ПЗУ процессора объединены в одной микросхеме, которая называется центральный микропроцессор (CPU). Для краткости в дальнейшем будем называть его просто процессор. Ведущие мировые фирмы по производству микропроцессоров это, прежде всего, INTEL (INTegrated Elec-tronics), AMD (Advanced Micro Devices), CYRIX, Chips and Technologies и др.

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

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

Лекция 15