Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Processes - Metodicka (edited) with MPI - last....doc
Скачиваний:
59
Добавлен:
22.12.2018
Размер:
1.59 Mб
Скачать
      1. Аппаратный контекст.

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

      1. Системный контекст.

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

  • идентификатор родительского процесса

  • текущее состояние процесса

  • приоритет процесса

  • реальный и эффективный идентификатор пользователя-владельца

  • реальный и эффективный идентификатор группы, к которой принадлежит владелец

  • список областей памяти

  • таблица открытых файлов процесса

  • диспозиция сигналов, т.е. информация о том, какая реакция установлена на тот или иной сигнал

  • информация о сигналах, ожидающих доставки в данный процесс

  • сохраненные значения аппаратной составляющей (когда выполнение процесса приостановлено)

Поясним сказанное выше.

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

Рис. 8 Формирование контекста процесса.

    1. Аппарат системных вызов в oc unix.

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

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

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

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

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

Далее нами будут рассмотрены некоторые системные вызовы, предоставляемые ОС UNIX. К интересующим нас вызовам относятся вызовы

  • для создания процесса;

  • для организации ввода вывода;

  • для решения задач управления;

  • для операции координации процессов;

  • для установки параметров системы.

Отметим некоторые общие моменты, связанные с работой системных вызовов.

Большая часть системных вызовов определены как функции, возвращающие целое значение, при этом при нормальном завершении системный вызов возвращает 0, а при неудачном завершении -14. При этом код ошибки можно выяснить, анализируя значение внешней переменной errno, определенной в заголовочном файле <errno.h>.

В случае, если выполнение системного вызова прервано сигналом, поведение ОС зависит от конкретной реализации. Например, в BSD UNIX ядро автоматически перезапускает системный вызов после его прерывания сигналом, и таким образом, внешне никакого различия с нормальным выполнением системного вызова нет. Стандарт POSIX допускает и вариант, когда системный вызов не перезапускается, при этом системный вызов вернет –1, а в переменной errno устанавливается значение EINTR, сигнализирующее о данной ситуации.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]