ПредишенСледващото

Лекция №11. механизми за синхронизиране

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

Spinlock - прост механизъм синхронизация. заключване Spin може да бъде заловен. и освободен. Ако spinlock е придобито, допълнителен опит да вземете spinlock всяка нишка ще изпълни безкраен цикъл, за да се опита да се обхване по-spinlock (зает чакащо състояние поток). Цикълът ще завърши едва когато бившият собственик на спин-ключалката я освободи. С помощта на заключване спин безопасно в многопроцесорни платформи, т.е. се гарантира, че, дори ако това е поискано в същото време две нишки на два процесора, а само улавя един от потоците.

Spin брави са предназначени за защита на личните данни, достъпът до които се осъществява в различни, в това число повишени нива IRQL. А сега си представете следната ситуация: кодът, който работи на ниво IRQL PASSIVE_LEVEL взе заключване спин за последващо сейф смяна на някои данни. Кодът е била прекъсната код с по-висока IRQL DISPATCH_LEVEL, който се опита да улови една и съща ключалката въртене, а това от описанието на спин-ключалката, влиза в безкраен цикъл чака заключване освобождаване. Този цикъл никога няма да свърши, защото код, който улавя spinlock и то трябва да бъде свободен, има по-ниска IRQL и никога не се отдаде възможност да се извърши! За такава ситуация не възниква, механизъм, който не позволява на кода с някакво ниво IRQL прекъсване код с по-ниска IRQL в момента, когато кода с по-ниска IRQL притежава spinlock. Един такъв механизъм е да се увеличи сегашното ниво в момента на залавянето IRQL spinlock IRQL до определено ниво, свързано с spinlock и възстановяването на стари ниво IRQL в момента на освобождаване. От това следва, че кодът работи при IRQL повишено ниво, които нямат право на достъп до защитено от спин-ключалката ресурс ако IRQL на ниво по-ниско ниво spinlocks IRQL производство на достъп до кода на ресурсите. Когато се опитате този код за улавяне на нивото на въртене заключване IRQL тя ще бъде намалена до spinlocks на ниво IRQL, които ще доведат до непредвидими последици.

В Новия Завет има 2 вида spinlocks:

· Конвенционални спин-заключване, които са специален случай на на искането за отменяне спин-заключване в / използвана от организацията иска опашката / в (см. Лекция 10 п. [10.3] иска Отказ / т).

· Spinlocks прекъсване синхронизация

С конвенционални съпътстващи брави свързани IRQL DISPATCH_LEVEL, т.е.

1. Всички опити да се улавят трябва да се извършват на ниво IRQL<=DISPATCH_LEVEL

2. В случай на улавяне spinlock текущата ниво IRQL издига на DISPATCH_LEVEL на ниво.

С синхронизация спин-заключване прекъсне свързани един от нива DIRQL.

Използването на конвенционален заключване въртене ще бъдат описани по-долу (с изключение на спин-ключалката поиска анулиране на /, в която са описани в раздел 10.3).

Използване на прекъсване синхронизация на спин-заключване ще бъде описано в лекция посветена обработка прекъсване (експериментално, лекция №13).

Свързани статии

Подкрепете проекта - споделете линка, благодаря!