В те времена, когда компьютеры только появились, принципы работы с ними сильно отличались от современных. Одним компьютером пользовалось большое количество людей. Рядом с машиной лежал листок бумаги, и если программист хотел запустить свою программу, он записывался на какое-то определенное время, скажем, на среду с 3 часов ночи до 5 утра (многие программисты любили работать в тишине). В назначенное время программист направлялся в комнату, где стояла машина, с пачкой перфокарт, которые тогда служили средством ввода, и карандашом. Каждая перфокарта содержала 80 колонок; на ней в определенных местах пробивались отверстия. Войдя в комнату, программист вежливо просил предыдущего программиста освободить место и приступал к работе.
Если он хотел запустить программу на языке FORTRAN, ему необходимо было пройти следующие этапы:
1. Он подходил к шкафу, где находилась библиотека программ, брал большую зеленую стопку перфокарт с надписью «Компилятор FORTRAN», помещал их в считывающее устройство и нажимал кнопку «Пуск».
2. Затем он помещал стопку карточек со своей программой, написанной на языке FORTRAN, в считывающее устройство и нажимал кнопку «Продолжить». Программа считывалась.
3. Когда компьютер прекращал работу, программист считывал свою программу во второй раз. Некоторые компиляторы требовали только одного считывания перфокарт, но в большинстве случаев необходимо было производить эту процедуру несколько раз. Каждый раз нужно было считывать большую стопку перфокарт.
4. В конце концов трансляция завершалась. Программист часто становился очень нервным, потому что если компилятор находил ошибку в программе, ему приходилось исправлять ее и начинать процесс ввода программы заново. Если ошибок не было, компилятор выдавал программу на машинном языке на перфокартах.
5. Тогда программист помещал эту программу на машинном языке в устройство считывания вместе с пачкой перфокарт из библиотеки подпрограмм и загружал обе эти программы.
6. Начиналось выполнение программы. В большинстве случаев она не работала или неожиданно останавливалась в середине. Обычно в этом случае программист начинал дергать переключатели на пульте и смотрел на лампочки. В случае удачи он находил и исправлял ошибку, подходил к шкафу, в котором лежал большой зеленый компилятор FORTRAN, и начинал все заново. В случае неудачи он делал распечатку содержания памяти, что называлось разгрузкой оперативного запоминающего устройства, и брал эту распечатку домой для изучения.
Это процедура была обычной на протяжении многих лет. Программистам приходилось учиться, как работать с машиной и что нужно делать, если она выходила из строя, что происходило довольно часто. Машина постоянно простаивала без работы, пока люди носили перфокарты по комнате или ломали головы над тем, почему программа не работает.
В 60-е годы человек попытался сократить количество потерянного времени, автоматизировав работу оператора. Программа под названием «операционная система» теперь содержалась в компьютере все время. Программист приносил пачку перфокарт со специальной программой, которая выполнялась операционной системой. На рисунке 1.3 показана модель пачки перфокарт для первой широко распространенной операционной системы FMS (FORTRAN Monitor System) к компьютеру IBM-709 компании IBM.
Рис. 1.3. Схема работы с операционной системой FMS
Операционная система считывала перфокарту *JOB и использовала содержащуюся на ней информацию для учета системных ресурсов (звездочка ставилась, чтобы отличать перфокарты с программой контроля от перфокарт с данными). Затем операционная система считывала перфокарту *FORTRAN, которая представляла собой команду для загрузки компилятора FORTRAN с магнитной ленты. После этого компилятор считывал и компилировал программу, написанную на языке FORTRAN. Как только компилятор заканчивал работу, операционная система считывала перфокарту *DATA — команду по выполнению транслированной программы с использованием перфокарт данных.
Операционная система была придумана для того, чтобы автоматизировать работу оператора (отсюда и название), но это не единственное ее назначение. Создание операционной системы было первым шагом в развитии новой виртуальной машины. Перфокарту *FORTRAN можно рассматривать как виртуальную команду к компилятору, а перфокарту *DATA — как виртуальную команду для выполнения программы. И хотя этот уровень состоял всего из двух команд, он был первым этапом в развитии виртуальных машин.
В последующие годы операционные системы все больше и больше усложнялись. К уровню архитектуры команд добавлялись новые команды, приспособления и особенности, и в итоге сформировался новый уровень.
Первые операционные системы считывали пачки перфокарт и распечатывали результат на принтере. Такая организация вычислений называлась пакетным режимом. Чтобы получить результат, обычно нужно было ждать несколько часов. При таких условиях было трудно развивать программное обеспечение.
Операционная система, (сокращенно ОС) — комплекс управляющих и обрабатывающих программ, которые, с одной стороны, выступают как интерфейс между устройствами вычислительной системы и прикладными программами, а с другой — предназначены для управления устройствами, управления вычислительными процессами, эффективного распределения вычислительных ресурсов между вычислительными процессами и организации надёжных вычислений.
В начале 60-х годов исследователи Массачусетского технологического института (МТИ) разработали операционную систему, которая давала возможность работать с компьютером сразу нескольким программистам. В этой системе к центральному компьютеру через телефонные линии подсоединялись отдаленные терминалы. Таким образом, центральный процессор разделялся между большим количеством пользователей. Программист мог напечатать свою программу и получить результаты почти сразу прямо в офисе, гараже или где бы то ни было еще (там, где находился терминал). Эти системы назывались (и сейчас называются) системами с разделением времени.
С 1970 года, когда микропрограммирование стало обычным, у производителей появилась возможность вводить новые машинные команды путем расширения микропрограммы, то есть с помощью программирования.
Многие программы были добавлены в микропрограмму например
1. для умножения и деления целых чисел.
2. для арифметических действий над числами с плавающей точкой.
3. для вызова и прекращения действия процедур.
4. для ускорения циклов.
5. для работы со строкой символов.
Как только производители поняли, что добавлять новые команды очень легко, они начали думать, какие дополнительные технические характеристики можно добавить к микропрограмме. Приведем несколько примеров:
1. Ускорение работы с массивами (индексная и косвенная адресация).
2. Перемещение программы из одного раздела памяти в другой после запуска программы (настройка).
3. Системы прерывания, которые дают сигнал процессору, как только закончена операция ввода или вывода.
4. Способность приостановить одну программу и начать другую, используя небольшое число команд (переключение процесса).
В дальнейшем дополнительные команды и технические характеристики вводились также для ускорения работы компьютеров.