Компьютерная сеть — это объединение компьютеров (или вычислительных систем), взаимодействующих через коммуникационную среду (Рис. 57).
Коммуникационная среда — каналы и средства передачи данных.
Можно выделить следующие свойства компьютерных сетей. Во-первых, сеть может состоять из значительного числа связанных между собой автономных компьютеров. Два компьютера называются связанными между собой, если они могут обмениваться информацией. Требование автономности используется, чтобы исключить из рассмотрения компьютерные системы, в которых один компьютер может принудительно запустить, остановить другой компьютер или управлять его работой.
Рис. 57. Компьютерные сети.
Во-вторых, компьютерная сеть предполагает возможность распределенной обработки информации, когда пользователь компьютерной сети может получать в качестве результата может получать данные, обработанные за счет интеграции этапов обработки данных на разных компьютерах сети.
Следующее свойство — расширяемость. Компьютерная сеть должна обеспечивать возможность развития по протяженности, по расширению пропускной способности канала, по составу и производительности компонентов сети.
И, наконец, возможность применения симметричных интерфейсов обмена информацией между компьютерами сети, позволяющих произвольным способом распределять функции сети.
Будем говорить, что логически компьютеры, составляющие сеть, состоят из абонентских машин (или основных компьютеров — хостов) и коммуникационных (или вспомогательных) компьютеров (шлюзы, маршрутизаторы и пр.). Последние выполняют фиксированные функции по обеспечению функционирования сети. Это деление логическое. На практике может оказаться, что одна машина выполняет роль как абонентской машины, так и коммуникационной.
Традиционно для функционирования компьютерных сетей используются 3 модели организации каналов, или 3 модели сетей, — это сети коммутации каналов, сети коммутации сообщений и сети коммутации пакетов. Сразу отметим, что большинство современных сетей являются комбинациями этих основных моделей сетей.
В сети коммутации каналов 2 абонента сети взаимодействуют при помощи сеанса связи, любой из которых является обменом сообщениями. Под сообщением будем понимать логически целостный набор данных произвольного размера. Коммутация каналов происходит на весь сеанс связи.
К достоинствам данных сетей можно отнести следующие свойства:
- канал находится всегда в состоянии готовности;
- требования к коммуникационному оборудованию минимальны: по сути, нет требований к обеспечению буферизации;
- обмены происходят порциями данных произвольной длины — сообщениями — что ведет к уменьшению накладных расходов по передаче информации;
- детерминированная пропускная способность сети.
Среди недостатков данной модели можно отметить следующие:
- дороговизна: любой выделенный канал требует больших материальных затрат;
- наличие высокой избыточности в сети: должно быть либо много каналов, чтобы не было коллизий, либо в сети будут коллизии. При этом период ожидания свободного канала недетерминирован;
- неэффективность использования коммутационного канала: в отдельно взятом сеансе может быть низкая интенсивность обменов сообщениями;
- при отказах и сбоях повторение переданной информации является сложной задачей.
Сети коммутации сообщений — это сети, которые оперируют термином «передача сообщения», а не «сеанс связи», т.е. один абонент другому отправляет сообщение. Выделение канала для передачи каждого сообщения происходит поэтапно от одного узла к другому. На каждом узле на пути следования принимается решение, свободен ли канал к следующему узлу. Если свободен, то сообщение передается далее, иначе происходит ожидание освобождения канала. К достоинствам и недостаткам данной модели можно отнести:
- отсутствие выделенного канала и, соответственно, занятости ресурса коммутируемого канала на неопределенный промежуток времени, т.е. устранена деградация системы, возникающая при организации сетей коммутации каналов;
- в связи с тем, что сообщения могут быть произвольного размера, возникает необходимость наличия в коммутационных узлах средств буферизации (в общем случае неизвестно, какой мощности, поскольку сообщение имеет произвольную длину). Таким образом, данная сеть имеет недетерминированные характеристики;
- обеспечение буферизации требует дорогостоящего коммутационного оборудования;
- необходимость повторения сообщения в случае сбоя при передаче, что само по себе является сложной задачей, хотя менее трудоемкой, чем для сетей коммутации каналов.
Модель сети коммутации пакетов строится на предположении, что в основе лежит сеть, использующая ненадежные средства связи. Функционирования данной сети состоит в следующем: любое сообщение дробится на блоки фиксированной длины, которые называются пакетами. Соответственно, на стороне отправителя происходит разбиение сообщения на пакеты, а на стороне получателя — сборка. Любой пакет помимо непосредственно самого сообщения (или его части) имеет служебную информацию (которая обычно представлена в заголовке пакета), обеспечивающую внутреннюю целостность пакета (контрольная сумма пакета и пр.), адресную составляющую (данные об отправителе и адресате), а также информацию для сборки.
При передаче пакета используется следующая стратегия: любой узел, получив пакет, пытается сразу от него избавиться. Поскольку любая сеть имеет фиксированную топологию, а также фиксированные количество и расположение абонентов, то возможно просчитать ее характеристики и предъявить требования к коммуникационным узлам. Данная модель допускает буферизацию в узлах передачи: пакет, придя на узел, может быть послан несколько позже, если все необходимые выходные каналы заняты. Но период занятости канала при известной стратегии обработки буфера предопределен, поэтому можно оценить предельный размер буфера, а также предельные периоды ожидания пакетов при передаче их по сети. Таким образом, если известна стратегия передачи, пропускная способность является детерминированной величиной.
Среди положительных свойств данной системы можно отметить ее детерминированность (детерминированность перемещений, детерминированность требований к коммуникационному оборудованию), а также то, что при сбое достаточно заново послать потерянные пакеты, а не все сообщение целиком.
К недостаткам модели можно отнести то, что по сети перемещается накладная информация, которая прибавляется к каждому пакету при разбиении сообщения. Еще одной проблемой, связанной с разбиением сообщения на пакеты, является их сборка — это аккумуляция пакетов, а также сама сборка (необходимо обеспечить наличие всех переданных пакетов и их правильный порядок).
1.2.10 Организация сетевого взаимодействия. Эталонная модель ISO/OSI
Теперь речь пойдет об одном аспекте сетевого взаимодействия, который во многом является ключевым, причем важность этого аспекта прослеживается очень давно — с момента появления компьютерных сетей и их массового распространения. Этот аспект связан со стандартизацией, применяемой в вычислительной технике.
На сегодняшний день почти все производственные или технологические процессы, которыми пользуется человек, строятся на достаточно глубокой эшелонированной стандартизации. Стандартизация позволяет современным производствам и организациям производственных процессов быть развиваемыми, ремонтоспособными, обслуживаемыми.
Аналогичная картина и в вычислительной технике. Была введена стандартизация на компьютерные комплектующие, а также на программные интерфейсы. Стандартизация интерфейсов дает возможность взаимозаменяемости компонентов и их работоспособности.
Изначально компьютерные сети развивались на основе терминальных комплексов, которые строились по внутрикорпоративным правилам. Это означает, что коммуникационное программное обеспечение, аппаратура сопряжения и пр. были «своими», и при необходимости модернизации этой сети возникали сложные физические и технологические проблемы.
Развитие сетей определило массовость их использования. Возникла необходимость создания сетей, которые могли бы достаточно прочно расширяться без привлечения существенных переделок, модернизироваться, в которых могли бы меняться ПО, добавляться новые службы. В связи с этим появился целый спектр моделей организации сетей (т.н. «открытых» сетей), в основе которых используется модель системы открытых интерфейсов (OSI — Open Systems Interconnection), предложенная Международной организацией по стандартизации (ISO — International Organization for Standardization). Эта модель ISO/OSI рассматривает сеть и взаимодействие компьютеров в сети в виде семи функциональных уровней. Стоит отметить, что данная модель является рекомендацией, а не стандартом: ISO выделила их на основе анализа исторического развития компьютерных сетей (Рис. 58).
Рис. 58. Модель организации взаимодействия в сети ISO/OSI.
Сначала более детально рассмотрим назначение каждого уровня, а затем сформулируем основные понятия.
Физический уровень. На этом уровне происходит непосредственно передача неструктурированной двоичной информации. Для передачи используется конкретная физическая среда (кабель, радиоволны и т.п.). На данном уровне обеспечивается стандартизация сигналов и соединений.
Канальный уровень (или уровень передачи данных). На этом уровне решаются задачи обеспечения передачи данных по физической линии, обеспечения доступности физической линии, обеспечение синхронизации (например, передающего и принимающего узлов), а также задачи по борьбе с ошибками. Канальный уровень манипулирует порциями данных, которые называются кадрами. В кадрах присутствует избыточная информация для фиксации и устранения ошибок.
Сетевой уровень. На этом уровне обеспечивается управление операциями сети (в т.ч. адресация абонентов, маршрутизация), а также обеспечивается связь между взаимодействующими сетевыми устройствами. Также на этом уровне происходит управление движением пакетов, и при необходимости поддерживается их буферизация.
Транспортный уровень. На данном уровне обеспечивается корректная транспортировка данных, а также программное взаимодействие (а не взаимодействие устройств). Тут же принимается решение о выборе типа услуг (транспортировка данных с установлением виртуального канала или же без оного). В случае установления виртуального канала осуществляется контроль за доставкой и отсутствием ошибок. Если же виртуальный канал не устанавливается, то уровень не несет ответственности за доставку.
Сеансовый уровень. Этот уровень обеспечивает управление сеансами связи. На этом уровне решаются задачи подтверждения полномочий, т.е. осуществляется работа со всякого рода ролями и пр., а также решаются задачи организации меток, или контрольных точек, по сеансу, которые позволяют в случае возникновения сбоя повторять передачу не с начала, а с последней установленной контрольной точки.
Уровень представления данных обеспечивает унификацию используемых в сети кодировок и форматов передаваемых данных.
Уровень прикладных программ. На этом уровне формализуются правила по взаимодействию с прикладными системами.
Теперь на основе рассмотренных уровней можно дать определения основных понятий (Рис. 59).
Рис. 59. Логическое взаимодействие сетевых устройств по i-ому протоколу.
Протокол — формальное описание сообщений и правил, по которым сетевые устройства (вычислительные системы) осуществляют обмен информацией. Таким образом, протокол обеспечивает взаимодействие в сети между различными машинами на одном уровне. Любой из уровней может содержать произвольное число протоколов, но общаться могут лишь протоколы одного уровня. Также под протоколом будут пониматься правила взаимодействия одноименных, или одноранговых, уровней.
Интерфейс — правила взаимодействия вышестоящего уровня с нижестоящим.
Служба (или сервис) — набор операций, предоставляемых нижестоящим уровнем вышестоящему.
Стек протоколов — перечень разноуровневых протоколов, реализованных в системе. Стек может быть произвольной глубины, т.е. в нем, возможно, не будут представлены протоколы некоторых уровней модели ISO/OSI.
1.2.11 Семейство протоколов TCP/IP. Соответствие модели ISO/OSI
Рассмотрим еще одну модель организации сетевого взаимодействия — семейство протоколов TCP/IP (Рис. 60). Это классическая четырехуровневая модель организации сетевого взаимодействия. Протоколы семейства TCP/IP основаны на сети коммутации пакетов. Изначально данные протоколы были разработаны как стандарт военных протоколов министерства обороны США в агентстве перспективных разработок МО США DARPA. Это агентство разработало сеть ARPA-net, которая в своем развитии легла в основу современной сети Internet (поскольку это семейство протоколов было интегрировано в ОС BSD Unix).
Рис. 60. Семейство протоколов TCP/IP.
Попытаемся сопоставить модели TCP/IP и ISO/OSI.
Уровень доступа к сети. Этот уровень соответствует физическому и канальному уровням модели ISO/OSI. На нем решаются проблемы сетевого адаптера, драйвера сетевого адаптера и проблемы среды передачи данных.
Межсетевой уровень (или internet-уровень). В некотором смысле ему соответствует сетевой уровень модели ISO/OSI. Т.е. на этом уровне решаются проблемы адресации и маршрутизации по сети.
Транспортный уровень. Он покрывает сеансовый и транспортный уровни модели ISO/OSI. На этом уровне имеется возможность использования протоколов, которые устанавливают виртуальное соединение или не устанавливают его.
Уровень прикладных программ. Он разрешает проблемы уровня представления и уровня прикладных программ модели ISO/OSI.
Эти уровни модели TCP/IP являются пакетными: на каждом уровне система оперирует порциями данных, обладающими характеристиками соответствующего уровня (Рис. 61). Имея содержательную информацию на прикладном уровне, двигаясь от верхнего уровня модели к нижнему, эта информация при необходимости дробится на пакеты фиксированного размера, и к каждому из них добавляется заголовочная информация.
Рис. 61. Взаимодействие между уровнями протоколов TCP/IP.
Остановимся на каждом из уровней модели TCP/IP более подробно.
На уровне доступа к сети протоколы обеспечивают систему средствами для передачи данных другим устройствам в сети. В качестве примера можно привести протокол Ethernet, являющегося разработкой исследовательского центра компании Xerox (1976 г.), который основывается на единой шине (это широковещательная сеть). Для сетевых устройств обеспечивается множественный доступ с контролем несущей и обнаружением конфликтов (Carrier Sense Multiple Access with Collision Detection — CSMA/CD). Термины широковещательный и множественный доступ означают, что любой пакет, «выкинутый» в сеть, виден всем абонентам этой сети. Каждый абонент «слушает» сеть, и тот, кому предназначен пакет, забирает его. Контроль несущей означает, что каждый абонент, «слушая» сеть, распознает, свободна она или занята. Как только сеть становится свободной, устройство может «закидывать» очередную порцию данных. При этом устройство «слушает» как свою передачу, так и передачи других абонентов. «Бросая» в сеть, устройство способно распознать искажения, которые означают, что какое-то еще устройство также пытается послать данные в сеть. В этом случае обычно реализуется следующая стратегия: оба абонента прекращают вещание и берут тайм-аут на некоторый случайный промежуток времени (чтобы минимизировать повторные коллизии), а затем повторяют свои попытки. Данная сеть обладает типичными недостатками широковещательной сети: при интенсивной работе часто возникает ситуация, когда линия занята. Также при интенсивной работе возрастает частота конфликтов, что ведет к снижению производительности системы.
В качестве физической среды передачи данных используются самые разные источники: это может быть «толстый» Ethernet, «тонкий» Ethernet, витая пара, оптоволокно, радиосигнал.
Межсетевой[R10] уровень. Протокол IP — это один из основных протоколов. Данный протокол реализует следующие функции:
- формирование дейтаграмм;
- поддержание системы адресации;
- обмен данными между транспортным уровнем и уровнем доступа к сети;
- организация маршрутизации дейтаграмм;
- разбиение и обратная сборка дейтаграмм.
Основная функция этого протокола — поддержание системы адресации, позволяющей объединять различные (или гетерогенные) сети в единое целое (т.е. это межсетевая адресация — internet-адресация), а также поддержание маршрутизации. IP-адрес — это 32-разрядное число, которое кодирует информацию о конкретной сети и компьютере внутри этой сети. Имеются три категории содержательных IP-адресов сетей (Рис. 62).
Рис. 62. Система адресации протокола IP.
Формат класса A позволяет задавать адреса до 126 сетей с 16 млн. хостов в каждой, класса B — до 16382 сетей с 64 Кбайт хостами, и, наконец, класса C — 2 млн. сетей с 254 хостами в каждой. Формат класса D предназначен для многоадресной рассылки. Остальные адреса используются для служебных целей. Отметим, что на сегодняшний момент в мире складывается ситуация, когда 32-битных IP-адресов не хватает, и ведутся разработки по использованию более длинной адресации.
Как отмечалось выше, каждый из уровней взаимодействует с соседними уровнями в соответствии с теми или иным протоколами порциями данных, имеющими специфичными для каждого уровня названия. Так, для межсетевого уровня пакет называется дейтограммой.
Протокол IP подразумевает использование некоторых специализированных компьютеров. Это компьютеры, предназначенные для организации физического объединения различных сетей, и они называются шлюзами. В общем случае шлюз имеет два и более сетевых адаптера, на которых функционирует соответствующее число (два или более) стеков протоколов.
Перед межсетевым уровнем также стоит задача маршрутизации — по имеющему IP-адресу получателя определить маршрут следования пакета. Эта задача распадается на две подзадачи. Первая подзадача — это проблема организации адресации в локальной сети, в рамках которой происходит взаимодействие. И здесь особых сложностей не возникает, поскольку специфика межсетевого уровня позволяет относительно просто организовать взаимодействие машин в рамках одной локальной сети. Вторая подзадача — это организация адресации между различными сетями. Для решения этой задачи используются шлюзы, которые одновременно принадлежат разным сетям, а также маршрутизаторы, которые решают задачу, через какой шлюз необходимо отправить пакет. Отметим, что стек протоколов TCP/IP позволяет совмещать компьютерам несколько функций: одна и та же машина может быть одновременно и шлюзом, и маршрутизатором, и хостом, причем работающий за ним пользователь может не догадываться об организации локальной сети, в которой он работает.
Рассмотрим пример (Рис. 63). Пускай необходимо послать сообщение от машины A1 машине A2. Машина A1 находится в сети A, а машина A2 — в сети C, причем сеть A соединена лишь с сетью B посредством шлюза G1, а сеть C соединена также лишь с сетью B, но посредством шлюза G2. Соответственно, маршрутизатор должен учитывать эти особенности при решении задачи маршрутизации. Обратим ваше внимание, что на компьютерных шлюзах реализовано только два уровня протоколов, поскольку для решения задачи транспортировки пакетов из одной сети в другую достаточны лишь наличие этих двух уровней.
Рис. 63. Маршрутизация дейтаграмм.
Транспортный уровень. Одним из важнейших протоколов данного уровня является протокол TCP (Transmission Control Protocol — протокол управления передачей данных), который, равно как и протокол IP, дал свое название всему семейству протоколов. Этот протокол послужил некоторым «прародителем» этого семейства протоколов, поскольку Министерство Обороны США, когда начинало исследование ARPA-NET, ставило перед собой задачу разработку сети, устойчивой к недетерминированной физической среде передачи данных. И одним из условий было, чтобы полученная сеть работала корректно как на линиях с устойчивой передачей данных (в которых количество ошибок мало), так и на линиях, в которых возникает большое число ошибок. Это требование и его реализация обусловило распространение семейства протоколов TCP/IP и, в общем-то, развитие современных сетей, поскольку проблема дисбаланса различных сетей с точки зрения надежности каналов актуальна и по сей день, а разработанные протоколы решали эту проблему.
Среди протоколов транспортного уровня необходимо отметить протоколы TCP и UDP. Протокол TCP — это протокол, обеспечивающий установление виртуального канала, а это означает, что он обеспечивает последовательную передачу пакетов, контролирует доставку пакетов и отрабатывает сбои (пакет либо не доставляется, либо доставляется в целостном состоянии). Для обеспечения заявленных качеств данный протокол подразумевает отправку по сети подтверждающей информации, из-за чего содержательная пропускная способность может сильно падать, особенно в линиях связи с плохими техническими характеристиками. Итак, этот протокол подразумевает, что для каждого полученного пакета адресат обязан отправить подтверждение о доставке. К этому необходимо доставить, что в данном протоколе действует поддержка времени: если через некоторое время после отправки пакета подтверждение так и не пришло, то считается, что отправленный пакет пропал, и начинается повторная посылка пропавшего пакета.
Некоторой альтернативой служит протокол UDP (User Datagram Protocol — протокол пользовательских дейтаграмм). Данный протокол подразумевает отправку пакетов по сети без гарантии их доставки (он выбрасывает пакет и сразу же «забывает» о нем).
Уровень прикладных программ. На этом уровне находятся протоколы, часть которых опираются на протокол TCP, а часть — на UDP.
Протоколы, которые основываются на принципах работы протокола TCP, обеспечивают доступ и работу с заведомо корректной информацией, причем именно в среде межсетевого взаимодействия (internet), и эти протоколы требуют корректной доставки. В частности, это протокол TELNET (Network Terminal Protocol) — прикладной протокол, эмулирующий терминальное устройство; протокол перемещения файлов FTP (File Transfer Protocol); протокол передачи почтовых сообщений SMTP (Simple Mail Transfer Protocol).
Есть ряд прикладных протоколов, основанных на использовании протокола UDP. Эти протоколы оказываются относительно быстрыми, поскольку максимально снижены накладные расходы на передачу, но они допускают наличие ошибок.
Часть подобных протоколов действуют в рамках локальной сети. В частности, в большинстве случаев протокол NFS (Network File System) сетевой файловой системы функционирует именно в рамках локальной сети, и очень редко его запускают в межсетевом режиме.
Другая часть протоколов должны контролироваться, с одной стороны, на прикладном уровне, а с другой стороны, они предполагают обмен очень небольшими порциями данных. К таким протоколам относится DNS (Domain Name Service), который позволяет мнемоническим способом именовать сетевые устройства. В частности, этот протокол осуществляет преобразования IP-адресов в доменные имена и обратно.
1.3 Основы архитектуры операционных систем
Этот раздел мы начнем с определения базовых понятий, среди которых очень важным для нас станет понятие операционной системы. Этот термин имеет различные толкования в разных изданиях, мы остановимся на следующем.
Операционная система — это комплекс программ, в функции которого входит обеспечение контроля за существованием, использованием и распределением ресурсов вычислительной системы. Напомним, что вычислительная система может включать в свой состав как физические, так и виртуальные ресурсы. Чтобы дать более ясную картину того, что же мы будем считать операционной системой, разберем ее определение детально.
Начнем с того, что операционная система обеспечивает контроль за существованием ресурсов. Для любого ресурса степень его доступности зависит от операционной системы. Существуют ресурсы, которые полностью зависят от того, имеется ли их реализация в операционной системе или нет, если есть, то какая именно это реализация. Примером подобного ресурса служит файловая система: этого ресурса может и не быть в операционной системе, может существовать одна модель, или другая модель, или сразу несколько моделей.
Следующий пункт — использование ресурсов. Здесь имеется в виду, что операционная система предоставляет все средства, обеспечивающие доступность ресурсов ВС пользователю (точнее программам).
И, наконец, распределение: под этим будем понимать обеспечение всевозможных моделей регламентации доступа.
Любая операционная система опирается на набор базовых сущностей, на основе характеристик которых выстраиваются почти все эксплуатационные свойства конкретной операционной системы. При этом, для различных операционных систем наборы базовых сущностей зачастую различаются: одни основаны на понятии устройства, другие — на понятии файла, третьи — на понятии набора данных. Но в большинстве случаев в состав базовых включается сущность, обозначающая исполняемую программу, задачу, задание или процесс. Эта сущность определяет некоторый процесс исполнения последовательности команд, причем здесь может участвовать единственная ветвь вычислений, а может сразу и несколько параллельных ветвей. Из множества трактовок этой сущности мы выберем понимание ее именно как процесса.
Процесс — это совокупность машинных команд и данных, обрабатывающаяся в рамках вычислительной системы и обладающая правами на владение некоторым набором ресурсов.
Разберемся в этом определении. Понятие совокупности машинных команд и данных обозначает то, что принято называть исполняемой программой, т.е. это код и операнды, используемые в этом коде. Далее, под термином обработки в рамках ВС будем понимать, что эта программа сформирована и находится в системе в режиме обработки (это может быть и ожидание, и исполнение на процессоре, и т.п.). И, третье, понятие обладания правами на владение некоторым набором ресурсов обозначает, по сути, возможность доступа. Отметим, что здесь речь не идет об эксклюзивных правах, поскольку в общем случае это было бы некорректно. Итак, иными словами процесс можно определить как исполняемую программу, которая введена в систему для ее обработки, и с которой ассоциированы некоторые ресурсы вычислительной системы.
Ресурсы, выделяемые процессам, могут быть двух типов. Первая категория ресурсов состоит из тех ресурсов, которые выделяются процессу на эксклюзивных правах. Это означает, что этот ресурс, пока процесс им владеет, принадлежит ему и только ему, и никакой иной процесс не имеет право работать с данным ресурсом. Вторая категория — это те ресурсы, которые в один и тот же момент времени могут принадлежать двум и более процессам, и их принято называть разделяемыми ресурсами. Здесь сделаем небольшое пояснение: то, что разделяемый ресурс может одновременно принадлежать нескольким процессам, не означает, что к нему возможен одновременный доступ. Обозначенная проблема решается на другом уровне посредством использования разных схем синхронизации доступа к разделяемому ресурсу, и об этом речь пойдет несколько позже.
С точки зрения выделения ресурса процессу используются две модели организации этого выделения. Первый способ — это предварительная декларация ресурсов. В этом случае до ввода программы в систему и формирования для нее процесса описывается перечень тех ресурсов, которыми процесс будет обладать. Например, это может быть перечень областей оперативной памяти, которые будут доступны данному процессу (если система поддерживает механизм виртуальной памяти, то это будет перечень областей виртуальной памяти, доступных процессу). Или же это может быть предельное время центрального процессора, которое может быть потрачено на исполнение данного процесса. Так или иначе, при вводе программы и формировании процесса операционная система постарается выделить все необходимые ресурсы, которые были предварительны декларированы. Если в системе нет заказанного ресурса, то она, скорее всего, не станет запускать процесс, который запросил этот ресурс.
Вторая модель — это динамическое дополнение списка ресурсов. Данная модель предполагает выделение процессу ресурса уже во время выполнения этого процесса. Это означает, что в системе происходит запуск процесса с выделением ему минимально необходимой области виртуальной памяти, а затем, когда процесс обращается к системе за выделением дополнительной области, то ОС обрабатывает эти запросы соответствующим образом. Отметим также, что на практике также применяются и смешанные подходы, но во многих системах, с которыми мы сталкиваемся в нашей повседневной жизни, ориентация сделана на динамическую модель выделения ресурсов.
Многие операционные системы разрабатывались и разрабатываются таким образом, чтобы обладать следующими важными свойствами: надежность, защита, эффективность и предсказуемость.
Надежность означает, что система должна быть надежной как программный комплекс, т.е. число программных ошибок в системе должно быть сведено к минимуму и должно быть соизмеримо с количеством возможных аппаратных сбоев.
Защита информации на сегодняшний день является одним из основных требований, предъявляемых к системе. ОС должна обеспечивать защиту информации и ресурсов от несанкционированного доступа.
Свойство эффективности означает, что функционирование системы должно удовлетворять некоторым требованиям, критериям эффективности, которые, по сути, являются оценкой соответствия.
И, наконец, это предсказуемость системы, являющееся также одним из важных свойств ОС, поскольку большинство систем, которые, так или иначе, являются массово распространенными, при возникновении разного рода форс-мажорных обстоятельств должны вести себя строго определенным способом. Это свойство должно очерчивать круг всевозможных проблем, которые могут возникнуть в той или иной ситуации, а также подразумевать устойчивость системы к возникновению подобных обстоятельств.
1.3.1 Структура ОС
Существует множество взглядов, касающихся структуры операционной системы, и в этом разделе речь пойдет о некоторых из них.
Простейшая структурная организация основана на представлении операционной системы в виде композиции следующих компонентов (Рис. 64).
Рис. 64. Структурная организация ОС.
Ядро (kernel) ОС — это часть ОС, в которой реализована функциональность ОС; ядро работает в режиме супервизора, т.е. в привилегированном режиме, и резидентно (постоянно) размещается в оперативной памяти. Итак, по определению ядро обеспечивает реализацию некоторого набора функций операционной системы. Это может быть очень большой набор функций, а может маленький — все зависит от конкретной реализации системы. Ядро может включать в свой состав драйверы основных физических или виртуальных устройств.
Над уровнем ядра может надстраиваться следующий уровень — это уровень динамически подгружаемых драйверов физических и виртуальных устройств. Под динамически подгружаемыми понимается то, что в зависимости от ситуации состав этих драйверов при инсталляции и загрузке системы может меняться. Соответственно, эти драйверы можно поделить на две категории: резидентные драйверы и нерезидентные. Резидентные драйверы подгружаются в систему в процессе ее загрузки и находятся в ней до завершения ее работы. Примером резидентного драйвера может быть драйвер физического диска.
Отметим, что большинство современных операционных систем имеют в своем составе набор драйверов широкого спектра конкретных физических устройств и, в частности, физических дисков. Поэтому зачастую при смене устройства драйвер менять не надо: он уже есть в системе. Но при этом системе незачем держать драйвера всех устройств в оперативной памяти. Соответственно, следуя той или иной стратегии, будут загружаться драйверы тех физических устройств, которые реально будут обслуживаться системой. Стратегии могут быть различными, одной из них: может быть явное указание системе списка драйверов, которые необходимо подгрузить (в этом случае, если в списке что-то будет указано неправильно, то соответствующее устройство, возможно, просто не будет работать). Вторая стратегия предполагает, что система при загрузке самостоятельно сканирует подключенное к ней оборудование и выбирает те драйверы, которые должны быть подгружены для обслуживания найденного оборудования.
Итак, примером резидентного драйвера может служить драйвер физического диска. Это объясняется тем, что диск является устройством оперативного доступа, поэтому к моменту полной загрузки системы все должно быть готово для работы. А, например, в системах, где пользователи редко используют сканер, держать соответствующий драйвер резидентно не имеет смысла, поскольку скорость работы самого устройства много медленнее, чем скорость загрузки драйвера из внешней памяти в оперативную. Соответственно, драйвер сканера в этом случае служит одним из примеров нерезидентных драйверов, т.е. тех драйверов, которые могут находиться в ОЗУ, а могут быть и отключенными, но они также динамически подгружаемые.
В общем случае драйверы могут работать как в привилегированном режиме, так и в пользовательском.
И, наконец, некоторой логической вершиной рассматриваемой структуры ОС будут являться интерфейсы системных вызовов (API — Application Program Interface). Под системным вызовом будем понимать средство обращения процесса к ядру операционной системы за выполнением той или иной функции (возможности, услуги, сервиса). Примерами системных вызовов являются открытие файла, чтение/запись в него, порождение процесса и т.д. Отличие обращения к системному вызову от обращения к библиотеке программ заключается в том, что библиотечная программа присоединяется к исполняемому коду процесса, поэтому вычисление библиотечных функций будет происходить в рамках процесса. Обращение к системному вызову — это вызов тех команд, которые инициируют обращение к системе. Как уже отмечалось выше, инициацией обращения к операционной системе может служить либо прерывание, либо исполнение специальной команды. Следует понимать различие между системным вызовом и библиотечной функцией. Например, осуществляя работу с файлом, имеется возможность работы с ним посредством обращения к системным вызовам либо посредством использования библиотеки ввода-вывода. В последнем случае в тело процесса включаются дополнительные функции из данной библиотеки, а уже внутри данных функций происходит обращение к необходимым системным вызовам.
Итак, существует несколько подходов к структурной организации операционных систем. Один из них можно назвать классическим: он использовался в первых операционных системах и используется до сих пор — это подход, основанный на использовании монолитного ядра. В этом случае ядро ОС представляет собою единую монолитную программу, в которой отсутствует явная структуризация, хотя, конечно, в ней есть логическая структуризация. Это означает, что монолитное ядро содержит фиксированное число реализованных в нем функций, поэтому модификация функционального набора достаточно затруднительна. Устройство монолитного ядра напоминает физическую организацию первых компьютеров: в них также нельзя было выделить отдельные физические функциональные блоки — все было единым, монолитным и интегрированным друг с другом. Аналогичными свойствами обладают одноплатные компьютеры, у которых все необходимые компоненты (ЦПУ, ОЗУ и пр.) расположены на одной плате, и чтобы что-то изменить в этой конфигурации, требуются соответствующие инженерные знания.
На Рис. 65 проиллюстрирована структурная организация классической системы Unix. В данном случае ядро имеет фиксированный интерфейс системных вызовов. В нем реализовано управление процессами, а также драйвер файловой системы, реализована вся логика системы по организации работы с устройствами, которые можно разделить на байт-ориентированные и блок-ориентированные, и пр.
Рис. 65. Структура ОС с монолитным ядром.
Что касается достоинств данного подхода, то можно утверждать, что для конкретного состава функциональности и логики ядра это будет наиболее эффективное решение. При таком подходе отсутствует универсальность, и внутренняя организация ядра рассчитана на конкретную реализацию. Недостаток в этом случае заключается в необходимости перепрограммировать ядро при внесении изменений, и это является прерогативой разработчика. Соответственно, для внесения новой функциональности пользователю системы приходится обращаться к разработчику, что зачастую ведет к материальным затратам.
Альтернативу данному подходу предлагают многослойные операционные системы[R11] . В этом случае все уровни разделяются на некоторые функциональные слои. Здесь можно провести аналогию с моделью сетевых протоколов. Между слоями имеются фиксированные интерфейсы. Управление происходит посредством взаимодействия соседних слоев. Поскольку любая структуризация снижает эффективность (программа, написанная в виде одной большой функции, работает быстрее, чем аналогичная программа, разбитая на подпрограммы, т.к. любое обращение к подпрограмме ведет к накладным расходам), то подобные системы обладают более низкой эффективностью.
Итак, каждый слой предоставляет определенный сервис вышестоящему слою. Деление на слои является индивидуальным для каждой конкретной операционной системы. Это может быть слой файловой системы, слой управления внешними устройствами и т.д. Тогда модернизация подобных систем сводится к модернизации соответствующих слоев. Вследствие чего проблема несколько упрощается, но при этом остаются ограничения на структурную организацию (например, имея слой файловой системы, можно заменить его другим вариантом этого слоя, но использовать одновременно две различные файловые системы не представляется возможным).
Третий подход предлагает использовать микроядерную архитектуру (Рис. 66). Функционирование операционных систем подобного типа основывается на использовании т.н. микроядра. В этом случае выделяется минимальный набор функций, которые включаются в ядро. Все оставшиеся функции представляются в виде драйверов, которые подключаются к ядру посредством некоторого стандартного интерфейса.
Рис. 66. Структура ОС с микроядерной архитектурой.
Такая архитектура получается хорошо расширяемой, она почти не имеет никаких ограничений по количеству подключаемых драйверов и их функциональное наполнение, требуется только соблюдение драйвером интерфейса для обращения к микроядру. Таким образом, данная архитектура представляется высоко технологичной, хорошо подходит для применения в современных многопроцессорных вычислительных системах (например, в SMP-системах, тогда можно распределять драйверы по различным процессорами и получать соответствующую эффективность).
Микроядерная система может служить основой для надстройки над микроядром разных операционных систем. В частности, такой подход используется в ряде систем, в основе которых используется микроядро системы Mach.
Итак, только что были продемонстрированы достоинства данного подхода. Что касается недостатков, то они следуют из достоинств и проявляются в значительном возрастании накладных расходов. Положим, процесс обращается к файловой системе, чтобы произвести обмен с конкретным файлом посредством соответствующего системного вызова. Драйвер файловой системы, получив запрос от процесса, перерабатывает его в последовательность запросов на обмен с диском (пускай, сначала это будут виртуальный диск). После чего файловая система обращается к микроядру, которое, в свою очередь, находит драйвер виртуального диска, передает соответствующий запрос. Драйвер виртуального диска определяет, с каким физическим диском будет происходить обмен, и трансформирует поступивший ему запрос в запросы к этому физическому диску, которые ему и передаются по той же схеме. Таким образом, один запрос распадается на множество запросов, следующих от драйвера через микроядро к другому драйверу, благодаря чему эффективность системы снижается.
Напоследок отметим, что в реальности используются системы, получаемые комбинацией указанных подходов.
1.3.2 Логические функции ОС
Рассматривая ОС, ее функциональность можно представить в виде объединения некоторого фиксированного количества блоков функций. Состав этого набора варьирует от системы к системе, но в большинстве случаев можно выделить следующие функции: управление процессами, управление оперативной памятью, планирование и, наконец, управление данными, файловой системой и устройствами, а также в последнее время стали добавлять блок функциональности сетевого взаимодействия.
На уровне управления процессами решаются проблемы формирования процессов, поддержание жизненного цикла процесса, организация взаимодействия процессов, т.е. организация взаимодействия процесса с системой в целом и с другими процессами в частности.
Блок управления оперативной памятью реализует программную поддержку той или иной стратегии организации памяти. При необходимости на этом уровне реализуется поддержка аппарата виртуальной памяти, решается задача выделения и изъятия памяти у процесса.
Функции планирования можно понимать с разных точек зрения. Можно понимать планирование в узком смысле слова, т.е. планирование центрального процессора (т.е. планирование доступа процессов к центральному процессору). На самом деле, функций планирования большое множество, поскольку применять планирование приходится при организации многих механизмов операционной системы. Так, упоминавшаяся только что задача изъятия памяти у процессов является задачей планирования, поскольку ставится вопрос, по какому принципу будет происходить это изъятие. Взаимодействие с внешними устройствами тоже не может обойтись без решения задач планирования: так или иначе, поток заказов на обмен, поступающих в системе, может превосходить пропускную способность устройства, образуется конкуренция по доступу к устройству — выстраивается очередь заказов на обмен. Соответственно, ставится вопрос, как организовать обработку этой очереди. Возможны различные стратегии: FIFO, LIFO и пр. — и для каждой из них будет свой результат. Итак, сфера применения решения задач планирования достаточно широка, просто в одних случаях планирование рассматривают в рамках какой-либо функциональности, а в других случаях — отдельно.
Блок управления данными и файловой системой также является достаточно важным, поскольку ни один процесс не сможет без него функционировать. На этом уровне применяются множество различных стратегий, организаций и пр., о чем речь пойдет позже. Блок управления внешними устройствами, подобно блоку управления оперативной памятью, зачастую оказывается скрытым для пользователей системы, в некоторых случаях он интегрирован в файловую систему, как это сделано в ОС Unix. На этом уровне также решаются множество специфических задач: задача кэширования обменов, задача повышения надежности обменов и пр.
1.3.3 Типы операционных систем
Операционные системы можно классифицировать с точки зрения критериев эффективности и стратегий использования центрального процессора. Можно выделить три основных класса операционных систем: пакетные операционные системы, системы разделения времени и системы реального времени. Остановимся на каждой из них поподробнее.
Пакетная операционная система — это система, критерием эффективности функционирования которой минимизация потерь работы центрального процессора. Иными словами, отношение всего времени работы процессора ко времени исполнения пользовательских программ должно быть близко к единице. Традиционно пакетные системы предназначались для решения расчетных задач, т.е. задач, требующие определенного объема времени работы процессора. Как следует из названия, эти системы оперируют термином пакет программ.
Пакет программ — это некоторая совокупность программ, которые необходимо обработать системе. Особенность пакетных систем прослеживается в стратегии переключения выполнения процессов на процессоре. Переключение выполнения процессов происходит только по одной из трех причин.
Первая причина — завершение выполнения процесса (в силу успешного перехода на точку завершения программы или же в силу возникновения ошибки).
Вторая причина — обращение к внешнему устройству с целью осуществить обмен, т.е. возникновение прерывания по вводу-выводу, поскольку операция обмена так или иначе требует какого-то минимального интервала времени.
И, наконец, третья причина — фиксация факта зацикливания. В принципе точно определить факт зацикливания программы сложно, но все-таки возможно. На практике зачастую под фактом зацикливания считают исчерпание процессорного времени (положим, полтора часа).
Очевидно, что переключение процессов в подобных системах происходит лишь по необходимости, а это означает, что происходит редкое обращение к функции ОС смены контекстов обрабатываемых процессов, что ведет к максимальному снижению накладных расходов. В подобных системах степень полезной загрузки процессора составляет от 90% и выше.
Следующая модель — система разделения времени. Данная модель может рассматриваться как развитие модели пакетных систем. В дополнение ко всем свойствам пакетных систем необходимо добавить дополнительную характеристику. Для каждого процесса в системе определяется квант процессорного времени, который может быть единовременно использован процессом. Под квантом времени центрального процессора понимается некоторый фиксированный ОС промежуток времени работы процессора. Соответственно, переключение процессов происходит по тем же причинам, что и в пакетных системах (завершение процесса, возникновение прерывания, фиксация факта зацикливания), но необходимо добавить еще одну причину — исчерпался выделенный квант времени.
Критерием эффективности подобных систем служит вовсе не загрузка процессора, а время отклика системы на запрос пользователя (положим, если пользователь набирает текст в текстовом редакторе, т.е. будет важно, что набранные им только что символы отображались на экране достаточно быстро, иначе работать с системой ему будет неудобно). Очевидно, что в подобных системах происходит частая смена контекстов, что связано с большими накладными расходами. В подобных системах эффективность может составлять порядка 30–40%, а, соответственно, 60–70% будут составлять накладные расходы.
Варьируя размерами кванта времени, можно получать системы для решения тех или иных задач. Увеличивая квант времени до некоторого среднего размера (порядка нескольких секунд), можно получить пакетную систему, ориентированную на обработку отладочных программ. А если увеличить размер кванта до бесконечности, получится пакетная система в чистом виде.
Еще один класс систем представляют операционные системы реального времени. Это специализированные системы, которые предназначены для функционирования в рамках вычислительных систем, обеспечивающих управление и взаимодействие с различными технологическими процессами. При разработке подобных систем фиксируется некоторый набор событий, при возникновении любого из которых гарантируется обработка этого события за некоторый промежуток времени, не превосходящий определенного предельного значения.
Для иллюстрации можно привести следующий пример. Рассмотрим процесс кипячения молока. Если емкость с молоком постоянно нагревать, то через некоторое время оно начинает кипеть, а еще через некоторый достаточно короткий период оно «убегает» (после чего вообще начинает подгорать). Процесс кипячения молока можно автоматизировать, если в сосуд с молоком поместить датчик температуры, который снимает текущее значение температуры молока и передает это значение компьютеру. Соответственно, ставится задача «поймать» момент фиксации температуры кипения молока, причем среагировать необходимо за некоторый фиксированный промежуток времени. Если реакция произойдет, положим, через минуту, то молоко «убежит», и, соответственно, польза от такой системы будет минимальной. Таким образом, имеется фиксированный период времени, в течение которого компьютер должен снять показания датчика, определить, не достигнута ли точка кипения молока, и в случае кипения выключить подогрев сосуда с молоком.
Сфер применения систем реального времени в жизни очень много. Выделяют различные группы систем реального времени (жесткого времени, мягкого времени и пр.), но основной принцип их функционирования одинаков и подобен тому, который был проиллюстрирован выше.
И, в заключение, кратко остановимся на рассмотрении сетевых и распределенных операционных систем. Как уже отмечалось выше, одиночные однопроцессорные системы уходят в прошлое, и во многих случаях процессорный элемент или компьютерный элемент рассматривается как составляющая многопроцессорных или многомашинных ассоциаций. И с этой точки зрения операционные системы можно разделить на две категории.
В первую категорию можно отнести т.н. сетевые ОС. Сетевая операционная система — это система, обеспечивающая функционирование и взаимодействие вычислительной системы в пределах сети. Это означает, что сетевая ОС устанавливается на каждом компьютере сети и обеспечивает функционирование распределенных приложений, т.е. тех приложений, реализация функций которых распределена по разным компьютерам сети. Примеров можно привести достаточно много. Так, почтовая приложение может быть распределенным: есть функции перемещения, есть сервер-получатель, есть клиентская часть, обеспечивающая интерфейс работы пользователя с указанным сервером.
Рис. 67. Структура сетевой ОС.
Вторую категорию составляют распределенные ОС. Распределенной операционной системой считается система, функционирующая на многопроцессорном или многомашинном комплексе, при этом на каждой машине функционирует отдельное ядро, а сама система обеспечивает реализацию распределенных возможностей ОС (т.н. сервисы или услуги). Примером распределенных функций может служить функция управления заданиями (напомним, что в кластерных системах задание может представлять собою целое множество процессов, и ставится задача распределить эти процессы по имеющимся процессорным узлам). Другим примером может служить распределенная файловая система: традиционная файловая система ОС Unix просто не справится с потоками информации между узлами многопроцессорных систем, поэтому необходимы принципиально новые решения организации хранения и доступа к файлам.
Рис. 68. Структура распределенной ОС.
2 Управление процессами
2.1 Основные концепции
Выше уже встречалось понятие процесса и некоторые его определения. Итак, под процессом понимается совокупность машинных команд и данных, обрабатываемая в вычислительной системе и обладающая правами на владение некоторым набором ресурсов ВС. Также уже говорилось, что ресурсы могут декларироваться посредством различных стратегий, причем ресурс может эксклюзивно принадлежать одному единственному процессу, а может быть разделяемым, когда доступ к нему могут иметь два и более процесса.
Также ранее отмечалось, что одной из функций логического блока управления процессами ОС является функция поддержания жизненного цикла процесса. Жизненный цикл процесса — это те этапы, через которые может проходить процесс в ходе своей обработки и исполнении в рамках вычислительной системы. В реальности жизненный цикл процесса представляет собою характеристику конкретной операционной системы.
Выделим следующие типовые этапы жизненного цикла процесса:
- образование (порождение или формирование) процесса,
- исполнение процесса на процессоре,
- ожидание постановки процесса на исполнение — обычно это ожидание какого-либо события: ожидание окончания обмена, ожидание выделения ресурса центрального процессора и пр.,
- завершение процесса — важный этап, связанный с возвратом процессом принадлежащих ему ресурсов.
2.1.1 Модели операционных систем
Ниже будем рассматривать некоторую модельную операционную систему. Будем считать, что этапы жизненного цикла процесса разделены на два блока. Первый блок — это размещение процесса, или программы, в буфере ввода процессов (БВП). В этом буфере размещаются процессы от момента их формирования, или ввода в систему, до начала обработки его центральным процессором. Второй блок объединяет состояния процесса, связанные с размещением процесса в буфере обрабатываемых процессов (БОП), т.е. будем считать, что все процессы, которые начали обрабатываться центральным процессором, размещаются в данном буфере. Мы выделили именно два логических блока, т.к. эта модель отражает наиболее общую картину. Процесс после его формирования не обязательно сразу попадает на процессор, а многие информационные системные структуры образуются только тогда, когда процесс начинает обрабатываться, соответственно, поэтому можно провести разделение по структурной организации. Размеры буферов в различных системах могут варьироваться.
Теперь рассмотрим модели операционных систем того или иного класса систем, и начнем мы рассмотрение модели пакетной однопроцессной системы (Рис. 69). В подобной системе жизненный цикл процесса состоит всего из трех этапов. Первый этап — ожидание начала обработки, т.е. поступление процесса в очередь на начало обработки процессором и ожидание им начала своей обработки (процесс попадает в БВП). Второй этап — обработка (переход из БВП в БОП). Последний этап — завершение процесса, освобождение системных ресурсов. Данная система не имеет ожиданий готовых процессов или ожиданий ввода-вывода — это однопроцессная система, которая обрабатывает один процесс, причем все обмены синхронные, и процесс никогда не откладывается.
Рис. 69. Модель пакетной однопроцессной системы. 0 — поступление процесса в очередь на начало обработки ЦП (процесс попадает в БВП). 1 — начало обработки процесса на ЦП (из БВП в БОП). 2 — Завершение выполнения процесса, освобождение системных ресурсов.
Следующая модель — модель пакетной мультипроцессной системы (Рис. 70). Данная модель уже имеет более богатый набор состояний процесса. Есть состояние ожидания начала обработки в БВП, после которого процесс попадает в БОП на обработку центральным процессором. Поскольку мы рассматриваем модель пакетной системы, то обрабатываемый процесс может либо завершиться, либо перейти в состояние ожидания ввода-вывода (если процесс обращается к операции обмена). Когда процесс переходит из состояния обработки на процессоре, система может поставить на счет либо процесс из БВП, либо из очереди готовых на выполнение процессов в зависимости от той или иной реализованной стратегии. Соответственно, после того, как процесс завершил обмен, он меняет свой статус и попадает в очередь на выполнение, из которой позже он попадет снова на выполнение.
Рис. 70. Модель пакетной мультипроцессной системы. 0 — поступление процесса в очередь на начало обработки ЦП (процесс попадает в БВП). 1 — начало обработки процесса на ЦП (из БВП в БОП). 2 — процесс прекращает обработку ЦП по причине ожидания операции ввода-вывода, поступает в очередь завершения операции обмена (БОП). 3 — операция обмена завершена, и процесс поступает в очередь ожидания продолжения выполнения ЦП (БОП). 4 — выбирается процесс для выполнения на ЦП. 5 — завершение выполнения процесса, освобождение системных ресурсов.
Произведя в рассмотренной модели пакетной мультипроцессной системы небольшие изменения, можно получить модель операционной системы с разделением времени (Рис. 71). Структурно достаточно добавить возможность перехода из состояния обработки центральным процессором в очередь готовых на выполнение процессов. Т.е. система имеет возможность прервать выполнение текущего процесса и поместить его в указанную очередь. Но такая модель не предполагает свопинга, или механизма откачки процесса во внешнюю память. В принципе, такую возможность можно также добавить в модель системы (Рис. 72), тогда появляется еще одно состояние, характеризующее процесс, как откачанный во внешнюю память. Заметим, что в новое состояние могут переходить процессы лишь из очереди готовых на выполнение процессов, а процессы, ожидающие окончания ввода-вывода, свопироваться не могут, иначе в системе будут «зависать» заказы на обмен.
Рис. 71. Модель ОС с разделением времени. 6 — процесс прекращает обработку ЦП, но в любой момент может быть продолжен (истек квант времени ЦП, выделенный процессу). Поступает в очередь процессов, ожидающих продолжения выполнения центральным процессором (БОП).
Рис. 72. Модель ОС с разделением времени (модификация). Заблокированный процесс может быть откачан (свопирован) на внешний носитель, а на освободившееся место может быть подкачен процесс с внешнего носителя, который был откачен ранее, либо взят новый.
2.1.2 Типы процессов
Рассматривая процесс в той или иной операционной системе, можно обнаружить, что встречается деление процессов на две категории: т.н. полновесные процессы и легковесные процессы, или нити.
Полновесные процессы (иногда их называют просто процессы) — это те процессы, машинный код которых обладает эксклюзивными правами на владение оперативной памятью (т.е. это традиционная однопроцессная программа).
Альтернативой являются т.н. легковесные процессы, известные также как нити, — это процессы, которые могут работать совместно с другими процессами на общем пространстве оперативной памяти. Обычно легковесные процессы реализуются внутри полновесного процесса.
Рис. 73. Типы процессов: однонитевая (а) и многонитевая (б) организации.
Тогда традиционную однопроцессную программу, которую мы отнесли к полновесным процессам, можно теперь переопределить как однонитевой процесс, т.е. этому процессу эксклюзивно выделена память, и внутри существует один набор команд, который владеет и работает в этой защищенной области памяти. Многонитевая организация подразумевает выделение процессу защищенной области памяти, но внутри эта область доступна двум и более нитям.
Организуя многонитевые процессы, обычно преследуются следующие цели. Во-первых, это снижение накладных расходов. Как отмечалось выше, смена контекста полновесных процессов является трудоемкой операцией. В то же время, смена контекста нитей в рамках одного процесса является более простой задачей, поскольку не требуется полного переконфигурирования системы.
Также отметим, что многонитевые процессы хорошо ложатся на современные многопроцессорные системы (например, SMP-системы), т.е. в некоторых случаях при такой организации повышается эффективность системы.
Кроме того, механизм нитевой организации позволяет осуществлять взаимодействие нитей в рамках одного процесса, причем адресное пространство, посредством которого они взаимодействуют, остается защищенным от других процессов в системе.
Соответственно, перед операционной системой помимо управления полновесными процессами, планирования и выделения им ресурсов возникает задача управления нитями.
Тогда определение процесса можно расширить. Процесс — это совокупность исполняемого кода с собственным адресным пространством, представляющее собой множество виртуальных адресов, которые может использовать процесс, и назначенными ему ресурсами системы, и которая содержит хотя бы одну нить.
В заключение отметим, что многие современные операционные системы (как семейства Unix, так и Windows-системы, и др.) обеспечивают работу с нитями.
2.1.3 Контекст процесса
Говоря о различных механизмах, происходящих в системе, часто затрагивался термин контекст процесса. Под контекстом процесса мы будем понимать совокупность данных, характеризующих актуальное состояние процесса. Обычно контекст процесса состоит из нескольких компонент:
- пользовательская составляющая — это совокупность машинных команд и данных, которые характеризуют выполнение данного процесса;
- системная составляющая, которая содержит в себе информацию об именовании, правах процесса, т.е. различного рода учетная системная информация, а также содержит информацию о состоянии процесса в точке останова (содержимое регистров, настройки процесса и пр.). Соответственно, о последнем имеет смысл говорить лишь тогда, когда процесс откачан. Во время исполнения процесса обычно говорят об аппаратной составляющей контекста (т.е это актуальное состояние регистров, актуальные настройки процесса и пр.). Таким образом, когда процесс обрабатывается на процессоре, то актуальна аппаратная составляющая, когда процесс отложен — актуальна системная составляющая.