Многозадачные пакетные системы

 

Процессору часто приходилось простаивать даже при автоматическом вы­полнении заданий под управлением простой пакетной операционной системы. Проблема заключается в том, что устройства ввода-вывода работают намного медленнее, чем процессор. На рис. 2.4 представлены соответствующие расчеты, выполненные для программы, которая обрабатывает файл с записями, причем для обработки одной записи требуется в среднем 100 машинных команд. В этом примере 96% всего времени процессор ждет, пока устройства ввода-вывода за­кончат передачу данных в файл и из него. На рис. 2.5,а показана такая ситуа­ция для одной программы. Некоторое время процессор исполняет команды; за­тем, дойдя до команды ввода-вывода, он должен подождать, пока она не закон­чится. Только после этого процессор сможет продолжить работу.

 

Чтение одной записи из файла 0.0015 s

Выполнение 100 машинных команд 0.0001 s

Внесение одной записи в файл 0.0015 s

Всего 0.003 Is

О 0001

Степень использования процессора = 0,0001/0.0031= 0.032 = 3.2%

 

Рис. 2.4. Пример использования системы.

 

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

 

Рис. 2.5. Пример многозадачности

 

Приведем простой пример, иллюстрирующий преимущества многозадачно­сти. Рассмотрим компьютер, имеющий 256 К слов памяти, не используемых операционной системой, диск, терминал и принтер. На обработку одновременно приняты три программы, JOB1, JOB2 и JOB3, атрибуты которых перечислены в (табл. 2.1.) Предположим, что для выполнения заданий JOB2 и JOB3 использова­ние процессора минимально, и задание JOB3 постоянно обращается к диску и принтеру. В простой среде с пакетной обработкой эти задания выполняются по­следовательно. Для завершения JOB1 требуется 5 мин. Задание JOB2 должно ждать, пока пройдут эти 5 мин, после чего оно выполняется в течение 15 мин. По истечении 20 мин начинает работу задание JOB3; его выполнение заканчива­ется через 30 мин после того, как оно было принято на обработку. Средний про­цент использования ресурсов, производительность и время отклика показаны в столбце табл. 2.2, соответствующем однозадачности, а на рис. 2.6,а показано ис­пользование различных устройств в этом режиме. Очевидно, что эффективность использования всех ресурсов, усредненная по всему периоду времени (30 мин), является крайне низкой.

Таблица 2.1. Свойства трех программ-примеров

 

JOB1 JOB2 JOB3 Тип задания Интенсивные Интенсивный Интенсивный вычисления ввод-вывод ввод-вывод   Продолжительность 5 мин 15 мин 10 мин Требуемая память 50 К 100 К 80 К Требуется ли диск Нет Нет Да Требуется ли терминал Нет Да Нет Требуется ли принтер Нет Нет Да

 

Таблица 2.2. Влияние многозадачности на использование ресурсов

 

Однозадачность Многозадачность Использование процессора 22% 43% Использование памяти 30% 67% Использование диска 33% 67% Использование принтера 33% 67% Затраченное время 30 мин 15 мин Производительность 6 заданий/час 12 заданий/час Среднее время отклика 8 мин 10 мин

 

Теперь предположим, что задания выполняются одновременно под управле­нием многозадачной операционной системы. Из-за того что они используют раз­ные ресурсы, их совместное выполнение на компьютере длится минимальное время (при условии, что заданиям JOB2 и JOB3 предоставляется достаточно процессорного времени для поддержки осуществляемого ими ввода и вывода в активном состоянии). Для выполнения задания JOB1 потребуется 5 мин, но к этому времени задание JOB2 будет выполнено на треть, а задание JOB3 — на половину. Все три задания будут выполнены через 15 мин. Если посмотреть на столбец табл. 2.2, соответствующий многозадачному режиму, его преимущества станут очевидны, как и из гистограммы, приведенной на рис. 2.6,б.

 

Рис. 2.6. Гистограммы использования ресурсов

 

Работа многозадачной пакетной системы, как и работа простой пакетной системы, базируется на некоторых аппаратных особенностях компьютера. Наи­более значительными дополнениями, полезными для многозадачности, являются аппаратное обеспечение, поддерживающее прерывания ввода-вывода, и прямой доступ к памяти. Используя эти возможности, процессор генерирует команду ввода-вывода для одного задания и переходит к другому на то время, пока кон­троллером устройства выполняется ввод-вывод. После завершения операции вво­да-вывода процессор получает прерывание, и управление передается программе обработки прерываний из состава операционной системы. Затем операционная система передает управление другому заданию.

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

Системы, работающие в режиме разделения времени

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

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

Как пакетная обработка, так и разделение времени используют многозадач­ность. Основные отличия этих двух режимов перечислены в табл. 2.3.

Таблица 2.3. Пакетная многозадачность и разделение времени

 

    Пакетная многозадачность Разделение времени  
Основная цель Максимальное использование процессора Уменьшение времени отклика
Источник указаний операционной системе Команды языка управления заданиями, помещаемые в задание Команды, вводимые с терминала

 

Одной из первых операционных систем разделения времени была система CTSS (Compatible Time-Sharing System) [CORB62], разработанная в Массачусетском технологическом институте группой, известной как Project MAC. Первона­чально система была разработана для IBM 709, а затем перенесена на IBM 7094.

По сравнению с более поздними системами, CTSS была довольно примитивна. Она работала на машине с основной памятью емкостью 32000 36-битовых слов, из которых 5000 слов занимал монитор. Когда управление должно было быть передано очередному интерактивному пользователю, его программа и данные загружались в остальные 27000 слов основной памяти. Программа всегда загружалась так, что ее начало находилось в ячейке номер 5000, что упрощало управление как монитором, так и памятью. Приблизительно через каждые 0.2 с системные часы генерировали прерывание. При каждом прерывании таймера управление передавалось операцион­ной системе, и процессор мог перейти в распоряжение другого пользователя. Таким образом, данные текущего пользователя через регулярные интервалы времени вы­гружались, а вместо них загружались другие. Перед считыванием программы и дан­ных нового пользователя программа и данные предыдущего пользователя записыва­лись на диск для сохранения до дальнейшего выполнения. Впоследствии, когда оче­редь этого пользователя наступит снова, код и данные его программы будут восстановлены в основной памяти.

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

Предположим, что всего работает четыре пользователя, которым нужны сле­дующие объемы памяти:

• JOB1: 15000

• JOB2: 20000

• JOB3: 5000

• JOB4: 10000

 

Рис. 2.7. Работа CTSS

Сначала монитор загружает задание JOB1 и передает ему управление (а). Затем он принимает решение передать управление заданию JOB2. Из-за того, что JOB2 занимает больше памяти, чем JOB1, сначала нужно сохранить данные JOB1, а затем можно загружать JOB2 (б). Затем для обработки загружается JOB3. Но поскольку это задание меньше, чем JOB2, часть задания JOB2 может оставаться в основной памяти, сокращая время записи на диск (в). Позже мони­тор вновь передает управление заданию JOB1. Чтобы загрузить его в память, на диск необходимо записать еще часть задания JOB2 (г). При загрузке задания JOB4 в памяти остается часть заданий JOB1 и JOB2 (д). Если теперь будет акти­визировано задание JOB1 или JOB2, то потребуется лишь частичная его загруз­ка. Следующим в этом примере запускается задание JOB2. Для этого требуется, чтобы JOB4 и оставшаяся в памяти часть JOB1 были записаны на диск, а в па­мять была считана недостающая часть JOB2.

Подход CTSS по сравнению с современными принципами разделения време­ни является примитивным, но вполне работоспособным. Его простота позволяла использовать монитор минимальных размеров. Из-за того что задание всегда загружалось в одно и то же место в памяти, не было необходимости применять во время загрузки методы перемещения (которые рассматриваются позже). Необхо­дим был лишь метод записи, позволяющий уменьшить активность диска. Рабо­тая на машине 7094, CTSS могла обслуживать до 32 пользователей.

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