В вычислительной технике управление заданиями относится к управлению несколькими задачами или заданиями в компьютерной системе , гарантируя, что каждое из них имеет доступ к достаточным ресурсам для правильного выполнения, что конкуренция за ограниченные ресурсы не приведет к тупиковой ситуации , когда два или более заданий не смогут завершиться, разрешая такие ситуации, если они возникают, и завершая задания, которые по какой-либо причине не выполняются так, как ожидалось.
Управление заданиями развивалось с первых дней существования компьютеров , когда операторы- люди отвечали за настройку, мониторинг и управление каждым заданием, до современных операционных систем , которые берут на себя большую часть работы по управлению заданиями.
Даже при наличии очень сложной системы планирования желательно некоторое вмешательство человека. Современные системы позволяют своим пользователям останавливать и возобновлять задания, выполнять их на переднем плане (с возможностью взаимодействия с пользователем) или в фоновом режиме. Unix-подобные системы следуют этому шаблону .
Для ранних разработчиков компьютеров стало очевидно, что их быстрые машины проводили большую часть времени в режиме ожидания, поскольку единственная программа, которую они выполняли, должна была ждать, пока медленное периферийное устройство завершит важную операцию, такую как чтение или запись данных; говоря современным языком, программы были привязаны к вводу-выводу , а не к вычислениям . Буферизация обеспечивала лишь частичное решение; в конечном итоге выходной буфер занимал всю доступную память, или входной буфер опустошал программа, и система была вынуждена ждать, пока относительно медленное устройство завершит операцию.
Более общее решение — многозадачность . В компьютере в любой момент времени присутствует более одной работающей программы или процесса . Если процесс не может продолжаться, его контекст может быть сохранен, и компьютер может запустить или возобновить выполнение другого процесса. Сначала довольно простая и полагающаяся на специальные методы программирования, многозадачность вскоре стала автоматизированной и обычно выполнялась специальным процессом, называемым планировщиком , имеющим возможность прерывать и возобновлять выполнение других процессов. Обычно драйвер периферийного устройства приостанавливает выполнение текущего процесса, если устройство не может немедленно завершить операцию, и планировщик помещает процесс в свою очередь спящих заданий. Когда периферийное устройство завершает операцию, процесс снова пробуждается. Подобная приостановка и возобновление могут также применяться к межпроцессному взаимодействию , где процессы должны взаимодействовать друг с другом асинхронным образом, но иногда могут ожидать ответа.
Однако такое низкоуровневое планирование имеет свои недостатки. Процесс, которому редко требуется взаимодействие с периферийными устройствами или другими процессами, просто пожирал бы ресурсы процессора, пока не завершился бы или не был бы остановлен ручным вмешательством. Результатом, особенно для интерактивных систем, выполняющих задачи, которые часто взаимодействуют с внешним миром, является то, что система становится вялой и медленно реагирует своевременно. Эта проблема решается путем выделения каждому процессу «временного среза» — периода непрерывного выполнения, после которого планировщик автоматически помещает его в очередь сна. Процессу можно задать разные приоритеты, и планировщик затем может выделить различные доли доступного времени выполнения каждому процессу на основе назначенных приоритетов.
Эта система упреждающей многозадачности лежит в основе большинства современных систем управления заданиями.
Хотя пакетная обработка может выполняться круглосуточно, с участием операторов или без них, [1] поскольку компьютер работает намного быстрее человека, большинство решений принимаются еще до начала выполнения задания и требуют планирования со стороны «программиста».
Хотя оператор компьютера может присутствовать, пакетная обработка в основном должна работать без вмешательства человека. Поэтому в представленных инструкциях необходимо включить множество деталей:
Первые компьютерные резидентные мониторы и операционные системы были относительно примитивными и не могли выполнять сложное распределение ресурсов. Обычно такие решения о распределении принимались оператором компьютера или пользователем, который отправлял задание. Пакетная обработка была распространена, а интерактивные компьютерные системы были редки и дороги. Языки управления заданиями развивались как примитивные инструкции, обычно пробитые на картах в начале колоды, содержащей входные данные, запрашивающие такие ресурсы, как распределение памяти, серийные номера или имена катушек магнитной ленты, которые должны быть доступны во время выполнения, или назначение имен файлов или устройств номерам устройств, на которые ссылается задание. Типичным примером такого рода языка, все еще используемого на мэйнфреймах, является язык управления заданиями IBM ( также известный как JCL). Хотя формат ранних JCL был предназначен для использования перфокарт , формат пережил переход к хранению в компьютерных файлах на диске.
Пакетные системы мэйнфреймов не IBM имели некоторую форму языка управления заданиями, независимо от того, назывались они так или нет; их синтаксис полностью отличался от версий IBM, но они обычно предоставляли схожие возможности. Интерактивные системы включают « командные языки » — командные файлы (такие как файлы PCDOS «.bat») могут запускаться неинтерактивно, но они обычно не обеспечивают такую же надежную среду для запуска автоматических заданий, как JCL. В некоторых компьютерных системах язык управления заданиями и интерактивный командный язык могут отличаться. Например, TSO в системах z/OS использует CLIST или Rexx в качестве командных языков вместе с JCL для пакетной работы. В других системах они могут быть одинаковыми.
Не-IBM JCL, которые когда-то были известны как BUNCH (Burroughs, Univac/Unisys, NCR, Control Data, Honeywell), за исключением Unisys , являются частью BANG [3] [4] , которая была прекращена.
По мере развития систем разделения времени возникло интерактивное управление заданиями. Конечный пользователь в системе разделения времени мог интерактивно отправлять задание со своего удаленного терминала ( удаленный ввод задания ), общаться с операторами, чтобы предупредить их об особых требованиях, и запрашивать систему о ходе его выполнения. Он мог назначать приоритет заданию и завершать (убивать) его при желании. Он также мог, естественно, запускать задание на переднем плане, где он мог напрямую общаться с исполняемой программой. Во время интерактивного выполнения он мог прерывать задание и позволять ему продолжаться в фоновом режиме или завершать его. Это развитие интерактивных вычислений в многозадачной среде привело к разработке современной оболочки .
Возможность не указывать часть или всю информацию о файле или устройстве, которое будет использоваться данной программой, называется независимостью от устройств .
Упреждающая многозадачность с контролем заданий гарантирует, что система работает своевременно большую часть времени . В некоторых средах (например, при эксплуатации дорогостоящего или опасного оборудования) сильным ограничением конструкции системы является предоставление своевременных результатов при любых обстоятельствах. В таких обстоятельствах контроль заданий становится более сложным, а роль планирования более важной.
Поскольку системы реального времени выполняют событийно-управляемое планирование для всех операций реального времени, «последовательность этих операций реального времени не находится под непосредственным контролем оператора компьютера или программиста». [5]
Однако система может иметь возможность чередовать задачи реального времени и другие, менее критичные ко времени задачи, где разделительной линией может быть, например, ответ, требуемый в течение одной десятой секунды. [5] : стр. 1 В случае систем Xerox RBM (Real-time/Batch Monitor), [6] [7] [8] например, существовали две другие возможности: [5] : стр. 2