Лекция 1 (10/02/03)

Вид материалаЛекция

Содержание


2.1 Нулевое поколение
2.2 Первое поколение
2.3 Второе поколение
2.6 Особенности современного этапа развития ОС
Лекция 2 (17/02/02)
Последовательный процесс
3.2 Ресурсы и их классификация
Общая схема выделения ресурсов
Повторно используемые
3.3 Состояния потока
Лекция 3 (22/02/03)
Из состояния бездействия в состояние готовности
Из состояния выполнения
3.4 Реализация понятия последовательного процесса в ОС
3.4.1 Описатель процесса
Config.sys (
В ОС реального времени
3.4.2 Последовательное выполнение программ
Среда содержит
Лекция 4 (03/03/03)
...
Полное содержание
Подобный материал:
  1   2



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


ЛЕКЦИЯ 1 (10/02/03)

ГЛАВА 1 ОСНОВНЫЕ ПОНЯТИЯ

§1 Определение ОС, задачи и функции ОС

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

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

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

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

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

Операционная система взаимодействует с:
  • операторами ЭВМ;
  • прикладными программистами;
  • системными программистами;
  • административным персоналом;
  • программами;
  • аппаратными средствами;
  • пользователями.

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

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

Администраторы систем устанавливают порядок работы на ЭВМ и взаимодействуют с ОС, чтобы обеспечить соблюдение принятого порядка.

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

Пользователи – это абоненты вычислительной сети.

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

В различных моделях ЭВМ используются ОС с разной архитектурой и возможностями; для их работы необходимы различные ресурсы ОП; они предоставляют разную степень сервиса для программирования и работы с готовыми программами.
  1. Наиболее простая ОС предоставляет пользователю только самый необходимый набор средств для управления ресурсами ПЭВМ, доступа к файловой системе и организации диалога (обычно ставится на 8-разрядной ПЭВМ). Обеспечение интерфейса пользователя, взаимодействие с внешними устройствами и другие функции возлагаются на прикладные программы. Такие ОС не дают особых возможностей для системных программистов и применяются на дешевых компьютерах (например, семейство СР/М).
  2. ОС с более развитыми средствами доступа ко всем аппаратным компонентам, гибкой файловой системой, основанной на иерархической структуре каталогов, удобным командным языком. Средства таких ОС позволяют формировать удобную операционную обстановку для разработки ПО; с другой стороны, на их основе легко создавать автоматизированные рабочие места с простыми средствами доступа пользователей к прикладным программам. (16-разрядные компьютеры, семейство MS-DOS).
  3. ОС, ориентированные на эффективную поддержку процесса разработки ПО. Имеется развитая файловая система и мощный командный язык, обеспечивается программирование доступа ко всем типам внешних устройств, как и в ОС 2 класса. Кроме того, в состав этих ОС входит множество служебных программ (утилит), обеспечивающих выполнение разнообразных функций, потребность в которых возникает в процессе разработки ПО. В отличие от предыдущего класса, имеется возможность организации одновременной работы нескольких пользователей с отдельных терминалов. Системы этого типа требуют довольно значительных ресурсов, что не всегда оправданно с точки зрения конечного пользователя, занятого решением своих профессиональных задач (семейство UNIX).
  4. Особый класс – это ОС, ориентированные главным образом на поддержку удобной работы конечных пользователей. Имеют развитые средства поддержки диалога, используют графику, дисплейные окна, специальные манипуляторы типа "мышь" для выбора объектов и операций над ними (семейство WINDOWS).

§2 Поколения ОС

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

2.1 Нулевое поколение (1940-е годы)

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

2.2 Первое поколение (1950-е годы)

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

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

2.3 Второе поколение (начало 1960-х годов)

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

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

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

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

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

Системы реального времени используются в системах управления технологическими процессами, бортовых вычислительных системах и т.п. Системы реального времени часто работают с недогрузкой, т.к. для них важнее быть в состоянии постоянной готовности и быстро реагировать на предусмотренные события, чем просто быть занятыми большую часть времени. (CP-67/CMS фирмы IBM; VMOS фирмы RCA).

2.4 Третье поколение (середина 1960-х – середина 70-х)

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

Универсальность этих систем обусловила их громоздкость и дороговизну. Для работы с такими системами пользователю приходилось изучать сложные языки управления заданиями, чтобы уметь описывать задания и требуемые ресурсы (UNIX).

2.5 Четвертое поколение (середина 1970-х годов – 90-е)

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

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

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

2.6 Особенности современного этапа развития ОС

К началу 90-х гг практически все ОС стали сетевыми. Сетевые функции встраиваются в ядро ОС. Появились специализированные ОС, которые предназначены исключительно для выполнения коммуникационных задач.

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

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

Современная ОС наряду с выполнением основных функций (эффективное управление ресурсами, обеспечение удобного интерфейса для пользователя и прикладных программ) должна поддерживать мультипрограммную обработку, виртуальную память, многооконный графический интерфейс пользователя и выполнять многие другие функции. Кроме того, ОС должна удовлетворять следующим эксплуатационным требованиям:
  • Расширяемость. Некоторые ОС существуют десятилетиями; очевидно, что при этом они должны модернизироваться, приобретать новые свойства, – например, поддерживать новые типы внешних устройств или новые сетевые технологии. Если код ОС написан таким образом, что дополнения и изменения могут вноситься без нарушения целостности системы, то такая ОС называется расширяемой. Расширяемость достигается за счет модульной структуры ОС, при которой программы строятся из набора отдельных модулей, взаимодействующих только через программный интерфейс (UNIX).
  • Переносимость (многоплатформенность) – свойство кода ОС легко переноситься с процессора одного типа на процессор другого типа; а также с аппаратной платформы одного типа на аппаратную платформу другого типа. Такие ОС имеют несколько вариантов реализации для разных платформ.
  • Совместимость. Понятие совместимости означает поддержку пользовательских интерфейсов других ОС, а также наличие средств для выполнения прикладных программ, написанных для других ОС. Для некоторых "долгоживущих" ОС (UNIX, MS-DOS, Windows) наработана широкая номенклатура приложений, часть из которых весьма популярна. Поэтому для пользователя, переходящего с одной ОС на другую, является очень важным наличие возможности запускать в новой ОС свои любимые приложения.
  • Надежность и отказоустойчивость. Система должна быть защищена от внутренних и внешних ошибок, сбоев и отказов. Приложения не должны иметь возможности наносить вред системе. Надежность и отказоустойчивость определяются, прежде всего архитектурными решениями, положенными в ее основу, а также отлаженностью кода.
  • Безопасность. Современная ОС должна защищать данные и другие ресурсы вычислительной системы от несанкционированного доступа. Для этого она должна как минимум иметь в своем составе средства: аутентификации (определения легальности пользователей); авторизации (предоставления легальным пользователям дифференцированных прав доступа к ресурсам); аудита (фиксации всех "подозрительных" для безопасности системы событий).
  • Производительность. ОС должна обладать настолько хорошим быстродействием и временем реакции, насколько это позволяет аппаратная платформа. На производительность ОС влияет много факторов, среди которых основными являются архитектура ОС, многообразие функций, качество программирования кода, возможность исполнения ОС на многопроцессорной платформе; эти же факторы являются определяющими и в остальных случаях, как уже было отмечено выше.

ЛЕКЦИЯ 2 (17/02/02)

§3 Понятие вычислительного процесса и ресурса

3.1 Процессы и потоки

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

Последовательный процесс (иногда называемый задачей) – это выполнение отдельной программы с ее данными на последовательном процессоре.

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

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

Существуют разные трактовки понятия «процесс». Мы будем пользоваться следующей.

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

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

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

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

Эффект псевдопараллельной работы процессора достигается за счет выделения задачам квантов процессорного времени.

3.2 Ресурсы и их классификация

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

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

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

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

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

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

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

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

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

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

Рассмотрим основные виды ресурсов и способы их разделения.
  1. Одним из важнейших ресурсов является сам процессор, точнее, процессорное время. Процессорное время делится попеременно (параллельно). Существует множество методов разделения процессорного времени. Подробно эти методы рассмотрим в теме планирования и диспетчеризации задач.
  2. Второй вид ресурсов вычислительной системы – оперативная память, которая может быть разделена и одновременным способом (в памяти одновременно может располагаться несколько потоков), и попеременно (в разные моменты времени память может предоставляться для разных вычислительных процессов).
  3. Внешняя память (например, память на магнитных дисках) и доступ к ней считаются разными видами ресурса, каждый из которых может предоставляться независимо от другого. Но для полной работы с внешней памятью необходимо иметь оба этих ресурса. Собственно внешняя память может разделяться одновременно, а доступ к ней – попеременно.
  4. Внешние устройства, которые, как известно, также являются ресурсами, могут разделяться параллельно в случае, если используются механизмы прямого доступа. Если же устройство работает с последовательным доступом, то оно не может считаться разделяемым ресурсом. Например, принтером или накопителем на магнитной ленте невозможно воспользоваться попеременно двум параллельно выполняющимся потокам.
  5. Важным видом ресурсов являются программные модули, и прежде всего – системные программные модули.

Однократно используемые модули правильно выполняются только один раз (выполняются на этапе загрузки ОС) и являются неделимым ресурсом. Они обычно вообще не распределяются как ресурс системы.

Повторно используемые программные модули могут быть непривилегированными, привилегированными, реентерабельными и повторно входимыми.
  • Привилегированные программные модули работают при отключенной системе прерываний, т.ч. никакие внешние события не могут нарушить естественный порядок вычислений. После окончания своей работы данный модуль может быть вызван снова из другой задачи. Такой модуль выступает как попеременно разделяемый ресурс. В первой его секции выключается система прерываний, а в последней – снова включается.
  • Непривилегированные программные модули – обычные модули, которые могут быть прерваны во время своей работы. Их нельзя считать разделяемыми, поскольку после прерывания такого модуля его нельзя запустить еще раз из другого вычислительного процесса, т.к. промежуточные результаты для прерванных вычислений могут быть потеряны.
  • Реентерабельные (reenterable) программные модули допускают многократное прерывание своего исполнения и повторный их запуск из других задач. Они создаются таким образом, чтобы было обеспечено сохранение промежуточных вычислений в случае прерывания и возврат к сохраненным результатам при возобновлении процесса с прерванной ранее точки. Для этого могут использоваться статический или динамический способы выделения памяти под сохраняемые значения.
  • Повторно входимые (re-entrance) модули также допускают многократное параллельное использование, но, в отличие от реентерабельных, их нельзя прерывать. Они состоят из привилегированных секций (в которых запрещены прерывания) и имеют четко определенные точки входа. Они встречаются чаще реентерабельных.
  1. Информационные ресурсы, т.е. в качестве ресурсов могут выступать данные. Они могут существовать как в виде переменных, так и в виде файлов. Если потоки используют данные только для чтения, то такие информационные ресурсы можно разделять. Если же потоки могут изменять данные, то необходимо организовывать работу с ними особым образом. Более подробно этот вопрос будет рассмотрен позднее.

3.3 Состояния потока

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

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

Замечания

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

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

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

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

ЛЕКЦИЯ 3 (22/02/03)

Каждый поток за время своей жизни неоднократно переходит из одного состояния в другое в соответствии с алгоритмом планирования потоков, принятым в данной ОС.

Рассмотрим такой переход. (см. схему)

Т
олько что созданный поток готов к выполнению и стоит в очереди к процессору. Когда в результате планирования принимается решение об его активизации, он переходит в состояние выполнения (переход 1 на рисунке). В этом состоянии он находится до тех пор, пока либо он сам освободит процессор (завершится – переход 2 или перейдет в состояние ожидания какого-либо события – переход 3), либо будет приостановлен (переход 4) вследствие окончания отведенного ему кванта времени. В состояние готовности поток переходит из состояния ожидания после того, как ожидаемое им событие произойдет (переход 5).

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

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

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

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

3.4 Реализация понятия последовательного процесса в ОС

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

3.4.1 Описатель процесса

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

Примерами описателей процесса являются блок управления задачей TCB(Task Control Block) в OS/360, управляющий блок процесса PCB (Process Control Block) в OS/2, дескриптор процесса в UNIX, объект-процесс (object-process) в Windows NT.

В общем случае дескриптор процесса содержит следующую информацию:
  • идентификатор процесса (т.н. PIDprocess identificator);
  • тип (или класс) процесса, который определяет для супервизора некоторые правила предоставления ресурсов;
  • приоритет процесса, в соответствии с которым супервизор предоставляет ресурсы. В рамках одного класса в первую очередь обслуживаются более приоритетные процессы;
  • переменную состояния, которая определяет, в каком состоянии находится процесс (готовности, выполнения, ожидания);
  • защищенную область памяти (или адрес такой зоны), в которой хранятся текущие значения регистров процессора, если процесс прерывается, не закончив работы. Эта информация называется контекстом задачи;
  • информацию о ресурсах, которыми процесс владеет и/или имеет право пользоваться (указатели на открытые файлы и т.п.);
  • место (или его адрес) для организации общения с другими процессами;
  • параметры времени запуска (момент времени, когда процесс должен активизироваться, и периодичность этой процедуры).

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

В некоторых ОС количество описателей определяется жестко и заранее (на этапе генерации ОС или в конфигурационном файле, который используется при загрузке ОС), в других система может по мере необходимости выделять участки памяти под новые описатели. Например, в OS/2 максимально допустимое количество описателей задач определяется в конфигурационном файле CONFIG.SYS (например, THREADS=1024), а в Windows NT оно в явном виде не задается. Заметим, что здесь речь идет о количестве задач, под которыми понимают как собственно процессы, так и потоки этого процесса

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

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

Например, в микропроцессорах Intel 80x86, начиная с 80286, имеется специальный регистр TR, указывающий местонахождение TSS (task state segment – сегмент состояния задачи). Как правило, в современных ОС для этих микропроцессоров дескриптор задачи включает в себя TSS.

3.4.2 Последовательное выполнение программ

Воспользуемся простой, но достаточно полной для большинства случаев моделью.

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

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

Состояние машины в эти моменты определяется состояниями процессора и памяти. Состояние памяти определяется содержанием множества загруженных в память сегментов; состояние процессора – содержанием программируемых и внутренних регистров.

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

Активностью назовем состояние непрерывного выполнения одной процедуры.

Выполнение последовательной программы состоит из ряда активностей, или ряда активных состояний.

Контекстом активности назовем ту часть информации, которая доступна процессору во время данного активного состояния.

Этот контекст включает в себя контекст процессора (программируемые и внутренние регистры) и контекст памяти (сегмент-процедура, сегменты данных).

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

Примеры.
  1. Вызов и возврат из процедуры.

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

Для возврата схема действий симметрична, но с потерей контекста Q:
  • подготовка результатов, передаваемых из Q в P;
  • восстановление контекста P, сохраненного при вызове.
  1. Функционирование сопрограмм.

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

Активное состояние, возникающее при вызове процедуры P, получает в качестве исходного тот контекст, который сохранился со времени последнего вызова этой процедуры. При первом вызове процедуры необходимо определить начальное значение ее контекста. Пусть P – оставляемая сопрограмма, Q – возобновляемая сопрограмма. Последовательность замены (восстановления) контекста включает следующие этапы:
  • подготовка параметров, передаваемых из P в Q;
  • сохранение части контекста P для последующего возобновления;
  • восстановление контекста, хранимого со времени последнего обращения к Q (либо установка начального контекста при первом обращении).

3.4.3 Механизмы последовательного выполнения

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

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

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

Итак, в каждый момент времени среда, находящаяся в вершине стека, представляет среду процедуры P в процессе выполнения; непосредственно под ней представлена среда процедуры Q, которая вызвала P, и т.д. Стек управляется при помощи двух указателей:

Б
а)

б)
АЗА – указывает на первую ячейку стека среды активной процедуры;

ВЕРШИНА – указывает на первую свободную ячейку для создания новой среды.

а) до вызова P из Q;

б) после вызова P из Q.

Среда содержит следующую информацию:
  • сведения об участках хранения и связях, относящихся к возврату (указатель базы контекста вызывающей процедуры, адрес возврата и местоположение результата);
  • параметры (n+1 ячеек; в первой – само число n, в последующих – значения n параметров);
  • локальные переменные и рабочее пространство процедуры.

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

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

ЛЕКЦИЯ 4 (03/03/03)

Теперь рассмотрим контекст процессора.

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

Информация, содержащаяся в слове состояния, может быть распределена по трем группам:
  1. Информация о состоянии процессора.
    1. состояние выполнения. Процессор может находиться либо в состоянии выполнения инструкций (в активном состоянии), либо в состоянии ожидания, когда выполнение прекращается. Переход из активного состояния в состояние ожидания осуществляется загрузкой слова состояния или выполнением специальной инструкции; обратный переход происходит в результате прерывания.
    2. режим. В целях защиты выполнение некоторых инструкций зарезервировано только за программами ОС. Это реализуется введением двух режимов функционирования процессора, различающихся выделенным битом слова состояния: режим распорядителя (супервизора); режим исполнителя (программы). Инструкции режима супервизора называются привилегированными (инструкции ввода/вывода, по прерываниям и защите и т.п.).
    3. маски прерывания.
  2. Информация о доступном контексте в памяти и соответствующих правах доступа (таблицы сегментов, указатели защиты памяти и т.п.).
  3. Информация о ходе развития текущего активного состояния (условный код, порядковый счетчик).

Виды прерываний подробно рассмотрим позднее.