2011. Машбук (1114722), страница 29
Текст из файла (страница 29)
Структурно для этого достаточно добавить возможность перехода изсостояния обработки центральным процессором в очередь готовых на выполнениепроцессов. Т.е. система имеет возможность прервать выполнение текущего процесса (еслиисчерпался выделенный квант времени) и поместить процесс в указанную очередь. Нотакая модель не предполагает свопинга, или механизма откачки процесса во внешнююпамять. В принципе, такую возможность можно также добавить в модель системы(Рис.
80) – тогда появляется еще одно состояние, характеризующее процесс, какоткачанный во внешнюю память. Заметим, что в новое состояние могут переходитьпроцессы лишь из очереди готовых на выполнение процессов, а процессы, ожидающиеокончания ввода-вывода, свопироваться не могут, иначе в системе будут «зависать»заказы на обмен.0Ожиданиеначалаобработки1ОбработкаЦП5Завершение4БВП2БОП6Ожиданиеоперацииввода-выводаОчередь навыполнение3Рис. 79. Модель ОС с разделением времени.
6 — процесс прекращает обработкуЦП, но в любой момент может быть продолжен (истек квант времени ЦП,выделенный процессу). Поступает в очередь процессов, ожидающихпродолжения выполнения центральным процессором (БОП).0Ожиданиеначалаобработки1ОбработкаЦП5Завершение4БВП2БОП6Ожиданиеоперацииввода-вывода3Очередь навыполнениесвопингДискРис.
80. Модель ОС с разделением времени (модификация). Заблокированныйпроцесс может быть откачан (свопирован) на внешний носитель, а наосвободившееся место может быть подкачен процесс с внешнего носителя,который был откачен ранее, либо взят новый.1012.1.2 Типы процессовДо данного момента мы рассматривали процессы как некоторые субъекты ОС,которые владеют ресурсами и являются объектами планирования. На самом деле, внутрипроцесса может быть не один объект планирования, а два и более (т.е. в одном процессеможет быть две и более нити, или потока). При этом мы как бы вводим ещё один уровеньопределения процесса (Рис. 81). Процесс (или полновесный процесс) – является объектомпланирования и выполняется внутри защищённой области памяти.
Альтернативойявляются т.н. легковесные процессы, известные также как нити (или потоки), — этопроцессы, которые могут активироваться внутри полновесного процесса, могут бытьобъектами планирования, и при этом они могут функционировать внутри общей (т.е.незащищённой от других нитей) области памяти. Обратим внимание, что мы говорим олегковесных процессах, как о процессах другого иерархического уровня, нежелиполновесных (т.е. легковесные процессы реализуются внутри полновесного процесса).Причём нити, которые функционируют внутри одного полновесного процесса, работают ведином адресном пространстве, и они незащищены друг от друга.
При этом планированиюподвергается каждая нить, т.е. планировщик может осуществлять переключение с нити нанить.Основная причина использования многонитевой организации – это минимизациянакладных расходов. Мультипроцессирование внутри полновесного процесса получаетсяочень эффективным, благодаря уменьшению количества смен контекстов.а.нитьнитьнитьпроцесснитьнитьпроцессб.Рис. 81. Типы процессов: однонитевая (а) и многонитевая (б) организациипроцессов.Также отметим, что многонитевые процессы хорошо ложатся на современныемногопроцессорные системы (например, SMP-системы), т.е.
в некоторых случаях притакой организации повышается эффективность системы.Кроме того, механизм нитевой организации позволяет осуществлятьвзаимодействие нитей в рамках одного процесса, причем адресное пространство,посредством которого они взаимодействуют, остается защищенным от других процессов всистеме.Соответственно, перед операционной системой, помимо управления полновеснымипроцессами, планирования и выделения им ресурсов, возникает задача управлениянитями.Тогда определение процесса можно обобщить – понятие «процесса» включает всебя следующее:исполняемый код;собственное адресное пространство, представляющее собой множествовиртуальных адресов, которые может использовать процесс;ресурсы системы, которые назначены процессу операционной системой;хотя бы одну выполняемую нить.102В заключение отметим, что многие современные операционные системы (каксемейства Unix, так и Windows-системы, и др.) обеспечивают работу с нитями.2.1.3 Контекст процессаРассмотрим теперь, какая поддержка операционной системы необходима дляфункционирования процессов.
Здесь в первую очередь следует обратить внимание напонятие контекста процесса. Под контекстом процесса будем понимать совокупностьданных, характеризующих актуальное состояние процесса. Обычно контекст процессасостоит из трёх компонент:пользовательская составляющая — это текущее состояние программы (т.е.совокупность машинных команд и данных, размещённых в ОЗУ и характеризующихвыполнение данного процесса);аппаратная составляющая – отражает актуальное состояние центральногопроцессора в момент выполнения данного процесса (т.е. это актуальное состояниерегистров, настроек процессора и т.д.);системная составляющая – это структуры данных операционной системы,содержащие характеристики процесса.
Эти структуры данных содержат информациюидентификационного характера (PID процесса, PID «родителя» и т.д.); информацию осодержимом регистров (РОН, индексные регистры, флаги и т.д.); а такжеинформацию, необходимую для управления процессом (состояние процесса,приоритет и т.д.). Отметим, что системная составляющая процесса содержит копиюаппаратной составляющей, если процесс остановлен.Таким образом, когда процесс выполняется на процессоре, то актуальна аппаратнаясоставляющая, когда процесс отложен — актуальна системная составляющая.2.2Реализация процессов в ОС Unix2.2.1 Процесс ОС UnixМеханизм управления и взаимодействия процессов в ОС Unix послужил во многомосновой для развития операционных систем в целом, и логического блока управленияпроцессами в частности.
Во многом организация управления процессами в ОС Unixявляется эталонной, поэтому мы рассмотрим ее теперь более детально.С точки зрения понимания термина процесса в ОС Unix, данное понятие можноопределить двояко. С одной стороны, процесс можно определить как объект,зарегистрированный в таблице процессов операционной системы. Таблица процессов –одна из специальных системных таблиц, которая является программной таблицей. Второеопределение объявляет процессом объект, порожденный системным вызовом fork(). Обаопределения являются корректными и равносильными (если учесть, что в системесуществуют два особых процесса с нулевым и первым номерами, и об их особенностяхречь пойдет ниже).Остановимся сначала на первой трактовке процесса.
В операционной системеимеется таблица процессов, предназначенная для регистрации всех существующих вданный момент процессов в системе. Размер этой таблицы является параметромнастройки ОС, и, соответственно, количество процессов в системе является системнымресурсом. Таблица процессов обеспечивает уникальное именование процессов: онаустроена позиционным образом, т.е. именование процесса осуществляется посредствомномера записи таблицы, соответствующей данному процессу (нумерация строится от нулядо некоторого фиксированного значения). Этот номер записи называетсяидентификатором процесса (PID — Process Identifier).
Как только что отмечалось, двепервые записи таблицы предопределены и используются для системных нужд. Каждая103запись таблицы процессов (Рис. 82) имеет ссылку на контекст процесса, которыйструктурно состоит из пользовательской, системной и аппаратной составляющих.Пользовательская (программная) составляющая — это тело процесса. Обычнотело процесса состоит из двух частей: сегмент кода и сегмент данных. Сегмент кодасодержит машинные команды и неизменяемые константы; сегмент кода — это обычно неизменяемая программным способом часть тела процесса (отметим, что в принципеизменение может осуществляться посредством системных вызовов). Также впользовательскую составляющую входит сегмент данных, включающий областьстатических данных процесса (в т.ч.
статические переменные), область разделяемойпамяти (т.е. область памяти, которая может принадлежать двум и более процессамодновременно), а также область стека. На стеке в системе реализуется передачафактических параметров функциям, реализуются автоматические и регистровыепеременные, а также в этой области организуется динамическая память (т.н. куча).Таблица процессовКонтекст процессаПользовательский(тело процесса)адресное пространствопроцессаPIDАппаратныйСистемныйадресное пространство ядраРис. 82. Таблица процессов в ОС Unix.В ОС Unix реализована такая возможность, как разделение сегмента кода(Рис. 83).
Эта возможность предназначена для оптимизации использования ОП. Допустим,в системе работает несколько (пусть 100) пользователей, каждый из которых помимопрочего работает с одним и тем же текстовым редактором. Таким образом, в системеобрабатываются 100 копий текстового редактора. Ставится вопрос о необходимостидержать в ОЗУ все сегменты кода для этих 100 процессов. Для оптимизации подобныхситуаций в ОС Unix используется указанный механизм разделения сегмента кода. Тогдакаждый обрабатываемый в системе процесс текстового редактора в пользовательскойсоставляющей хранит ссылку на единственную копию сегмента кода редактора, а сегментданных у каждого из процессов свой.
Соответственно, в приведенном примере в памятибудут находиться один сегмент кода и 100 сегментов данных. Но рассмотренныймеханизм может иметь место в ОС только в том случае, когда сегмент кода нельзяизменить: он закрыт на запись.104Сегментданных 1Сегмент кодатекстовогоредактораСегментданных 2Процесс1Процесс2…Сегментданных NПроцессNРис. 83. Разделение сегмента кода.Аппаратная составляющая включает в себя все регистры, аппаратные таблицыпроцессора и т.д., характеризующие актуальное состояние процесса в момент еговыполнения на процессоре. Конкретная структура аппаратной составляющей зависит отконкретного процессора; обычно она включает счётчик команд, регистр состоянияпроцессора, аппарат виртуальной памяти, регистры общего назначения и т.д.Системная составляющая содержит системную информацию об идентификациипроцесса (т.е. идентификация пользователя, сформировавшего процесс), системнуюинформацию об открытых и используемых в процессе файлах и пр., а также сохраненныезначения аппаратной составляющей.
Итак, в системной составляющей контекста процессасодержатся различные атрибуты процесса, такие как:•идентификатор родительского процесса;•текущее состояние процесса;•приоритет процесса;•реальный идентификатор пользователя-владельца (идентификатор пользователя,сформировавшего процесс);•эффективныйидентификаторпользователя-владельца(идентификаторпользователя, по которому определяются права доступа процесса к файловойсистеме);•реальный идентификатор группы, к которой принадлежит владелец(идентификатор группы, к которой принадлежит пользователь, сформировавшийпроцесс);•эффективный идентификатор группы, к которой принадлежит владелец(идентификатор группы «эффективного» пользователя, по которому определяютсяправа доступа процесса к файловой системе);•список областей памяти;•таблица дескрипторов открытых файлов процесса (именно дескрипторов, т.к. одини тот же файл может быть открыт в системе многократно); файловый дескриптор –это системная структура данных, отражающая актуальное состояние работыпроцесса с файлом;•информация о том, какая реакция установлена на тот или иной сигнал (аппаратсигналов позволяет передавать воздействия от ядра системы процессу и отпроцесса к процессу);•информация о сигналах, ожидающих доставки в данный процесс;105•сохраненные значения аппаратной составляющей (когда выполнение процессаприостановлено).Рассмотрим более подробно такие атрибуты системной составляющей, какреальный и эффективный идентификаторы пользователя-владельца.