KnigaRead.com/

Александр Кручинин - Операционные системы

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Александр Кручинин, "Операционные системы" бесплатно, без регистрации.
Назад 1 ... 3 4 5 6 7 ... 9 Вперед
Перейти на страницу:

Рисунок 9 – Смена режимов при выполнении системного вызова: в классической архитектуре (а); в микроядерной (б)


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

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

Контрольные вопросы по разделу

1 Каковы две главные функции операционной системы?

2 Что такое многозадачность?

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

4 Какие из приведенных ниже терминов являются синонимами? привилегированный режим; защищенный режим; режим супервизора; пользовательский режим; реальный режим; режим ядра.

5 В чем состоят отличия в работе процессора в привилегированном и пользовательском режимах?

6 Какими этапами отличается выполнение системного вызова в микроядерной операционной системе и системе с монолитным ядром?

7 В чем состоят современные тенденции развития операционных систем?

8 Каковы преимущества и недостатки микроядерной архитектуры?

9 Для чего служат менеджеры ресурсов?

10 Кем и на какой операционной системе был впервые опробован дружественный графический интерфейс?

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

2.1 Процессы

В многозадачной системе процессор переключается между программами, предоставляя каждой от десятков до сотен миллисекунд. В каждый конкретный момент времени процессор работает только с одной программой, создавая иллюзию параллельной работы, т.е. псевдопараллелизм [14]. Настоящая параллельная работа присутствует в многопроцессорных и многоядерных системах, таких как Core 2 Duo. Следить за работой параллельно идущих процессов достаточно трудно, поэтому со временем разработчики операционных систем создали концептуальную модель последовательных процессов, упрощающую эту работу.

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

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

Существует четыре основных события, приводящие к созданию процессов:

• инициализация системы;

• выполнение изданного работающим процессом системного запроса на создание процесса;

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

• инициирование пакетного задания.

Программист для создания процесса в UNIX должен вызвать комбинацию из двух функций fork и execve, а в Windows – CreateProcess [12].

Процесс может завершиться благодаря одному из следующих действий:

• обычный выход (преднамеренно);

• выход по ошибке (преднамеренно);

• выход по неисправимой ошибке (непреднамеренно);

• уничтожение другим процессом (непреднамеренно).

Для завершения процесса программист в UNIX должен вызвать системный запрос kill, соответствующая функция в Win32 API – TerminateProcess.

Основным отличием структуры процессов в Windows и UNIX является связь между родительским и дочерним процессами. Так в UNIX существует иерархия процессов, а в Windows все процессы равноправны. Единственное, в чем проявляется что-то вроде иерархии процессов в Windows – создание процесса, в котором родительский процесс получает специальный маркер (так называемый дескриптор), позволяющий контролировать дочерний процесс. Но маркер можно передать другому процессу, нарушая иерархию.


Рисунок 10 – 4 программы в многозадачном режиме (а); модель 4 независимых последовательных процессов (б); в каждый момент времени активна только одна программа (в)


Процесс может находиться в 3 возможных состояниях (Рисунок 11):

• работающий (в конкретный момент времени использующий процессор);

• готовый к работе (процесс временно приостановлен, чтобы позволить выполняться другому процессу);

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


Рисунок 11 – Процесс может находиться в рабочем, готовом и заблокированном состоянии


Переходы между состояниями:

1) процесс блокируется, ожидая входных данных;

2) планировщик выбирает другой процесс;

3) планировщик выбирает этот процесс;

4) доступны входные данные.

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

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


Таблица 1 – Некоторые поля типичного элемента таблицы процессов


Большое значение для создания иллюзии многопоточности на компьютерах с одним процессором имеет значение понятия прерывания. Прерывание (англ. interrupt) – сигнал, сообщающий процессору о совершении какого-либо асинхронного события [14]. При этом выполнение текущей последовательности команд приостанавливается, и управление передаётся обработчику прерывания, который выполняет работу по обработке события и возвращает управление в прерванный код.

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

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

• адресное пространство – диапазон адресов виртуальной памяти, которым может пользоваться процесс;

• исполняемая программа и данные, проецируемые на виртуальное адресное пространство процесса.

2.2 Потоки

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

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

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

У каждого потока свой собственный стек. Стек (англ. stack – стопка) – структура данных с методом доступа к элементам LIFO (англ. Last In – First Out, «последним пришел – первым вышел») [14].

Назад 1 ... 3 4 5 6 7 ... 9 Вперед
Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*