- •2. Теоретические основы построения операционных систем
- •Процессы и ресурсы
- •2.1.1. Определение процесса
- •Операционная система
- •П роцесс 1 Процесс 2 . . . Процесс n
- •2.1.2. Понятие ресурса
- •2.1.4. Планирование процессов
- •Центральный процессор
- •Центральный процессор
- •2.1.5. Классификация процессов
- •2.1.6. Классификация ресурсов
- •2.1.7. Структуры данных для управления процессами и ресурсами
- •2.1.8. Ядро операционной системы и реализация базовых функций ос
- •2.2. Проблема синхронизации и взаимное исключение
- •2.2.1. Определение и свойства критической секции
- •2.2.2. Программные методы реализации взаимного исключения
- •2.2.3. Синхронизация процессов с помощью семафоров
- •2.2.4. Реализация примитивов взаимоисключения
- •2.2.5. Параллельное программирование и мониторы
- •2.2.6. Рандеву как модель организации взаимодействия процессов
- •2.2.7. Система прохождения сообщений
- •2.2.8. Многозадачность и языки программирования
- •Взаимодействие процессов и синхронизация задач в os/2
- •2.2.10. Организация взаимодействия процессов и потоков в Win32
- •2.3. Проблема тупика
- •2.3.1. Определение тупика
- •Необходимые условия возникновения тупика и решение задачи предотвращения тупика
- •2.3.3. Модель системы для исследования проблемы тупика
- •2.3.4. Методы распознавания тупика
- •2.3.5. Выход из тупика и восстановление работоспособности системы
- •2.3.6. Методы обхода тупиков
Операционная система
П роцесс 1 Процесс 2 . . . Процесс n
Поток 1 Поток2 ... Поток P
ЦП ЦП ЦП ЦП ЦП
ВС
Рис.2.1. Иерархия процессов в ВС
Многопотоковая архитектура обеспечивает более совершенное разделение ресурсов между прикладными задачами и операционной системой. Кроме того, обеспечивается более высокий уровень стабильности при росте числа пользователей, выполняющих прикладные программы.
Многопотоковость позволяет также повысить независимость программных модулей, так как реализация условных переходов в программах может основываться на событиях, возникающих в результате взаимодействия потоков, то есть на определенном стандарте внутреннего протокола, а не на прямой реализации кода, что повышает стабильность, позволяет относительно безболезненно модифицировать и развивать код многопотоковых программ.
В современных ОС (например, OS/2, Windows NT, Windows 95, Novell NetWare, UNIX, UnixWare) поддерживается возможность разбиения каждой решаемой задачи на несколько потоков или нитей (threads). Поток можно упрощенно представить себе как подзадачу.
Процесс в этих операционных системах обычно определяется как “экземпляр” (копия) выполняемой программы, для размещения кода и данных которой отводится память (например, в Win32 процессу отводится 4 Гб адресного пространства). Таким образом, процессы не могут разделять между собой одну и ту же область памяти. Каждый процесс представляет собой самостоятельный объект и изолирован от других процессов. Это защищает процессы от несанкционированного вмешательства со стороны других процессов.
В отличие от своих аналогов в MS-DOS и 16-битной Windows, процессы в перечисленных выше операционных системах, поддерживающих возможность разработки многопотоковых приложений, инертны, то есть эти процессы сами по себе ничего не исполняют, они просто “владеют” своим адресным пространством, содержащим код и данные выполняемой программы приложения. Кроме того, код и данные динамически загружаемых библиотек (если они используются процессами) также могут размещаться в адресном пространстве этих процессов. Помимо адресного пространства, процессам принадлежат такие ресурсы, как файлы, динамические области памяти.
Последовательность выполнения кода внутри процесса описывается потоками. Всякий раз при инициализации процесса система создает его первичный поток (primary thread). Первичный поток отвечает за инициализацию процесса, обработку системных сигналов и событий. Этот поток “живет” до того момента, когда управление не будет возвращено операционной системе для завершения процесса. Во время своего выполнения потоки способны создавать дополнительные потоки. Таким образом, внутри одного процесса может быть создано несколько потоков. Многопотоковые приложения позволяют добиться минимальных простоев процессора, а значит, сделать выполнение приложений более эффективным.
Функция ОС по управлению процессами состоит в создании процессов и обеспечении возможностей для их нормального развития через распределение ресурсов, запрашиваемых процессами, и организацию, если необходимо, их взаимодействия в ходе выполнения.
В системах, поддерживающих возможность создания потоков, реализуется набор функций как по управлению процессами, так и по управлению потоками, принадлежащими процессам. Для выполнения своих функций данные ОС создают специальные объекты.
