|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Priority Inversion
Priority inversion occurs when two or more threads with different priorities are in contention to be scheduled. Consider a simple case with three threads: thread 1, thread 2, and thread 3. Thread 1 is high priority and becomes ready to be scheduled. Thread 2, a low-priority thread, is executing code in a critical section. Thread 1, the high-priority thread, begins waiting for a shared resource from thread 2. Thread 3 has medium priority. Thread 3 receives all the processor time, because the high-priority thread (thread 1) is waiting for shared resources from the low-priority thread (thread 2). Thread 2 won't leave the critical section, because does not have the highest priority and won't be scheduled.
Windows NT: The scheduler solves this problem by randomly boosting the priority of the ready threads (in this case, the low priority lock-holders). The low priority threads run long enough to exit the critical section, and the high- priority thread can enter the critical section. If the low-priority thread doesn't get enough CPU time to exit the critical section the first time, it will get another chance during the next round of scheduling. Windows 95: If a high-priority thread is dependent on a low-priority thread that will not be allowed to run because a medium priority thread is getting all of the CPU time, the system recognizes that the high-priority thread is dependent on the low-priority thread. It will boost the low-priority thread's priority up to the priority of the high-priority thread. This will allow the thread that formerly had the lowest priority to run and release the high-priority thread that was waiting for it.
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Приоритетная Инверсия
Приоритетная инверсия происходит когда два или больше резьбы с другими приоритетами - в конкуренции, которая нужно планироваться. Рассматривайте простой случай с тремя резьбой: резьба 1, резьба 2, и резьба 3. Заправьте 1 - высокий приоритет и становитесь готовыми запланирован. Заправьте 2, низкоприоритетная резьба, выполняйте код в критической секции. Заправьте 1, высокоприоритетная резьба, начинайте ждут коллективный ресурс из резьбы 2. Заправьте 3 имеет средний приоритет. Заправьте 3 приемника все время процессора, поскольку высокоприоритетная резьба (резьба 1) ждет коллективные ресурсы из низкоприоритетной резьбы (резьба 2). Заправьте 2 не оставит критическую секцию, поскольку нет имеет самый верхний приоритет и не будет запланировано.
Окно NT: планировщик решает эту проблему произвольно повышая приоритет готовой резьбы (в этом случае, низкий приоритетный замок-держатели). Низкий приоритет заправляет запускать долго (длиной) достаточно, чтобы выходить из критической секции, и высокая- приоритетная резьба может ввести критическую секцию. Если низкоприоритетная резьба не получает достаточно времени CPU, чтобы выходить из критической секции сначала, это получит другой шанс в течение следующего круга планирования. Окно 95: Если высокоприоритетная резьба зависимая от низкоприоритетной резьбы, которая не будет позволена работать поскольку средняя приоритетная резьба получает все время CPU, система признает, что высокоприоритетная резьба зависимая от низкоприоритетной резьбы. Это повысит низкоприоритетный приоритет резьбы вплоть до приоритета высокоприоритетной резьбы. Это допустит резьбу, которая прежде имела самый низкий приоритет, чтобы запускать и выпускать высокоприоритетную резьбу, которая ждала это.
|
|
|
|
| |