Организация вычислительных процессов. Конспект лекций по дисциплине "Системы реального времени". Степанов Б.М. - 16 стр.

UptoLike

Составители: 

Лекция 7. Создание и уничтожение процессов
В отличие от рассмотренных ранее специальных систем, в системах общего назначе-
ния количество процессов в каждый момент времени может изменяться, т.е. могут появлять-
ся новые процессы и могут уничтожаться закончившиеся процессы.
Создание процессов может выполняться:
а) как при обработке шага задания;
б) так и пользователем, которому предоставляются специальные примитивы создания
и уничтожения процессов.
Рассмотрим оба случая:
1) Допустим, что рассматривается однопользовательская операционная система (для
персональных компьютеров).
В такой системе пользователю обычно предоставляется право создавать процесс, но
не предусматривается возможность уничтожения процесса, т.е. все процессы уничтожаются
при завершении сеанса работы.
2) Если система многопользовательская (системы с разделением времени), то необхо-
димо предусмотреть примитивы создания и уничтожения процессов. Например, уничтоже-
ние должно выполняться по завершению шага задания.
1-й случай:
Создание процессов предполагает, что должны быть известны начальный адрес про-
граммы и адрес стека программы.
Программа должна построить дескриптор для нового создаваемого процесса, запол-
нить его и включить в список процессов и активизировать новый процесс. При этом необхо-
димо условиться, в какое место списка включить процесс. Условимся, что при круговом спо-
собе организации списка новый процесс должен включаться всегда перед текущим.
Procedure
Создать процесс (новый адрес процесса: процесс; новый адрес стека : адрес);
Var
r, r1 : связь;
Begin
r:= текущий процесс;
while
r^. следующий <>текущий процесс do
r:= r^. следующий;
{Цикл поиска дескриптора процесса, ссылающегося на текущий процесс}
New (r1);
{Создание динамической переменной типа дескриптор. Ссылка на него в r1}
r1^. следующий := текущий процесс;
r1^. Следующий := r1;
{Включение нового дескриптора в список процессов перед дескриптором, на который ука-
зывает текущий процесс}
r1^. адрес процесса := новый адрес процесса;
r1^. адрес стека := новый адрес стека;
r1^.состояние := false;
r1^.сигнал :=true;
{Перевод процесса в активное состояние}
Передать контекст процесса (текущий процесс^. адрес стека);
Текущий процесс := r1;
Загрузить контекст процесса (текущий процесс^. адрес стека);
Переключить контекст;
Лекция 7. Создание и уничтожение процессов

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

Procedure Создать процесс (новый адрес процесса: процесс; новый адрес стека : адрес);
Var
         r, r1 : связь;
Begin
        r:= текущий процесс;
        while r^. следующий <>текущий процесс do
r:= r^. следующий;

{Цикл поиска дескриптора процесса, ссылающегося на текущий процесс}

New (r1);

{Создание динамической переменной типа дескриптор. Ссылка на него в r1}
r1^. следующий := текущий процесс;
r1^. Следующий := r1;
{Включение нового дескриптора в список процессов перед дескриптором, на который ука-
зывает текущий процесс}
r1^. адрес процесса := новый адрес процесса;
r1^. адрес стека := новый адрес стека;
r1^.состояние := false;
r1^.сигнал :=true;
{Перевод процесса в активное состояние}
Передать контекст процесса (текущий процесс^. адрес стека);
Текущий процесс := r1;
Загрузить контекст процесса (текущий процесс^. адрес стека);
Переключить контекст;