12. - Управление работата на задачите: изпълнение, превключване, влагане, рекурсия, изобразяване в линейното и физическо адресно

В настоящата тема е описано управлението на работата на задачите: изпълнение, превключване, влагане, рекурсия, изобразяване в линейното и физическо адресно пространство.
Изпълнението на задача се назначава от софтуера или процесора по един от следните начини:
• Явно извикване на задача CALL инструкция
• Явно прескачане към задача чрез JMP инструкция
• Неявно извикване (от процесора) към задача, обработваща прекъсване
• Неявно извикване на задача, обработваща изключение
• Връщане към задача (чрез IRET инструкция), когато флагът NT в регистъра EFLAGS има стойност 1.

Всички изброени методи за назначаване (dispatching) на изпълнение на задача дефинират съответната задача със сегментен селектор, който сочи към TSS-gate, или към TSS на тази задача. При назначаване на задача за изпълнение чрез CALL или JMP инструкция, селекторът на инструкцията може да избере или директно TSS, или TSS-gate, който съдържа селектора на TSS. При назначаване на задача, обработваща прекъсване или изключение, IDT на прекъсването или изключението трябва да съдържа TSS-gate, който от своя страна да съдържа селектора на TSS на задачата, обработваща прекъсване или изключение.
Когато бъде назначено изпълнението на дадена задача, става автоматично превключване между текущо изпълняваната задача и новоназначената задача за изпълнение.
Ако текущо изпълняваната задача (извикващата задача) е извикала за изпълнение новоназначената задача, сегментният селектор на TSS на извикващата задача се съхранява в TSS на извиканата задача, за да се предостави обратна връзка (“link back”) към извикващата задача.
Превключването към дадена задача се осъществява в един от следните четири случая:
• Текущата програма, задача или процедура изпълнява JMP или CALL инструкция към TSS дескриптора в GDT на дадената задача.
• Текущата програма, задача или процедура изпълнява JMP или CALL инструкция към TSS-gate дескриптор в GDT или текущата LDT на дадената задача.
• Векторът на прекъсване или изключение сочи към TSS-gate дескриптор в IDT.
• Текущата задача изпълни IRET инструкция, при условие че флагът NT в регистъра EFLAGS има стойност 1.

При превключването към друга задача, състоянието на средата, в която се е изпълнявала текущата задача (състояние на задачата или още контекст на задачата) се запазва в TSS и изпълнението на задача се прекратява за някакъв период от време. След това информацията за предстоящата за изпълнение задача се зарежда в процесора и нейното изпълнение започва от инструкцията, сочена от вече зареденият регистър EIP на текущата задача.
Влагането (nesting) е понятие, което се използва, за да се укаже дали изпълнението на дадена задача е вложено в изпълнението на друга задача, тоест, дали е налице влагане на задачи. За тази цел се използва флагът NT в регистъра EFLAGS, като при наличие на такова влагане, в полето в TSS на текущата задача, което съдържа връзка към предходната задача, се записва TSS селекторът на задачата, в която е вложена текущата. При това, възможно е да има няколко нива на влагания, като при такова положение, в гореописаното поле на TSS селектора се записва TSS селектора на непосредствено по-високото ниво на влагане, а не на някое от по-високите.
Рекурсията (рекурсивно, повторно извикване на задача) е нежелателна ситуация. Тази ситуация се получава, тъй като TSS позволява съхраняване само на един контекст за всяка задача и поради това, при рекурсивно (повторно) извикване на дадена задача, би довело до загубване на съществуващия контекст на съответната задача. За да не се стига до такава ситуация, в сегментния дескриптор на TSS съществува флага, чрез който се указва дали дадената задача е в режим „busy”, тоест дали се намира във все още незавършен процес на изпълнение.
Изобразяването на задачите в линейното и физическо адресно пространство става по един от следните два начина:
• Използване на споделено адресно пространство между всички задачи. Когато механизмът за странициране не е задействан, това е единствената възможност. При това положение, всички линейни адреси се изобразяват в едни и същи физически адреси. Когато механизмът на странициране е задействан, тази форма на изобразяване се получава чрез използването на един каталог на страниците за всички задачи. Линейното адресно пространство може да надвишава достъпното физическо пространство, при условие че се поддържа използването на виртуална памет.
• Всяка задача има собствено линейно пространство, което се изобразява върху физическото адресно пространство. Тази форма на изобразяване се постига чрез използването на различен каталог на страниците за всяка от задачите. Тъй като управляващият регистър се зарежда при всяко превключване на задача, е възможно всяка да има различен каталог на страниците.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License