
- •1.Понятие и назначение ос
- •2.Функциональные компоненты операционной системы
- •3.Эволюция и классификация ос
- •4.Понятие программного интерфейса и операционного окружения
- •5.Ос как виртуальная машина
- •6.Сетевые и распределенные ос, ос разделения времени
- •7.Обобщенная архитектура ос
- •8.Концепция микроядерной архитектуры
- •9.Классификация периферийных устройств
- •10.Многослойная архитектура ос
- •11.Понятие процессов и потоков
- •12.Механизмы взаимодействия процессов
- •13.Вытесняющие и невытесняющие алгоритмы
- •14.Синхронизация выполнения процессов и потоков
- •15.Мультипрограммирование в системе разделения времени и в системе реального времени
- •16.Взаимоблокировки. Решение тупиковых ситуаций
- •17.Прерывания и системные вызовы ос
- •18.Методы реализации виртуальной памяти
- •19.Управление памятью в ос
- •20.Иерархия запоминающих устройств
- •21.Драйверы
- •22.Сегментная организация виртуальной памяти
- •23.Страничная организация виртуальной памяти
- •24.Управление кэш-памятью в ос
- •25.Логическая организация файловой системы
- •26.Физическая организация файловой системы
- •27.Восстанавливаемость и отказоустойчивость файловой системы
- •28.Файловая система fat
- •29.Файловая система ntfs
- •30.Файловая система ufs
- •31.Атрибуты файлов файловые операции.
- •32.Контроль доступа к файлам в ос.
- •33.Подсистема ввода вывод.
- •34.Файловые менеджеры.
- •35.Архивация данных.
- •38.Особенности ос ms dos.
- •39.Команды ms dos.
- •40.Командные файлы.
- •41.Сетевые утилиты.
- •42.Характеристика Windows xp.
- •43.Архитектура Windows xp
- •44. Процесс загрузки windows xp
- •49.Средства сопровождения и Стандартные средства администрирования Windows xp
- •50.Технология dde ole dcom activx в windows xp
- •51. Особенности os linux
- •52. Команды linux
- •53 Особенности unix
- •55.Особенности windows 7
12.Механизмы взаимодействия процессов
Наличие механизмов взаимодействия дает произвольным процессам возможность осуществлять обмен данными и синхронизировать свое выполнение с другими процессами. Мы уже рассмотрели несколько форм взаимодействия процессов,такие как канальная связь, использование поименованных каналов и посылка сигналов. Каналы (непоименованные) имеют недостаток, связанный с тем, чтоони известны только потомкам процесса, вызвавшего системную функцию pipe: не имеющие родственных связей процессы не могут взаимодействовать между собой с помощью непоименованных каналов. Несмотря на то, что поименованные каналы позволяют взаимодействовать между собой процессам, не имеющим родственных связей, они не могут использоваться ни в сети (см. главу 13), ни в организации множественных связей между различными группами взаимодействующих процессов: поименованный канал не поддается такому мультиплексированию, при котором у каждой пары взаимодействующих процессов имелся бы свой выделенный канал. Произвольные процессы могут также связываться между собой благодаря по сылке сигналов с помощью системной функции kill, однако такое "сообщение" состоит из одного только номера сигнала.
В данной главе описываются другие формы взаимодействия процессов. В начале речь идет о трассировке процессов, о том, каким образом один процесс следит за ходом выполнения другого процесса, затем рассматривается пакет IPC: сообщения, разделяемая память и семафоры. Делается обзор традиционных методов сетевого взаимодействия процессов, выполняющихся на разных машинах, и, наконец, дается представление о "гнездах", применяющихся в системе BSD. Вопросы сетевого взаимодействия, имеющие специальный характер, такие как протоколы, адресация и др., не рассматриваются, поскольку они выходят за рамки настоящей работы.
13.Вытесняющие и невытесняющие алгоритмы
С самых общих позиций все множество алгоритмов планирования можно разделить на два класса: вытесняющие и невытесняющие алгоритмы планирования.
Невытесняющие (non-preemptive) алгоритмы основаны на том, что активному потоку позволяется выполняться, пока он сам, по собственной инициативе, не отдаст управление операционной системе для того, чтобы та выбрала из очереди другой готовый к выполнению поток.
Вытесняющие (preemptive) алгоритмы — это такие способы планирования потоков, в которых решение о переключении процессора с выполнения одного потока на выполнение другого потока принимается операционной системой, а не активной задачей.
Основным различием между вытесняющими и невытесняющими алгоритмами является степень централизации механизма планирования потоков. При вытесняющем мультипрограммировании функции планирования потоков целиком сосредоточены в операционной системе и программист пишет свое приложение, не заботясь о том, что оно будет выполняться одновременно с другими задачами. При этом операционная система выполняет следующие функции: определяет момент снятия с выполнения активного потока, запоминает его контекст, выбирает из очереди готовых потоков следующий, запускает новый поток на выполнение, загружая его контекст.
При невытесняющем мультипрограммировании механизм планирования распределен между операционной системой и прикладными программами. Прикладная программа, получив управление от операционной системы, сама определяет момент завершения очередного цикла своего выполнения и только затем передает управление ОС с помощью какого-либо системного вызова. ОС формирует очереди потоков и выбирает в соответствии с некоторым правилом (например, с учетом приоритетов) следующий поток на выполнение. Такой механизм создает проблемы как для пользователей, так и для разработчиков приложений.
Для пользователей это означает, что управление системой теряется на произвольный период времени, который определяется приложением (а не пользователем). Если приложение тратит слишком много времени на выполнение какой-либо работы, например на форматирование диска, пользователь не может переключиться с этой задачи На другую задачу, например на текстовый редактор, в то время как форматирование продолжалось бы в фоновом режиме.
Поэтому разработчики приложений для операционной среды с невытесняющей многозадачностью вынуждены, возлагая на себя часть функций планировщика, создавать приложения так, чтобы они выполняли свои задачи небольшими частями. Например, программа форматирования может отформатировать одну дорожку дискеты и вернуть управление системе. После выполнения других задач система возвратит управление программе форматирования, чтобы та отформатировала следующую дорожку. Подобный метод разделения времени между задачами работает, но он существенно затрудняет разработку программ и предъявляет повышенные требования к квалификации программиста. Программист должен обеспечить «дружественное» отношение своей программы к другим выполняемым одновременно с ней программам. Для этого в программе должны быть предусмотрены частые передачи управления операционной системе. Крайним проявлением «не дружественности» приложения является его зависание, которое приводит к общему краху системы. В системах с вытесняющей многозадачностью такие ситуации, как правило, исключены, так как центральный планирующий механизм имеет возможность снять зависшую задачу с выполнения.
Однако распределение функций планирования потоков между системой и приложениями не всегда является недостатком, а при определенных условиях может быть и преимуществом, потому что дает возможность разработчику приложений самому проектировать алгоритм планирования, наиболее подходящий для данного фиксированного набора задач. Так как разработчик сам определяет в программе момент возвращения управления, то при этом исключаются нерациональные прерывания программ в «неудобные» для них моменты времени. Кроме того, легко разрешаются проблемы совместного использования данных: задача во время каждого цикла выполнения использует их монопольно и уверена, что на протяжении этого периода никто другой не изменит данные. Существенным преимуществом невытесняющего планирования является более высокая скорость переключения с потока на поток.