Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Процессы-ресурсы - теория.doc
Скачиваний:
10
Добавлен:
20.08.2019
Размер:
894.46 Кб
Скачать

175

Теоретические основы построения операционных систем

2. Теоретические основы построения операционных систем

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

  1. Процессы и ресурсы

Основными функциями операционных систем являются функции управления процессами и ресурсами в ВС, поэтому базовыми понятиями в теории операционных систем являются понятия процесса и ресурса.

2.1.1. Определение процесса

Понятия “процесс” и “процессор” неразрывно связаны друг с другом.

Термин “процесс” является базовым, но в то же время не имеет четкого определения. Неоднозначность в определении процесса объяснима: понятие процесса, являясь определенным видом абстракции, используется для обозначения единицы работы ВС с точки зрения операционной системы, для выполнения которой управляющая программа распределяет ресурсы ВС, поэтому для разных операционных систем определения процесса могут отличаться и даже в рамках одной операционной системы могут быть определены процессы разных уровней с различными свойствами.

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

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

Концептуальное единство программной и аппаратной частей ВС подразумевает и использование единой терминологии. В современных процессорах (в частности, Intel) существует понятие задачи, которое используется как эквивалент термину “процесс”. Поэтому в настоящее время вместо понятия мультипроцессность чаще используют понятие мультизадачность: так как архитектура Intel поддерживает возможность параллельного выполнения нескольких задач (каждая задача соответствует выполняемой программе), то термины параллельность и мультипрограммирование оказываются синонимами мультизадачности.

Определение задачи тесно связано с особенностями архитектуры процессоров Intel.

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

Виртуальный процессор моделируется с помощью реальных ресурсов ВС.

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

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

Каждая задача обладает своим собственным виртуальным адресным пространством и состоянием. Отделение адресных пространств различных задач реализуется в Intel через сегментацию памяти. Задачи изолируются друг от друга путем адресации локальной памяти каждой задачи через соответствующую ей таблицу LDT (Local Descriptor Table), содержащую дескрипторы всех сегментов памяти, распределенных данной задаче. Адресация таблицы во время выполнения задачи осуществляется через регистр LDTR, содержимое которого изменяется при переключении задачи.

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

  1. дескрипторы сегментов задач TSS (Task State Segment) и

  2. шлюзы задач (task gate - TG).

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

  1. сохранения содержимого всех регистров;

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

  3. сохранения адреса локальной таблицы дескрипторов задачи LDT, если для адресации локальной памяти задачи используется эта таблица;

  4. сохранение некоторой информации из оперативной памяти (содержимое этой информации определяется конкретными особенностями ОС: например, списка открытых задачей файлов и т.п.).

Это зафиксированное в момент переключения состояние задачи называется ее контекстом.

Так как контекст задачи зависит и от особенностей реализации мультизадачности в конкретной операционной системе, сегмент TSS, реализующий в процессорах Intel контекстную память, в которой хранится информация о состоянии задачи, когда она не выполняется на процессоре, состоит из двух частей: аппаратно поддерживаемой части (хранит содержимое всех сегментных регистров и регистров общего назначения процессора, регистра флагов, адрес очередной команды для рестарта задачи, адреса вершин стеков для трех уровней привилегий с нулевого по второй, ссылку на LDT задачи, ссылку на двоичную карту разрешения ввода/вывода и поле обратной связи, которое используется для реализации вложенных задач) и системно-зависимой части (дополнительная область в сегменте TSS, в которой может сохраняться специфическая информация о процессе, используемая операционной системой (например, список открытых файлов)). Копирование информации для аппаратно поддерживаемой части TSS выполняется автоматически при переключении задач, а для записи и считывания системно-зависимой части TSS необходимы дополнительные действия, выполняемые операционной системой.

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

Таким образом, задача для процессора Intel - это совокупность кода и данных, которым назначен сегмент TSS.

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

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

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

Если каждую подзадачу рассматривать как процесс, то управление их выполнением, переключение процессора с одной задачи на другую требует копирования большого объема информации. Кроме того, выполнение отдельных задач требует дополнительных затрат ресурсов на организацию их взаимодействия, если это необходимо, дублирования общей информации, реализации специальных механизмов для получения доступа к ней. Попытка снизить затраты при организации выполнения подзадач реализовалась в идее использования “легковесных” процессов - потоков или нитей.

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

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

Иногда в качестве синонима термину “поток” используют термин “легковесный процесс” (light-weighted process), так как затраты ресурсов на организацию потока (на его создание, запуск, останов и уничтожение) силами управляющего процесса значительно ниже по сравнению с обычными действиями ОС над полновесными процессами.

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

Организация многоуровневой схемы управления процессами показана на рис.2.1.