BAULA1 (1110624), страница 22
Текст из файла (страница 22)
mov ax,bl; Несоответствие типов
add A,A+2; Несуществующий формат команды
sub cx; Мало операндов
и т.д. Используя таблицу имён, синтаксический анализатор легко обнаруживает ошибки следующего вида:
-
Неописанное имя. Имя встречается только в поле операндов и не встречается в поле метки.
-
Дважды описанное имя. Одно и то же имя дважды (или большее число раз) встретилось в поле метки.1
-
Описанное, но не используемое имя. Это предупредительное сообщение может выдаваться некоторыми "продвинутыми" Ассемблерами, если имя определено в поле метки, но ни разу не встретилось в поле операндов (видимо, программист что-то упустил).
Кроме того, синтаксический анализатор может обнаружить и ошибки, относящиеся к модулю в целом, например, превышение максимальной длины некоторого сегмента.
Итак, на втором проходе синтаксический анализатор может обнаружить все ошибки и однозначно определить формат каждой команды. Теперь можно приступать к последнему этапу работы транслятора – генерации объектного модуля. На этом этапе все числа преобразуются во внутреннее машинное представление, выписывается битовое представление всех команд, оформляется паспорт объектного модуля. Далее полученный объектный модуль записывается в библиотеку объектных модулей (обычно куда-нибудь в дисковую память).
На этом мы завершим наше краткое знакомство со схемой трансляции исходного модуля с языка Ассемблера на объектный язык.
14. Понятие о мультипрограммном режиме работы.
Архитектура машин фон Неймана предполагает, что последовательно выполняются не только команды текущей программы, но и также и сами программы. Другими словами, пока одна программа полностью не заканчивалась, следующая программа не загружалась в память и не начинала выполняться. Такой режим счёта программ называется пакетным режимом работы ЭВМ. Разумеется, такое название этому режиму было дано только после того, как появились и другие режимы работы ЭВМ.
Сейчас мы познакомимся с весьма сложным понятием – мультипрограммным (иногда говорят, многопрограммным) режимом работы ЭВМ. Мультипрограммный режим работы означает, что в оперативной памяти компьютера одновременно находится несколько независимых друг от друга и готовых к счёту программ.1 Особо следует подчеркнуть, что это могут быть и программы разных пользователей.
Мультипрограммный режим работы появился только на ЭВМ, начиная с 3-го поколения, на первых компьютерах его не было [3]. Сейчас нам сначала предстоит разобраться, для чего вообще нужно, чтобы в памяти одновременно находилось несколько программ. Этот вопрос вполне естественный, так как у подавляющего большинства компьютеров только один центральный процессор, так что одновременно может считаться только одна программа.
Частично мы уже обосновали необходимость присутствия в оперативной памяти нескольких программ, когда изучали систему прерываний. Как правило, при возникновении прерывания происходит автоматическое переключение на некоторую другую программы, которая тоже, конечно, должна находиться в оперативной памяти. Здесь, однако, можно возразить, что все программы, на которые производится автоматическое переключение при прерывании, являются системными программами (входят в операционную систему),2 а при определении мультипрограммного режима работы мы особо подчёркивали, что в оперативной памяти могут одновременно находиться несколько разных программ обычных пользователей.
Следует указать две основные причины, по которым может понадобиться мультипрограммный режим работы. Во-первых, может потребоваться одновременно выполнять несколько программ. Например, это могут быть программы, которые в диалоговом режиме работают с разными пользователями (программисты Вася и Петя одновременно с разных терминалов отлаживают свои программы, см. рис. 14.1).
Оперативная память | |||
Программа Васи | |||
Программа Пети | |||
. . . | |||
Программы операционой системы | |||
Рис. 14.1. Одновременное нахождение в памяти нескольких программ пользователей. |
Правда, здесь возникает следующая трудность: так как центральный процессор на компьютере один, то в каждый момент времени может выполняться или программа Васи, или программа Пети (ну, или служебная программа операционной системы). Эта трудность преодолевается введением специального режима работы ЭВМ – режима разделения времени, который является частным случаем мультипрограммного режима. В режиме разделения времени, используя сигналы прерывания от встроенных в компьютер часов (таймера), процедура-обработчик этого прерывания переключает центральный процессор с одной задачи пользователя на другую по истечению определённого кванта времени (обычно порядка нескольких единиц или десятков миллисекунд). В этом режиме и у Васи и у Пети создаётся иллюзия, что только его программа всё время считается на компьютере (правда, почему-то медленнее ☺).
Если отвлечься от несколько шутливого примера с Васей и Петей, то можно заметить, что потребность в таком псевдопараллельном счёте нескольких программ на компьютере с одним центральным процессором весьма распространена. Пусть, например, наш компьютер предназначен для управления несколькими различными химическими реакторами на каком-нибудь заводе, или обслуживает запросы сразу многих абонентов в библиотеке и т.д.
Другая причина широкого распространения мультипрограммного режима заключается в следующем. Наряду с главной частью – центральным процессором и оперативной памятью – в компьютере существует и большое количество так называемых периферийных (внешних) устройств, это диски, клавиатура, мышь, печатающие устройства, линии связи и т.д. (см. рис. 14.2). Все эти периферийные устройства работают значительно более медленно, чем центральный процессор и оперативная память. Имеется в виду, что все они значительно медленнее манипулируют данными. Например, за то время, за которое быстрый лазерный принтер напечатает один символ, оперативная память способна выдать центральному процессору около 3 миллионов байт, а сам центральный процессор способен за это время выполнить порядка одного миллиона команд.
| Сеть | Мышь | ||||
Клавиатура | ||||||
| Оперативная память | Печать | ||||
Центральный процессор | ||||||
Рис. 14.2. Центральная и периферийная части компьютера. |
Поэтому очевидно, что в то время, когда по запросу некоторой программы производится обмен данными с медленными внешними устройствами, центральный процессор не сможет выполнять команды этой программы, т.е. будет простаивать. Например, рассмотрим случай, когда в программе Васи выполняются операторы
Read(MyFile,X); Y:=X+1;
Очевидно, что оператор присваивания Y:=X+1 не сможет начать выполняться, пока из файла не будет прочитано значение переменной X. Вот здесь нам и пригодится способность компьютера автоматически переключаться на выполнение других программ, тоже расположенных в оперативной памяти. Пока одна программа выполняет свои команды на центральном процессоре, другая может выводить свои данные на принтер, третья – читать массив с диска в оперативную память, четвёртая – ждать ввода символа с клавиатуры и т.д. Правда, для того, чтобы обеспечить такую возможность, мало наличия на компьютере одной системы прерываний. Прежде всего, необходимо научить периферийные устройства компьютера работать параллельно и относительно независимо от центрального процессора.
Как мы говорили, на первых ЭВМ не было режима мультипрограммирования. Сейчас мы сформулируем необходимые требования, которые предъявляются к аппаратуре компьютера, чтобы на этом компьютере было возможно реализовать мультипрограммный режим работы. Сначала заметим, что требование параллельной работы центрального процессора и периферийных устройств, не являются необходимым для режима разделения времени, который, как мы уже говорили, является частным случаем мультипрограммного режима работы. Поэтому мы не будем включать это требование в перечень обязательных свойств аппаратуры ЭВМ для обеспечения работы в мультипрограммном режиме. Скажем, однако, что параллельная работа периферийных устройств и центрального процессора реализована на большинстве современных ЭВМ и на всех больших и супер-ЭВМ.
14.1. Требования к аппаратуре для обеспечения возможности работы в мультипрограммном режиме.
Итак, сформулируем необходимые требования к аппаратуре ЭВМ для обеспечения возможности мультипрограммной работы.
14.1.1. Система прерываний.
Система прерываний необходима как для режима разделения времени, так и для обеспечения параллельной работы центрального процессора и периферийных устройств, так как обеспечивает саму возможность реакции на события и автоматического переключения с одной программы на другую.
14.1.2. Механизм защиты памяти.
Этот механизм обеспечивает безопасность одновременного нахождения в оперативной памяти нескольких независимых программ. Защита памяти гарантирует, что одна программа не сможет случайно или же предумышленно обратиться в память другой программы (по записи или даже по чтению данных). Очевидно, что без такого механизма мультипрограммный режим просто невозможен.1
Механизм защиты памяти на современных ЭВМ устроен весьма сложно и часто связан с механизмом так называемой виртуальной памяти, с которым Вы познакомитесь в следующем семестре. Сейчас мы рассмотрим одну из простейших реализаций механизма защиты памяти, так эта защита была сделана на некоторых первых ЭВМ 3-го поколения, способных работать в мультипрограммном режиме.
В центральный процессор добавляются два новых регистра защиты памяти, обозначим их Анач и Акон. На каждый из этих регистров можно загрузить любой адрес оперативной памяти. Предположим теперь, что после загрузки программы в оперативную память она занимает сплошной участок памяти с адресами от 20000010 до 50000010 включительно. Тогда загрузчик, перед передачей управления на первую команду программы (у нас это часто была команда с меткой Start), присваивал регистрам защиты памяти соответственно значения
Анач:=20000010 и Акон:=50000010
Далее, в центральный процессор добавлена способность, перед каждым обращением в оперативную память по физическому адресу Афиз автоматически проверять условие
Анач Афиз Акон
Если условие истинно, т.е. программа обращается в свою область памяти, выполняется требуемое обращение к памяти по записи или чтению данных. В противном случае доступ в оперативную память не производится и вырабатывается сигнал прерывания по событию "попытка нарушения защиты памяти".
Описанный механизм защиты памяти очень легко реализовать, однако он обладает существенным недостатком: каждая программа может занимать только один сплошной участок в оперативной памяти. В то же время, как мы знаем, архитектура нашего компьютера допускает, чтобы каждый сегмент программы мог быть размещён на любом свободном месте оперативной памяти. В современных ЭВМ реализован специальный механизм виртуальной памяти, который позволяет выделять для программы любые участки адресов памяти, независимо от того, заняты ли эти, как говорят, логические адреса другими программами или нет.
14.1.3. Аппарат привилегированных команд.
Сейчас мы рассмотрим ещё одно необходимое свойство аппаратуры, без которого невозможно реализовать мультипрограммный режим работы ЭВМ. Это свойство заключается в следующем: все команды, которые может выполнять центральный процессор, разбиваются на два класса. Команды из одного класса называются обычными командами или командами пользователя, а команды из другого класса – привилегированными или запрещёнными командами.
Далее, в центральном процессоре располагается специальный одноразрядный регистр режима работы, который может, естественно, принимать только два значения. Значение этого регистра и определяют тот режим, в котором в данный момент работает центральный процессор: обычный режим (или режим пользователя) или привилегированный режим.2 В привилегированном режиме центральному процессору разрешается выполнять все команды языка машины, а в режиме пользователя – только обычные (не привилегированные) команды. При попытке выполнить привилегированную команду в пользовательском режиме вырабатывается сигнал прерывания, а сама команда, естественно, не выполняется. Из этого правила выполнения команд легко понять и другое название для привилегированных команд – запрещённые команды, так как их выполнение запрещено в режиме пользователя. Объясним теперь, почему без аппарата привилегированных команд невозможно реализовать мультипрограммный режим работы ЭВМ.
Легко понять, что, например, команды, которые заносят на регистры защиты памяти Анач и Акон новые значения, должны быть привилегированными. Действительно, если бы это было не так, то любая программа могла бы занести на эти регистры адреса начала и конца оперативной памяти, после чего получила бы возможность записывать данные в любые области памяти.