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