2009-03-01 12 views
18

Mam pomysł, jak przerywane są obsługiwane przez dwurdzeniowy procesor. Zastanawiam się, w jaki sposób obsługa przerwań jest realizowana na płycie z więcej niż jednym procesorem fizycznym.W jaki sposób przerwań obsługiwane są przez maszyny z dwoma procesorami?

Czy odpowiedzialność za przerwanie zależy od konfiguracji fizycznej płyty? Każdy procesor musi być w stanie obsłużyć niektóre typy przerwań, takie jak dyskowe wejścia/wyjścia. Chyba że jest jakiś zespół obwodów do zarządzania i wysyłania przerwań do odpowiedniego procesora? Domyślam się, że schemat musi być neutralny dla procesora, aby każdy procesor i rdzeń mógł uruchomić procedurę obsługi przerwań.

Jeśli rdzeń czeka na odczytany dysk, czy będzie to rdzeń, który uruchomi procedurę obsługi przerwań, gdy dysk będzie gotowy?

+1

Teraz widzę, że rdzeń nie czeka na czytać, a czeka gwintów. Po zakończeniu odczytu wydaje się, że lepiej byłoby uruchomić nowo przebudzony wątek na tym samym procesorze, co wcześniej, z powodu szansy na buforowanie danych na tym procesorze. – jeffD

Odpowiedz

8

Na systemach x86 CPU każdy dostaje swój własny lokalny APIC (Advanced Programmable Interrupt Controller), które są również podłączone do siebie nawzajem i do APIC I/O, który obsługuje urządzenie routingu przerwań do lokalnych APICS.

System operacyjny może zaprogramować karty APIC, aby określić, które przerwania zostaną skierowane do procesorów (lub aby umożliwić APIC podjęcie tej decyzji).

Wyobrażam sobie, że wielordzeniowy procesor miałby lokalny APIC dla każdego rdzenia, ale szczerze mówiąc, nie jestem tego pewien.

zobacz te linki po więcej szczegółów:

0

Powiedziałbym, że to zależy od producenta sprzętu ...

this link sprawia mi jednak wierzyć najbardziej prawdopodobnie obsługiwane przez główny procesor i/lub pierwszego rdzenia.

Another link

3

Co jesteś zainteresowany to SMP Processor Affinity. Here to doskonały artykuł o tym, jak jest on obsługiwany w systemie Linux. Advanced Programmable Interrupt Controller (APIC) to sposób zarządzania tym w nowoczesnym systemie. Zasadniczo domyślną wartością byłoby przejście do procesora 0, chyba że dysponowałeś systemem operacyjnym, który wykorzystywał ten interfejs do prawidłowego ustawienia. Ponadto, niekoniecznie chcesz, aby rdzeń, który wydał polecenie, czekał na określone przerwanie. Chcesz, żeby mniej obciążone rdzenie je otrzymały.

+0

Dzięki, link do SMP w Linuksie był interesujący. Dobrze wiedzieć, że w ten sposób można modyfikować serwery. – jeffD