ACNews #56
12 сентября 2010

Программирование - Многозадачность в DNA OS.

<b>Программирование</b> - Многозадачность в DNA OS.
              Немного про новую концепцию Матрицы               
                            ьу ZET-9                            
                                                                
Сначала на всякий случай напомню, что MATRIX = система DNA +    
многозадачность, т.e. все дисковые запросы от приложений Матрицы
выполняются с помощью вызовов функций DNA. Так уже где-то с 2006
года.                                                           
                                                                
В последних версиях со старой концепцией 50 % процессорного     
времени выделялось на дисковые операции (процесс SYSTEM), 25 %  
на графическую подсистему (которая выводит текст на экран -     
процесс XWIND) и 25 % на все процессы, которые не спят. Это     
нехорошо - получается медленно, и видно, как обновляется экран. 
В новой концепции - упор на быструю работу с графическими       
функциями путём отказа от вытесняющей многозадачности (неполного
отказа - см. ниже) в пользу кооneративной многозадачности       
(только для процессов пользователя).                            
                                                                
В результате оно будет работать быстро следующим образом.       
                                                                
XWIND загружает новый процесс на адрес #C000 (страницу памяти   
просит у SYSTEM, открывает и читает файл процесса через SYSTEM),
берёт из заголовка адрес главного окна этого процесса и выводит 
его окно на экран. Далее XWIND отмечает в ячейке, что запущен   
процесс с номером PID таким-то и передаёт управление на #C000 - 
типа CALL INIT. Процесс выполняет инициализацию и возвращает    
управление. Если процесс не вернул управление, а уже наступило  
прерывание, то обработчик прерываний вызывает ФОНОВУЮ ЗАДАЧУ    
процесса XWIND, которая опрашивает клаву/мышь, перепечатывает   
курсор, потом проверяет и видит, что работает не XWIND, а       
процесс с номером PID. Она ставит флаг и запоминает PID         
отдельно, а при следующем прерывании проверяет PID, и если      
видит, что до сих пор работает тот же процесс, то она копирует  
сохранённыe регистры этого процесса в таблицу и меняет адрес    
возврата на вход в процедуру процесса XWIND. Далее опять рулит  
XWIND.                                                          
                                                                
При наведении курсора мыши на объект окна и нажатии             
левой/средней/правой (или просто клавиши на клавиатуре) XWIND   
проверяет, выполняется ли этот процесс (т.e. что он был прерван 
в прошлый раз). Если да, то даёт ему поработать (максимум два   
фрэйма, после чего он опять будет прерван). Если же процесс не  
выполняется, из заголовка окна берёт адрес процедуры обработки  
воздействия именно на данный объект окна - опять указывает в    
ячейке, что работает процесс с PID, кладёт в почтовый ящик      
процесса это событие (нажатие) и делает CALL ADR_RUTINE. Процесс
выполняет что надо и возвращает (или не возвращает) управление. 
Сразу после этого XWIND проверяет почтовый ящик процесса и      
выполняет запрос (если он есть) - например, загрузить файл.     
                                                                
Для загрузки файла (и вообще выполнения любых дисковых операций)
XWIND кладёт сообщение в почтовый ящик процесса SYSTEM. При     
приходе прерывания обработчик это проверяет и начинает          
переключать процессы (XWIND/SYSTEM) В результате каждому из них 
теперь даётся по 50 % процессорного времени. А раньше 100%      
времени давалось процессу XWIND, и он из своего времени давал   
поработать процессу пользователя.                               
                                                                
Когда процесс SYSTEM выполнил дисковую операцию, то он больше не
вызывается, и тогда XWIND опять работает 100 % времени          
(в которое входит и время работы процессов пользователя).       
Также XWIND может задать приоритет для процесса SYSTEM в виде   
количества фреймов (0..7), после которого переключатся на       
SYSTEM:                                                         
                                                                
0 - 100% работает SYSTEM, пока не загрузит всё, что надо        
1 - 50 %                                                        
3 - 25 %                                                        
7 - SYSTEM будет работать только каждый 8-й фрейм (это 12.5 %   
времени процессора)                                             
                                                                
Если вдруг юзер ничего не нажал и не двигал, то XWIND даёт      
выполняться прерванным процессам, по одному. И после каждого из 
них опять проверка на воздействие со стороны пользователя. Есть 
воздействие - берём из заголовка окна адрес и CALL ADR_RUTIN.   
Нет воздействия - запускаем (восстанавливая регистры) следующий 
прерванный процесс, если ещё есть.                              
                                                                
Ну а при нажатии за пределами окна этого (активного) процесса   
ему выдаётся сообщение: "процесс стал неактивным", а тому, на   
чьё окно нажали - "процесс стал активным", выводим это другое   
окно на передний план (без тормозов и переключений на другие    
процессы), и всё повторяется.                                   
                                                                
Вот так всё и будет происходить - в результате можно и фреймовый
скролл, и показ анимации, и быструю печать спрайтов через       
стек, поскольку фактически (при отсутствии дисковых запросов)   
работает только ОДИН процесс XWIND - который и два экрана может 
использовать, и режим 16 color. Единственное не знаю - насчёт   
цифрового звука: если его играть, то стрелка не будет двигаться,
или будет, но щелчки.                                           



Другие статьи номера:

Новости - nати 22 мая - "Волшeбный мир", Вeeр Тraсker, V9990, Нints.

Программирование - Многозадачность в DNA OS.

Железо - Про неисчерпаемые возможности NeoGS.

Errata старых публикаций - Ошибки и опечатки.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Музыкалка - Конкурс на лучшую демонстрашку.
Inferno - Об оболочке.
Реклама - Реклама и объявления.
Дискуссия - Истина. Звёзды склоняют, но не обязывают.
Хобби - рассказ Gendalf'a об увличении хоббитизмом: Я - оружейник (продолжение).

В этот день...   2 февраля