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

UptoLike

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

Лекция 2. Управление процессами
Обычно управление процессами, т.е. выбор процесса и активизацию осуществляет
системная программа «диспетчер».
Для связи пользователя с этой программой создаются специальные процедуры, кото-
рые называютсяпримитивами диспетчера. Для запуска подпрограммы традиционно ис-
пользуется 2 средства : оператор перехода goto и обращение к подпрограмме. Если обраще-
ние к подпрограмме выполняется с помощью прерывания, то такая подпрограмма называется
примитивом”. Поскольку при таком обращении может происходить переключение режима
(пользователя, системного процесса, супервизора).
Переключение процессов
Допустим, выполняется некоторый процесс Р. В некоторый момент времени он обра-
щается к диспетчеру с помощью примитива, сообщая, что он закончил свою работу. В этом
случае должно производиться переключение контекста: «выполняемый процесс» – «диспет-
чер». Диспетчер должен выбрать следующий процесс, который он активизирует и осуществ-
ляет второе переключение контекста, т.е. запомнить контекст диспетчера и восстановить
контекст нового процесса. Стек является наилучшим вариантом реализации хранения кон-
текста.
При вызове вложенных подпрограмм осуществляется запись контекста вызываемой
подпрограммы в стек, а при возврате происходит восстановление контекста (обязательно в
обратном порядке по отношению к запоминанию).
Если используется произвольный порядок, то контекст может оказаться недоступным
(не находится в вершине стека).
Процессы отличаются от подпрограмм тем, что они могут активизироваться, в общем
случае, в произвольном порядке. Поэтому вместо того, чтобы использовать один стек для
сохранения всех контекстов используют отдельный для каждого процесса.
Если ориентироваться на систему со многими стеками для каждого процесса, то деск-
риптор процесса должен включать указатель на стек процесса.
type
связь = ^дескриптор;
связь1 = ^процесс;
связь2 = ^стек;
дескриптор = record;
следующий: связь;
адрес программы : связь1;
адрес стека: связь2;
end
Теперь имеем 3 поля :
При входе в диспетчер переключение контекста необходимо, но при выходе из дис-
петчера контекст можно было бы не сохранять, считая, что диспетчер всегда заканчивает ра-
боту путём задания контекста нового процесса. Однако мы примем общий механизм пере-
ключения контекста, который применим для существующих переключений.
адрес стека
адрес про-
граммы
следующий
Лекция 2. Управление процессами

       Обычно управление процессами, т.е. выбор процесса и активизацию осуществляет
системная программа «диспетчер».
       Для связи пользователя с этой программой создаются специальные процедуры, кото-
рые называются “примитивами” диспетчера. Для запуска подпрограммы традиционно ис-
пользуется 2 средства : оператор перехода goto и обращение к подпрограмме. Если обраще-
ние к подпрограмме выполняется с помощью прерывания, то такая подпрограмма называется
“примитивом”. Поскольку при таком обращении может происходить переключение режима
(пользователя, системного процесса, супервизора).

Переключение процессов

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

type   связь = ^дескриптор;
       связь1 = ^процесс;
       связь2 = ^стек;
       дескриптор = record;
       следующий: связь;
       адрес программы : связь1;
       адрес стека: связь2;
end

       Теперь имеем 3 поля :
                               следующий
                                   адрес про-
                                    граммы
                               адрес стека


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