функциональностей прикладной области. Это может быть файл или таблица, окно для
рисования в графической системе, документ в системе печати, мелодия в динамике,
запущенное задание, массив в памяти и т. п.
Часто бывает, что для представления пользовательского ресурса подходит системный
(например, файл в качестве хранилища данных). Однако в общем случае каждому
пользовательскому ресурсу должна соответствовать определенная системная модель,
объединяющая несколько системных ресурсов и задающая правила их использования.
Задача в операционной среде - это объект системы, выполняющий системные или
прикладные функции и потребляющий системные ресурсы; чаще всего считается, что задачи
принадлежат какому-нибудь пользователю системы или ей самой. В зависимости от
важности для ОС, задаче может быть выделено определенное количество ресурсов каждого
вида. Иными словами, управление ресурсами рассматривается как их закономерное
распределение между задачами и самой системой.
Вторая функция операционной среды - разделение ресурсов. Системе необходимо сделать
так, чтобы несколько задач могли пользоваться любым ресурсом, не мешая друг другу.
Интерфейс ресурса определяется особой политикой разделения. Действовать в обход этой
политики - значит использовать внесистемные средства доступа, что в идеальных ОС
невозможно.
Главный системный ресурс, разделять который необходимо с наименьшей паразитной
нагрузкой, - машинное время. Самый простой способ разделения времени - пакетное
выполнение задач. Каждой задаче отводится некоторый промежуток машинного времени, в
течение которого она обязана запуститься, отработать и завершиться. Если задача
завершилась до истечения отведенного ей времени, запускается следующая. Если не успела
завершиться, ее выполнение прерывается (навсегда), о чем пользователь получает
уведомление, и опять-таки запускается следующая задача. Затраты на работу самой системы
здесь минимальны (запустить, прервать), значит, почти все время будут работать
пользовательские задачи. В то же время для организации операционной среды этот способ
крайне неудобен.
Предположим, пришло десять пользователей системы, и все они запустили по интерактивной
задаче, причем каждый желает, чтобы обслуживали именно его. Одна обменная задача
потребует секунду процессорного времени, но работа с ней займет у пользователя пять
минут. Стало быть, грамотно устроенная операционная среда могла бы обслуживать всех
этих пользователей, причем так, чтобы они не мешали друг другу. Оставшиеся 96%
процессорного времени можно по ходу дела отдавать другим задачам.
Здесь нужно использовать другой способ разделения времени - псевдопараллелизм
(многозадачность, multitasking). В самой упрощенной форме псевдопараллелизм выглядит
так. Поскольку процессор на самом деле один (даже если не один, это ничего не меняет;
другое дело, если бы процессоров было сколько угодно!), то и задача в каждый момент
времени выполняется на нем одна. Но выполняется недолго, скажем, 4 нс (наносекунды).
После этого состояние задачи записывается куда-нибудь в системную память, а сама задача
встает последней в очередь задач, готовых к выполнению. Вместо нее немножко работает
первая задача в этой очереди, потом и с ней происходит то же самое, и т. д. Когда очередь
опять доходит до исходной задачи, ее состояние восстанавливается и она продолжает работу
с момента останова. Состоянием (или контекстом) задачи называется информация,
необходимая для того, чтобы задача продолжала работать как ни в чем не бывало: значение
регистров процессора, место, где было прервано выполнение, собственные часы, табличка
использования оперативной памяти и пр. Практически все компьютерные архитектуры
имеют встроенные команды процессора, позволяющие аппаратно сохранять и
восстанавливать контекст задачи.