Page 84 - 6571
P. 84

ливим  побудувати  протокол  входу,  заснований  на  переході  від
                  нуля до одиниці.
                        Хоча рішення в лістингу 5 вірне, експерименти на мультип-
                  роцесорних машинах показують його низьку продуктивність, як-

                  що декілька процесів «змагаються» за доступ до критичної секції.
                  Причина  в  тому,  що  кожен  призупинений  процес  безперервно
                  звертається  до  спільної  змінної  lock.  Ця  «гаряча  точка»  поро-

                  джує конфлікт під час звернення до пам’яті, який знижує продук-
                  тивність  модулів  пам’яті  і  шин,  що  зв’язують  процесор  та
                  пам’ять.

                        До того ж інструкція TS при кожному виклику записує зна-
                  чення в змінну lock, навіть якщо воно не змінилось. Оскільки в
                  мультипроцесорних машинах із роздільною пам’яттю, для змен-

                  шення числа звернень до основної пам’яті використовуються ке-
                  ші, то інструкція TS виконується набагато довше, ніж просте зчи-
                  тування  значення  спільної  змінної  (коли  змінна  записується  од-

                  ним із процесорів, її копії потрібно оновити або зробити недійс-
                  ними в кешах інших процесорів).
                        Витрати  на  оновлення  вмісту  кеш-пам’яті  і  конфлікти  при

                  зверненні до пам’яті можна скоротити, змінивши протокол входу.
                  Замість того, щоб виконувати цикл, доки інструкція TS не повер-
                  не значення «істина», можна використати наступний протокол.

                        while (lock) skip;/* доки lock встановлена, повторювати
                  цикл */
                        while (TS(lock)) { /* спробувати захопити lock */
                          while (lock) skip; /* повторювати цикл, якщо не вда-
                  лося */
                        }

                        Дана  інструкція  входу  називається  «перевірити-перевірити-

                  встановити», оскільки процес просто перевіряє змінну lock до
                  тих пір, поки не з’явиться можливість виконання інструкції TS. У
                  двох  додаткових  циклах  виконується  проста  перевірка  змінної

                  lock без її модифікації, що дає можливість зчитати її значення з
                  кеш-пам’яті без впливу на інші процесори. Таким чином, конфлі-
                  кти при зверненні до пам’яті скорочуються, але не зникають. Як-

                  що прапорець блокування lock скинутий, то як мінімум один, а
                  можливо, і всі призупинені процеси можуть виконати інструкцію




                                                              83
   79   80   81   82   83   84   85   86   87   88   89