
- •Введение.
- •Вопрос№1 Определение операционной системы
- •Вопрос№2 Структура операционной системы
- •Вопрос№3 Типы операционных систем
- •Вопрос№4 Объекты и их дескрипторы в ос Windows
- •Потоки и процессы
- •Вопрос№5 Поток управления
- •Вопрос№6 Состояния потока
- •Планирование процессов
- •Вопрос№11 Управление исполнением процессов
- •3.8. Задачи на обслуживание непрерываемых процессов
- •3.9. Задачи на обслуживание прерываемых процессов
- •4. Синхронизация потоков
- •5. Примитивы синхронизации
- •6. Классические задачи синхронизации
- •6.5. Задача Дейкстры об обедающих философах
- •Вопрос 1. Требуется определить, сколько ресурсов дополнительно можно выделить процессу j, где
- •Вопрос 2. Процесс 3 запросил у системы 3 единицы ресурса r. Удовлетворит ли система этот запрос?
- •8. Передача данных между процессами.
- •9. Управление устройствами компьютера
- •10. Виртуальная память
- •11. Управление файлами
Вопрос№6 Состояния потока
Как следует из определения, поток определяет динамическое поведение программы. Для простоты изложения предположим, что программа является однотипной. Тогда поток можно рассматривать как пару «поток = (процессор, программа)».
Программа может исполняться процессором только в том случае, если выполняются следующие условия:
- все системные ресурсы, которые необходимы для исполнения этой программы, свободны для использования;
- процессор свободен и готов к исполнению этой программы.
В этом случае говорят, что программа готова к исполнению.
Для формального описания этих требований, вводятся понятия состояние процессора и состояние программы. При этом полагают, что процессор и программа могут находиться в следующих состояниях:
состояния процессора:
- процессор не выделен для исполнения программы;
- процессор выделен для исполнения программы;
состояния программы:
- программа не готова к исполнению;
- программа готова к исполнению;
Для краткости записи, введем для этих состояний следующие названия:
- состояние процессора:
«не выделен»
«выделен»
- состояние программы:
«не готова»;
«готова».
Тогда состояние потока определяется как пара состояний: «состояние потока = (состояние процессора, состояние программы)».
Перечислив различные комбинации состояний процессора и программы, можно описать всевозможные состояния потока.
Введем для состояний потока следующие названия:
- поток блокирован = («не выделен», «не готова»);
- поток готов к выполнению – («не выделен», «готова»);
- поток выполняется = («выделен», «готова»).
Будем кратко эти состояния потока обозначать словами:
- блокирован
- готов
- выполняется
Будем считать, что состояние («выделен», «не готова») является недостижимым для потока. То есть программе, не готовой к исполнению, процессор не выделяется.
Кроме того, введем для потоков состояния, которые обозначают существование программного кода для потока и завершение исполнения потока. Назовем эти состояния соответственно: «новый» и «завершен».
Д
новый
готов
блокирован
выполняется
завершен
Create
Run
Exit
Block
Interrupt
Unblock
Переходы потока из состояния в состояние, которые на диаграмме обозначаются дугами, описывают некоторые операции над потоком. Названия этих операций указаны рядом с дугами.
Описание операций над потоками:
- операция Create выполняется потоком, который создает новый поток из функции. Эта операция переводит поток из состояния «новый» в состояние «готов».
- операция Exit выполняется самим исполняемым потоком и завершает его. Этта операция переводит поток из состояния «выполняется» в состояние «завершен».
Остальные операции выполняются операционной системой:
- операция Run запускает готовый поток на выполнение, то есть потоку выделяется процессорное время. Эта операция переводит поток из состояния «готов» в состояние «выполняется». Поток получает процессорное время в том случае, если подошла его очередь к процессору на обслуживание.
- операция Interrupt задерживает исполнение потока и переводит его из состояния «выполняется» в состояние «готов». Эта операция выполняется над потоком в том случае, если истекло процессорное время, выделенное потоку на исполнение.
- операция Block блокирует исполнение потока, то есть переводит его из состояния «выполняется» в состояние «блокирован». Эта операция выполняется над потоком в том случае, если он ждет наступления некоторого события, например, завершения операции ввода-вывода или освобождения ресурса.
- операция Unblock разблокирует поток, то есть переводит его из состояния «блокирован» в состояние «готов». Эта операция выполняется над потоком в том случае, если событие, ожидаемое потоком, наступило.
Вопрос№7 2.3. Определение процесса
Процессом или задачей называется исполняемое на компьютере приложение вместе со всеми ресурсами, которые требуются для его исполнения.
Все ресурсы, необходимые для исполнения процесса, называются контекстом процесса.
Процессу обязательно принадлежат следующие ресурсы:
- адресное пространство процесса;
- потоки, исполняемые в контексте процесса.
Адресное пространство – это виртуальная память, выделенная процессу для запуска программ. Адресные пространства разных процессов не пересекаются. Процесс не имеет непосредственного доступа в адресное пространство другого процесса. Это позволяет избежать влияния ошибок, произошедших в каком-либо процессе, на исполнение других процессов, что повышает надежность системы в целом.
Потоки, исполняемые в контексте процессора, запускаются в адресном пространстве этого процесса. Поэтому потоки одного процесса могут обращаться к общим адресам памяти, что упрощает их взаимодействие.
В принципе основной причиной, вызвавшей введение в системное программирование понятие потока, и было разделение адресных пространств процессов, используя виртуальную память. Дело в том, что в этом случае взаимодействие между параллельными процессами требует больших затрат на пересылку данных, что сильно замедляет работу приложений.
Вопрос№8 2.4. Потоки в Windows.
Потоком в Windows называется объект ядра, которому ОС выделяет процессорное время для выполнения приложения. С каждым потом связаны:
- уникальный дескриптор (HANDLE);
- уникальный идентификатор.
Дескрипторы используются пользовательскими программами для управления потоками.
Идентификаторы используются служебными программами, которые позволяют пользователям сисемы отслеживать работу потоков.
Каждому потоку в Windows принадлежат следующие ресурсы:
- код исполняемой функции;
- набор регистров процессора;
- стек для работы приложения;
- стек для работы ОС;
- маркер доступа, который содержит информацию для системы безопасности.
Все эти ресурсы образуют контекст потока в Windows.
В Windows различаются потоки двух типов:
- системные потоки;
- пользовательские потоки.
Системные потоки выполняют различные сервисы ОС и запускаются ядром ОС.
Пользовательские потоки служат для решения задач пользователя и запускаются приложением.
В приложении различаются потоки двух типов:
- рабочие потоки (working threads);
- потоки интерфейса пользователя (user interface threads)
Рабочие потоки выполняют различные задачи в приложении. Потоки интерфейса пользователя выполняют обработку сообщений к окнам, с которыми они связаны.
Каждое приложение имеет, по крайней мере, один поток, который называется первичным (primary) или главным (main) потоком. В консольных приложениях это поток, который исполняет функцию main. В приложениях с графическим интерфейсом это поток, который исполняет функцию WinMain.
Функции управления потоками в Windows:
- CreateThread – один поток создает другой потока;
- ExitThread – поток завершает свою работу;
- TerminateThread – один поток завершает работу другого потока;
- SuspendThread – один поток приостанавливает исполнение другого потока;
- ResumeThread – один поток возобновляет исполнение другого потока;
- Sleep – поток приостанавливает свое исполнение на заданный интервал времени;
Вопрос№9 2.5. Процессы в Windows.
В Windows под процессом понимается объект ядра, которому принадлежать системные ресурсы, используемые исполняемым приложением. Поэтому можно сказать, что в Windows процессом является исполняемое приложение.
С каждым процессом в Windows связаны:
- уникальный дескриптор (HANDLE);
- уникальный идентификатор.
Дескрипторы используются пользовательскими программами для управленяи процессами.
Идентификаторы используются служебными программами, которые позволяют пользователям системы отслеживать работу процессов.
Каждый процесс в Windows владеет следующими ресурсами:
- первичным потоком;
- рабочим множеством страниц в реальной памяти;
- маркером доступа, содержащим информацию для системы безопасности;
- таблицей для хранения дескрипторов объектов ядра, которые используются процессом.
Выполнение каждого процесса начинается с первичного потока. В процессе своего исполнения процесс может создавать другие потоки. Исполнение процесса заканчивается при завершении работы всех его потоков.
Для управления процессами в Windows используются следующие функции:
- CreateProcess – один процесс создает другой процесс;
- ExitProcess – процесс завершает свою работу;
- TerminateProcess – один процесс завершает работу другого процесса.
Процесс, который создается функцией CreateProcess, называется дочерним или потомком процесса, который его создает. В свою очередь процесс, который вызывает функцию CreateProcess, называется родительским или предком процесса, который он создает.
Вопрос№10 2.6. Наследование дескрипторов объектов в ОС Windows
Объект называется наследуемым, если он может быть доступен в дочурних процессах через дескриптор, который получен в родительском процессе при создани этого объекта. Для того, чтобы сделать объект наследуемым дочерними процессами, нужно в родительском процессе установить свойство наследования в дескрипторе этого объекта. Причем это свойство должно быть установлено до создания дочернего процесса, который должен получить доступ к наследуемому объекту.
В Windows свойство наследования объекта устанавливается двумя способами:
- при создании объекта функцией Create;
- функцией SetHandleInformation.
Для того, чтобы узнать, установлено ли в дескрипторе свойство наследования объекта, нужно использовать функцию:
- GetHandleInformation.
Использование свойства наследования объектов позволяет избежать проблемы уникального именования объектов, которая возникает в случае, если с одним объектом должны работать несколько процессов.