Механизмы переключения контекстов.


 
 

 

 


активная задача знает более сложные механизм,

в какой момент осуществляется чем у синхронных

переключение, т.е. это переключение генерирует сама задача

       
   
 

 


Замечания: любая задача, попадая на уровень ядра приобретает статус процесса; каждому процессу сопоставляется стек, в который записываются данные, соответствующие контексту этого процесса; далее при работе процесса поддерживается обновление стека информацией; это позволяет заморозить/разморозить задачу.

 

Существуют 2 пути:

1) полностью написать эту систему;

2) использовать программный трюк, который позволял бы использовать возможности однопользовательской ОС для создания многопользовательской ОС.

 

Вызов подпрограммы:

В однопользовательских ОС имеется всего один стек для выполнения программ.

2 требования к организации подпрограммы:

1) параметры процедуры передаются по значению, а обратно передается результат;

2) процедуры могут вызываться рекурсивно в явном виде или неявном.

 

Пусть есть 2 подпрограммы:

 

P (основная программа) Q (вызываемая программа)

 

Для программы P:

- подготавливаются параметры для передачи;

- сохраняется контекст программы для возвращения;

- замена контекста P на контекст Q.

 

Для программы Q:

- подготавливаются параметры для ее контекста;

- замена контекста Q на контекст P.

 

Примечание: параметры передаются через стек.

 

           
     
В SS:SP ® CS:IP
 
Состояние стека
 
 

 


Попрограмма(x, y), например, Pascal, а в Си – наоборот

 

При дальнем вызове до y в Pascal’e:

mov ax, [bp+6] ; 4 байта – дальний вызов (сегмент и смещение)

bp+2 – первый адрес

Замечание:

1) не всегда удобно использовать переменные (лучше использовать указатель на эту переменную); если используется указатель на переменную, то необходимо помнить:

 

les si, ук_х ; ES:SI – CS и ES:[SI+2] - IP

 

2) a) Pascal запоминает все РОНы (РОН – Регистр Общего Назначения);

б) Си запоминает только те регистры, которые участвуют в подпрограмме;

в) Assembler вообще ничего не запоминает.

 

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

 

Вызов сопрограммы:

 

2 сложности (проблемы):

1) окончание подпрограммы, имеющей статус сопрограммы;

 

           
   
     
( схема окончания работы подпрограммы в стеке на языке Assembler)
 
ENDP
 
 

 

 


2) сохранение контекста каждой сопрограммы (где-нибудь в ядре) и развитие изменения контекста каждой сопрограммы;

 

                       
 
Задача 1
 
Задача 2
 
Задача 3
 
       

 

 


CS:IP

Пусть мы написали 2 функции:

1) создание нового процесса;

 

Дескриптор – указатель на область памяти, где хранятся данные о контексте.

 

2) переключение от “старого” процесса к “новому” (дескр_стар, дескр_нов);

ее подфункции:

а) модернизация точки возврата “старого” процесса;

б) переключение на “новый” процесс;

 

@ - точка возврата

 

@ находится по адресу SS:SP

 

       
 
 
 
1 дескриптор
 
2 дескриптор