Простые пакетные системы
Первые машины были очень дорогими, поэтому было важно использовать их как можно эффективнее. Простои, происходившие из-за несогласованности расписания, а также время, затраченное на подготовку задачи, — все это обходилось слишком дорого; эти непроизводительные затраты были непозволительной роскошью.
Чтобы повысить эффективность работы, была предложена концепция пакетной операционной системы. Похоже, первые пакетные операционные системы (и вообще первые операционные системы какого бы то ни было типа) были разработаны в средине 50-х годов в компании General Motors для машин IBM 701 [WEIZ81]. Впоследствии эта концепция была усовершенствована и внедрена определенным кругом пользователей на IBM 704. В начале 60-х годов некоторые поставщики разработали пакетные операционные системы для своих компьютеров. Одной из заметных систем того времени является IBSYS фирмы IBM, разработанная для компьютеров 7090/7094 и оказавшая значительное влияние на другие системы.
Главная идея, лежащая в основе простых пакетных схем обработки, состоит в использовании программы, известной под названием монитор (monitor). Используя операционную систему такого типа, пользователь не имеет непосредственного доступа к машине. Вместо этого он передает свое задание на перфокартах или магнитной ленте оператору компьютера, который собирает разные задания в пакеты и помещает их в устройство ввода данных. Так они передаются монитору. Каждая программа составлена таким образом, что при завершении ее работы управление переходит к монитору, который автоматически загружает следующую программу.
Чтобы понять работу этой схемы, рассмотрим ее с точки зрения монитора и процессора.
• Работа схемы с точки зрения монитора. Монитор управляет последовательностью событий. Чтобы это было возможно, большая его часть
должна всегда находиться в основной памяти и быть готовой к работе
(рис. 2.3). Эту часть монитора называют резидентным монитором. Оставшуюся часть составляют утилиты и общие функции, которые загружаются в виде подпрограмм, вызываемых программой пользователя в начале выполнения каждого задания (если они для него требуются). Монитор считывает с устройства ввода данных (обычно это устройство ввода с перфокарт или магнитная лента) по одному заданию. При этом текущее задание размещается в области памяти, предназначенной для программ пользователя, и ему передается управление. По завершении задания оно возвращает управление монитору, который сразу же начинает считывать следующее задание. Результат исполнения каждого задания направляется на устройство вывода, например принтер.
• Работа схемы с точки зрения процессора. Допустим, в некоторый момент
времени процессор исполняет команды, которые находятся в той части основной памяти, которую занимает монитор. Это приводит к тому, что в
другую область памяти считывается новое задание. После того как задание
полностью считано, монитор отдает процессору команду перехода, по которой он должен начать исполнение программы пользователя. Процессор переходит к обработке программы пользователя и выполняет ее команды до
тех пор, пока не дойдет до конца или пока не возникнет сбойная ситуация.
В любом из этих двух случаев следующей командой, которую процессор извлечет из памяти, будет команда монитора. Таким образом, фраза "контроль передается заданию" означает, что процессор перешел к извлечению и выполнению команд программы пользователя. Фраза же "контроль возвращается монитору" означает, что теперь процессор извлекает из памяти и выполняет команды монитора.
Рис. 2.3. Схема размещения резидентного монитора в памяти
Как видите, монитор решает проблему разработки графика. Задания в пакетах выстраиваются в очередь и выполняются без простоев настолько быстро, насколько это возможно. Кроме того, монитор помогает в подготовке программы к исполнению. В каждое задание включаются простые команды языка управления заданиями (job control language — JCL). Это специальный тип языка программирования, используемый для того, чтобы отдавать команды монитору. Рассмотрим простой пример, в котором нужно принять на обработку программу пользователя, составленную на языке FORTRAN, и дополнительные данные, используемые этой программой. Все команды языка FORTRAN и данные находятся на отдельных перфокартах или в отдельных записях на магнитной ленте. Каждое задание, кроме операторов языка FORTRAN и данных, содержит команды управления заданием, каждая из которых начинается знаком $. Формат задания в целом выглядит следующим образом:
Чтобы выполнить это задание, монитор читает строку $FTN и загружает с запоминающего устройства большой емкости (обычно это лента) компилятор соответствующего языка. Компилятор преобразует программу пользователя в объектный код, который записывается в память или на запоминающее устройство. Если этот код заносится в память, то операция называется "компиляция, загрузка и запуск". Если же он записывается на магнитную ленту, то нужна дополнительная команда $LOAD. Монитор, к которому вернулось управление после компиляции, читает эту команду и обращается к загрузчику, который загружает объектную программу в память (на место компилятора) и передает ей управление. В таком режиме различные подсистемы совместно используют один и тот же участок основной памяти, хотя в каждый момент времени работает только одна из этих подсистем.
Во время выполнения программы пользователя по каждой команде ввода считывается только одна строка данных. Команда ввода программы пользователя обращается к подпрограмме ввода, которая является составной частью операционной системы. Подпрограмма ввода проверяет, не произошло ли случайное считывание строки языка JCL. Если это произошло, управление передается монитору. При успешном (или неудачном) завершении задания пользователя монитор проверяет строки задания, пока не дойдет до строки с командой на языке управления, что защищает систему от программ, в которых оказалось слишком много или слишком мало строк с данными (иначе очередным заданием могли оказаться излишние данные предыдущего задания, или часть нового задания Могла бы рассматриваться как недостающие данные предыдущего задания).
Таким образом, монитор, или пакетная операционная система, — это обычная компьютерная программа. Ее работа основана на способности процессора выбирать команды из различных областей основной памяти; при этом происходит передача и возврат управления. Желательно также использование и других возможностей аппаратного обеспечения.
• Защита памяти. Во время работы программы пользователя она не должна
вносить изменения в область памяти, в которой находится монитор. Если
же такая попытка предпринята, аппаратное обеспечение процессора должно
обнаружить ошибку и передать управление монитору. Затем монитор снимет задачу с выполнения, распечатает сообщение об ошибке и загрузит следующее задание.
• Таймер. Таймер используется для того, чтобы предотвратить ситуацию, когда одна задача захватит безраздельный контроль над системой. Таймер выставляется в начале каждого задания. По истечении определенного промежутка времени программа пользователя останавливается и управление передается монитору.
• Привилегированные команды. Некоторые команды машинного уровня
имеют повышенные привилегии и могут исполняться только монитором.
Если процессор натолкнется на такую команду во время исполнения про
граммы пользователя, возникнет ошибка, при которой управление будет
передано монитору. В число привилегированных команд входят команды ввода-вывода; это значит, что все устройства ввода-вывода контролируются монитором. Это, например, предотвращает случайное чтение программой пользователя команд управления, относящихся к следующему заданию. Если программе пользователя нужно произвести ввод-вывод, она должна запросить для выполнения этих операций монитор.
• Прерывания. В первых моделях компьютеров этой возможности не было. Она придает операционной системе большую гибкость при передаче управления программе пользователя и его возобновлении.
Конечно, операционную систему можно разработать и без учета описанных выше возможностей. Однако поставщики компьютеров скоро поняли, что это приведет к хаосу, поэтому даже сравнительно простые пакетные операционные системы обращались к таким возможностям аппаратного обеспечения.
При работе пакетных операционных систем машинное время распределялось между исполнением программы пользователя и монитора. При этом в жертву приносились два вида ресурсов: монитор занимал некоторую часть оперативной памяти, им же потреблялось некоторое машинное время. И то и другое приводило к непроизводительным издержкам. Несмотря на это, простые пакетные системы существенно повышали эффективность использования компьютера.
Дата добавления: 2016-06-05; просмотров: 2484;