Вы находитесь на странице: 1из 15

Правительство Российской Федерации

Федеральное государственное автономное образовательное


учреждение высшего профессионального образования
"Национальный исследовательский университет"
"Высшая школа экономики"

Московский институт электроники и математики


Национального исследовательского университета
«Высшая школа экономики»

Департамент прикладной математики

Домашнее задание
по дисциплине
“Операционные системы и сети”
Часть 1

Работу выполнил
студент 3 курса
группы БПМ-185
Лопатин Кирилл

Преподаватель
Внуков Андрей Анатольевич

Москва, 2020
Оглавление

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

Постановка задачи
Темы из домашнего задания № 1:

1. Расслоение памяти
2. Регистр перемещений
3. Прерывания и опрос состояний
4. Буферизация
5. Периферийные устройства
6. Защита памяти
7. Таймер и часы
8. Каналы ввода-вывода
9. Захват цикла памяти
10. Относительная адресация
11. Режимы работы компьютера
12. Виртуальная память
13. Мультипроцессорная обработка
14. Прямой доступ к памяти
15. Конвейеризация
16. Иерархия памяти
17. Программирование на машинном языке
18. Ассемблеры и макропроцессоры
19. Компиляторы
20. Интерпретаторы
21. Процедурно-ориентированные и проблемно-ориентированные языки
22. Спулинг
23. Абсолютные и перемещающие загрузчики
24. Связывающие загрузчики и редакторы связей
25. Микропрограммы
26. Горизонтальный и вертикальный микрокод
27. Эмуляция
Основная часть
1. Расслоение памяти
Метод расслоения памяти (интерливинг) применяется для увеличения скорости доступа к
основной (оперативной) памяти. В обычном случае во время обращения к какой-то одной из
ячеек модуля основной памяти никакие другие обращения к памяти производиться не могут. При
расслоении памяти соседние по адресам ячейки размещаются в различных модулях памяти, так
что появляется возможность производить несколько обращений одновременно. Например, при
расслоении на два направления ячейки с нечетными адресами оказываются в одном модуле
памяти, а с четными — в другом. При простых последовательных обращениях к основной
памяти ячейки выбираются поочередно. Таким образом, расслоение памяти позволяет
обращаться сразу к нескольким ячейкам, поскольку они относятся к различным модулям памяти.

1. Регистр перемещений
Регистр перемещения обеспечивает возможность динамического перемещения программ в
памяти. В регистр перемещения заносится базовый адрес программы, хранящейся в основной
памяти. Содержимое регистра перемещения прибавляется к каждому указанному в выполняемой
программе адресу. Благодаря этому пользователь может писать программу так, как если бы она
начиналась с нулевой ячейки памяти. Во время выполнения программы все исполнительные
адреса обращений формируются с использованием регистра перемещения — и благодаря этому
программа может реально размещаться в памяти совсем не в тех местах, которые она должна
была бы занимать согласно адресам, указанным при трансляции.

2. Прерывания и опрос состояний


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

3. Буферизация
Буфер — это область основной памяти, предназначенная для промежуточного хранения данных
при выполнении операций ввода-. вывода. Скорость выполнения операции ввода-вывода зависит
от многих факторов, связанных с характеристиками аппаратуры ввода-вывода, однако в обычном
случае ввод- вывод производится не синхронно с работой процессора. При вводе, например,
данные помещаются в буфер средствами канала ввода-вывода; после занесения данных в буфер
процессор получает возможность доступа к этим данным. При вводе с простой буферизацией
канал помещает данные в буфер, процессор обрабатывает эти данные, канал помещает
следующие данные и т. д. В то время, когда канал заносит данные, обработка этих данных
производиться не может, а во время обработки данных нельзя заносить дополнительные данные.
Метод двойной буферизации позволяет совмещать выполнение операции ввода-вывода с
обработкой данных; когда канал заносит данные в один буфер, процессор может обрабатывать
данные другого буфера. А когда процессор заканчивает обработку данных одного буфера, канал
будет заносить новые данные опять в первый буфер. Такое поочередное использование буферов
иногда называют буферизацией с переключением («триггерной» буферизацией). Обмен данными
между каналами и процессорами будет рассмотрен ниже.

5. Периферийные устройства
Периферийные (внешние запоминающие) устройства позволяют хранить громадные объемы
информации вне основной памяти компьютера.
Самым важным устройством внешней памяти с точки зрения операционных систем является,
накопитель на магнитных дисках. Накопители на магнитных дисках — это устройства прямого
доступа, они позволяют обращаться к отдельным элементам данных, не требуя
последовательного просмотра всех элементов данных, хранящихся на диске.

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

Таким образом, средства защиты памяти должны предотвращать:


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

Чтобы воспрепятствовать разрушению одних программ другими, достаточно защитить область


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

7. Таймер и часы
Интервальный таймер — эффективный способ предотвращения монополизации процессора
одним из пользователей в мультипрограммных системах. По истечении заданного интервала
времени таймер генерирует сигнал прерывания для привлечения внимания процессора; по этому
сигналу процессор может переключиться на обслуживание другого пользователя.
Часы истинного времени дают возможность компьютеру следить за реальным календарным
временем с точностью до миллионных долей секунды, а при необходимости даже точнее.
8. Каналы ввода-вывода
В первых компьютерах с ростом требуемых объемов вычислений, особенно в условиях обработки
экономических данных, узким местом, как правило, оказывался ввод-вывод. Во время выполнения
операций ввода-вывода процессоры были заняты управлением устройствами ввода-вывода. В
некоторых машинах в каждый конкретный момент времени могла выполняться всего лишь одна
операция ввода-вывода. Важным шагом для решения этой проблемы явилась разработка каналов
ввода-вывода. Канал ввода-вывода — это специализированный процессор, предназначенный для
управления вводом-выводом независимо от основного процессора вычислительной машины.
Канал имеет возможность прямого доступа к основной памяти для записи или выборки
информации.
В первых машинах взаимодействие между процессорами и каналами осуществлялось при помощи
процессорных команд типа:
· условный переход (если канал занят выполнением операции);
· ожидание (пока не закончится выполнение команды канала);
· запись (содержимого управляющих регистров канала в основную память для
последующего опроса процессором).
В современных машинах с управлением по прерываниям процессор выполняет команду «начать
ввод-вывод» (SIO), чтобы инициировать передачу данных ввода-вывода по каналу; после
окончания операции ввода-вывода канал выдает сигнал прерывания по завершению операции
ввода-вывода, уведомляющий процессор об этом событии.
Истинное значение каналов состоит в том, что они позволяют значительно увеличить
параллелизм работы аппаратуры компьютера и освобождают процессор от подавляющей части
нагрузки, связанной с управлением вводом-выводом.
Для высокоскоростного обмена данными между внешними устройствами и основной памятью
используется селекторный канал. Селекторные каналы имеют только по одному подканалу и могут
обслуживать в каждый момент времени только одно устройство.
Мультиплексные каналы имеют много подканалов; они могут работать сразу со многими потоками
данных в режиме чередования. Байт-мультиплексный канал обеспечивает режим чередования
байтов при одновременном обслуживании ряда таких медленных внешних устройств, как
терминалы, перфокарточные устройства ввода-вывода, принтеры, а также низкоскоростные линии
передачи данных. Блок-мультиплексный канал при обменах в режиме чередования блоков может
обслуживать несколько таких высокоскоростных устройств, как лазерные принтеры и дисковые
накопители.

9. Захват цикла памяти


Узкое место, где может возникнуть конфликтная ситуация между каналами и процессором,— это
доступ к основной памяти. Поскольку в каждый конкретный момент времени может
осуществляться только одна операция обращения (к некоторому модулю основной памяти) и
поскольку каналам и процессору может одновременно потребоваться обращение к основной
памяти, в обычном случае приоритет здесь предоставляется каналам. Это называется захватом
цикла памяти; канал буквально захватывает, или «крадет» циклы обращения к памяти у
процессора. Каналам требуется лишь небольшой процент общего числа циклов памяти, а
предоставление им приоритета в этом смысле позволяет обеспечить лучшее использование
устройств ввода-вывода. Подобный подход принят и в современных операционных системах;
планировщики, входящие в состав операционной системы, как правило, отдают приоритет
программам с большим объемом ввода-вывода по отношению к программам с большим объемом
вычислений.

1. Относительная адресация
Самым сложным из способов адресации является способ относительной адресации. При данном
способе адресации мы имеем некоторого объёма виртуальную память, которая является частью
оперативной памяти. Наша виртуальная память «начинается» не обязательно с нулевой ячейки,
она может располагаться в любом месте ОП. В нулевой ячейке нашей виртуальной памяти
находится адрес (БАЗА). БАЗА (базовый регистр) – это адрес нулевой ячейки виртуальной памяти
в оперативной. Чтобы найти нужную ячейку виртуальной памяти нужно следовать этой формуле:
(А)=(Б)+D, где (А) – адрес исполнительной ячейки (там находится операнд), (Б) – адрес базового
регистра, D – смещение (на сколько ячеек нужно сместиться в виртуальной памяти, чтобы найти
(А)).

11. Режимы работы компьютера


Вычислительные машины могут выполнять обработку информации в разных режимах:
1) однопрограммном (монопольном) режиме;
2) многопрограммном режиме.

Однопрограммный режим использования самый простой, применяется во всех поколения ПК. Из


современных машин этот режим чаще всего используется в персональных компьютерах, где он
называется реальным режимом работы микропроцессора. В этом режиме все ресурсы ПК
передаются одному пользователю. Пользователь сам готовит и машину, и всю необходимую для
решения задач информацию, загружает программу и данные, непосредственно наблюдает за
ходом решения задачи и выводом результатов. Такой вариант режима называют режимом
непосредственного доступа.
Однопрограммный режим имеет и второй вариант — вариант косвенного доступа,при котором
пользователь не имеет непосредственного контакта с компьютером. В этом варианте
пользователь готовит свое задание и отдает его на обработку. Задача запускается в порядке
очередности, и по мере готовности результаты ее решения выдаются пользователю.
Однопрограммный режим непосредственного доступа весьма удобен для пользователя, но для
него характерен чрезвычайно низкий коэффициент загрузки оборудования — временные простои
многих устройств машины и в период подготовки задачи для решения, и непосредственно при
решении задачи (при вычислениях в процессоре простаивают внешние устройства, при печати
простаивают процессор, основная и внешняя память и т. д.).
Многопрограммный(его также называют мультипрограммным, многозадачным, а в ПК и
многопользовательским) режим обеспечивает лучшее использование ресурсов компьютера, но
несколько ущемляет интересы пользователя. Для выполнения этого режима необходимо прежде
всего разделение ресурсов машины в пространстве (на множестве устройств компьютера) и во
времени.
Важность проблемы защиты памяти подчеркивается тем фактом, что многопрограммный режим
работы микропроцессора в ПК обычно называют защищенным режимом.
Простейшим вариантом многопрограммного режима является режим пакетной обработки.Он в
максимальной степени обеспечивает загрузку всех ресурсов машины, но наименее удобен
пользователю.
Второй частный случай многопрограммного режима — режим разделения времени, характерен
тем, что на машине действительно одновременно решается несколько задач, каждой из которых
по очереди выделяются кванты времени, обычно недостаточные для полного решения задачи.
Условием прерывания решения текущей задачи служит либо истечение кванта выделенного
времени, либо обращение к процессору какого-либо приоритетного внешнего устройства,
например клавиатуры для ввода информации.
Прерывание задачи от клавиатуры является типичным для диалогового режима работы ПК,
являющегося частным случаем режима разделения времени. Диалоговые режимы характерны для
многопользовательских систем: они обеспечивают одновременную работу нескольких
пользователей при решении задач в интерактивном режиме. В процессе решения задачи
пользователь имеет возможность корректировать ход выполнения своего задания. Диалоговые
системы активно используются при совместной работе нескольких пользователей даже с одной
программой: формирование и корректировка баз данных, программ, чертежей, схем и документов.
Режим реального времени — еще один вариант режима с разделением машинного времени. Этот
режим используется в основном в динамических системах управления и диагностики, когда строго
регламентируется время ответа системы (выполнения задания) на случайно поступающие
запросы.
Все режимы разделения машинного времени обеспечивают пользователю работу в режиме
«on-line».
Основная нагрузка на реализацию многопрограммных режимов, как уже говорилось, ложится на
операционную систему.

12. Виртуальная память


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

Виртуальная память может быть организована 3мя методами:


1. Страничная виртуальная память – организует перемещение процессов между ОЗУ
и диском частями фиксированного размера (страницами).
2. Сегментная виртуальная память – предусматривает перемещение данных между ОЗУ
и диском частями произвольного размера (сегментами), полученными с учетом
назначения данных.
3. Сегментно-страничная виртуальная память – использует комбинацию двух
приведенных методов, когда адресное пространство процесса делится на сегменты, а
затем сегменты делятся на страницы.

13. Мультипроцессорная обработка


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

1. Прямой доступ к памяти


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

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

15. Конвейеризация
Конвейеризация - процесс, посредством которого различные фазы обработки накладываются по
времени одна на другую. Это означает разбиение команды на отдельные этапы и исполнение
получившихся микроинструкций различными элементами процессора с передачей данных одного
этапа следующему. Однако разбиение команд и контроль за исполнением каждого шага
усложняет управляющие цепи и требует на каждом шаге памяти для временного хранения
промежуточных данных (конвейерные регистры).
Производительность при конвейеризации возрастает благодаря тому, что одновременно на
различных ступенях конвейера выполняются несколько операций. Конвейеризация эффективна
только тогда, когда загрузка конвейера близка к полной, а скорость подачи новых операндов
соответствует максимальной производительности конвейера. Если происходит задержка, то
параллельно будет выполняться меньше операций и суммарная производительность снизится.
Обработка команды может быть разделена на несколько основных этапов (5 микрокоманд),
каждый из которых выполняется определенной частью аппаратного обеспечения. Каждая
операция требует для своего выполнения времени, равного такту генератора процессора. Вызов
команд из памяти является главным препятствием высокой скорости выполнения команд, т.к. этот
этап не может быть выполнен за 1 такт. Поэтому команды вызываются из памяти заранее, чтобы
они имелись в наличии в тот момент, когда будут необходимы. Эти команды помещаются в набор
регистров (буфер выборки с упреждением). Когда требуется определённая команда, она
вызывается прямо из буфера.

2. Иерархия памяти
Современные вычислительные машины содержат несколько видов памяти, в том числе основную
(первичную, оперативную), внешнюю (вторичную, массовую) и кэш-память. В основной памяти
должны размещаться команды и данные, к которым будет обращаться работающая программа.
Внешняя память — это магнитные диски, предназначенные для хранения информации, которая со
временем будет записана в основную память. Кэш-память — это буферная память очень высокого
быстродействия, предназначенная для повышения скорости выполнения работающих программ;
для программ пользователя эта память, как правило, «прозрачна». В вычислительных машинах,
оснащенных кэш-памятью, текущая часть программы помещается в кэш-память, что позволяет
выполнять ее гораздо быстрее, чем если бы она находилась в основной памяти. Все эти виды
памяти создают единую иерархию памяти; переход по уровням этой иерархии от кэш-памяти к
основной и затем к внешней памяти сопровождается уменьшением стоимости и скорости и
увеличением емкости памяти. Память, как правило, разделяется на байты (символы) или слова
(состоящие из постоянного количества байтов). Каждая ячейка памяти имеет свой адрес;
множество адресов, доступных программе, называется адресным пространством.

3. Программирование на машинном языке


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

18. Ассемблеры и макропроцессоры


Язык ассемблера — это машинно-зависимый язык низкого уровня, в котором короткие
мнемонические имена соответствуют отдельным машинным командам. Используется для
представления в удобочитаемой форме программ, записанных в машинном коде.
Язык ассемблера позволяет программисту пользоваться текстовыми мнемоническими (то есть
легко запоминаемыми человеком) кодами, по своему усмотрению присваивать символические
имена регистрам компьютера и памяти, а также задавать удобные для себя способы адресации.
Кроме того, он позволяет использовать различные системы счисления (например, десятичную или
шестнадцатеричную) для представления числовых констант, использовать в программе
комментарии и др. Программы, написанные на языке ассемблера, требуют значительно меньшего
объема памяти и времени выполнения. Знание программистом языка ассемблера и машинного
кода дает ему понимание архитектуры машины.
Для того, чтобы написать программу на языке ассемблера для конкретного компьютера,
необходимо знать его архитектуру.
Самыми рутинными операциями при программировании в кодах были:
· формирование кода команды;
· вычисление физических адресов ячеек с данными;
· вычисление смещений для команд условного и безусловного ветвлений.
Для первой проблемы при отладке программы или ее изменении. Вторая и третья проблемы
также были решены без особых усилий: вместо использования реальных адресов в тексте
программы располагались символические метки, а программа, генерирующая машинный код,
вычисляла фактическое расположение ячеек в оперативной памяти и поставляла его в код.

19. Компиляторы
Язык программирования задается описанием и реализуется в виде специальной программы –
транслятора. Существует два вида трансляторов - компиляторы и интерпретаторы.
Соответственно и языки программирования делятся на два класса — компилируемые и
интерпретируемые.
Текст программы, записанный на каком-либо компилируемом языке при помы было найдено
следующее решение: для каждой машинной команды были подобраны краткие мнемоники,
отражающие ее суть. Например, для команды пересылки данных - MOV, для команды сложения -
ADD и т.п. Такие мнемоники намного легче запомнить, чем двоичные, восьмеричные или
шестнадцатеричные коды команды; кроме того, их не в пример легче читать, а это тоже
немаловажно мощи специальной программы компилятора преобразуется (компилируется) в набор
инструкций для данного типа процессора (машинный код) и далее записывается в исполняемый
файл, который может быть запущен на выполнение как отдельная программа. То есть компилятор
переводит программу с языка высокого уровня на низкоуровневый язык, понятный процессору.
Как правило, скомпилированные программы выполняются быстрее и не требуют для выполнения
дополнительных средств, так как уже переведены на машинный язык. Вместе с тем, при каждом
изменении текста программы требуется ее перекомпиляция, что создает трудности при
разработке. Кроме того, скомпилированная программа может выполняться только на том же типе
компьютеров, и, как правило, под той же операционной системой, на которую был рассчитан
компилятор. Чтобы создать исполняемый файл для машины другого типа требуется новая
компиляция.

4. Интерпретаторы
Если же программа написана на интерпретируемом языке, то интерпретатор непосредственно
выполняет (интерпретирует) ее текст без предварительного перевода. То есть компилятор
переводит программу на машинный язык сразу и целиком, создавая при этом отдельную
программу, а интерпретатор переводит на машинный язык прямо во время исполнения
программы. Можно сказать, что процессор компьютера — это аппаратный интерпретатор
машинного кода.
Интерпретируемые языки обладают некоторыми специфическими дополнительными
возможностями, кроме того, программы на них можно запускать сразу же после изменения, что
облегчает разработку. Программа на интерпретируемом языке может быть, зачастую, запущена
на разных типах машин и операционных систем без дополнительных усилий. Однако
интерпретируемые программы выполняются заметно медленнее, чем компилируемые, кроме того,
они не могут выполняться без дополнительной программы-интерпретатора.

21. Процедурно-ориентированные и проблемно-ориентированные


языки
Процедурные (алгоритмические) языки (Fortran, Cobol, Algol, Basic, Pascal, C и др.) -
предназначены для однозначного описания алгоритмов; для решения задачи процедурные языки
требуют в той или иной форме явно записать процедуру ее решения. Программа на процедурном
языке программирования состоит из последовательности операторов (инструкций), задающих те
или иные действия.

Фортран (FORTRAN, FORmula TRANslation) – язык программирования высокого уровня,


разработанный фирмой IBM в 1956 г. для описания алгоритмов решения вычислительных задач.
Наиболее распространенными версиями этого языка являются Фортран IV, Фортран 77 и Фортран
90. Последние версии Фортрана используются для программирования компьютеров с
параллельной архитектурой.

Кобол (COBOL, COmmon Business-Oriented Language) - язык программирования высокого уровня,


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

Алгол (ALGOL, ALGOrithmic Language) - язык программирования высокого уровня,


ориентированный на описание алгоритмов вычислительных задач. Был создан в 1958 г.
специалистами западно-европейских стран для решения научных задач. Версия этого языка
Алгол-60 была принята Международной конференцией в Париже и получила широкое
распространение. Версия Алгол-68, разработанная группой специалистов Международной
федерации по обработке информации в 1968 г., получила статус международного универсального
языка программирования, ориентированного на решение не только вычислительных, но и
информационных задач. Хотя этот язык не получил широкого распространения, он долгие годы
являлся стандартом для описания алгоритмов в научной литературе.

Бейсик (BASIC, Beginners All-purpose Symbolic Instruction Code) - язык программирования высокого
уровня, разработанный в 1963-1964 гг. в Дартмутском колледже Томасом Куртом и Джоном
Кемени. Первоначально предназначался для обучения программированию. Отличался простотой,
благодаря наличию упрощенных конструкций языка Фортран и встроенных математических
функций. Большинство версий Бейсика используют интерпретатор для преобразования
конструкций языка в машинный код и позволяют запускать программы без промежуточной
трансляции. В начале 1999 г. корпорация Microsoft выпустила версию Visual Basic (VB 6.0),
предназначенного для создания многокомпонентных приложений для систем уровня предприятий.

Паскаль (PASCAL, Program Applique a la Selection et la Compilation Automatique de la Litterature) –


франц. язык программирования высокого уровня, разработанный в конце 1960-х гг. швейцарским
профессором и (в последствии) нобелевским лауреатом Никласом Виртом, для первоначального
обучения программированию в университете. Язык назван в честь французского математика XVII
века Блеза Паскаля. Для IBM PC наиболее популярной являлась система программирования
Delphi фирмы Borland.

Си (C) - язык программирования высокого уровня, разработанный Денисом Ритчи в начале 1970-х
гг. на базе языка BCPL. Является базовым языком операционной системы Unix. До сих пор
является одним из наиболее популярных языков программирования.

22. Спулинг
Спулинг – это способ работы с выделенными устройствами в мультипрограммной системе.
Рассмотрим типичное устройство, требующее спулинга –принтер. Хотя технически легко
позволить каждому пользовательскому процессу открыть специальный файл, связанный с
принтером, такой способ опасен из-за того, что пользовательский процесс может
монополизировать принтер на произвольное время. Вместо этого создается специальный процесс
– монитор, который получает исключительные права на использование этого устройства. Также
создается специальный каталог, называемый каталогом спулинга. Для того, чтобы напечатать
файл, пользовательский процесс помещает выводимую информацию в этот файл и помещает его
в каталог спулинга. Процесс-монитор по очереди распечатывает все файлы, содержащиеся в
каталоге спулинга.

1. Абсолютные и перемещающие загрузчики


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

2. Связывающие загрузчики и редакторы связей


В первых вычислительных машинах программист писал на машинном языке программу, которая
содержала все команды, необходимые для решения конкретной задачи. Даже сложные и в
определенном смысле опасные процедуры управления вводом-выводом в каждой программе на
машинном языке приходилось кодировать вручную.
В настоящее время программы пользователя зачастую содержат лишь незначительную часть
команд и данных, необходимых для решения поставленной задачи. В составе системного
программного обеспечения поставляются большие библиотеки подпрограмм, так что программист,
которому необходимо выполнять определенные стандартные операции, может воспользоваться
для этого готовыми подпрограммами. В частности, операции ввода-вывода обычно выполняются
подпрограммами, находящимися вне программы пользователя. Поэтому программу на машинном
языке, полученную в результате трансляции, приходится, как правило, комбинировать с другими
программами на машинном языке, чтобы сформировать необходимый исполняемый модуль. Эту
процедуру объединения программ выполняют связывающие загрузчики и редакторы связей до
начала выполнения программы. Связывающий загрузчик во время загрузки объединяет
необходимые программы и загружает их непосредственно в основную память. Редактор связей
также осуществляет подобное объединение программ, однако он создает загрузочный модуль,
который записывается во внешнюю память для будущего использования. Редактор связей играет
особенно важную роль для производственных систем; когда программу необходимо выполнять, ее
загрузочный модуль, сформированный при помощи редактора связей, может быть загружен
немедленно — без накладных затрат времени (часто весьма больших) на повторное объединение
отдельных частей программы.

25. Микропрограммы
Принято считать, что автором концепции микропрограммирования является
профессор Морис Уилкс. В своей статье в 1951 г. (Wi 51) он предложил принципы,
которые легли в основу современных методов микропрограммирования. Однако
начало реального внедрения микропрограммирования связано с появлением
System/360 в середине 60-х годов. В течение 60-х годов изготовители
компьютеров применяли микропрограммирование для реализации наборов команд
машинного языка (Ни 70).
В конце 60-х — начале 70-х годов появилось динамическое
микропрограммирование, предусматривающее возможность легкой загрузки новых
микропрограммных модулей в управляющую память, служащую для выполнения
микропрограмм. Благодаря этому стало возможным динамично и часто менять
наборы команд вычислительной машины. И сейчас уже никого не удивит, если в
мультипрограммных системах новых поколений будут предусматриваться
возможности предоставления различных наборов команд различным
пользователям, с тем чтобы в процессе переключения процессора с программы на
программу можно было также осуществлять переход с одного набора машинных
команд на другой, необходимый следующему пользователю.
Микропрограммирование вводит дополнительный уровень средств
программирования, нижележащий по отношению к машинному языку компьютера,
и тем самым оно позволяет определять конкретные команды машинного языка.
Подобные возможности являются неотъемлемой частью архитектуры современных
компьютеров и имеют громадное значение с точки зрения обеспечения высоких
скоростных характеристик и защиты операционных систем.
Микропрограммы размещаются в специальной управляющей памяти очень высокого
быстродействия. Они состоят из индивидуальных микрокоманд, которые
гораздо более элементарны по своей природе и более рассредоточены по функциям, чем
обычные команды машинного языка. В компьютерах, где набор команд
машинного языка реализуется при помощи микропрограммирования, каждой команде машинного
языка соответствует целая и, .быть может, большая
микропрограмма. Тем самым сразу же становится очевидным, что микропрограммирование
окажется эффективным только в том случае, если управляющая
память будет обладать гораздо большим быстродействием; чем основная.

3. Горизонтальный и вертикальный микрокод


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

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

Литература:
1. Дейтел Г. Введение в ОС, т.1,2.- М.:Мир, 1987
2. Таненбаум С. Современные ОС.- С.-П.: Изд. Группа BHV, 2002

14
15