BAULA1 (1110624), страница 27
Текст из файла (страница 27)
1 Заметим, что в языках высокого уровня обычно есть далеко не все из рассматриваемых нами макросредств.
1 Для простоты наше макроопределение никогда не задаёт второй параметр макрокоманды outint – ширину поля для вывода целого числа.
1 В стандарте Паскаля можно попытаться сделать элементы массива записями с вариантами, в Турбо-Паскале – использовать так называемые безтиповые массивы. Однако во всех этих случаях, даже если не принимать во внимание отсутствие контроля и понижение надёжности программы, нам придётся передавать в функцию дополнительный параметр, задающий тип элемента массива, а внутри функции будет по-существу находиться оператор case, разветвляющий вычисление по разным типам данных. Не спасают здесь положение и объектно-ориентированные языки, всё равно придётся реализовать в программе несколько функций с одинаковым именем, компилятор лишь автоматически выберет одну из них, соответствующую типу элементов массива, переданного как фактический параметр.
1 Тот факт, что короткие алгоритмы иногда выгоднее реализовывать не в виде процедур и функций, а в виде макроопределений, нашёл отражение и при разработке языков высокого уровня. Так, в некоторых языках высокого уровня, существуют так называемые встраиваемые (inline) процедуры и функции, вызов которых во многом производится по тем же правилам, что и вызов макроопределений.
1 Термин транслятор обозначает программу-переводчика с одного языка на другой. Трансляторы делятся на компиляторы, которые переводят программу целиком, и интерпретаторы, которые выполняют построчный перевод и исполнение каждой переведённой строки программы. Хорошим аналогом является писменный (всего текста) и устный (синхронный, по одному предложению) перевод с иностранного языка.
2 Как вы узнаете из курса "Системное программное обеспечения" выдача листинга и аварийных диагностик производится на разные устройства – так называемое стандартное устройство вывода (stdout) и стандартное устройство для выдачи сообщений об ошибках (stderr).
3 В отличие от Паскаля, в Ассемблере нет стандартных имён (напомним, что стандартное имя имело заранее определённый смысл, но эти имена можно было переопределить).
4 Здесь надо сказать, что компилятор не предполагает глубокого знание программистом теории компиляции, поэтому в дистинге такие ошибки называются общим термином "синтаксические ошибки", хотя, как мы узнаем немного позже, "настоящие" синтаксические ошибки определяются другой частью компилятора – синтаксическим анализатором.
1 Исключением из этого правила, как мы знаем, являются имена сегментов и имена процедур, которые должны встретиться в поле метки два раза.
1 Эти программы могут присутствовать в оперативной памяти не целиком. Во-первых, они могут использовать схему динамической загрузки, и, во-вторых, работать на так называемой виртуальной памяти, при этом некоторые части программы могут временно отсутствовать в оперативной памяти.
2 На ЭВМ первых поколений пользователям разрешалось писать свои собственные процедуры-обработчики прерываний, однако в операционных системах современных ЭВМ это, как правило, запрещено. Причина такого запрета будет понятна из нашего дальнейшего изложения мультипрограммного режима работы ЭВМ.
1 Даже если не принимать во внимание "вредных" программистов, которые специально захотят испортить или незаконно прочитать данные других программ, всегда существуют вероятность таких действий из-за ошибок в программах даже у "добропорядочных" программистов.
2 В архитектуре нашего компьютера регистр режима работы содержит два разряда и может принимать значения 0,1,2 и 3. Практически всегда, однако, используются только два из этих четырёх значений (0 и 3).
1 Способы задания таких полномочий Вы будете изучать в следующем семестре на примере операционной системы Unix.
1 Конечно, существуют привилегированные команды для работы с кэшем как с единым целым, это, например, команда очистки кэша от всех команд и данных.
2 Как видно из этого алгоритма работы кэша, от весьма "болезненно" реагирует на прерывания, так как при этом производится переключение на другую программу, и данные в кэше необходимо полностью сменить.
3 За одно обращение из памяти теперь читается не одна команда, а в среднем две последовательные команды, поэтому можно считать, что среднее время выполнения команды будет ещё меньше: 1+2+2=5 нс.
1 Такие компиляторы называются оптимизирующими компиляторами, оптимизация на машинном языке выполняется обычно на одном или нескольких дополнительных проходах программы перед получением объектного модуля.
2 На супер-ЭВМ для этих целей обработку большинства прерываний обычно поручают одному из каналов ввода/вывода (периферийных процессоров), что позволяет не прерывать работу конвейера центрального процессора. Архитектуру ЭВМ с каналами ввода/вывода мы будем изучать далее.
1 Это яркий пример того, как макросредства повышают уровень языка: макрокоманда вывода символа оказываеся для Петрова по внешнему виду (если отвечься от деталей синтаксиса), очень похожа на соответствующие операторы языков высокого уровня.
1 Предполагается, что компьютер работает в простейшем (как говорят, незащищённом) режиме.
2 Мы рассматриваем, естественно, работу дисплея только в стандартном текстовом режиме.
1 Естественно, что немедленное продолжение выполнения программы пользователя возможно только в том случае, если ей не требуется сразу обрабатывать данные, которые должен предоставить канал. Например, если программа обратиласть к каналу для чтения массива с диска в свою оперативную память, и пожелает тут же начать суммировать элементы этого массива, то такая программа будет переведена в состояние ожидания, пока канал не закончит чтения заказанного массива в память. Аналогично программа будет переведена в состояние ожидания, если она обратиласть к каналу для записи некоторого своего массива из оперативной памяти на диск, и пожелала тут же начать присваивать элементам этого массива новые значения. Эти примеры, в частности, показывают, насколько усложняются большинство программ операционой системы в архитектуре с каналами ввода/вывода.
1 Для полноты классификации можно упомянуть и архитектуру МКОД (MISD), при этом один поток данных обрабатывается многими потоками команд. В качестве примера можно привести специализированную ЭВМ, управляющую движением самолётов над аэропортом. В этой ЭВМ один поток данных от аэродромного радиолокатора обрабатывается многими параллельно работающими процессорами, каждый из которых следит за безопасностью полёта одного закреплённого за ним самолёта, давая ему при необходимости команды на изменение курса, чтобы предотвратить столкновение с другими самолётами. С другой стороны, однако, можно считать, что каждый процессор обрабатывает свою копию общих данных и рассматривать это как частный случай архитектуры МКМД.