Подсистема управления процессами. Функции подсистемы управления процессами. Алгоритмы планирования, основанные на приоритетах

Система управления задачами обеспечивает их прохождение через компьютер. В зависимости от состояния процесса ему необходимо выделить тот или иной ресурс. Например, новый процесс нужно разместить в памяти, выделив ему адресное пространство; включить в список задач, конкурирующих за процессорное время.

Одной из основных подсистем мультипрограммной ОС, непосредственно влияющей на функционирование вычислительной машины, является подсистема управления процессами и потоками . Она занимается их созданием и уничтожением, а также распределяет процессорное время между одновременно существующими в системе процессами и потоками.

При одновременном выполнении в системе нескольких задач, хотя потоки возникают и выполняются асинхронно, у них может возникнуть необходимость во взаимодействии, например, при обмене данными. Поэтому синхронизация потоков является одной из важных функций подсистемы управления процессами и потоками.

Взаимодействие между процессами осуществляется с помощью общих переменных и специальных базовых операций, называемых примитивами .

Подсистема управления процессами и потоками имеет возможность выполнять над процессами следующие операции:

– создание (порождение)/уничтожение процесса;

– приостановка/возобновление процесса;

– блокирование/пробуждение процесса;

– запуск процесса;

– изменение приоритета процесса;

Подсистема управления процессами и потоками ответственна за обеспечение процессов необходимыми ресурсами. ОС поддерживает в памяти специальные информационные структуры, в которые записывает, какие ресурсы выделены каждому процессу. Ресурс может назначаться процессу в единоличное пользование или в совместное пользование с другими процессами. Некоторые из ресурсов выделяются процессу при его создании, а некоторые – динамически по запросам во время выполнения. Ресурсы могут быть приписаны процессу на все время его жизни или только на определенный период. При выполнении этих функций подсистема управления процессами взаимодействует с другими подсистемами ОС, ответственными за управление ресурсами, такими, как подсистема управления памятью, подсистема ввода-вывода, файловая система.

1. Создание и удаление процессов и потоков

Создать процесс – это прежде всего означает создать описатель процесса , в качестве которого выступает одна или несколько информационных структур, содержащих все сведения о процессе, необходимые операционной системе для управления им. Подробно этот вопрос рассматривался ранее, сейчас только напомним, что в число таких сведений могут входить, например, идентификатор процесса, данные о расположении в памяти исполняемого модуля, степень привилегированности процесса (приоритет и права доступа) и т.п.

Создание процесса включает загрузку кодов и данных исполняемой программы данного процесса с диска в оперативную память. При этом подсистема управления процессами взаимодействует с подсистемой управления памятью и файловой системой. В многопоточной системе при создании процесса ОС создает для каждого процесса как минимум один поток выполнения. При создании потока так же, как при создании процесса, ОС генерирует специальную информационную структуру – описатель потока, который содержит идентификатор потока, данные о правах доступа и приоритете, о состоянии потока и т.п. После создания поток (или процесс) находится в состоянии готовности к выполнению (или в состоянии бездействия, если речь идет об ОС специального назначения).

Создание и удаление задач осуществляется по соответствующим запросам от пользователей или от других задач. Задача может породить новую задачу – во многих системах поток может обратиться к ОС с запросом на создание т.н. потоков-потомков. Порождающая задача называется "предком", "родителем", а порожденная – "потомком" или "дочерней задачей". "Предок" может приостановить или удалить свою дочернюю задачу, в то время как "потомок" не может управлять "предком".

В разных ОС по-разному строятся отношения между потоками-потомками и их родителями. В одних ОС их выполнение синхронизируется (после завершения родительского потока с выполнения снимаются все его потомки), в других потомки выполняются асинхронно по отношению к родительскому потоку.

После завершения процесса ОС "зачищает следы" его пребывания в системе – закрывает все файлы, с которыми работал процесс, освобождает области оперативной памяти, отведенные под коды, данные и системные информационные структуры процесса. Выполняется коррекция очередей ОС и списков ресурсов, в которых имелись ссылки на завершаемый процесс.

2. Планирование и диспетчеризация процессов и потоков

Стратегия планирования определяет, какие процессы выбираются на выполнение для достижения поставленной цели. Стратегии могут быть различными, например:

– по возможности заканчивать вычисления в том же самом порядке, в каком они были начаты;

– отдавать предпочтение более коротким процессам;

– предоставлять всем пользователям (задачам пользователей) одинаковые услуги, в том числе и одинаковое время ожидания.

На протяжении существования процесса выполнение его потоков может быть многократно прервано и продолжено.

Переход от выполнения одного потока к другому осуществляется в результате планирования и диспетчеризации .

Планирование потоков осуществляется на основе информации, хранящейся в описателях процессов и потоков. При планировании могут приниматься во внимание приоритет потоков, время их ожидания в очереди, накопленное время выполнения, интенсивность обращения к вводу-выводу и др. факторы. ОС планирует выполнение потоков независимо от того, принадлежат ли они одному или разным процессам. Под планированием понимают задачу подбора такого множества процессов, чтобы они как можно меньше конфликтовали при выполнении и как можно эффективнее использовали вычислительную систему.

В различных информационных источниках существуют различные трактовки понятий "планирование" и "диспетчеризация". Так, некоторые авторы планирование подразделяют на долгосрочное (глобальное) и краткосрочное (динамическое, т.е. текущее наиболее эффективное распределение), и последнее называют диспетчеризацией. Согласно другим источникам, под диспетчеризацией понимают реализацию принятого на этапе планирования решения. Мы будем придерживаться этого варианта.

Планирование включает в себя решение двух задач:

определение момента времени для смены активного потока;

выбор для выполнения потока из очереди готовых потоков.

Существует множество алгоритмов планирования, по-разному решающих эти задачи. Именно особенности планирования определяют специфику операционной системы. Рассмотрим их чуть позже.

В большинстве ОС планирование осуществляется динамически , т.е. решения принимаются во время работы на основании анализа текущей ситуации. Потоки и процессы появляются в случайные моменты времени и непредсказуемо завершаются.

Статический тип планирования может быть использован в специализированных системах, в которых весь набор одновременно выполняемых заданий определен заранее (системы реального времени). Планировщик составляет расписание на основании знаний о характеристиках набора задач. Затем это расписание используется операционной системой для диспетчеризации.

Диспетчеризация заключается в реализации найденного в результате планирования решения, т.е. в переключении одного процесса на другой. Диспетчеризация сводится к следующему:

сохранение контекста текущего потока, который требуется сменить;

запуск нового потока на выполнение.

В контексте потока отражены, во-первых, состояние аппаратуры компьютера в момент прерывания (значение счетчика команд, содержимое регистров общего назначения, режим работы процессора, флаги, маски прерываний и др. параметры), во-вторых, параметры операционной среды (ссылки на открытые файлы, данные о незавершенных операциях ввода-вывода, коды ошибок выполняемых данным потоком системных вызовов и т.п.).

В контексте потока можно выделить часть, общую для всех потоков данного процесса (ссылки на открытые файлы), и часть, относящуюся только к данному потоку (содержимое регистров, счетчик команд, режим процессора). Например, в среде NetWare различаются три вида контекстов – глобальный контекст (контекст процесса), контекст группы потоков и контекст отдельного потока. Соотношение между данными этих контекстов аналогично соотношению глобальных и локальных переменных в программе. Иерархическая организация контекстов ускоряет переключение потоков: при переключении с потока одной группы на поток другой группы в пределах одного процесса глобальный контекст не изменяется, а меняется лишь контекст группы. Переключение глобальных контекстов происходит только при переходе с потока одного процесса на поток другого процесса.

3. Алгоритмы планирования

С точки зрения решения первой задачи планирования (выбор момента времени для смены активного потока) алгоритмы планирования делятся на два больших класса – вытесняющие и невытесняющие алгоритмы:

невытесняющие – активный поток может выполняться до тех пор, пока он сам не передаст управление системе, чтобы та выбрала из очереди другой готовый поток;

вытесняющие – операционная система принимает решение о смене выполняемого задания и переключает процессор на другой поток.

Основным различием между названными алгоритмами планирования является степень централизации механизма планирования потоков. Рассмотрим основные характеристики, достоинства и недостатки каждого класса алгоритмов.

Невытесняющие алгоритмы . Прикладная программа, получив управление от ОС, сама определяет момент завершения очередного цикла своего выполнения и только затем передает управление ОС с помощью какого-либо системного вызова. Следовательно, управление приложением со стороны пользователя теряется на произвольный период времени. Разработчикам необходимо учитывать это и создавать приложения так, чтобы они работали как бы "частями", периодически прерываясь и передавая управление системе, т.е. при разработке выполняются еще и функции планировщика.

Достоинства данного подхода:

– исключено прерывание потока в неудобный для него момент;

– решается проблема одновременного использования данных, т.к. во время каждого цикла выполнения задача использует их монопольно и уверена, что никто другой не сможет их изменить;

– более высокая скорость переключения с потока на поток.

Недостатками являются затрудненная разработка программ и повышенные требования к квалификации программиста, а также возможность захвата процессора одним потоком при его случайном или преднамеренном зацикливании.

Вытесняющие алгоритмы – циклический, или круговой тип планирования, при котором операционная система сама решает вопрос о прерывании активного приложения и переключает процессор с одной задачи на другую в соответствии с тем или иным критерием. В системе с такими алгоритмами программисту не надо заботиться о том, что его приложение будет выполняться одновременно с другими задачами. В качестве примеров можно назвать операционные системы UNIX, Windows NT/2000, OS/2. Алгоритмы этого класса ориентированы на высокопроизводительное выполнение приложений.

Вытесняющие алгоритмы могут быть основаны на концепции квантования или на механизме приоритетов.

Алгоритмы, основанные на квантовании . Каждому потоку предоставляется ограниченный непрерывный квант процессорного времени (его величина не должна быть меньше 1 мс – как правило, несколько десятков мс). Поток переводится из состояния выполнения в состояние готовности в случае, если квант исчерпан. Кванты могут быть одинаковыми для всех потоков или различными.

При выделении квантов потоку могут использоваться разные принципы: эти кванты могут быть фиксированной величины или изменяться в разные периоды жизни потока. Например, для некоторого конкретного потока первый квант может быть довольно большим, а каждый следующий выделяемый ему квант может иметь меньшую длительность (уменьшение до заданных пределов). Таким образом формируется преимущество для более коротких потоков, а длительные задачи переходят в фоновый режим. Другой принцип основан на том факте, что процессы, часто выполняющие операции ввода-вывода, не полностью реализуют выделяемые им кванты времени. Для компенсации этой несправедливости из таких процессов может быть сформирована отдельная очередь, которая имеет привилегии по отношению к остальным потокам. При выборе очередного потока на выполнение сначала просматривается эта очередь, и, только если она пуста, выбирается поток из общей очереди готовых к выполнению.

Эти алгоритмы не используют никакой предварительной информации о задачах. Дифференциация обслуживания в данном случае базируется на "истории существования" потока в системе.

С точки зрения второй задачи планирования (принцип выбора на выполнение очередного потока) алгоритмы также могут быть условно разбиты на классы: бесприоритетные и приоритетные алгоритмы. При бесприоритетном обслуживании выбор очередной задачи производится в некотором заранее заданном порядке без учета их относительной важности и времени обслуживания. При реализации приоритетных дисциплин некоторым задачам предоставляется преимущественное право попасть в состояние исполнения.

Теперь рассмотрим некоторые наиболее распространенные дисциплины планирования.


Обслуживание в порядке поступления . Выделение процессора производится по принципу FIFO (First In First Out), т.е. в порядке поступления заявок на обслуживание. Этот подход позволяет реализовать стратегию "по возможности заканчивать вычисления в порядке их появления". Те задачи, которые были заблокированы в процессе выполнения, после перехода в состояние готовности ставятся в очередь перед теми задачами, которые еще не выполнялись. Таким образом, создается две очереди: одна из еще не выполнявшихся задач, а другая – из задач, перешедших из состояния ожидания.

Эта дисциплина реализуется как невытесняющая, когда задачи освобождают процессор добровольно.

Достоинством данного алгоритма является его простота реализации. Недостатком – при большой загрузке короткие задания вынуждены ожидать в системе долгое время. Следующий подход устраняет этот недостаток.

Кратчайший процесс обслуживается первым. Согласно этому алгоритму, следующим для выполнения назначается поток с минимальным оценочным временем, требуемым для окончания его работы. Здесь оказывается предпочтение потокам, которым осталось немного времени до их завершения. Благодаря этому уменьшается количество ожидающих задач в системе. Недостатком является необходимость заранее знать оценочные времена, что не всегда возможно. В качестве грубого приближения в некоторых случаях можно использовать время, затраченное потоком при последнем получении управления.

Алгоритм относится к разряду невытесняющих бесприоритетных.

Названные алгоритмы могут использоваться для пакетных режимов работы, когда пользователь не ожидает реакции системы. Для интерактивных же вычислений нужно прежде всего обеспечить приемлемое время реакции и равенство в обслуживании для мультитерминальных систем. Для однопользовательских систем желательно, чтобы те программы, с которыми непосредственно работают, имели лучшее время реакции, чем фоновые задания. Кроме того, некоторые приложения, выполняясь без непосредственного участия пользователя, должны тем не менее гарантированно получать свою долю процессорного времени (например, программа получения электронной почты). Для решения подобных проблем используются приоритетные методы обслуживания и концепция квантования.


Карусельная дисциплина , или круговая RR (Round Robin). Данная дисциплина относится к вытесняющим алгоритмам и основана на квантовании. Каждая задача получает процессорное время порциями – квантами. После окончания кванта времени задача снимается с процессора и ставится в конец очереди процессов, готовых к выполнению, а на обслуживание процессором принимается очередная задача. Для оптимальной работы системы необходимо правильно выбрать закон, по которому кванты времени выделяются задачам.

Величина кванта выбирается как компромисс между приемлемым временем реакции системы на запросы пользователей (с тем, чтобы их простейшие запросы не вызывали длительного ожидания) и накладными расходами на частую смену задач. При прерываниях ОС должна сохранить достаточно большой объем информации о текущем процессе, поставить дескриптор снятой задачи в очередь, загрузить контекст новой задачи. При малой величине кванта времени и частых переключениях относительная доля таких накладных расходов станет большой, и это ухудшит производительность системы в целом. При большой величина кванта времени и увеличении очереди готовых задач реакция системы станет плохой.

В некоторых ОС есть возможность указывать в явном виде величину кванта времени или допустимый диапазон его значений. Например, в OS/2 в файле CONFIG.SYS с помощью оператора TIMESLICE указывается минимальное и максимальное значения для кванта времени: TIMESLICE=32,256 указывает, что квант возможно изменять в пределах от 32 до 256 миллисекунд.

Данная дисциплина обслуживания является одной из самых распространенных. В некоторых случаях, когда ОС не поддерживает в явном виде дисциплину карусельного планирования, такое обслуживание можно организовать искусственно. Например, в некоторых ОСРВ используется планирование с абсолютными приоритетами, а при равенстве приоритетов действует принцип очередности. Т.е., снять задачу с выполнения может только задача с более высоким приоритетом. При необходимости организовать обслуживание равномерно и равноправно, т.е. чтобы все задания получали одинаковые кванты времени, системный оператор может сам реализовать такое обслуживание. Для этого достаточно всем пользовательским задачам присвоить одинаковые приоритеты и создать одну высокоприоритетную задачу, которая не должна ничего делать, кроме как планироваться на выполнение по таймеру через указанные интервалы времени. Эта задача будет только снимать с выполнения текущее приложение, оно переместится в конец очереди, а сама задача тут же покинет процессор и уступит его следующему в очереди процессу.

В простейшей реализации карусельная дисциплина обслуживания предполагает, что все задания имеют одинаковый приоритет. Если же необходимо ввести механизм приоритетного обслуживания, обычно организуют несколько очередей, в зависимости от приоритетов, и к обслуживанию менее приоритетной очереди переходят только в том случае, когда более приоритетная очередь пуста. По такому алгоритму выполняется планирование в системах OS/2 и Windows NT.

Планирование согласно приоритетам .

Важная концепция, лежащая в основе многих вытесняющих алгоритмов – это приоритетное обслуживание. Такие алгоритмы используют информацию, находящуюся в описателе потока – его приоритет. В разных системах приоритет определяется по-разному. В одних системах наивысшим значением приоритета может считаться его численно наибольшее значение, в других – наоборот, наивысшим приоритетом считается нулевой.

Как правило, приоритет потока непосредственно связан с приоритетом процесса, в рамках которого выполняется данный поток. Приоритет процесса назначается операционной системой при его создании, при этом учитывается, является ли процесс системным или прикладным, каков статус пользователя, запустившего процесс, было ли явное указание пользователя на присвоение процессу определенного приоритета. Значение приоритета включается в описатель процесса и используется при назначении приоритета его потокам. Если поток инициирован не по команде пользователя, а в результате выполнения системного вызова другим потоком, тогда для назначения ему приоритета ОС должна учитывать параметры системного вызова.

При планировании обслуживания программ согласно описанным ранее алгоритмам может возникнуть ситуация, когда некоторые задачи контроля или управления не смогут быть реализованы в течение длительного промежутка времени из-за возрастания нагрузки в системе (особенно в ОСРВ). При этом последствия из-за несвоевременного выполнения таких задач могут быть серьезнее, чем из-за невыполнения каких-то программ с более высоким приоритетом. В таком случае было бы целесообразно временно изменить приоритет "аварийных" задач (у которых истекает отпущенное для них время обработки), а после выполнения восстановить прежнее значение. Введение механизмов динамического изменения приоритетов позволяет реализовать более быструю реакцию системы на короткие запросы пользователей (что важно при интерактивной работе), но при этом гарантировать выполнение любых запросов.

Таким образом, приоритет может быть статическим (фиксированным) или динамическим (изменяющимся системой в зависимости от ситуации в ней). Так называемый базовый приоритет потока непосредственно зависит от базового приоритета процесса, его породившего. В некоторых случаях система может повышать приоритет потока (причем в различной степени), например, если квант отведенного ему процессорного времени не был использован полностью, или понижать приоритет в противном случае. Например, ОС повышает приоритет в большей степени потокам, ожидающим ввода с клавиатуры, и в меньшей степени – потокам, выполняющим операции с диском. В некоторых системах, использующих механизм динамических приоритетов, для изменения приоритета используются достаточно сложные формулы, в которых участвуют значения базовых приоритетов, степень загрузки вычислительной системы, начальное значение приоритета, заданное пользователем, и т.п.

Существуют две разновидности приоритетного планирования: обслуживание с относительными приоритетами и обслуживание с абсолютными приоритетами . В обоих случаях выбор потока на выполнение осуществляется одинаково – выбирается поток, имеющий наивысший приоритет, а момент смены активного потока определяется по-разному. В системе с относительными приоритетами активный поток выполняется до тех пор, пока он сам не покинет процессор (перейдет в состояние ожидания, или произойдет ошибка, или поток завершится). В системе с абсолютными приоритетами прерывание активного потока, кроме указанных причин, происходит еще и в случае, если в очереди готовых потоков появляется поток с более высоким приоритетом, чем активный. Тогда выполняемый поток прерывается и переводится в состояние готовности.

В системе с планированием на основе относительных приоритетов минимизируются затраты на переключение, но одна задача может занимать процессор долгое время. Для систем разделения времени и реального времени такой режим обслуживания не подходит, а вот в системах пакетной обработки (например, OS/360) он используется широко. Планирование с абсолютными приоритетами подходит для систем управления объектами, в которых важна быстрая реакция на события.

Смешанный тип планирования используется во многих ОС: алгоритмы планирования на основе приоритетов сочетаются с концепцией квантования.

Подсистема управления процессами

Запущенная на выполнение программа порождает в системе один или более процессов (или задач ). Подсистема управления процессами контролирует:

Создание и удаление процессов

Распределение системных ресурсов (памяти, вычислительных ресурсов) между процессами

Синхронизацию процессов

Межпроцессное взаимодействие

Очевидно, что в общем случае число активных процессов превышает число процессоров компьютера, но в каждый конкретный момент времени на каждом процессоре может выполняться только один процесс. Операционная система управляет доступом процессов к вычислительным ресурсам, создавая ощущение одновременного выполнения нескольких задач.

Специальная задача ядра, называемая распорядителем или планировщиком процессов (scheduler), разрешает конфликты между процессами в конкуренции за системные ресурсы (процессор, память, устройства ввода/вывода). Планировщик запускает процесс на выполнение, следя за тем, чтобы процесс монопольно не захватил разделяемые системные ресурсы. Процесс освобождает процессор, ожидая длительной операции ввода/вывода, или по прошествии кванта времени. В этом случае планировщик выбирает следующий процесс с наивысшим приоритетом и запускает его на выполнение.

Модуль управления памятью обеспечивает размещение оперативной памяти для прикладных задач. Оперативная память является дорогостоящим ресурсом, и, как правило, ее редко бывает "слишком много". В случае, если для всех процессов недостаточно памяти, ядро перемещает части процесса или нескольких процессов во вторичную память (как правило, в специальную область жесткого диска), освобождая ресурсы для выполняющегося процесса. Все современные системы реализуют так называемую виртуальную память : процесс выполняется в собственном логическом адресном пространстве, которое может значительно превышать доступную физическую память. Управление виртуальной памятью процесса также входит в задачи модуля управления памятью.

Модуль межпроцессного взаимодействия отвечает за уведомление процессов о событиях с помощью сигналов и обеспечивает возможность передачи данных между различными процессами.

Данный текст является ознакомительным фрагментом. Из книги Внутреннее устройство Microsoft Windows (гл. 8-11) автора Руссинович Марк

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

ГЛАВА 10. ПОДСИСТЕМА УПРАВЛЕНИЯ ВВОДОМ-ВЫВОДОМ Подсистема управления вводом-выводом позволяет процессам поддерживать связь с периферийными устройствами, такими как накопители на магнитных дисках и лентах, терминалы, принтеры и сети, с одной стороны, и с модулями ядра,

Из книги Linux-сервер своими руками автора

5.1.1. Общая схема управления процессами Каждый процесс может порождать полностью идентичный процесс с помощью fork(). Родительский процесс может дожидаться окончания выполнения всех своих процессов-потомков с помощью системного вызова wait. В любой момент времени процесс

Из книги Основы AS/400 автора Солтис Фрэнк

5.3. Команды управления процессами Команда psКоманда ps предназначена для вывода информации о выполняемых в текущий момент процессах. Данная команда имеет много параметров, о которых вы можете прочитать в руководстве (man ps). Здесь я опишу лишь наиболее часто используемые

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

О Подсистема памяти Одна из самых больших проблем любого процессора - обеспечение его загрузки. За последние несколько лет производительность процессоров необычайно выросла, в среднем удваиваясь каждые два года. Производительность памяти и ввода-вывода не успевает

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

Управление процессами Время - это средство, с помощью которого Природа не дает всему происходить сразу. В компьютерах таким средством служат процессы. Процесс - это исполняющаяся программа. Он состоит из исполняемой программы, данных программы и некоторой информации

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк

14.1.3. Манипулирование процессами В этом разделе мы обсудим манипулирование процессами, хотя создание нового процесса необязательно связано с запуском внешней программы. Основной способ создания нового процесса - это метод fork, название которого в соответствии с

Из книги Операционная система UNIX автора Робачевский Андрей М.

9.2. Команды управления процессами 9.2.1. Иерархия процессов: ps и pstree О том, что команда ps позволяет просмотреть сведения обо всех процессах, протекающих в системе в данный момент, вы уже знаете (п.3.2). С ключом -f эта команда выводит как PID самого процесса, так и PPID его родителя,

Из книги автора

3.1. Знакомство с процессами Пользователю достаточно войти в систему, чтобы в ней начали выполняться процессы. Даже если пользователь ничего не запускает, а просто сидит перед экраном и пьет кофе. в системе все равно "теплится жизнь". Любой выполняющейся программе

Из книги автора

Файловая подсистема Файловая подсистема обеспечивает унифицированный интерфейс доступа к данным, расположенным на дисковых накопителях, и к периферийным устройствам. Одни и те же функции open(2), read(2), write(2) могут использоваться как при чтении или записи данных на диск, так

Из книги автора

Подсистема ввода/вывода Подсистема ввода/вывода выполняет запросы файловой подсистемы и подсистемы управления процессами для доступа к периферийным устройствам (дискам, магнитным лентам, терминалам и т.д.). Она обеспечивает необходимую буферизацию данных и

Из книги автора

Из книги автора

Глава 3 Подсистема управления процессами Сердцем операционной системы UNIX является подсистема управления процессами. Практически все действия ядра имеют отношение к процессам, будь то обслуживание системного вызова, генерация сигнала, размещение памяти, обработка

Из книги автора

Глава 4 Файловая подсистема Большинство данных в операционной системе UNIX хранится в файлах, организованных в виде дерева и расположенных на некотором носителе данных. Обычно это локальный (т. е. расположенный на том же компьютере, что и сама операционная система) жесткий

Из книги автора

Глава 5 Подсистема ввода/вывода Фактическая архитектура ввода/вывода скрыта от прикладного процесса несколькими интерфейсами. Один из них - интерфейс файловой системы был рассмотрен в предыдущей главе. Взаимодействие с удаленными ресурсами обеспечивается сетевыми

Из книги автора

Подсистема STREAMS Архитектура подсистемы потокового ввода/вывода STREAMS впервые была описана в статье Ритчи "Потоковая система ввода/вывода" (Ritchie, D.M., "A Stream Input-Output System", AT&T Bell Laboratories Technical Journal, Vol. 63, No. 8, Oct. 1984) в 1984 году. Двумя годами позднее эта система была реализована в

изоляция процессов ;
  • планирование выполнения процессов и потоков (вообще, следует говорить и о планировании заданий);
  • диспетчеризация потоков;
  • организация межпроцессного взаимодействия;
  • синхронизация процессов и потоков;
  • завершение и уничтожение процессов и потоков.
  • К созданию процесса приводят пять основных событий:

  • выполнение запроса работающего процесса на создание процесса;
  • запрос пользователя на создание процесса, например, при входе в систему в интерактивном режиме;
  • инициирование пакетного задания;
  • создание операционной системой процесса, необходимого для работы каких-либо служб.
  • Обычно при загрузке ОС создаются несколько процессов. Некоторые из них являются высокоприоритетными процессами, обеспечивающими взаимодействие с пользователями и выполняющими заданную работу. Остальные процессы являются фоновыми, они не связаны с конкретными пользователями, но выполняют особые функции – например, связанные с электронной почтой, Web-страницами, выводом на печать , передачей файлов по сети, периодическим запуском программ (например, дефрагментации дисков ) и т.д. Фоновые процессы называют демонами.

    Новый процесс может быть создан по запросу текущего процесса. Создание новых процессов полезно в тех случаях, когда выполняемую задачу проще всего сформировать как набор связанных, но, тем не менее, независимых взаимодействующих процессов. В интерактивных системах пользователь может запустить программу, набрав на клавиатуре команду или дважды щелкнув на значке программы. В обоих случаях создается новый процесс и запуск в нем программы. В системах пакетной обработки на мэйнфреймах пользователи посылают задание (возможно, с использованием удаленного доступа), а ОС создает новый процесс и запускает следующее задание из очереди, когда освобождаются необходимые ресурсы.

    С технической точки зрения во всех перечисленных случаях новый процесс формируется одинаково: текущий процесс выполняет системный запрос на создание нового процесса. Подсистема управления процессами и потоками отвечает за обеспечение процессов необходимыми ресурсами. ОС поддерживает в памяти специальные информационные структуры, в которые записывает, какие ресурсы выделены каждому процессу. Она может назначить процессу ресурсы в единоличное пользование или совместное пользование с другими процессами. Некоторые из ресурсов выделяются процессу при его создании, а некоторые – динамически по запросам во время выполнения . Ресурсы могут быть выделены процессу на все время его жизни или только на определенный период. При выполнении этих функций подсистема управления процессами взаимодействует с другими подсистемами ОС, ответственными за управление ресурсами , такими как подсистема управления памятью, подсистема ввода-вывода , файловая система .

    Для того чтобы процессы не могли вмешаться в распределение ресурсов , а также не могли повредить коды и данные друг друга, важнейшей задачей ОС является изоляция одного процесса от другого. Для этого операционная система обеспечивает каждый процесс отдельным виртуальным адресным пространством, так что ни один процесс не может получить прямого доступа к командам и данным другого процесса.

    В ОС, где существуют процессы и потоки, процесс рассматривается как заявка на потребление всех видов ресурсов, кроме одного – процессорного времени. Этот важнейший ресурс распределяется операционной системой между другими единицами работы – потоками, которые и получили свое название благодаря тому, что они представляют собой последовательности (потоки выполнения) команд. Переход от выполнения одного потока к другому осуществляется в результате планирования и диспетчеризации . Работа по определению момента, в который необходимо прервать выполнение текущего потока, и потока, которому следует предоставить возможность выполняться, называется планированием. Планирование потоков осуществляется на основе информации, хранящейся в описателях процессов и потоков. При планировании принимается во внимание приоритет потоков , время их ожидания в очереди, накопленное время выполнения , интенсивность обращения к вводу-выводу и другие факторы.

    Диспетчеризация заключается в реализации найденного в результате планирования решения, т.е. в переключении процессора с одного потока на другой. Диспетчеризация проходит в три этапа:

    • сохранение контекста текущего потока;
    • загрузка контекста потока, выбранного в результате планирования;
    • запуск нового потока на выполнение.

    Когда в системе одновременно выполняется несколько независимых задач, возникают дополнительные проблемы. Хотя потоки возникают и выполняются синхронно, у них может возникнуть необходимость во взаимодействии, например, при обмене данными. Для общения друг с другом процессы и потоки могут использовать широкий спектр возможностей: каналы (в UNIX ), почтовые ящики ( Windows ), вызов удаленной процедуры, сокеты (в Windows соединяют процессы на разных машинах). Согласование скоростей потоков также очень важно для предотвращения эффекта "гонок" (когда несколько потоков пытаются изменить один и тот же файл ), взаимных блокировок и других коллизий, которые возникают при совместном использовании ресурсов.

    Синхронизация потоков является одной из важнейших функций подсистемы управления процессами и потоками. Современные операционные системы предоставляют множество механизмов синхронизации, включая семафоры, мьютексы, критические области и события. Все эти механизмы работают с потоками, а не с процессами. Поэтому когда поток блокируется на семафоре, другие потоки этого процесса могут продолжать работу.

    Каждый раз, когда процесс завершается, – а это происходит благодаря одному из следующих событий: обычный выход , выход по ошибке, выход по неисправимой ошибке, уничтожение другим процессом – ОС предпринимает шаги, чтобы "зачистить следы" его пребывания в системе. Подсистема управления процессами закрывает все файлы, с которыми работал процесс, освобождает области оперативной памяти, отведенные под коды, данные и системные информационные структуры процесса. Выполняется коррекция всевозможных очередей ОС и список ресурсов, в которых имелись ссылки на завершаемый процесс.

    Как уже отмечалось, чтобы поддержать мультипрограммирование , ОС должна оформить для себя те внутренние единицы работы, между которыми будет разделяться процессор и другие ресурсы компьютера. Возникает вопрос: в чем принципиальное отличие этих единиц работы, какой эффект мультипрограммирования можно получить от их применения и в каких случаях эти единицы работ операционной системы следует создавать?

    Очевидно, что любая работа вычислительной системы заключается в выполнении некоторой программы. Поэтому и с процессом, и с потоком связывается определенный программный код, который оформляется в виде исполняемого модуля. В простейшем случае процесс состоит из одного потока, и в некоторых современных ОС сохранилось такое положение. Мультипрограммирование в таких ОС осуществляется на уровне процессов. При необходимости взаимодействия процессы обращаются к операционной системе, которая, выполняя функции посредника, предоставляет им средства межпроцессной связи – каналы, почтовые акции, разделяемые секции памяти и др.

    Однако в системах, в которых отсутствует понятие потока, возникают проблемы при организации параллельных вычислений в рамках процесса. А такая необходимость может возникать. Дело в том, что отдельный процесс никогда не может быть выполнен быстрее, чем в однопрограммном режиме. Однако приложение , выполняемое в рамках одного процесса, может обладать внутренним параллелизмом , который, в принципе, мог бы ускорить его решение. Если, например, в программе предусмотрено обращение к внешнему устройству, то на время этой операции можно не блокировать выполнение всего процесса, а продолжить вычисления по другой ветви программы.

    Параллельное выполнение нескольких работ в рамках одного интерактивного приложения повышает эффективность работы пользователя. Так, при работе с текстовым редактором желательно иметь возможность совмещения набора нового текста с такими продолжительными операциями, как переформатирование значительной части текста, сохранение его на локальном или удаленном диске.

    Нетрудно представить будущую версию компилятора, способную автоматически компилировать файлы исходного кода в паузах, возникающих при наборе текста программы. Тогда предупреждения и сообщения об ошибках появлялись бы в режиме реального времени, и пользователь тут же видел бы, в чем он ошибся. Современные электронные таблицы пересчитывают данные в фоновом режиме, как только пользователь что-либо изменил. Текстовые процессоры разбивают текст на страницы, проверяют его на орфографические и грамматические ошибки, печатают в фоновом режиме, сохраняют текст каждые несколько минут и т.д. Во всех этих случаях потоки используются как средство распараллеливания вычислений.

    Эти задачи можно было бы возложить на программиста, который должен был бы написать программу- диспетчер , реализующую параллелизм в рамках одного процесса. Однако это весьма сложно, да и сама программа получилась бы весьма запутанной и сложной в отладке.

    Другим решением является создание для одного приложения нескольких процессов для каждой из параллельных

    Одной из основных подсистем мультипрограммной ОС, непосредственно влияю­щей на функционирование вычислительной машины, является подсистема управ­ления процессами и потоками, которая занимается их созданием и уничтожени­ем, поддерживает взаимодействие между ними, а также распределяет процессор­ное время между несколькими одновременно существующими в системе процес­сами и потоками.

    Подсистема управления процессами и потоками ответственна за обеспечение процессов необходимыми ресурсами.

    • ОС поддерживает в памяти специальные ин­формационные структуры , в которые записывает, какие ресурсы выделены каж­дому процессу.
    • ОС может назначить процессу ресурсы в единоличное пользо­вание или в совместное пользование с другими процессами.
    • Некоторые из ресур­сов выделяются процессу при его создании, а некоторые - динамически по за­просам во время выполнения. Ресурсы могут быть приписаны процессу на все время его жизни или только на определенный период.
    • При выполнении основных функций подсистема управления процессами взаимодействует с другими подсис­темами ОС, ответственными за управление ресурсами, такими как подсистема управления памятью, подсистема ввода-вывода, файловая система.
    • Синхронизацияпотоков является одной из важных функций подсистемы управления процессами и потоками. Хотя потоки возникают и выполняются асинхронно, у них может возникнуть необходимость во взаимодействии, напри­мер при обмене данными. Согласование скоростей потоков также очень важно для предотвращения эффекта «гонок» (когда несколько потоков пытаются изме­нить один и тот же файл), взаимных блокировок или других коллизий, которые возникают при совместном использовании ресурсов.
    • По завершении процесса подсистема управления процессами за­крывает все файлы, с которыми работал процесс, освобождает области опера­тивной памяти, отведенные под коды, данные и системные информационные структуры процесса. Выполняется коррекция всевозможных очередей ОС и спи­сков ресурсов, в которых имелись ссылки на завершаемый процесс.

    Понятия «процесс» и «поток»

    Единицы работы ОС

    В настоящее время в большинстве ОС определены два типа единиц работы. Более крупная еди­ница работы, обычно носящая название процесса, или задачи, требует для своего выполнения нескольких более мелких работ, для обозначения которых исполь­зуют термины «поток», или «нить».

    И с процессом, и с потоком связывается оп­ределенный программный код, который для этих целей оформляется в виде ис­полняемого модуля. Чтобы этот программный код мог быть выполнен, его необ­ходимо загрузить в оперативную память, возможно, выделить некоторое место на диске для хранения данных, предоставить доступ к устройствам ввода-выво­да, например к последовательному порту для получения данных по подключен­ному к этому порту модему, и т. д. В ходе выполнения программе может также понадобиться доступ к информационным ресурсам, например файлам, портам TCP/UPD. И, конечно же, невозможно выполнение программы без предоставления ей процессорного времени, то есть времени, в течение которого процессор выполняет коды данной программы.

    В операционных системах, где существуют и процессы, и потоки, процесс рассматривается операционной системой как заявка на потребление всех видов ре­сурсов, кроме одного - процессорного времени. Этот последний важнейший ресурс распределяется операционной системой между другими единицами рабо­ты - потоками, которые и получили свое название благодаря тому, что они представляют собой последовательности (потоки выполнения) команд.

    В простейшем случае процесс состоит из одного потока, в таких системах понятие «поток» полностью поглощается понятием «процесс», то есть остается только одна единица работы и потребления ресур­сов - процесс. Мультипрограммирование осуществляется в таких ОС на уровне процессов.

    Для того чтобы процессы не могли вмешаться в распределение ресурсов, а также не могли повредить коды и данные друг друга, важнейшей задачей ОС является изоляция одного процесса от другого. Для этого ОС обеспечи­вает каждый процесс отдельным виртуальным адресным пространством, так что ни один процесс не может получить прямого доступа к командам и данным дру­гого процесса. (Виртуальное адресное пространство процесса - это совокупность адресов, которыми может манипулировать программный модуль процесса. ОС отображает вирту­альное адресное пространство процесса на отведенную процессу физическую память.)

    РАЗРАБОТКА МОДУЛЯ УЧЕБНОЙ ОПЕРАЦИОННОЙ СИСТЕМЫ

    Методические указания

    к курсовому проектированию по дисциплине

    «Операционные системы»

    для студентов дневной формы обучения

    направления

    ВВЕДЕНИЕ. 4

    1. Теоретический раздел. 4

    1.1. Подсистема управления процессами. 4

    1.1.1. Контекст и дескриптор процесса. 5

    1.1.2. Алгоритмы планирования процессов. 6

    1.1.3. Вытесняющие и невытесняющие алгоритмы планирования. 9

    1.1.4. Модель процесса и функции подсистемы управления процессами учебной операционной системы 12

    1.2. Подсистема управления памятью.. 17

    1.2.1. Страничное распределение. 18

    1.2.2. Сегментное распределение. 22

    1.2.3. Странично-сегментное распределение. 23

    1.2.4. Алгоритмы замещения страниц. 24

    1.3. Управление файлами. 30

    1.3.1. Имена файлов. 30

    1.3.2. Типы файлов. 32

    1.3.3. Физическая организация и адрес файла. 33

    2. Порядок выполнения курсового проекта. 38

    3. Варианты заданий. 39

    Библиографический список 42

    ПРИЛОЖЕНИЕ А.. 43

    ВВЕДЕНИЕ

    Цель курсового проекта: изучить теоретические основы построения модулей операционной системы. Получить практические навыки разработки программы, являющейся частью операционной системы.

    Теоретический раздел

    Функции операционной системы автономного компьютера обычно группируются либо в соответствии с типами локальных ресурсов, которыми управляет ОС, либо в соответствии со специфическими задачами, применимыми ко всем ресурсам. Иногда такие группы функций называют подсистемами. Наиболее важными подсистемами являются подсистемы управления процессами, памятью, файлами и внешними устройствами, а подсистемами общими для всех ресурсов являются подсистемы пользовательского интерфейса, защиты данных и администрирования.

    Подсистема управления процессами

    Важнейшей частью операционной системы, непосредственно влияющей на функционирование вычислительной машины, является подсистема управления процессами. Для каждого вновь создаваемого процесса ОС генерирует системные информационные структуры, которые содержат данные о потребностях процесса в ресурсах вычислительной системы, а также о фактически выделенных ему ресурсах. Таким образом, процесс можно также определить как некоторую заявку на потребление системных ресурсов.

    Чтобы процесс мог быть выполнен, операционная система должна назначить ему область оперативной памяти, в которой будут размещены коды и данные процесса, а также предоставить ему необходимое количество процессорного времени. Кроме того, процессу может понадобиться доступ к таким ресурсам, как файлы и устройства ввода-вывода.

    В многозадачной системе процесс может находиться в одном из трех основных состояний:

    ВЫПОЛНЕНИЕ — активное состояние процесса, во время которого процесс обладает всеми необходимыми ресурсами и непосредственно выполняется процессором;

    ОЖИДАНИЕ — пассивное состояние процесса, процесс заблокирован, он не может выполняться по своим внутренним причинам, он ждет осуществления некоторого события, например, завершения операции ввода-вывода, получения сообщения от другого процесса, освобождения какого-либо необходимого ему ресурса;

    ГОТОВНОСТЬ — также пассивное состояние процесса, но в этом случае процесс заблокирован в связи с внешними по отношению к нему обстоятельствами: процесс имеет все требуемые для него ресурсы, он готов выполняться, однако процессор занят выполнением другого процесса.

    В ходе жизненного цикла каждый процесс переходит из одного состояния в другое в соответствии с алгоритмом планирования процессов, реализуемым в данной операционной системе. Типичный граф состояний процесса показан на рисунке 1.1.

    Рисунок 1.1 — Граф состояний процесса в многозадачной среде

    В состоянии ВЫПОЛНЕНИЕ в однопроцессорной системе может находиться только один процесс, а в каждом из состояний ОЖИДАНИЕ и ГОТОВНОСТЬ — несколько процессов, эти процессы образуют очереди соответственно ожидающих и готовых процессов.

    Жизненный цикл процесса начинается с состояния ГОТОВНОСТЬ, когда процесс готов к выполнению и ждет своей очереди. При активизации процесс переходит в состояние ВЫПОЛНЕНИЕ и находится в нем до тех пор, пока либо он сам освободит процессор, перейдя в состояние ОЖИДАНИЯ какого-нибудь события, либо будет насильно вытеснен из процессора, например, вследствие исчерпания отведенного данному процессу кванта процессорного времени. В последнем случае процесс возвращается в состояние ГОТОВНОСТЬ. В это же состояние процесс переходит из состояния ОЖИДАНИЕ, после того, как ожидаемое событие произойдет.

    Статьи к прочтению:

    Основы программирования. Управления процессами

    mob_info