ВУЗ:
Составители:
Рубрика:
Лекция 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; Загрузить контекст процесса (текущий процесс^. адрес стека); Переключить контекст;
Страницы
- « первая
- ‹ предыдущая
- …
- 14
- 15
- 16
- 17
- 18
- …
- следующая ›
- последняя »