Cтраница 3
Если допустить, что оба варианта ( опрос в цикле и переключение потоков) выполнимы, возникает следующая ситуация. Циклический опрос напрямую расходует процессорное время. Периодическая проверка состояния мьютекса не является продуктивной работой. Переключение процессов, однако, также расходует циклы процессора, так как для этого требуется сохранить текущее состояние потока, получить мьютекс списка свободных процессов, выбрать из этого списка поток, загрузить его состояние и передать ему управление. Более того, кэш центрального процессора будет содержать не те блоки, поэтому после переключения потоков возможно много промахов кэша. Также вероятны ошибки TLB. Наконец, потребуется переключение обратно на исходный поток, результатом которого снова будут промахи кэша. Циклы процессора, потраченные на эти два переключения контекста плюс промахи кэша, представляют собой существенные накладные расходы. [31]
Примером такого побочного влияния на результаты измерений и является переключение контекстов, значительно замедляющее исполнение прикладной программы. В современных RISC-процессорах таких, как Itanium, семейства Alpha и SPARC, особым образом организовано виртуальное адресное пространство. Число виртуальных страниц огромно. Поэтому TLB содержит адреса последних используемых виртуальных страниц. Когда процесс вызывает контекст, виртуальный адрес в этом контексте, обозначенном некоторым кодом, передается в контроллер памяти. Там происходит сравнение адреса виртуальной страницы со всеми элементами буфера TLB для данного контекста. При совпадении формируется адрес физической страницы. В противном случае имеет место промах в TLB, который вызывает срабатывание ловушки ( trap) в операционной системе. При этом вызывается специальная процедура - обработчик системных прерываний. Выполнение приложения, разумеется, приостанавливается до окончания обработки ловушки. Таким образом, переключение контекста может быть вызвано срабатыванием ловушек в операционной системе. Другое проявление этого механизма, не связанное с конкретными архитектурными особенностями RISC-процессоров, - это прерывания. В отличие от срабатывания ловушек, прерывания вызываются косвенно, асинхронно по отношению к выполняемой программе. Обычно прерывания связаны с процессами ввода / вывода. [32]