Автоматизация Автоматизация Архитектура Астрономия Одит Биология Счетоводство Военна наука Генетика География Геология Държавна къща Друга журналистика и средства за масова информация Изкуство Чужди езици Компютърни науки История Компютри Компютри Кулинарна култура Лексикология Литература Логика Маркетинг Математика Механика Механика Мениджмънт Метал и заваръчна механика Музика Население Образование Безопасност на живота Охрана на труда Педагогика Политика Право инструмент за програмиране производство Industries Психология P Дио Религия Източници Communication Социология на спорта стандартизация Строителство Технологии Търговия Туризъм Физика Физиология Философия Финанси Химически съоръжения Tsennoobrazovanie скициране Екология иконометрия Икономика Електроника Yurispundenktsiya

Функции на централизиран мениджър на прекъсванията, използвайки примера на Windows NT

Прочетете още:
  1. II. Основни задачи и функции
  2. III. Тема, метод и функция на философията.
  3. Текст Б: WINDOWS 95
  4. Windows
  5. Windows 95.
  6. Windows 9x / NT
  7. XVIII. ПРОЦЕДУРИ И ФУНКЦИИ
  8. А) ПРЕХВЪРЛЯНЕ В РУСКИ ЕЗИК ФУНКЦИИ НА ЧЛЕНОВЕТЕ
  9. А. Средната квадратна грешка на функция от измерените величини.
  10. Обобщени класове и чисти виртуални функции. Виртуални деструктори. Приятелски функции. Приятелски класове.
  11. Адаптивни функции
  12. Администратори на съдилища, техните функции

Някои процесори или хардуерни прекъсвачи в компютъра поддържат приоритета на заявките за прекъсване. Например, в процесорите MIPS има няколко нива на искания за хардуерни прекъсвания и няколко нива на заявки за програми. Процесорът има вътрешна променлива, наречена нивото на прекъсване на процесора. Прекъсването се осъществява само когато нивото на заявката за прекъсване е по-високо от текущото ниво на прекъсване на процесора. Също така има привилегирована инструкция, с която кодът на ядрото на OS може да промени нивото на прекъсванията на процесора. Необходимите заявки за прекъсване трябва да се съхраняват в контролерите на устройството, за да се избегне изгубването им и да се изчака за поддръжка, когато нивото на прекъсване на процесора намалее, когато приключи по-спешната работа. Когато работите на този вид хардуерна платформа, OS може да използва вградения процесор, за да даде приоритет на прекъсванията, за да опрости тяхната обработка. Обаче такива инструменти не са достъпни за всички процесори, например фамилните процесори на Pentium не разполагат с вградена променлива, за да определят нивото на прекъсванията на изпълнимия код - хардуерните прекъсвания могат да бъдат напълно забранени или напълно разрешени (и най-критичните не могат да бъдат забранени изобщо).

За да се премахне зависимостта от хардуерната платформа, някои операционни системи въвеждат свои собствени софтуерни прекъсващи приоритетни системи. Пример за такава операционна система е Windows NT.

Мениджърът за прекъсвания на Windows NT (т.нар. Trap Handler) работи със софтуер за прекъсване на модела, който е разпространен във всички хардуерни платформи, поддържани от Windows NT. Всички източници на прекъсване (хардуер и софтуер, както и някои важни изключения за системата, например грешки с грешка на шината) се разделят на няколко класа, а на всеки клас се назначава IRQL ниво на заявка за прекъсване. Операционната система програмно поддържа вътрешна променлива, наречена IRQL на кода, изпълняван от процесора, който по свой начин съответства на нивото на прекъсване на процесора. Ако процесорът, на който работи операционната система, поддържа такава променлива, той се използва и IRQL на изпълнимия код е присвоен към него, в противен случай съответните функции на процесора са емулирани програмируемо.



Общата схема за планиране на прекъсване на обработката се показва в Windows NT, както следва. Когато сигналът за заявка за прекъсване / изключение е въведен в процесора, се извиква мениджърът на прекъсванията, който помни информацията за източника на прекъсване и анализира неговия приоритет. Ако приоритетът на заявката е по-малък или равен на IRQL на прекъснатия код, тогава услугата на тази заявка се отлага и данните за заявката се поставят в съответната опашка на заявката, след което се извършва бързо връщане към прекъсвания интерфейс. Когато преработката с висок приоритет се обработва, управлението се връща на мениджъра за прекъсвания, който разглежда опашките на чакащите прекъсвания и избира най-висок приоритет от тях. В този случай нивото на IRQL спада до нивото на избраното прекъсване.

Ако заявката има по-висок приоритет от IRQL на текущия код, текущият манипулатор за прекъсване се изтегля и се поставя в опашката, съответстваща на неговата стойност IRQL, а контролът се предава на новия манипулатор в съответствие с заявката IRQL. След това нивото на IRQL на процесора е равно на нивото на IRQL на заявката, приета за изпълнение.

По този начин заявката за прекъсване винаги се получава от мениджъра на прекъсванията, независимо от текущия IRQL на изпълнимия код, но мениджърът на прекъсванията не го предава на подходящата рутинна процедура за прекъсване, но го поставя в опашката на програмата за заявки, ако понастоящем се изпълнява процедура за прекъсване на по-голям приоритет. Операционната система има пълен контрол над ситуацията, като не позволява на контролерите на I / O устройства да вземат решения за напредъка на изчислителния процес.

В Windows NT най-ниското ниво на IRQL съответства на нормалните теми, зададени за изпълнение от ръководителя на нишки (виж фигура 4.13). Това е малко предположение, тъй като кодът на конеца започва да се изпълнява от процесора не като резултат от искане за прекъсване, но това предположение работи добре, тъй като позволява всяка "реална" заявка за прекъсване на кода на нормален поток.

‡ Зареждане ...

Фиг. 4.13. Разпространение на прекъсванията в Windows NT

Най-високото ниво в йерархията на IRQL се присвоява на такива важни събития като изключване на грешка в шината и други тежки хардуерни повреди, след което има заявка за прекъсване на захранването и заявка за прекъсване на междупроцесорния процес.

Прекъсванията от външни устройства заемат междинни нива на IRQL. Специфичната връзка между приоритетите на външните устройства се определя от приоритетите, определени от хардуерната платформа, например нивото на IRQ на PCI шина, присвоена на устройството.

Специална роля в работата на компютърната система играе системният таймер: въз основа на прекъсванията му се актуализира системният часовник, който определя следващия момент на разговорите на часовника, времето, когато контролното действие се изпълнява от потока в реално време и много повече. С оглед на значението на незабавната обработка на таймерите прекъсва, дава на Windows NT много високо ниво на приоритет - по-високо от нивото на всяко I / O устройство.

В системната система за прекъсване на системите за прекъсване се разпределят няколко опашки, за да се поддържат предстоящи прекъсвания.

Софтуерните прекъсвания, които обслужват системни повиквания от приложения, се изпълняват с по-ниско ниво на приоритет, което съответства на концепцията за продължаване на същия процес, но само във фазата на системата, когато се изпълнява системното повикване. Но за прекъсванията на софтуера, произтичащи от основните модули на операционната система, се задава по-високо ниво на заявките, което има двойно име "диспечерство / DPO.

Това ниво на приоритет се нарича диспечерен слой, защото в тази опашка се поставят програмните заявки, които причиняват поставянето на ръководителя на нишките. Често при обработката на прекъсвания с висок приоритет възниква ситуация, която изисква разсрочване на потоците. Например, когато обработвате друго прекъсване от таймер, трябва да проверите дали квантовото разпределение на текущия поток е изчерпано. Друг пример е обработката на прекъсване от дисковия контролер след приключване на операцията на диска, което може да изчака няколко теми. Във всички подобни ситуации в Windows NT, планиращият / диспечера се нарича от процедурите на ядрото на високо ниво не директно чрез извикване на процедурата, а косвено чрез софтуерно прекъсване. Това прави възможно отделянето на кратка, но бързо реагираща система, процедурата за обслужване на прекъсване с висок приоритет (например, увеличаване на системния часовник) от по-малко критична операция за разсрочване на потребителските нишки. Прякото обаждане до ръководителя на планирането / ръководството на нишки не би позволило подобна възможност и критичните искания за прекъсване от контролерите на I / O устройства ще трябва да чакат часовника да работи. В този случай планиращият може да е избрал да изпълни друга нишка, ако е работила след процедурите за поддръжка на хардуерното прекъсване, тъй като щеше да получи нова информация за завършването на някои входно-изходни операции. Поставянето на повикване на команден елемент в опашката ви позволява да го изпълнявате само в ситуации, при които в системата няма висящи искания за хардуерно прекъсване.

Отделянето на отделен слой за планиращия / ръководството на нишки не означава, че той винаги се нарича от софтуерни прекъсвания. Когато се извиква от код, който има ниско ниво на искане за прекъсване (ако се изпълнява, тогава няма заявки за прекъсване с висок приоритет), плановикът може да бъде извикан по-бързо чрез директно вътрешносегментно обаждане. Например, системното повикване, което отнема нишка от собствена воля в чакащо състояние, няма смисъл да се обаждате на програмата за подреждане на конеца чрез софтуерно прекъсване.

Второто име на диспечерското ниво, DPC, което е съкращение за "Отменено процедура", показва, че на това ниво очакват повиквания в чата и други процедури на OS, а не само scheduler / dispatcher. Оперативните процедури на операционната система могат да се призовават един към друг директно, но при многопластовата конструкция на ядрото има все по-малко приоритетни процедури и призоваването на процедури с по-нисък приоритет от по-висок приоритет, използвайки механизма за прекъсване на софтуера, позволява, както в случая на часовника, оптимизира работата на операционната система като цяло. Примери за операционни процедури, работещи на ниво с висок приоритет, са тези части на драйверите на I / O устройства, които извършват кратки, но критични за времето действия. В същото време има и други части на водачите, които извършват по-неотложна, но по-обширна работа. В Windows NT такива части на драйверите са проектирани като рутинни процедури, наречени от програмните прекъсвания на ниво "dispatch / DPC" (VROprotsedury), а самото прекъсване на софтуера изпълнява критичната част на драйвера. Разбира се, има и други OS модули, проектирани по този начин.

Описаната софтуерна реализация на услугата за приоритетно прекъсване води до същата операция на Windows NT на различни хардуерни платформи, което опростява логиката на операционната система и нейното прехвърляне към нови платформи. Негативно следствие от този централизиран подход е известно забавяне в работата с прекъсванията, тъй като вместо директно прехвърляне на контрол върху драйвер на устройство или манипулатор за изключения, се осъществява повикване към определен прекъсвач - мениджъра на прекъсванията. OS на семейството на UNIX възприема подобен, но по-малко централизиран подход към обработката и обработката на опашките за прекъсване. Вместо един-единствен мениджър за прекъсване, функциите му изпълняват процедури, които обслужват всеки клас приоритет на прекъсване. Независимо от това, в почти всички съвременни операционни системи съществува общ подход за нареждане на обработката на прекъсванията, дължащи се на тяхното многостепенно приоритизиране и поддържане на опашката.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |


Когато използвате този материал, свържете се със bseen2.biz (0.078 сек.)