Все мы хорошо понимаем о чем речь, когда произносится слово "объект". А тем из нас, кто имеет отношение к программированию приходят на ум слова "свойства", "методы", "класс". Но вот придумать "правильное", энциклопедическое определение слову объект крайне сложно. не верите? попробуйте! Вот для примера цитата из википедии:
На первый взгляд, вроде ничего так определение. Посмотрим, что такое атрибут?
Итак, понятие сведено к мысли и мышлению. Только не надо сейчас лезть в википедию за определением слова "мышление"..... Слазили? А я говорил, что не надо?
Когда энциклопедическое определение не помогает, приходится обращаться к интуитивному, бытовому толкованию. Если рассмотреть термин "понятие" с точки зрения программиста ИИ - должно получиться что-то вроде "то, чем оперирует разум/интеллект". Некая единица смысла(не факт, что элементарная), которой можно оперировать.
Возвращаемся к термину "объект"... Хотя почему только к нему, то же самое происходит и со словами типа "процесс", "событие", "состояние".
Состоя́ние - абстрактный многозначный термин, в общем, обозначающий множество стабильных значений переменных параметров объекта .
Что же общего в этих понятиях? Что их объединяет? Что мешает дать словесное определение, но позволяет оперировать любым другим способом?
Может быть то, что эти понятия СЛИШКОМ АБСТРАКТНЫЕ? мы привыкли давать определения, как указание класса-предка в общей системе классификации с выделением отличительных признаков, характерных для данного понятия. Селедка, это рыба, которая выглядит так-то и так-то, обычно имеет такие-то размеры, вес, место обитания, внутри селедок различают такие-то сорта и.т.д. Но В ПЕРВУЮ ОЧЕРЕДЬ, СЕЛЕДКА - ЭТО РЫБА. Если необходимо более точное определение - селедка, это белковое существо со следующим генотипом (далее должно следовать химическое описание генотипа на пару терабайт). Мы легко приводим примеры объектов, но не можем сказать, чем является сам объект. Термин "философская категория" не предлагать! в отличие от "объекта" и "процесса" это понятие абсолютно синтетическое. им невозможно оперировать на уровне здравого смысла. можно разве что перечислить эти самые категории, как в математике множество задается перечислением.
Ну что ж, некая зацепка есть. Мы имеем понятия, как единицы смысла, и некоторые операции над ними:
Приведение примера (конкретизация)
Сравнение (выделение сходств и различий).
Дача определения (поиск или создание более абстрактного понятия).
отношение "конкретный-абстрактный" заставляет вспомнить о системе классификации, т.е. таксономии(см. статью ), и всех тех механизмах наследования атрибутов и построения классов которые мы напридумывали в статье . При рассмотрении методов построения становится похоже, что "проблемные" термины упомянутые выше были получены не уточнением более абстрактного класса (за его отсутствием), а собраны, как перечислимое множество элементов, имеющих хоть какой-то общий интуитивно-бытовой признак. понятие "философская категория", напротив, было собрано, как перечислимое множество элементов ничего общего не имеющих.
Теперь обратимся к самому детализированному, богатому на связи термину "событие". "Событие" увязывает "явление", положение в пространстве и времени.
Простра́нство - понятие, используемое (непосредственно или в составе сложных терминов) в естественных языках, а также в таких разделах знания, как философия , математика , физика и т. п.
На уровне повседневного восприятия пространство интуитивно понимается как арена действий, общий контейнер для рассматриваемых объектов, сущность некоторой системы.
По данному вопросу энциклопедические определения никакого ключа к действию не дают, поэтому придется обратиться к здравому смыслу.
В 12 часов дня на ул. Ленина автомобиль сбил фонарный столб. Это - событие . Его описание дает ответы на вопросы КОГДА, ГДЕ, КТО/ЧТО и С ЧЕМ, что СДЕЛАЛ, то есть фиксирует
- положение во времени (12 часов дня)
- положение в пространстве (ул. Ленина)
- объект(ы) и субъект(ы) (конкретный автомобиль и конкретный столб)
- действие (сбить)
Если опустить любой из перечисленных аспектов - получится не событие, а что-то другое. Например, уберем действие (вместе с субъектом) - останется "автомобиль [находился] в 12 часов дня на ул. Ленина". Это скорее можно назвать факт ом. Уберем время - "автомобиль сбил столб на ул. Ленина". Вроде бы и событие, но какое-то, неполное, недоопределенное. Непонятно, как с ним работать, соотносить с другими событиями - что было раньше, что позже, что одновременно. То же самое будет если убирать другие аспекты "в 12 дня автомобиль сбил столб", "в 12 дня на ул. Ленина кто-то что-то сбил". Можно убрать время и поменять действие "автомобиль едет по ул. Ленина". Получился явный такой процесс, в бытовом, интуитивном его понимании. Впрочем сбитие столба можно тоже рассмотреть, как процесс , например смены состояния столба со стоячего на лежачее. Если выразиться точнее - изменение значения свойства "ориентация" со "стоячее" на "лежачее".
Надеюсь, эта словесная ахинея вас достаточно утомила, чтобы вы задались вопросом "чем мы тут занимаемся"? А занимаемся мы формализованным выражением связей между наиболее общими понятиями, применяемыми в описании любой предметной области. В научном словаре это называется страшным словом "онтология ". Честно.
Обычно под онтологией подразумевается эксплицитная, то есть явная, спецификация концептуализации, где в качестве концептуализации выступает описание множества объектов и связей между ними. Формально онтология состоит из понятий терминов , организованных в таксономию , их описаний и правил вывода. Основной вопрос онтологии: что существует?
Наукообразные словечки типа "онтология" и "таксономия" уже достаточно емки и тяжелы для понимания, так что пока мы окончательно не вывихнули мозг "эксплицитной спецификацией концептуализации", нужно побыстрее понять, зачем это все нужно, и спуститься к конкретным примерам. Последнее усилие:
Формально онтология определяется как O =
- X - конечное множество понятий предметной области,
- R - конечное множество отношений между понятиями,
- F - конечное множество функций интерпретации.
Итак, именно онтология, как система понятий, отношений между ними и их интерпретации, даст нам возможность адекватно описывать предметную область и оперировать понятиями (если угодно - исчислять понятия), что необходимо для любого, хоть и искусственного, но мало-мальского интеллекта.
Лобовое решение - описать всё и вся (а именно такова философская интерпретация онтологии - наука о бытии, т.е. описание всего сущего), бесконечно трудоемко, поэтому возникает вопрос об автоматическом или хотя бы автоматизированном построении онтологий. Но для того чтобы машина могла
Парадигмы объектно-ориентированного программирования для адекватного моделирования предметной области недостаточно, поскольку
Техническое состояние - это состояние, характеризующееся значениями параметров в данный промежуток времени, при конкретных условиях окружающей среды, которые установлены при этом технической документацией на данный объект. Факторов, способствующих изменениям технического состояния строительного объекта, множество, сюда относятся воздействия климатических условий, замена отказавших элементов конструкции объекта, старение с течением времени и так далее. При этом по значениям контролируемых (диагностических) параметров можно судить об изменении технического состояния объекта, а также определить такие изменения без применения разрушающих методов обследования. Много о строительном объекте и его техническом состоянии, а также характеристиках работоспособности отдельных элементов объекта, скажут конструктивные особенности сооружения. Проявляется это в их реагировании на воздействия различных факторов среды в процессе эксплуатации объекта. Так, например, качество выполнения строительно-монтажных работ влияет как на рассеивание начальных значений в характеристиках работоспособности объекта и его конструкций, так и на интенсивность перемены их значений в процессе эксплуатации здания.
Техническое состояние зданий и сооружений ухудшается постоянно - это неизбежно, так как в процессе их эксплуатации количественные значения показатели их работоспособности, такие как, например, надежность, неуклонно снижаются. Это происходит, в первую очередь, из-за изменений физических свойств материалов конструктивных элементов объекта, которые, кроме того, имеют различные характеристики сопряжения между собой, размеры и формы. Хотя и ухудшение технического состояния объекта закономерно иногда оно может носить и случайный характер. В этом случае утрата работоспособности элементов конструкции объекта происходит в течение долгого времени и с малой интенсивностью действия. Снижения показательных характеристик технического состояния объекта может произойти и внезапно. Такие процессы случайны, но имеют место быть в строительной практике. При этом работоспособность объекта снижается независимо, хотя и все протекающие процессы при этом взаимодействуют между собой при этом, что значительно затрудняет математический анализ отмеченного ухудшения технического состояния на поднадзорном объекте. Модель для рассмотрения процесса снижения работоспособности здания или сооружения не может быть единой и однозначной для всех, так для одного и того же объекта можно выбрать несколько моделей рассмотрения.
Существует две группы факторов, которые вызывают ухудшение работоспособности объекта, как в целом, так и в отдельных его элементах. Рассматривая их с точки зрения механизма воздействия, можно выделить причины внутреннего и внешнего характера. В случае внутренних причин могут быть физико-химические процессы, которые могут протекать в материалах, нагрузки на элементы объекта, дефекты производства и конструктивные факторы. К внешним причинам стоит относить климатические факторы, факторы внешней среды, воздействующей на объект, качество его эксплуатации, а также различные воздействия, которые предусматриваются системой технического ремонта и обслуживания строительного объекта. Строительная организация , обеспечивающая требуемую нормами работоспособность всех конструкций и элементов здания за конкретную длительность эксплуатации их, должна учитывать рациональные конструктивные решения, которые снизят до минимума затраты труда и финансовых средств.
В многозадачной компьютерной системе процессы могут принимать различные состояния. Эти состояния в действительности могут не различаться ядром операционной системы, они удобная абстракция для понимания процессов.
Различные состояния процесса показано на диаграмме состояний, на которой стрелками показано переходы между состояниями. Как видно, некоторые процессы сохраняются в основной памяти, а другие во вторичной (виртуальной) памяти.
Основные состояния процесса
Во всех типах компьютерных систем процессы имеют следующие состояния:
- Созданный (новый)
- Ожидающий (готов)
- Запущенный
- Блокированный
- Завершенный
Созданный
(Другое название - новый
). Когда процесс создается впервые, он попадает в положение «создан» или «новый». В этом состоянии он ожидает входа в состояние «готов». В этом состоянии процесс может быть воспринят или отложен долгосрочным планировщиком.
В большинстве настольных компьютерных систем выбор выполняется автоматически, однако в операционных системах реального времени выбор может быть отложен. В системах реального времени перевод слишком большого числа процессов в состояние «готов» может привести к переконкуренции за системные ресурсы, что ведет к невозможности завершения процесса до заданного срока.
Готов
(Другое название - ожидающий). «Готов» процесс уже загружен в основную память и ожидает выполнения центральным процессором (контекстное переключение будет осуществлено диспетчером или краткосрочным планировщиком). В компьютерной системе может быть много «готовых» процессов. В однопроцессорной системе только один процесс будет выполняться в конкретный момент времени, все остальные «одновременно выполняемые» процессы будут ожидать выполнения.
Запущенный
(Другие названия - активный или исполняемый). «Запущенным» является тот процесс, который в данный момент выполняется центральным процессором. Если процесс исчерпает отведенный ему интервал времени, операционная система переключит контекст процесса снова в состояние «готов». Переключение контекста также может произойти, когда процесс завершится или когда он будет блокирован, нуждаясь в некотором ресурсе (например, ввода / вывода) и тогда он будет перемещен в положение «блокирован».
Блокированный
Если процесс «заблокируется» на ресурсе, он будет отстранен от процессора (ибо процесс не может продолжать исполнение) и переведен в блокированное состояние. Процесс будет оставаться "заблокированным" пока соответствующий ресурс не станет доступен. О разблокировании ресурса заблокированному процессу сообщает операционная система (о доступности ресурса сама операционная система сообщается с помощью прерывания). Как только операционная система узнает, что процесс разблокирован, он переводится в состояние "готов", с которого он может быть переведен в состояние «исполняемый», в котором он сможет использовать заново доступный ресурс.
Завершенный
Процесс может завершиться либо когда он в состоянии «исполняемый» и завершит свое выполнение, или когда его будет явно «снято» по команде оператора. В обоих случаях процесс переходит в состояние «завершенный». Если процесс не будет отстранен от памяти после вхождения в это состояние, то это состояние называется "зомби".
Дополнительные состояния процесса :
В системах, поддерживающих виртуальную память, возможны еще два дополнительных состояния. В обоих этих состояниях процесс «находится» во вторичной памяти (преимущественно - жесткий диск).
Выгруженный и ожидающий
(Другое название - приостановленный и ожидающий). В системах, которые поддерживают виртуальную память, процесс может быть выгружен из основной памяти и помещен в виртуальную память среднесрочным планировщиком. Оттуда, процесс может быть выгружен в состояние «ожидающий».
Выгруженный и заблокированный
(Другое название - приостановлен и блокирован). Процессы, которые являются заблокированными, могут также быть выгружены. В этом случае процесс является «выгружен и ожидающий» и может быть выгружен в тех же случаях, что и «выгружен и ожидающий процесс» (хотя в этом случае процесс будет в блокированном состоянии и может все еще ожидать пока ресурс станет доступным).
В этой статье мы поговорим на такие темы, как: планирование процессов операционной системой, выделение ресурсов процессу, состояния процесса в ОС .
Понятие «вычислительный процесс » (или просто «процесс») является одним из основных при рассмотрении свойств ОС. Последовательный процесс (задача) – это выполнение отдельной программы с ее данными на последовательном процессоре (программа, находящаяся в решении).
Например:
- Выполнение прикладных программ пользователей.
- Выполнение утилит и других системных обрабатывающих программ.
- Трансляция исходной программы, ее исполнение.
Планирование процессов
В первых вычислительных системах любая программа могла выполняться только после полного выполнения предыдущей задачи. Такой режим работы получил название однозадачного (однопрограммного ).
Поскольку первые вычислительные системы были построены в соответствии с принципами Джона Фон Неймана, все подсистемы и устройства компьютера управлялись исключительно центральным процессором. ЦП осуществлял и выполнение вычислений, и управление операциями ввода/вывода данных. Соответственно, пока осуществлялся обмен данными между оперативной памятью и внешними устройствами, процессор не мог выполнять вычисления.
Введение в состав вычислительной машины специальных контроллеров позволило совместить во времени (распараллелить) операции вывода полученных данных и последующие вычисления на ЦП. Однако все равно процессор продолжал часто и долго простаивать, дожидаясь очередной операции ввода/вывода. Поэтому было предложено организовать, так называемый, мультипрограммный (мультизадачный, многозадачный) режим работы вычислительной системы. Суть его заключается в том, что пока одна программа (один процесс или задача) ожидает завершения очередной операции ввода/вывода, другая программа (другая задача) может быть поставлена на решение.
Многозадачный режим можно охарактеризовать следующим образом:
- благодаря совмещению во времени двух задач общее время их выполнения становится меньше, чем, если бы мы выполняли их по очереди (запуск одной из них после завершения другой).
- время выполнения каждой задачи в общем случае становится больше, чем, если бы мы выполняли каждую из них как единственную: всякое разделение ресурсов замедляет работу одного из участников за счет дополнительных затрат времени на ожидание выполнения ресурса.
Выделение ресурсов
ОС поддерживает мультипрограммирование и старается эффективно использовать ресурсы путем организации к ним очередей запросов, составляемых тем или иным способом. Это требование достигается поддерживанием в памяти более одного процесса, ожидающего процессор, и более одного процесса готового использовать ресурсы, как только последние станут доступными.
При необходимости использовать какой–нибудь ресурс (оперативную память, устройства ввода/вывода, массив данных и др.) задача обращается к супервизору ОС (ее центральному управляющему модулю), посредством специальных вызовов (команд, директив) и сообщает о своем требовании. При этом указывается вид ресурса и, если надо, его объем (например, количество адресуемых ячеек ОП, количество дорожек или секторов на системном диске, устройство печати и объем выводимых данных).
Супервизор ОС может состоять из нескольких модулей: супервизора ввода/вывода, супервизора прерываний, супервизора программ, диспетчер задач и т.д.
Директива обращения к ОС передает ей управление, переводя процесс в привилегированный режим работы, если такой существует. Ресурс может быть выделен, задачей, обратившейся к супервизору с соответствующим запросом, если:
- он свободен и в системе нет запросов от задач более высокого приоритета к этому же ресурсу.
- текущий запрос и ранее выданные запросы допускают совместное использование ресурса.
- ресурс используется задачей низшего приоритета и может быть временно отобран (разделяемый ресурс).
Получив запрос, ОС либо удовлетворяет его и возвращает управление задаче, выдавшей данный запрос, либо, если ресурс занят, ставит задачу в очередь к ресурсу, переводя ее в состояние ожидания. Очередь к ресурсу может быть организована несколькими способами, но чаще всего это осуществляется с помощью списковой структуры.
После окончания работы с ресурсом задача опять с помощью специального вызова супервизора (посредством соответствующей директивы) сообщает ОС об отказе от ресурса, или ОС забирает ресурс сама, если управление возвращается супервизору после выполнения какой-либо системной функции. Супервизор ОС, получив управление по этому обращению, освобождает ресурс и проверяет, имеется ли очередь к освободившемуся ресурсу. Если очередь есть – в зависимости от принятой дисциплины обслуживания (правила обслуживания) и приоритетов заявок он выводит из состояния ожидания задачу, ждущую ресурс, и переводит ее в состояние готовности к выполнению. После этого управление либо передается данной задаче, либо возвращается той, которая только что освободила ресурс.
При выдаче запроса на ресурс задача может указать, хочет ли она владеть ресурсом монопольно или допускает совместное использование с другими задачами.
Если в системе имеется некоторая совокупность ресурсов, то управлять их использованием можно на основе монопольной стратегии. Стратегия подразумевает четкую формулировку целей, следуя которым можно добиться эффективного распределения ресурсов.
В однопрограммной ОС присутствует только один пользовательский процесс. В мультипрограммной системе на ресурсы могут претендовать много независимых процессов.
Планирование процессов – это управление распределением ресурсов процессора между различными конкурирующими процессами путем передачи им управления согласно некоторой стратегии планирования.
Состояние процесса
Процесс создается, когда выполнение задания пользователя начинается, и уничтожается, когда задание завершается.
Если обобщать и рассматривать не только обычные ОС общего назначения, но и, например ОС реального времени, то можно сказать, что процесс может находиться в активном и пассивном состоянии.
В активном состоянии (то есть во время своего существования) процесс может участвовать в конкуренции за использование ресурсов в ОС, а в – пассивном – он только известен системе, но в конкуренции не участвует (хотя его существование в системе сопряжено с предоставлением ему оперативной и/или внешней памяти).
В свою очередь активный процесс может быть в одном из следующих состояний:
- Выполнения (running ) – все затребованные процессом ресурсы выделены. В этом состоянии в каждый момент времени может находиться только один процесс, если речь идет об однопроцессорной вычислительной системе (процесс использует процессор для выполнения своих команд). В многопроцессорных системах при наличии соответствующей ОС количество активных процессов может достигать числа процессоров.
- Готовности к выполнению (ready ) – ресурсы могут быть предоставлены, тогда процесс перейдет в состояние выполнения (процессы не блокированы и не активны).
- Блокирования или ожидания (blocked) – затребованные ресурсы не могут быть предоставлены, или операция ввода/вывода не завершена (выполнение процесса может быть продолжено только после наступления некоторого ожидаемого им события).
Таким образом, возможные переходы из одного состояния процесса в другое в общем случае можно представить следующей схемой:
В любой момент времени выполняющимся процессом (т.е. использующим процессор) может быть только один процесс. При передаче управления процессу пользователя ОС устанавливает интервальный таймер. Тем самым задается квант времени, являющийся максимальным количеством времени процессора, на которое процесс получает управление. Если это время истекает, процесс переводится из состояния выполнения в состояние готовности. После этого ОС, согласно стратегии планирования, выбирает следующий процесс, находящийся в готовности, переводит его в состояние выполнения и передает ему управление.
Выбор процесса и передачу на него управления называют диспетчеризацией . Часть операционной системы, выполняющая эту функцию, называется диспетчером (dispetcher).
В обычных ОС (на рассматривая ОС реального времени) процесс появляется при запуске какой-нибудь программы. ОС организует (выделяет) для нового процесса соответствующий дескриптор процесса и процесс начинает выполняться. Поэтому пассивного состояния не существует.
В ОС реального времени ситуация иная. Обычно при проектировании системы реального времени уже заранее бывает известен состав программ (задач), которые должны будут выполняться. Известны и многие их параметры, которые необходимо учитывать при распределении ресурсов (объем памяти, приоритет, средняя длительность выполнения, открываемые файлы, используемые устройства и т.п.). Поэтому для них заранее заводят дескрипторы задач, с тем, чтобы в последствии не тратить драгоценное время на организацию дескриптора и поиск для него необходимых ресурсов. Таким образом, в ОС реального времени многие процессы (задачи) могут находиться в состоянии бездействия – пассивном состоянии.
Переходы между состояниями процесса
За время своего существования процесс может неоднократно совершать переходы из одного состояния в другое. Это обусловлено следующими факторами:
- обращениями к ОС с запросами ресурсов.
- обращениями к ОС с запросами на выполнение системных функций.
- взаимодействием с другими процессами.
- появлением сигналов прерывания таймера.
- появлением сигналов прерывания устройств ввода/вывода и др.
Возможные переходы процесса из одного состояния в другое отображены в виде схем состояний. Процесс из состояния бездействия может перейти в состояние готовности в следующих случаях:
- По команде оператора (пользователя). Имеет место в тех диалоговых ОС, где программа может иметь статус задачи (и при этом являться пассивной), а не просто быть исполняемым файлом и только на время исполнения получать статус задачи (как это происходит в большинстве современных ОС).
- При выборе из очереди планировщика (характерно для ОС, работающих в пакетном режиме).
- По вызову из другой задачи (посредством обращения к супервизору один процесс может создать, инициировать, приостановить, остановить, уничтожить другой процесс).
- По прерыванию от внешнего инициативного устройства (сигнал о свершении некоторого события может запускать соответствующую задачу).
Устройство называется инициативным, если по сигналу запроса на прерывание от него должна запускаться некоторая задача.
- При наступлении запланированного времени запуска программы.
Из состояния выполнения процесс может выйти по одной из следующих причин:
- Процесс завершается, при этом он посредством обращения к супервизору передает управление ОС и сообщает о своем завершении. В результате этих действий супервизор либо переводит его в список бездействующих процессов (процесс переходит в пассивное состояние), либо уничтожает (уничтожается не сама программа, а именно задача, которая соответствовала выполнению некоторой программы). В состояние бездействия процесс может быть переведен принудительно: по команде оператора или путем обращения к супервизору ОС из другой задачи с требованием остановить данный процесс.
- Процесс переводится супервизором ОС в состояние готовности к исполнению в связи с появлением более приоритетной задачи или в связи с окончанием выделенного ему кванта времени.
- Процесс блокируется (переводится в состояние ожидания) либо вследствие запроса операции ввода/вывода либо в силу невозможности предоставить ему ресурс, запрошенный в настоящий момент, а также по команде оператора на приостановку задачи, или по требованию через супервизор другой задачи.
Таким образом, движущей силой, меняющей состояние процессов, являются различные события. Один из основных видов событий — это прерывание.
Объекты процессов и потоков
Объектно-ориентированная структура операционной системы W2K облегчает разработку подсистемы для работы с процессами. Разработчики W2K воспользовались двумя типами связанных с процессами объектов: процессами и потоками. Процесс - это объект, соответствующий заданию или приложению пользователя, который владеет своими собственными ресурсами, такими, как память и открытые файлы. Поток - это диспетчеризуемая единица работы, которая выполняется последовательно и является прерываемой, что позволяет процессору переключиться на выполнение другого потока.
Каждый процесс в операционной системе W2K представлен объектом, общая структура которого показана на рис. 4.13,а. Каждый процесс определяется некоторым числом атрибутов и может предоставлять определенные сервисы, которые он выполняет после получения соответствующего сообщения-запроса. Единственный способ вызвать такой сервис - отправка сообщения процессу, который его предоставляет. При создании нового процесса операционная система W2K использует класс или тип объектов, определенный как шаблон процесса для генерации новых экземпляров объектов. Во время создания объекта его атрибутам присваиваются конкретные значения. В табл. 4.3 приводится краткое описание каждого атрибута процессов.
Таблица 4.3. Атрибуты процесса в операционной системе Windows 2000
| Идентификатор процесса Уникальное значение, идентифицирующее процесс в операционной системе Дескриптор защиты Описывает, кто создал объект, кто обладает правом доступа к нему или может им пользоваться и кто определяет права доступа к объекту Базовый приоритет Базовый приоритет выполнения потока, принадлежащего процессу Процессор по умолчанию Заданный по умолчанию набор процессоров, на котором возможно выполнение потоков процесса Квоты Максимальное количество страничной и прочей системной памяти, объем в страничном файле и процессорное время, доступные данному процессу Время выполнения Суммарное время, затраченное на выполнение всех потоков процесса Счетчики ввода-вывода Переменные, в которые заносятся сведения о количестве и типе операций ввода-вывода, выполненных потоками процесса |
| Счетчики операций Переменные, в которые заносятся сведения о количестве и с виртуальной памятью типе операций с виртуальной памятью, выполненных потоками процесса Порты Каналы обмена информацией между процессами, в которые исключений/отладки диспетчер процессов должен отправить сообщение при возникновении исключительной ситуации из-за одного из потоков процесса Статус выхода Причина завершения процесса |
В операционной системе W2K процесс перед выполнением должен содержать хотя бы один поток, который затем может создавать другие потоки. В многопроцессорной системе несколько потоков одного и того же процесса могут выполняться параллельно. На рис. 4.13,6 изображена структура объекта потока, а в табл. 4.4 определены его атрибуты. Заметим, что некоторые атрибуты потока подобны атрибутам процесса. Значения таких атрибутов потока извлекаются из значений соответствующих атрибутов процесса. Например, в многопроцессорной системе сродные потоку процессоры - это множество процессоров, на которых может выполняться данный поток; это множество совпадает с множеством процессоров, сродных процессу, или является его подмножеством.
| Таблица 4.4. Атрибуты потока в операционной системе Windows 2000 Идентификатор потока Уникальное значение, идентифицирующее поток, когда он вызывает сервис Контекст потока Набор значений регистров и другие данные, которыми определяется состояние выполнения потока Динамический приоритет Приоритет выполнения потока в данный момент времени Базовый приоритет Нижний предел динамического приоритета потока Процессоры потока Множество процессоров, на которых может выполняться поток. Это множество является подмножеством процессоров, сродных процессу потока, или совпадает с ним Время выполнения потока Совокупное время, затраченное на выполнение потока в пользовательском режиме и в режиме ядра Статус оповещения Флаг, который указывает, следует ли потоку выполнять асинхронный вызов процедуры Счетчик приостановок В нем указывается, сколько раз выполнение потока было приостановлено без последующего возобновления Признак имперсонации Временный признак доступа, позволяющий потоку выполнять операции от имени другого процесса (используется подсистемами) Порт завершения Канал обмена информацией между процессами, на который диспетчер процессов должен отправить сообщение при завершении потока (используется подсистемами) Статус выхода потока Причина завершения потока |
Заметим, что одним из атрибутов процесса является его контекст. Содержащаяся в контексте информация позволяет операционной системе приостанавливать и возобновлять потоки. Более того, приостановив поток и изменив его контекст, можно изменить его поведение.
Многопоточность
Операционная система W2K поддерживает параллельное выполнение процессов, потому что потоки различных процессов могут выполняться одновременно. Более того, нескольким потокам одного и того же процесса могут быть выделены различные процессоры, и эти потоки также могут выполняться одновременно. Параллелизм достигается в многопоточном процессе без накладных расходов на использование нескольких процессов. Потоки одного и того же процесса могут обмениваться между собой информацией с помощью общего адресного пространства и имеют доступ к совместным ресурсам процесса. Потоки, принадлежащие разным процессам, могут обмениваться между собой информацией с помощью общей области памяти, установленной для этих двух процессов.
Объектно-ориентированный многопоточный процесс является эффективным средством реализации серверных приложений. Например, один обслуживающий процесс может обслуживать несколько клиентов. Каждый запрос клиента приводит к созданию в сервере нового потока.
Состояния потоков
Поток, созданный в операционной системе W2K, может находиться в одном из шести состояний (см. рис. 4.14). Перечислим эти состояния.
Готовый к выполнению. Поток, который может быть направлен на выполнение. Диспетчер микроядра отслеживает все готовые к выполнению потоки и осуществляет их планирование в соответствии с приоритетом.
Резервный. Поток, который будет запущен следующим на данном процессоре. Поток находится в этом состоянии до тех пор, пока процессор не освободится. Если приоритет резервного потока достаточно высок, то он может вытеснить выполняющийся в данный момент поток. В противном случае резервный поток ждет, пока не произойдет блокировка выполняющегося потока или пока не истечет выделенный ему промежуток времени.
Выполняющийся. Как только микроядро переключит поток или процесс, резервный поток перейдет в состояние выполнения и будет пребывать в этом состоянии до тех пор, пока не произойдет одно из следующих событий: поток будет вытеснен, закончится отведенный ему интервал времени, поток будет блокирован или завершен. В первых двух случаях поток снова переходит в состояние готовности.
Ожидающий. Поток входит в состояние ожидания, если (1) он блокирован каким-то событием (например, операцией ввода-вывода), (2) он добровольно ждет синхронизации или (3) среда подсистемы предписывает потоку, чтобы он сам себя приостановил. После того как условия ожидания будут удовлетворены, поток переходит в состояние готовности, если все его ресурсы будут доступны.
Переходный. Поток переходит в это состояние, если он готов к выполнению, но ресурсы недоступны (например, страницы стека потока могут находиться на диске). После того как необходимые ресурсы станут доступны, процесс переходит в состояние готовности.
Завершающийся. Завершение потока может быть инициировано самим потоком, другим потоком или может произойти вместе с завершением родительского процесса. После завершения необходимых операций освобождения ресурсов и т.п. поток удаляется из системы (или может быть сохранен исполнительной системой для дальнейшей повторной инициализации).



