Edu Doc

КАТЕГОРИЯ:


Астрономия- (809) Биология- (7483) Биотехнологии- (1457) Военное дело- (14632) Высокие технологии- (1363) География- (913) Геология- (1438) Государство- (451) Демография- (1065) Дом- (47672) Журналистика и СМИ- (912) Изобретательство- (14524) Иностранные языки- (4268) Информатика- (17799) Искусство- (1338) История- (13644) Компьютеры- (11121) Косметика- (55) Кулинария- (373) Культура- (8427) Лингвистика- (374) Литература- (1642) Маркетинг- (23702) Математика- (16968) Машиностроение- (1700) Медицина- (12668) Менеджмент- (24684) Механика- (15423) Науковедение- (506) Образование- (11852) Охрана труда- (3308) Педагогика- (5571) Полиграфия- (1312) Политика- (7869) Право- (5454) Приборостроение- (1369) Программирование- (2801) Производство- (97182) Промышленность- (8706) Психология- (18388) Религия- (3217) Связь- (10668) Сельское хозяйство- (299) Социология- (6455) Спорт- (42831) Строительство- (4793) Торговля- (5050) Транспорт- (2929) Туризм- (1568) Физика- (3942) Философия- (17015) Финансы- (26596) Химия- (22929) Экология- (12095) Экономика- (9961) Электроника- (8441) Электротехника- (4623) Энергетика- (12629) Юриспруденция- (1492) Ядерная техника- (1748) Arhitektura- (3434) Astronomiya- (809) Biologiya- (7483) Biotehnologii- (1457) Военни бизнесмен (14632) Висока technologies- (1363) Geografiya- (913) Geologiya- (1438) на държавата (451) Demografiya- ( 1065) Къща- (47672) журналистика и смирен (912) Izobretatelstvo- (14524) външен >(4268) Informatika- (17799) Iskusstvo- (1338) историята е (13644) Компютри- (11,121) Kosmetika- (55) Kulinariya- (373) културата е (8427) Lingvistika- (374) Literatura- (1642) маркетинг-(23702) математиците на (16968) Механична инженерно (1700) медицина-(12668) Management- (24684) Mehanika- (15423) Naukovedenie- (506) образователна (11852) truda- сигурност (3308) Pedagogika- (5571) Poligrafiya- (1312) Politika- (7869) Лево- (5454) Priborostroenie- (1369) Programmirovanie- (2801) производствено (97 182 ) индустрия- (8706) Psihologiya- (18388) Religiya- (3217) Svyaz (10668) Agriculture- (299) Sotsiologiya- (6455) на (42831) спортист строително (4793) Torgovlya- (5050) транспорт ( 2929) Turizm- (1568) физик (3942) Filosofiya- (17015) Finansy- (26596) химия (22929) Ekologiya- (12095) Ekonomika- (9961) Electronics- (8441) Elektrotehnika- (4623) Мощност инженерно ( 12629) Yurisprudentsiya- (1492) ядрена technics- (1748)

Работа с прекъсвания и изключения




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

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

Изключение (изключение) - това е синхронен състояние, което възниква в резултат на някаква инструкция. Изключения са възпроизведени чрез повторно извършване на същото предаване на едни и същи данни в същите условия. Примери за изключения - нарушение защита на паметта, някои отстраняване на грешки команди и деление на нула грешка. NT ядрото разглеждат като изключителни предизвикателства на системни услуги (макар капани технически тази система).

Trap манипулатор. Терминът капан (капана) е обозначен с механизма, използван от процесора (в случай на прекъсване в изпълняващата конец или изключения) да се намеси контрол, преминаване от режим на потребителя да режим на ядрото и прехвърли контрола на фиксирана точка на операционната система. В Windows NT, процесорът предава NT ядрото капан управлението на манипулатор. Този модул служи като кръпка панел; Той се прави изключение и да се прекъсне, генериран от процесора, и предава управлението обработка код, съответстващ ситуация.

Фиг. 2.13. Разпределението на прекъсвания и изключения

Прекъсване се генерира като входно / изходно устройство, и на ядрото може да предизвика софтуер прекъсване. Фиг. 2.13 показва условия, водещи до активиране на манипулатор капан, и модулите, че е за лечение на тези състояния. По време на неговия призив за манипулатор капан забранява прекъсва и записва състоянието на машината. Той създава капан рамка (капан кадър), който поставя информацията за състоянието на потока от прекъснат изпълнение. Тази информация ще позволи на ядрото да възобнови притока на изпълнение след прекъсване или изключение. Все капан е подмножество на пълна контекста на потока.

Когато има прекъсване от устройството, след което управлението се предава на рутинна работа прекъсване (рутинни прекъсват услуга, ISR), предоставена от водача на устройството. Ако прекъсването настъпили в резултат на повикване система обслужване, трансфери капан манипулатор контролират с услугата код система в изпълнителната NT. Останалите изключенията се обработват от ядрото диспечерски собствени изключенията.



Прекъсване разпределение. Прекъсването се генерират от хардуер, идват от I / O устройства, които са длъжни да уведомяват процесора на необходимостта от тяхното обслужване. Устройства, способни да генерират прекъсва, операционни системи позволяват максимално натоварване на процесора чрез комбиниране на изчисление, времето и I / O операции. Процесорът започва операция на I / O на устройството, и изпълнява и други теми, докато се извърши прехвърлянето на данни. Когато устройството е завършил обмен, тя генерира прекъсване за извършване на поддръжка. Координира устройства, принтери, клавиатури, дискове и мрежови карти обикновено генерират прекъсва. Софтуерът на системата може да генерира прекъсва.

На прекъсване манипулатор реагира подмодул ядрото капан прекъсват контролер. Тя идентифицира източникът на прекъсване и трансфери контрол или комбинация външно прекъсване услуга (ISR), или вътрешна процедура ядро. Драйверите за устройствата осигуряват ISR за обслужване прекъсва от устройства и ядрото съдържа процедури за поддръжка на други видове прекъсва.

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

Ядро определя набор от преносими на IRQL, които могат да бъдат променени, ако този процесор има специални възможности, свързани с прекъсване (например, втори таймер). Прекъсвания се обслужват по реда на приоритета. нива IRQL от най-старшият на първия IRQL устройство запазени за хардуерни прекъсвания; Прекъсване нива Dispatch / DPC и APC - софтуерен прекъсват, генерирани от ядрото. Долната IRQL наистина не е на нивото на прекъсването - тя принадлежи към нормалния поток на изпълнение, в които са активирани всички прекъсва.

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

Фиг. 2.14. маскиране прекъсват

режима на ядрото Feed подобрява IRQL процесор, където тя се изпълнява, в зависимост от това, което в момента се опитваме да направим. Например, когато възникне прекъсване, водачът капан (или евентуално процесора) процесор IRQL понижава до ниво, определен източник на прекъсване. Това блокира всички прекъсва това и по-ниски нива (само за този процесор) и гарантира, че прекъсването на услугата на процесора няма да бъдат заловени толкова важно прекъсване. Маскирани прекъсва се обслужват или друг процесор, или отложени до IRQL капки. Промяна на IRQL на процесора - мощна операция, която трябва да се извършва с голямо внимание. Потоци потребителски режим не може да промени процесор IRQL.

Всеки прекъсване ниво има определена цел. Ядрото генерира interprocessor прекъсване (IPI), за да поиска от другата процесор извърши действие, като за насочване на потока до определена производителност или опресняване на кеша буфер препратка превод (TLB). таймер система генерира прекъсване на предварително определени интервали от време, и основните процеси на обновяване на текущата стойност на часа и измерване на потока по време на изпълнение. Ако процесорът поддържа дву-таймер, ядрото, добавя още един слой на прекъсване таймер за измерване на резултатите. Ядрото определя прекъсва ниво устройство, броят на които зависи от конфигурацията на процесор и система. Софтуер за прекъсване нива IRQL Dispatch / DPC и APC, използвани от ядрото да започне планирането на потока и асинхронни смущения в потока на изпълнение на процеса.

Прекъсване Processing. Когато възникне прекъсване, манипулатор капан спестява състоянието на машината и причинява прекъсване контролер. Последно моментално увеличава процесор IRQL до нивото на прекъсване източник за да се прикрие прекъсва това и по-ниски нива по време на обработка.

NT използва за търсене на маса дадено прекъсване разпределение манипулатор прекъсване (прекъсване изпращане на маса, IDT). Таблицата с индекс е IRQL източник прекъсване и входовете на таблицата показват съчетания прекъсване на услуги (фиг. 2.15).

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

Фиг. 2.15. прекъсване на услугата

Повечето от прекъсване съчетания услуги, намиращи се в ядрото. Kernel актуализира системата време и изпълнява изключване за прекъсване на захранването на системата. Много прекъсва, генерирани от външни устройства, както и водачите казва на ядрото, каква процедура да се обадите в случай на прекъсване на съответните устройства.

Ядрото осигурява преносим механизъм - обектно-прекъсване (прекъсване обект), която позволява на водачите да се регистрират на ISR за своите устройства, съдържащ цялата информация, необходима на ядрото, за да обвърже устройството ISR с определено ниво на прекъсване. Тя включва адреса на ISR, IRQL устройство и въвеждане на IDT - ядро, което трябва да бъде свързана с ISR. Свързването прекъсват рутинни услуги с някои прекъсват ниво се нарича обекта връзка прекъсва (свързване прекъсване обект), а изключване от входа IDT - инвалидизиращи обект прекъсва (разединяване прекъсване обект). Тези операции са извършени от едно повикване за функцията на ядрото, позволи на драйвера на устройство ", за да включи" на ISR, когато тя е заредена в системата и след това "забраните", ако той се разтоварва.

Използването на обектно-прекъсване за регистрация ISR позволява шофьори не работят директно с хардуерно прекъсване, което е различно за различните процесорни архитектури, и елиминира нуждата да се знае подробностите на масата за прекъсване разпределение. Това означава, че ядрото спомага за създаването на преносими драйвери на устройства, тъй като тя елиминира необходимостта от програмиране на асемблер или отражение в различията на устройството шофьор между процесорите.

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

Софтуер прекъсва. Докато повечето хардуерно прекъсване се генерира, NT ядрото също генерира софтуер прекъсва за свои собствени цели. Те са:

· Откриване на конци график;

· Обработка интервал таймер изтече;

· Асинхронни процедури за изпълнение в рамките на определения нишка;

· Asynchronous I / O подкрепа.

Следващото описание на съответните задачи.

Диспечерски прекъсва. Едно от местата, където ядрото използва софтуер прекъсва - потоци мениджър. Когато потокът вече не може да се извърши, ядрото призовава диспечер, за да превключите контекст веднага. Въпреки това, понякога ядрото открива необходимостта от повторно планиране, когато тя е дълбоко под няколко пласта код. В тази ситуация, идеалното решение би било да поискат план, но отложи изпълнението му, докато ядрото е завършил настоящото действие. Удобен начин за изпълнение - използване на софтуер за прекъсване.

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

Прекъсва разсрочено процедура повикване (DPC). Мениджър Активиране с помощта на софтуер за прекъсване - това е начин да се отложи преминаването на конеца преди подходящите условия. NT също използва софтуерен прекъсват да отложи изпълнението на други видове лечение.

превключване Темата е проведена в IRQL Dispatch / DPC. Прекъсвания на това ниво идват през капан манипулатор към контролера, който изпълнява конец график. "По пътя" на основните процеси и отсрочени разговори процедура (DPC). DPC - функция, която система задачи по-малко важни, отколкото тази, която се изпълнява в момента. Тези функции са посочени като "до", тъй като те не могат да бъдат изпълнени веднага. DPC изпълнена след ядрото (или често входно / изходна система) завършва по-важна задача и понижава IRQL на процесора под кулата / DPC.

DPC даде на операционната система и възможността за генериране на прекъсване и изпълнява функцията на системата в режим на ядрото. Ядрото използва DPC да се справят с изтичането на интервал таймер (и освободи потоци, чака таймери) за реконструкция на процесора след кванта на потока на времето. Драйверите за устройствата използват DPC за завършване на обработката на I / O искания.

А представителство е обектно-DPC DPC (DPC обект) - управляващ обект на ядрото, че е програми невидими за потребителя режим, но виж драйверите за устройствата и да е друга система кода. Най-важната част от информацията, съхранявана в obekte- DPC, - на адреса на функцията на системата, който се нарича с ядрото, когато обработката на прекъсването DPC. До прилагането на процедури DPC се съхраняват в контролирана ядрото опашка нарича опашка DP C. За да заявите DPC, системата се отнася до кода на ядрото да се инициализира DPC obekta-, след това го поставя в опашката.

DPC DPC помещения от своя страна, дава индикация за софтуер ядрото заявката за прекъсване диспечер ниво / DPC. Тъй като обикновено в опашката DPC код работи на по-високо IRQL, искания прекъсне не се случва толкова дълго, колкото нивото на IRQL пада до по-ниско ниво или АПК.

Тъй като DPC прекъсване има по-нисък приоритет от устройството за прекъсване, а след това всички висящи прекъсва от устройства, които ще бъдат без маска, се обработват преди прекъсване DPC.

Прекъсването се асинхронно извикване на процедура (АПК). Когато опашките ядрото обектно-DPC, образувано в резултат пречи на DPC прекъсне някоя от нишките. За прекъсване изпълнение на посочения поток и за извършване на дадена процедура осигурява основния механизъм на асинхронни процедура повикване (АРС). ARS могат да бъдат поставени в режим на изчакване, както код система, или кодът на режима на потребителя, ядрото режим APC макар и по-мощен. Както DPC, APC се извършва асинхронно с настъпването на съответните условия. За потребителски ARS такива условия са, както следва:

· Протичане на ток трябва да бъде този, който преотстъпва да тече този ADR;

· IRQL на процесора трябва да е на най-ниското ниво;

· Target поток ARS потребителски режим трябва да се обяви на сигнал;

· Режим APC ядрото, за разлика от режима за употреба на APC, не изискват за неговото прилагане "резолюция" на целевия поток. Те пречи на движението и да извърши процедурата, без да му участие или съгласие.

Програмата поставя на опашката APC за някои поток, което води до сърцевината, или директно (за система код) или индиректно (за потребителски режим код). прекъсват ядрото, на ниво софтуер изисква APC, и когато всички от посочените по-горе условия на целевата поток се прекъсва и изпълнява АПК. Тъй като DPC, APC описва успя обект ядрото - obektom- ARS. ARS очакват изпълнението им, се управляват от ядрото опашки АПК на (APC опашка). За разлика от опашката DPC, което е цялата система, всички АРС специфичен поток - всяка нишка има своя собствена опашка на АРС. При получаване на искане до етап ARS от своя страна, го поставя в основата на всички от потока, който извършва процедурата от АПК. APC се изпълнява в контекста на даден поток и намаляване на IRQL, и не се прилагат ограничения за DPC. ОН искания ресурси (обекти), в очакване на дръжките на обекта, които генерира грешки страница и причинява системните услуги. Това прави АПК полезно дори за потребителския режим код.

NT изпълнителен система използва режим ARS ядро да изпълнява някои проблеми OS, които трябва да се появят в адресното пространство (в контекста) на даден поток. Тя може да се използва ядрото режим APC да направи изхода на потока на услугата система. Подсистемите среда използват ядрото режим APC да принуди потокът да спре или да прекрати неговото изпълнение, както и да се чете или да зададете контекста на изпълнение на режима на потребителя.

Разпределение изключения. За разлика от прекъсвания, които могат да възникнат непредсказуемо, изключване - е пряк резултат от програмата. С Microsoft определя програмиране архитектура, известна като структурирана изключение обработка, която осигурява единен отговор на изключенията за кандидатстване. Всички изключения, различни от тези, които са достатъчно прости и обработват директно манипулатор капани обслужвани ядрото модул контролери изключения (изключение диспечер) (фиг. 2.13). Този модул зависи от архитектурата на процесора, но написан на C. Изключение диспечера на задачите е да се локализира с изключения манипулатор, това изключение, че могат да бъдат "премахнати". По-долу е даден списък с изключения машинно независим определени от ядрото:

Нарушаване на защита на паметта Integer деление на нула
Преливник число числа с плаваща запетая Overflow / Сгъстеният
Участък от нула в плаваща запетая аритметично Денормализирани операнд с плаваща запетая
точка на прекъсване за отстраняване на грешки Неправилно подреждане на данните
Невалиден инструкция машина Инструкцията привилегирован машина
стъпка за отстраняване на грешки по стъпка изпълнение Нарушаване на страница охрана
Страниците за грешка четат Изчерпване на квотата на файла за виртуална памет

Някои от тези изключения са уловени и обработени от ядрото невидимо за потребителските програми. Други изключения от основните процеси, завръщащи код за грешка на повикващия. Някои изключения се допускат до "непокътната", за да се върнете към режим на употреба. Для таких исключений подсистема среды или приложение могут задать при помощи специальных конструкций языка высокого уровня блочные обработчики исключений ( frame based exception handlers ). Microsoft С – это первый компилятор Microsoft , поддерживающий структурную обработку исключений, однако средства обработки исключений Windows NT не зависят от языка программирования.

Термин блочный обозначает связь обработчика исключений с активизацией заданной процедуры. При вызове процедуры в стеке создается стековый фрейм, представляющий активизацию процедуры. Со стековым фреймом может быть связан один или несколько обработчиков исключений, каждый из которых защищает какой-либо блок исходного кода программы. При исключении ядро ищет обработчик, связанный с текущим стековым фреймом. Если его нет, то выполняется поиск обработчика для предыдущего фрейма, пока блочный обработчик исключений не будет найден. Если найти обработчик не удается, то ядро вызывает собственные обработчики исключений по умолчанию.

При возникновении исключения, возбужденого программой или неявно оборудованием, в ядре происходит цепочка событий. Управление передается обработчику ловушки, который создает кадр ловушки (также, как это делается при обработке прерывания). Этот кадр позволяет ОС возобновить выполнение с места возникновения исключения, если последнее было успешно обработано. Кроме того, обработчик ловушки создает запись исключения, которая содержит причину исключения и привходящую информацию.

Ако изключение настъпили в режим на ядрото изключение диспечер призовава процедурата за търсене на блок манипулатор, който ще бъде изключение. подсистема среда може да се настрои за процеса го е създал пристанищни и отстраняване на грешки пристанищни изключения. Те се използват от ядрото по време на нормална работа изключения, както е показано на фиг. 2.16. Повечето източници са изключения за отстраняване на грешки точка на прекъсване. Изключенията действието на регулатора става изпращане на съобщение (чрез ЗЗК) в порта за отстраняване на грешки, което е свързано с процеса, където е настъпило изключение. Това дава на потребителя възможността да се манипулира структури от данни и въвеждане Debugger команди.

Фиг. 2.16. Разпределение изключения

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

Обадете услуги за управление на системата. Процесор NT ядрото капан (фиг. 2.13) разпределя прекъсва, изключения и системни повикване услуги. Challenge системни услуги, генериране капани - които са в Windows NT, се считат за изключения - са интересни от гледна точка на мащабируемост на системата. Методът за прилагане на базовите системни услуги ви позволява динамично да се добавят нови услуги на операционната система в бъдещо издание.

Когато потребителския режим нишка призовава услугата система, той изведнъж се разрешава да извършва привилегировано операционна система код. Поради тази причина, на преработвателите предоставят syscall команда за MIPS и Intel х 86 процесори, ако потребителския режим нишка призовава услугата система. Оборудването генерира капан и се превключва от режим на потребителя да режим на ядрото. Когато това се случи, копия на ядрото на услуги на стойности от стека в параметър режима на ядрото поток стека потребителското режим на (така че потребителят не може да ги промените), и след това се извършва системна услуга.

Фиг. 2.17. Изключения системни услуги

За търсене на системни услуги (фиг. 2.17) на ядрото използва таблицата за разпределение на система за обслужване. Тази таблица е подобна на таблицата за разпределение на прекъсване, всеки елемент съдържа само указател към системата за обслужване, а не процедурата по обработка.

Фиг. 2.18. Неправилно споделяне памет

Използването на система за обслужване разпределение на маса за вземане на основни услуги NT разтегателен. Спомагателни услуги, се добавят към ядрото чрез разширяване на масата, без каквито и да било промени в операционната система или приложения. След създаването на нова услуга код системен администратор изпълнява помощната програма, която създава таблица на разпределение с допълнителен елемент, който сочи към нова услуга система.

синхронизация Мултипроцесор. Концепцията за взаимно изключване (взаимно изключване) е от решаващо значение за развитието на операционни системи, т.е. по всяко време, за да получите достъп до този ресурс може да има един и само един поток. Взаимно изключване е необходимо, когато ресурсът не поддържа споделено или когато споделяне дава непредсказуеми резултати. Фиг. 2.18 показва какво се случва, когато две теми, които работят на различни процесори работят в цикличен запис на всички.

Втората нишка получава указател към опашката преди първата нишка на неговата актуализация, втори потока от данни се поставя на същото място, както и първия - заседнала си данни и оставяйки една седалка празна опашка. Много код, в която се осъществява достъп до ресурс, който не поддържа споделяне, се наричат критични участъци (критичните участъци). За да се гарантира правилното функциониране, критичния участък не се извършва повече от една нишка. Докато потокът от данни за писане във файл, да актуализира базата данни или модифициране на обща променлива, няма друга нишка е позволено да имат достъп до един и същи ресурс. Код на фиг. 2.18 - критична точка, която е неправилна, без взаимно изключване, достъп до споделените данни.

Взаимно изключване е важно да са тясно свързани (плътно - съчетано) OS с симетрична многопроцесорна (симетрична мултипроцесорна), като например Windows NT, където една и съща система, кодът се изпълнява на няколко процесора, споделяне на структури от данни в глобалната памет. В Windows NT да се осигури механизъм, който използва система код за предотвратяване едновременно модификация на структурата на данните на двата потока -problem ядро. Ядрото осигурява взаимно примитиви изключване; че и други компоненти на тяхното задействане система използва за синхронизиране на достъп до глобални структури от данни.

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

По време на глобалните промени в структурите на ядрото на данни може да прекъсне манипулатор, който също се променя структурата. Обикновено операционната система с един процесор, за да се предотвратят подобни случаи, като се забранява прекъсването по време на достъп до глобални данни, но на NT ядрото, преди да използвате глобален ресурс, временно маскиране тези прекъсне товарачи, които също използват този ресурс. Това се прави чрез повишаване на IRQL на процесора до най-високото ниво. Ниво прекъсване изпращане / DPC е използването на контролера, който се отнася до база данни на управителя на. Всяка друга част от ядрото, която използва тази база данни, увеличава IRQL до нивото на изпращане / DPC, маскиране на прекъсвания на това ниво, преди да използвате базата данни. Тази стратегия е подходяща за един процесор системи, но недостатъчно за конфигурация на многопроцесорни. Увеличаването IROL един процесор не пречи на другите прекъсва. Ядрото е необходимо да се осигури взаимно изключващи достъп до множество процесори.

Механизмът, използван от ядрото да се постигне многопроцесорни взаимно изключване се нарича спин-заключване (заключване на въртене), свързани с глобалната структура на данните, като DPC опашка (фиг. 2.19). Преди да влезе в критична секция, ядрото е да се получи блокиране на спин, свързани със сигурната опашката DPC. Ако ключалката не е безплатно, ядрото се опитва да го получи, стига да не успее. Най-спин-ключалката е наречен така, защото ядрото е изолиран и "сам се" до получаването на заключване. Spinlock е защитен и техните структури от данни, са в глобалната памет. получаване Code и освобождаване на спин-ключалката е написан на асемблер да подобри скоростта и използване заключващ механизъм, предоставена от този процесор архитектура. В много архитектури, спин-заключването се осъществява с помощта на "теста и задайте" операция, която един проверява стойността на променливата блок и грабва една ключалка, която не позволява превземането на блокиране на потока от втория (в интервала от време между проверка на стойността на променливата и залавянето на първия блок поток).

Фиг. 2.19. Използването на спин брави

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

Синхронизация на изпълнителната ниво на системата. Софтуер извън ядрото е необходимо да се синхронизира достъп до глобални структури от данни в многопроцесорни среда. С функциите на ядрото, на изпълнителната власт, системата създава, придобива и освобождава заключването на спин. Spinlocks отговарят на необходимостта от механизмите на изпълнителната система за синхронизация. Тъй като очакванията за заключване на въртене спира на процесора, те могат да се използват при условията:

· Достъп до защитена ресурс трябва да се извършва бързо и без сложно взаимодействие с друг код;

· Критичната точка не може да се изпомпва от памет, не могат да се прилагат за чуждестранни данни не може да се обадите на външни процедури (включително системни услуги) и не може да генерира прекъсвания и изключения.

Ядрото осигурява и други механизми за синхронизиране на изпълнителната система под формата на ядрото обекти, които се наричат ​​диспечер обекти. Потокът може да се синхронизира с предмет контрол от страна чакат за дръжката му. Това означава, че ядрото за спиране на потока и променя състоянието си от "фактически" да "в очакване." Потокът от ядро ​​се оттегли от готовността на опашката мениджър.

Нишка не може да възобнови изпълнението, докато ядрото няма да се промени статута си от "висящи" да "готов". Тази промяна се случва, когато състоянието на обекта диспечерско, която е в очакване на промените в ЕВРОВОК поток от "зает" за "свободни". Ядрото е отговорен и за двата вида преходи между състояния.

Всеки тип обект диспечер предвижда специален тип синхронизация. Така че, мутекс осигурява взаимно изключване; семафор работи като шлюз, през който може да премине променлив брой потоци. Събития могат да се използват както за уведомлението, че се извършва някакво действие, или за изпълнението на взаимно изключване. Двойките събитие - е подкрепата на ядрото означава бърз ЗЗК, оптимизирана форма на съобщения подсистемата Win 32. таймери "задейства" след определен интервал от време. Нишка може да чака, докато друга нишка, която е полезна за координиране на действията между взаимодействащите потоци. Заедно, диспечер на ядрото Предмети на задействане на системата осигурява по-голяма гъвкавост при изпълнението на синхронизация.

Синхронизация обекти на разположение в потребителски режим, получават своите възможности за синхронизация чрез изпращане на ядрото обекти. Всеки синхронизация обект видим за потребителски режим, капсулира поне един обект на ядрото диспечер.

Възстановяване след спиране на тока. За прекъсване на електрозахранването в NT ядрото запазени втория най-висок приоритет прекъсват. Тя ви уведомява за проблем в захранването на системата да изпълни правилно изключване. В същото време, това не променя факта, че започват процедура за изключване. Ако компютърът е оборудван с резервна батерия за паметта, данните могат да бъдат възстановени, когато властта ще бъде подадена отново. Изпълнява задачи могат да бъдат рестартирани или продължават, в зависимост от състоянието им в момента на катастрофата.

регистри се рестартира и производителност резюме е недостатъчна за пълно възстановяване на системата. Тъй като I / O устройства работят независимо от останалата част от операционната система, за да се възстанови след ядро ​​необходимата им подкрепа след спиране на тока:

· Те ще преинициализира когато захранването е възстановено;

· Те трябва да могат да определят дали е имало прекъсване на електрозахранването.

Тези средства са предвидени два контрол на ядрото обекти. Обекти - обявление за захранване (уведоми обекти) позволява на драйвери на устройства за регистриране на процес на възстановяване, че ядрото ще се обадя, когато се възстанови захранването. драйвер на устройството открие, че трябва да се направи тази процедура; обикновено го reinitializes устройството, и рестартиране на прекъснати I / O операции. За да се регистрирате процедура по възстановяване след спиране на тока, водачът създава обект, забележите, силата, причинявайки ядрото да започне процедурата по показалеца на обекта, след което отново означава, че ядрото да добавите обекти на опашка, контролирана от ядрото. Когато захранването се възстанови, ядрото сканира опашката и причинява всичко на процедурата по поръчка.

Ядрото предвижда друг мениджър обект, използван от драйвери на устройства, обектно-мощност състояние (състояние на захранване обект). Чрез създаването на такъв обект и да го добавите към друг водач опашка ядрото определя преди операцията, която не може да бъде прекъсната (например за запис на данни в регистъра на устройството), ако настъпила повреда в захранването. Ако това се случи, водачът не извършва операцията.