Однопроцессорные системы

 

Однопроцессорные машины 40-50-х годов XX века не были ни гибкими, ни эф­фективными. Выполнение программ требовало трудоемких приготовлений: уста­новление лент, помещение перфокарт в устройство для считывания, настройка переключателей и т. д. Выполнение каждой программы, которая называлась за­данием, рассматривалось как отдельное действие. В случае, когда машина требо­валась нескольким пользователям, были предусмотрены специальные карты вхо­да, так что пользователь мог бронировать машину на какое-то определенное время. В течение времени, назначенного пользователю, машина была пол­ностью под его контролем. Сеанс работы обычно начинался с установки про­граммы, затем следовал короткий период ее исполнения.

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

В системах с пакетной обработкой задания, помещенные в запоминающее устройство, ждали выполнения в очереди заданий (job queue). Очередь — это способ организации хранения данных, при котором объекты (в нашем случае задания) упорядочены по принципу FIFO (first-in, first-out — первым вошел — первым обслужен). То есть объекты выбираются из очереди в том же порядке, в котором они помещаются в нее. В действительности большинство очередей за­даний не строго следуют структуре FIFO, так как в большинстве операционных систем предусмотрены приоритеты заданий. В результате выполнение задания может быть отложено из-за другого задания, которое имеет более высокий при­оритет.

В ранних системах пакетной обработки каждое задание сопровождалось набо­ром инструкций, объясняющих, как подготавливать машину к заданию. Эти ин­струкции записывались на языке управления заданиями (JCL — job control language) и хранились вместе с заданием в очереди заданий. Когда задание выбиралось для исполнения, операционная система распечатывала эти инструкции на принтере, чтобы их мог прочитать оператор машины. Инструкции, которые требовали дей­ствий оператора, были связаны преимущественно с периферийным оборудовани­ем. Поскольку сегодня эти действия сведены к минимуму, языки управления заданиями стали средством коммуникации с операционной системой, а не с опе­ратором. Оператор вычислительной машины стал не нужен.

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

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

Для удовлетворения этих потребностей были разработаны операционные сис­темы, которые позволяли вести диалог с пользователем во время выполнения программы через отделенный терминал или рабочую станцию. Этот процесс на­зывается интерактивной, или диалоговой, обработкой данных (interactive processing). Интерактивные системы требуют, чтобы время, затрачиваемое маши­ной на выполнение задач, было совместимо с действиями аппаратных средств. Для решения таких задач используется обработка данных в реальном времени (real-time processing).

Если бы интерактивные системы единовременно обслуживали только одного пользователя, то обработка данных в реальном времени не представляла бы ни­каких трудностей. Но компьютеры были дорогими, поэтому с каждой машиной работали несколько пользователей. Следовательно, как правило, несколько пользователей одновременно нуждались в интерактивных услугах, и обработка в реальном времени была проблемой.

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

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