- •Раздел 2. Лист 75/75
- •1) Постановка задачи.
- •2) Математическая формализация.
- •3) Построение алгоритма.
- •4) Составление алгоритма на языке программирования.
- •5) Отладка и тестирование программы.
- •6) Проведение расчетов и анализ получаемых результатов.
- •Основные типы алгоритмов. Структуры и формы записи алгоритмов.
- •2) Графический способ (с использованием графических примитивов, блок-схем)
- •1) Словесно-формульный (на естественном языке)
- •Структурированные типы данных (массивы, файлы, записи, множества).
- •X: array [1..5,1..10] of real;
- •Var f :text;
- •Динамические структуры данных.
- •Динамическая память. Управление памятью.
- •Управление файлами.
- •Страничная память
- •Стратегии управления страничной памятью
- •Алгоритм fifo – Выталкивание первой пришедшей страницы – Простейший алгоритм
- •Операции над файлами
- •Организация ввода-вывода.
- •Жизненный цикл программ
- •6. Показатели качества по. Стандарты качества программного обеспечения. Тестирование и обеспечение качества.
- •Основные стандарты качества по гост 28195-89. Оценка качества программных средств. Общие положения
- •Гост 28806-90. Качество программных средств. Термины и определения
- •Гост р исо/мэк 9126-93. Оценка программной продукции. Характеристики качества и руководства по их применению
- •Уровни тестирования
- •Статическое и динамическое тестирование
- •Регрессионное тестирование
- •Тестовые скрипты
- •Тестирование «белого ящика» и «чёрного ящика»
- •Покрытие кода
- •8.Требования предъявляемые к ос. Ресурсы и их распределение в операционной системе.
- •9.Архитектура ос. Микроядерная архитектура.
- •11.Механизм прерываний. Способы выполнения прерываний. Приоретизация и маскирование прерываний. Диспетчеризация прерываний в операционной системе.
- •12.Специфика и свойства осрв. Технические свойства осрв.
- •13.Задачи, процессы, потоки. Связь между процессами в осрв.
- •Операции над процессами
- •Иерархия процессов
- •Преимущества многопоточности
- •17.Понятие безопасности информации и виды безопасности
- •18.Статьи затрат на разработку асоиу. Состав и структура асоиу: функциональные подсистемы, обеспечивающие и управляющие системы
- •19.Концепции системы: цели предприятия, цели асоиу. Содержание тз на проектирование асоиу.
- •20.Требования к технологии проектирования систем. Стандарты проектирования, оформление проектной документации, использование интерфейса.
- •21.Моделирование потоков данных. Накопительные процессы данных, потоки данных
- •1 Название подсистемы
- •1.1 Название процесса
- •22.Понятие пилотного проекта, его характеристики. Планирование и выполнение пилотного проекта
- •23.Оценка пилотного проекта
- •24.Внедрение пилотного проекта
- •25.Практическое использование пилотного проекта: план перехода и его реализация
9.Архитектура ос. Микроядерная архитектура.
Очень
большое значение имеет архитектура ОС.
ОС прошли длительный путь развития от
монолитных систем к хорошо структурированным
модульным системам, способным к развитию,
расширению и легкому переносу на новые
платформы.
Монолитные системы
В общем случае “структура” монолитной системы представляет собой отсутствие структуры (рисунок). ОС написана как набор процедур, каждая из которых может вызывать другие, когда ей это нужно. При использовании этой техники каждая процедура системы имеет хорошо определенный интерфейс в терминах параметров и результатов, и каждая вольна вызвать любую другую для выполнения некоторой нужной для нее полезной работы.
Для построения монолитной системы необходимо скомпилировать все отдельные процедуры, а затем связать их вместе в единый объектный файл с помощью компоновщика (примерами могут служить ранние версии ядра UNIX или Novell NetWare). Каждая проц-ра видит любую другую процедуру.
Однако
даже такие монолитные системы могут
быть немного структурированными. При
обращении к системным вызовам,
поддерживаемым ОС, параметры помещаются
в строго определенные места, такие, как
регистры или стек, а затем выполняется
специальная команда прерывания, известная
как вызов ядра или вызов супервизора.
Эта команда переключает машину из режима
пользователя в режим ядра, называемый
также режимом супервизора, и передает
управление ОС. Затем ОС проверяет
параметры вызова для того, чтобы
определить, какой системный вызов должен
быть выполнен. После этого ОС индексирует
таблицу, содержащую ссылки на процедуры,
и вызывает соответствующую процедуру.
Такая организация ОС предполагает
следующую структуру:
1. Главная программа, которая вызывает требуемые сервисные процедуры.
2. Набор сервисных процедур, реализующих системные вызовы.
3. Набор утилит, обслуживающих сервисные процедуры.
В этой модели для каждого системного вызова имеется одна сервисная процедура. Утилиты выполняют функции, которые нужны нескольким сервисным процедурам.
Многоуровневые системы
|
5 |
Интерфейс пользователя |
|
4 |
Управление i/o |
|
3 |
Драйвер устройства связи оператора и консоли |
|
2 |
Управление памятью |
|
1 |
Планирование задач и процессов |
|
0 |
Hardware |
Слоеные системы хорошо модифицируются. При необходимости можно заменить лишь один слой, не трогая остальные.
Но слоеные системы сложны для разработки: тяжело правильно определить порядок слоев и что к какому слою относится. Слоеные системы менее эффективны, чем монолитные. Так, например, для выполнения операций ввода-вывода программе пользователя придется последовательно проходить все слои от верхнего до нижнего. Использован при реализации различных вариантов ОС UNIX.
Модель клиент-сервер и
микроядра
Модель клиент-сервер - это еще один подход к структурированию ОС. В широком смысле модель клиент-сервер предполагает наличие программного компонента - потребителя какого-либо сервиса - клиента, и программного компонента - поставщика этого сервиса - сервера. Взаимодействие между клиентом и сервером стандартизуется, так что сервер может обслуживать клиентов, реализованных различными способами и, может быть, разными производителями. При этом главным требованием является то, чтобы они запрашивали услуги сервера понятным ему способом. Инициатором обмена обычно является клиент, который посылает запрос на обслуживание серверу, находящемуся в состоянии ожидания запроса. Один и тот же программный компонент может быть клиентом по отношению к одному виду услуг, и сервером для другого вида услуг. Модель клиент-сервер является скорее удобным концептуальным средством ясного представления функций того или иного программного элемента в той или иной ситуации, нежели технологией. Эта модель успешно применяется не только при построении ОС, но и на всех уровнях программного обеспечения, и имеет в некоторых случаях более узкий, специфический смысл, сохраняя, естественно, при этом все свои общие черты.
Применительно к структурированию ОС идея состоит в разбиении ее на несколько процессов - серверов, каждый из которых выполняет отдельный набор сервисных функций - например, управление памятью, создание или планирование процессов. Каждый сервер выполняется в пользовательском режиме. Клиент, которым может быть либо другой компонент ОС, либо прикладная программа, запрашивает сервис, посылая сообщение на сервер. Ядро ОС (называемое здесь микроядром), работая в привилегированном режиме, доставляет сообщение нужному серверу, сервер выполняет операцию, после чего ядро возвращает результаты клиенту с помощью другого сообщения.
Подход с использованием микроядра заменил вертикальное распределение функций операционной системы на горизонтальное. Компоненты, лежащие выше микроядра, хотя и используют сообщения, пересылаемые через микроядро, взаимодействуют друг с другом непосредственно. Микроядро играет роль регулировщика. Оно проверяет сообщения, пересылает их между серверами и клиентами, и предоставляет доступ к аппаратуре.
Микроядро реализует жизненно важные функции, лежащие в основе операционной системы. Это базис для менее существенных системных служб и приложений. Именно вопрос о том, какие из системных функций считать несущественными, и, соответственно, не включать их в состав ядра, является предметом спора среди соперничающих сторонников идеи микроядра. В общем случае, подсистемы, бывшие традиционно неотъемлемыми частями операционной системы - файловые системы, управление окнами и обеспечение безопасности - становятся периферийными модулями, взаимодействующими с ядром и друг с другом.
Главный принцип разделения работы между микроядром и окружающими его модулями - включать в микроядро только те функции, которым абсолютно необходимо исполняться в режиме супервизора и в привилегированном пространстве. Под этим обычно подразумеваются машиннозависимые программы (включая поддержку нескольких процессоров), некоторые функции управления процессами, обработка прерываний, поддержка пересылки сообщений, некоторые функции управления устройствами ввода-вывода, связанные с загрузкой команд в регистры устройств. Эти функции операционной системы трудно, если не невозможно, выполнить программам, работающим в пространстве пользователя.
Высокая степень переносимости обусловлена тем, что весь машинно-зависимый код изолирован в микроядре, поэтому для переноса системы на новый процессор требуется меньше изменений и все они логически сгруппированы вместе.
Виртуальные машины
|
Программа пользователя |
Программа пользователя |
Программа пользователя |
|
MS-DOS |
Linux |
Windows |
|
Виртуальное Hardware |
Виртуальное Hardware |
Виртуальное Hardware |
|
Реальная ОС | ||
|
Реальное Hardware | ||
«–» снижение эффективности вирт машин по сравнению с реальным компьютером, и, как правило, они очень громоздки.
«+» использование на одной ВС программ, написанных для разных ОС.
Микроядерная архитектура ОС – разбиение ОС на несколько процессов – серверов, менеджеров, приложений, каждый из которых выполняет отдельный набор сервисных функций.
Компоненты системы взаимодействуют друг с другом путем передачи сообщений через микроядро.
Каждый
сервер выполняется в пользовательском
режиме. Клиент, прикладная программа,
запрашивает сервис, посылая сообщение.
Ядро ОС (микроядро), работая в
привилегированном режиме, доставляет
сообщение нужному серверу, сервер
выполняет операцию, после чего ядро
возвращает результаты клиенту с помощью
другого сообщения.
Главный принцип: включать в микроядро только те функции, которым необходимо исполняться в привилегированном режиме – поддержка нескольких процессоров, некоторые функции управления процессами, устройствами ввода-вывода, обработка прерываний, функции связанные с загрузкой команд в регистры.
«+» высокая степень модульности ядра ОС. Это упрощает добавление в него новых компонентов, можно, не прерывая работы ОС, загружать и выгружать новые драйверы, файловые системы. повышает надежность системы, поскольку ошибка на уровне непривилегированной программы менее опасна, чем отказ на уровне режима ядра.
«–» дополнит накладные расходы, связанные с передачей сообщ, что влияет на производительность.
Смешанные системы
В большинстве случаев современные ОС используют различные комбинации этих подходов.
Монолитная система с элементами микроядерной архитектуры (Linux). При компиляции ядра можно разрешить динамическую загрузку и выгрузку многих компонентов ядра –модулей. В момент загрузки модуля его код загружается на уровне системы и связывается с остальной частью ядра. Внутри модуля могут использоваться любые экспортируемые ядром функции.
ОС с монолитным ядром под управлением микроядра (MkLinux). Микроядро обеспечивает управление виртуальной памятью и работу низкоуровневых драйверов. Все остальные функции осуществляются монолитным ядром.
Элементы микроядерной архитектуры и элементы монолитного ядра переплетены в ядре Windows NT. Компоненты ядра Windows NT располагаются в вытесняемой памяти и взаимодействуют друг с другом путем передачи сообщений, как и положено в микроядерных ОС. В то же время все компоненты ядра работают в одном адресном пространстве и активно используют общие структуры данных, что свойственно ОС с монолитным ядром.
10.Понятие вычислительного процесса и потока. Управление процессами. Планирование и диспетчеризация процессов и потоков. Понятие вычислительного процесса и потока. Управление процессами.
Важнейшей частью операционной системы, непосредственно влияющей на функционирование вычислительной машины, является подсистема управления процессами.
Процесс - это совокупность машинных команд и данных, исполняющаяся в рамках ВС и обладающая правами на владение некоторым набором ресурсов. Эти права могут быть эксклюзивными, когда ресурс принадлежит только этому процессу. Некоторые из ресурсов могут разделяться, т. е. одновременно принадлежать двум и более процессам, в этом случае мы говорим о разделяемых ресурсах.
Процесс включает в себя следующее:
исполняемый код;
собственное адресное пространство, представляющее собой совокупность виртуальных адресов, которые может использовать процесс;
ресурсы системы, которые назначены процессу операционной системой;
хотя бы одна выполняемая нить
Подсистема управления процессами планирует выполнение процессов, то есть распределяет процессорное время между несколькими одновременно существующими в системе процессами, а также занимается созданием и уничтожением процессов, обеспечивает процессы необходимыми системными ресурсами, поддерживает взаимодействие между процессами.
Процесс может находиться в нескольких состояниях:
Выполнение – состояние, в котором процесс обладает всеми необходимыми ресурсами и непосредственно выполняется на процессоре;
Ожидание – пассивное состояние, процесс заблокирован, он не может выполняться по своим внутренним причинам, он ожидает наступление некоторого события или освобождения ресурса;
Готовность – пассивное состояние, процесс заблокирован в связи с внешними к нему обстоятельствами: процесс имеет все необходимые ему ресурсы, но процессор занят выполнением другого процесса.
В ходе жизненного цикла процесс неоднократно переходит из одного состояния в другое в соответствии с реализованным в ОС алгоритмом планирования процессов.
Средства переключения процессов предназначены для быстрого сохранения контекстов приостанавливаемых процессов и восстановления контекста процесса при его последующей активации. Полный набор регистров, которые нужно сохранить, чтобы нить не заметила переключения, называется контекстом нити или, в зависимости от принятой в конкретной ОС терминологии, контекстом процесса. Содержимое контекста обычно включает в себя содержимое всех регистров общего назначения операций, регистров флагов операций, а также системных регистров и указателей, связанных с отдельным процессом, а не с ОС. Переключения процессов для самих процессов должны быть «прозрачными», т.е. процесс должен «не заметить», что он на некоторое время был не активен, а процессор был занят другим процессом. Переключение процессов нужно в многозадачных ОС.
Под управление процессами понимается:
1) Управление использованием времени центрального процессора. Это ещё иногда называют планированием ЦП, то есть управление тем, в какой момент времени какая из задач или какой из процессов будет владеть активностью ЦП: на какой из процессов будет работать ЦП.
2) Управление «подкачкой» и буфером ввода. Процессором обрабатывается несколько процессов, и перед нами стоит задача освободить реальную оперативную память для других задач. В этом случае возникает необходимость какие-то из обрабатываемых задач откачать на внешнее запоминающее устройство. Как более или менее выгодно организовать процесс откачки является одной из задач ОС. Если в системе образовывается масса задач, то вся вычислительная система не может принять для работы в мультипрограммном режиме все задачи. В этом случае образуется, так называемый, буфер ввода задач, или буфер ввода процессов, то есть буфер, в котором аккумулируются те процессы, которые ожидают начала своей обработки процессором. Возникает проблема очередности выбора процессов из этого буфера для начала обработки. Это задача планирования буфера.
Управление разделяемыми ресурсами. Имеется набор ресурсов, доступ к которым в определенные моменты времени организуется от имени различных процессов. Одна из функций, которая во многом определяет свойства ОС, это функция, обеспечивающая организацию взаимодействия процессов и использования общих ресурсов. Проблема с простым устройством легко решается, а вот если две программы имеют общий фрагмент оперативной памяти, то управление таким разделяемым ресурсом - сложная задача.
Потоки (нити, треды)
Желательно иметь возможность задействовать внутренний параллелизм в процессах. Такой внутренний параллелизм встречается достаточно часто и его использование позволяет ускорить их решение. Например, некоторые операции, выполняемые приложением, могут требовать для своего исполнения достаточно длительного использования центрального процессора. В этом случае при интерактивной работе с приложением пользователь вынужден долго ожидать завершения заказанной операции и не может управлять приложением до тех пор, пока операция не выполнится до самого конца. Если же программные модули, исполняющие такие длительные операции, оформлять в виде самостоятельных «подпроцессов» (легковесных или облегченных процессов — потоков, можно также воспользоваться термином задача), которые будут выполняться параллельно с другими «подпроцессами» (потоками, задачами), то у пользователя появляется возможность параллельно выполнять несколько операций в рамках одного приложения (процесса). Легковесными эти задачи называют потому, что операционная система не должна для них организовывать полноценную виртуальную машину. Эти задачи не имеют своих собственных ресурсов, они развиваются в том же виртуальном адресном пространстве, могут пользоваться теми же файлами, виртуальными устройствами и иными ресурсами, что и данный процесс. Единственное, что им необходимо иметь, — это процессорный ресурс. В однопроцессорной системе треды (задачи) разделяют между собой процессорное время так же, как это делают обычные процессы, а в мультипроцессорной системе могут выполняться одновременно, если не встречают конкуренции из-за обращения к иным ресурсам.
Главное, что обеспечивает многопоточность, — это возможность параллельно выполнять несколько видов операций в одной прикладной программе. Параллельные вычисления (а следовательно, и более эффективное использование ресурсов центрального процессора, и меньшее суммарное время выполнения задач) теперь уже часто реализуется на уровне тредов, и программа, оформленная в виде нескольких тредов в рамках одного процесса, может быть выполнена быстрее за счет параллельного выполнения ее отдельных частей. Например, если электронная таблица или текстовый процессор были разработаны с учетом возможностей многопоточной обработки, то пользователь может запросить пересчет своего рабочего листа или слияние нескольких документов и одновременно продолжать заполнять таблицу или открывать для редактирования следующий документ.
Потребность в потоках (threads) возникла еще на однопроцессорных вычислительных системах, поскольку они позволяют организовать вычисления более эффективно. Для использования достоинств многопроцессорных систем с общей памятью треды уже просто необходимы, так как позволяют не только реально ускорить выполнение тех задач, которые допускают их естественное распараллеливание, но и загрузить процессорные элементы работой, чтобы они не простаивали. Заметим, однако, что желательно, чтобы можно было уменьшить взаимодействие тредов между собой, ибо ускорение от одновременного выполнения параллельных потоков может быть сведено к минимуму из-за задержек синхронизации и обмена данными.
Каждый тред выполняется строго последовательно и имеет свой собственный программный счетчик и стек. Треды, как и процессы, могут порождать треды-потомки, поскольку любой процесс состоит по крайней мере из одного треда. Подобно традиционным процессам (то есть процессам, состоящим из одного треда), каждый тред может находится в одном из активных состояний. Пока один тред заблокирован (или просто находится в очереди готовых к исполнению задач), другой тред того же процесса может выполняться. Треды разделяют процессорное время так же, как это делают обычные процессы, в соответствии с различными вариантами диспетчеризации.
Планирование и диспетчеризация процессов и потоков.
Система управления процессами обеспечивает прохождение процесса через компьютер. В зависимости от состояния процесса ему должен быть предоставить тот или иной ресурс. Например, новый процесс необходимо разместить в основной памяти, следовательно, ему необходимо выделить часть адресного пространства. Процессу в состоянии готовый должно быть предоставлено процессорное время. Выполняемый процесс может потребовать оборудование ввода - вывода и доступ к файлу.
Распределение процессов между имеющимися ресурсами носит название планирование процессов. Одним из методом планирования процессов, ориентированных на эффективную загрузку ресурсов, является метод очередей ресурсов. Новые процессы находятся во входной очереди, часто называемой очередью работ – заданий. Входная очередь располагается во внешней памяти, во входной очереди процессы ожидают освобождения ресурса — адресного пространства основной памяти. Готовые к выполнению процессы располагаются в основной памяти и связаны очередью готовых процессов. Процессы в этой очереди ожидают освобождения ресурса процессорное время. Процесс в состоянии ожидания завершения операции ввода - вывода находится в одной из очередей к оборудованию ввода - вывода. При прохождении через компьютер процесс мигрирует между различными очередями под управлением программы, которая называется планировщик. Операционная система, обеспечивающая режим мультипрограммирования, обычно включает два планировщика — долгосрочный и краткосрочный.
Основное отличие между долгосрочным и краткосрочным планировщиками заключается в частоте запуска, например: краткосрочный планировщик может запускаться каждые 100 мс, долгосрочный — один раз за несколько минут.
Краткосрочный планировщик решает, какой из процессов, находящихся в очереди готовых процессов, должен быть передан на выполнение в CPU. В некоторых операционных системах долгосрочный планировщик может отсутствовать.
Рассмотрим стратегии планирования:
Первый пришел — первый обслуживается (FIFO) - является наиболее простой стратегией планирования процессов и заключается в том, что процессор передается тому процессу, который раньше всех других его запросил. Среднее время ожидания часто весьма велико и зависит от порядка поступления процессов в очередь готовых процессов. Данной стратегии присущ так называемый “эффект конвоя”. В том случае, когда в компьютере имеется один большой процесс и несколько малых, то все процессы собираются в начале очереди готовых процессов, а затем в очереди к оборудованию. Таким образом, “эффект конвоя” приводит к снижению загруженности как процессора, так и периферийного оборудования;
Наиболее короткая работа (SJF, Shortest Job First) - одним из методов борьбы с “эффектом конвоя” является стратегия, позволяющая малым процессам из очереди выполняться первыми. Она снижает время ожидания очереди. Наибольшая трудность в практической реализации SJF заключается в невозможности заранее определить величину времени последующего обслуживания. Поэтому стратегия SJF часто применяется в долгосрочных планировщиках, обслуживающих пакетный режим. В этом случае вместо величины времени последующего обслуживания используется допустимое максимальное время выполнения задания, которое программист должен специфицировать перед отправкой задания в пакет;
Приоритетное планирование - предполагает, что каждому процессу приписывается приоритет, определяющий очередность предоставления ему CPU. Например, стратегия FIFO предполагает, что все процессы имеют одинаковые приоритеты, а стратегия SJF предполагает, что приоритет есть величина, обратная времени последующего обслуживания. Приоритеты определяются исходя из совокупности внутренних и внешних по отношению к операционной системе факторов. Внутренние факторы могут использоваться для автоматического назначения приоритетов самой операционной системой, а внешние для принудительного, с помощью оператора.
“Карусельная” (RR, Round Robin) - применяется в системах разделения времени. Определяется небольшой отрезок времени, названный квантом времени (10..100 мс). Очередь готовых процессов рассматривается как кольцевая. Процессы циклически перемещаются по очереди, получая CPU на время, равное одному кванту. Новый процесс добавляется в хвост очереди. Если процесс не завершился в пределах выделенного ему кванта времени, его работа принудительно прерывается, и он перемещается в хвост очереди;
Планирование с использованием многоуровневой очереди - разработана для ситуации, когда процессы могут быть легко классифицированы на несколько групп, например, часто процессы разделяют на две группы: интерактивные (процессы переднего плана) и пакетные (фоновые). Стратегия многоуровневой очереди разделяет очередь готовых процессов на несколько очередей, в каждой из которых находятся процессы с одинаковыми свойствами, и каждый из которых может планироваться индивидуальной стратегией. Взаимодействие очередей осуществляется по следующим правилам: ни один процесс с более низким приоритетом не может быть запущен, пока не выполнятся процессы во всех очередях с более высоким приоритетом; Диспетчеризация - это реализация решения, найденного в результате планирования
Операционная система идентифицирует и отслеживает каждую нить по её блоку управления процессом PCB (Process Control Block).Задачи диспетчеризации:
Сохранение контекста текущего потока
Загрузка контекста нового потока
Запуск нового потока на выполнение
Контекст потока можно разделить на общую часть для всех потоков данного процесса и часть, относящуюся только к данному потоку
Иерархия контекстов ускоряет переключение потоков
Процесс – совокупность набора исполняющихся команд, ассоциированных с ней ресурсов (выделенная для исполнения память или адресное пространство, стеки, используемые файлы и устройства ввода-вывода) и текущего момента ее выполнения (значения регистров, программного счетчика, состояние стека и значения переменных), находящуюся под управлением ОС.
Для работы определенных программ может организовываться более одного процесса или один и тот же процесс может исполнять последовательно несколько различных программ.
В процессе может выполняться часть кода ядра ОС.
Состояния процесса
Рождение. При рождении процесс получает адресное пространство, в которое загружается его программный код; ему выделяются стек и системные ресурсы; устанавливается начальное значение программного счетчика. Родившийся процесс переводится в состояние готовность.
Инициатором рождения нового процесса после старта ОС может выступить либо процесс пользователя, совершивший специальный системный вызов, либо сама ОС.
Процесс,
инициировавший создание
нового процесса,
принято называть процессом-родителем,
а вновь созданный процесс
– процессом-ребенком. Процессы-дети
могут в свою очередь порождать новых
детей, образуя, деревья процессов.
ОС переводит его в состояние исполнение – выполнение программного кода процесса.
Процесс через некоторое время может быть завершен или приостановлен ОС.
Приостановка процесса происходит по двум причинам: для его дальнейшей работы потребовалось какое-либо событие (например, завершение операции ввода-вывода) или истек временной интервал, отведенный операционной системой для работы данного процесса.
Из состояния ожидание процесс попадает в состояние готовность после того, как ожидаемое событие произошло, и он снова может быть выбран для исполнения.
При завершении своей деятельности процесс из состояния исполнение попадает в состояние закончил исполнение.
В ходе жизненного цикла процесс неоднократно переходит из одного состояния в другое в соответствии с реализованным в ОС алгоритмом планирования процессов.
Windows NT содержит 7 различных состояний, а Unix – 9.
Изменением состояния процессов занимается ОС, совершая операции над ними. Удобно объединить их в три пары:
создание – завершение процесса;
приостановка (перевод из И в Г) – запуск процесса (перевод из Г в И);
блокирование процесса (перевод из И в О) – разблокирование процесса (О в Г).
Контекст процесса – структура данных, содержащая информацию, специфичную для процесса:
состояние, в котором находится процесс;
программный счетчик процесса (адрес следующей команды);
содержимое регистров процессора;
данные, необходимые для планирования использования процессора и управления памятью (приоритет процесса, размер и расположение адресного пространства и т. д.);
учетные данные (идентификационный номер процесса, какой пользователь инициировал его работу, общее время использования процессора данным процессом и т. д.);
сведения об устройствах ввода-вывода, связанных с процессом (например, какие устройства закреплены за процессом, таблицу открытых файлов).
Вся информация, необходимая для совершения операций над процессом, хранится в одной структуре данных: PCB (Process Control Block) – блок управления процессом. Информацию делят на 3 части:
регистровый контекст процесса – содержимое всех регистров процессора (включая значение программного счетчика)
пользовательский контекст – код и данные, находящиеся в адресном пространстве процесса
системный контекст процесса – все остальное.
Совокупность
регистрового,
системного
и пользовательского
контекстов процесса
для краткости принято называть просто
контекстом
процесса.
В любой момент времени процесс
полностью характеризуется своим
контекстом.
Переключение контекста
Деятельность мультипрограммной ОС состоит из цепочек операций, выполняемых над различными процессами, и сопровождается переключением процессора с одного процесса на другой.
Для корректного переключения процессора с одного процесса на другой необходимо сохранить контекст исполнявшегося процесса и восстановить контекст процесса, на который будет переключен процессор. Такая процедура сохранения / восстановления работоспособности процессов называется переключением контекста.
Время, затраченное на переключение контекста, представляет собой накладные расходы, снижающие производительность системы.
Подсистема управления процессами занимается созданием и уничтожением процессов, обеспечивает процессы необходимыми системными ресурсами, поддерживает взаимодействие между процессами.
Под управлением процессами понимается:
Управление использованием времени центрального процессора. В какой момент времени какой из процессов будет владеть активностью ЦП: на какой из процессов будет работать ЦП.
Управление «подкачкой» и буфером ввода. Процессором обрабатывается несколько процессов, и необходимо освободить реальную оперативную память для других задач – откачать на внешнее ЗУ.
Если в системе образовывается масса задач, то образуется буфер ввода процессов, ожидающих начала обработки процессором. Возникает проблема очередности выбора процессов из этого буфера.
Управление разделяемыми ресурсами. Проблема с простым устройством легко решается, а вот если две программы имеют общий фрагмент оперативной памяти, то управление таким разделяемым ресурсом - сложная задача.
Потоки (нити, треды)
Процесс – совокупность взаимодействующих нитей и выделенных ему ресурсов.
Многопоточность обеспечивает возможность параллельно выполнять несколько видов операций в одной прикладной программе.
Нити процесса разделяют его программный код; глобальные переменные; системные ресурсы; адресное пространство.
Каждая нить имеет собственный программный счетчик; свое содержимое регистров; свой стек.
Накладные расходы на создание новой нити и на переключение контекста между нитями одного процесса существенно меньше, чем на те же самые действия для процессов, что позволяет на однопроцессорной ВС ускорять решение задач с помощью организации работы нескольких взаимодействующих нитей. Эффективно используются ресурсы центрального процессора,
Треды могут порождать треды-потомки. Каждый тред может находится в одном из активных состояний. Пока один тред заблокирован, другой тред того же процесса может выполняться. Треды разделяют процессорное время так же, как это делают обычные процессы, в соответствии с различными вариантами диспетчеризации.
