Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VSOS_2014.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.9 Mб
Скачать

Контрольные вопросы

  1. Поясните достоинства и недостатки монолитных систем.

  2. Приведите пример многоуровневой операционной системы.

  3. Приведите примеры использования виртуальных машин в современных операционных системах.

  4. Поясните преимущества схемы экзоядра.

  5. Модель клиент-сервер популярна в распределенных системах. Можно ли использовать ее также в однокомпьютерных системах?

  1. Процессы и потоки

    1. Концепция процесса

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

Процесс – это не просто выполняющаяся программа. Понятие процесса обычно включает:

  • программный код;

  • счетчик команд и содержимое системных регистров;

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

  • сегмент данных (для глобальных данных).

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

    1. Состояния процесса

Жизненный цикл процесса может быть разбит на несколько состояний. Различают следующие состояния процесса:

  • Новый (New). Процесс только что создан, но еще не готов к выполнению.

  • Выполняемый (Running). Команды процесса выполняются центральным процессором.

  • Ожидающий (Waiting). Процесс ожидает наступления некоторого события, например завершения ввода-вывода или поступления сигнала.

  • Готовый (Ready). Процесс готов к выполнению и ожидает освобождения центрального процессора.

  • Завершенный (Terminated). Процесс завершил свою работу, но еще не удален из системы.

Переходы между состояниями не могут быть произвольными и зависят от наступления тех или иных событий в системе. На рис. 6.1. приведена типовая диаграмма переходов для определения процесса.

Рисунок 6.9. Диаграмма переходов для состояний процесса

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

  • Created. Это состояние, в котором находится новый процесс, созданный функцией fork. Это переходное состояние, то есть процесс уже поступил в систему, но еще не готов к выполнению.

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

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

  • Ready to run. В этом состоянии процесс не занимает время центрального процессора, но готов к выполнению. Момент выхода из данного режима определяется ядром.

  • Sleeping. В этом состоянии процесс обычно ожидает наступления какого-либо события (например, завершения операции обмена с диском).

  • Preempted. Это состояние похоже на ready to run, однако, оно наступает только тогда, когда процесс находится в состоянии перехода от kernel mode к user mode, a ядро переключается на другую задачу.

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

  • Swapped sleeping. Процесс находится в состоянии покоя и переписан из основной памяти на диск, чтобы освободить часть памяти для текущих потребностей.

  • Zombie. Это – конечное состояние процесса. Он выполнил системный вызов exit() и более не существует. Однако запись о нем остаемся в таблице процессов до тех пор, пока его порождающий процесс не подтвердит его exit-состояние.

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