Операционные системы 2011 (1114689), страница 30
Текст из файла (страница 30)
Модель ОС с разделением времени (модификация). Заблокированныйпроцесс может быть откачан (свопирован) на внешний носитель, а наосвободившееся место может быть подкачен процесс с внешнего носителя,который был откачен ранее, либо взят новый.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Рис.