Przerwania a magistrala PCI

Magistrala PCI obsługuje sprzętowe przerwania (IRQ), które mogą być wykorzystane przez urządzenia PCI do poinformowania magistrali o swojej obecności. Cztery przerwania PCI noszą nazwy — INTAM, INTB#, INTCU, i INTDtt. Wymienione przerwania charakteryzują się wysoką czułością (ang. Ievel-sensitive), co ozna¬cza, że wykorzystywane sygnały umożliwiają ich współdzielenie pomiędzy kartami PCI. W rzeczywistości, wszystkie jednoukładowe lub jednofunkcyjne urządzenia lub karty PCI wykorzystują tylko jedno przerwanie, którym musi być INTA#. Jest to jedna z zasad określonych w specyfikacji standardu PCI. Jeśli w układzie lub na karcie umieszczonych jest więcej niż jedno urządzenie, wtedy korzystają one z dodatkowych przerwań INTBU - INTD#. Ze względu na istnienie niewielu wielofunkcyjnych układów lub kart PCI, praktycznie rzecz biorąc, wszystkie urządzenia podłączone do magistrali PCI korzystają z przerwania INTAU.
Aby magistrala PCI mogła prawidłowo funkcjonować w komputerze PC, konieczne jest mapowanie przerwań PCI na przerwania ISA. Ze względu na to, że przerwania ISA nie mogą być współdzielone, w większości przypadków każda karta PCI korzystająca z przerwania INTAtt magistrali PCI musi być mapowana do innego przerwania ISA. Przykładowo, jeśli system jest wyposażony w cztery gniazda PCI, w których zainstalowano karty PCI, wtedy każda z nich będzie korzystała z przerwania INTA#. Dodatkowo, w większości przypadków, każda karta PCI zostanie zamapowana do innego dostępnego przerwania ISA takiego jak IRQ 9, IRQ 10, IRQ 11 lub IRQ 5.
Odszukanie unikalnego przerwania dla każdego urządzenia zarówno podłączonego do magistrali PCI, jak i ISA zawsze stanowiło problem. Powodem tego jest po prostu niewystarczająca pula wolnych przerwań. Przydzie¬lenie dwóm urządzeniom ISA tego samego przerwania nigdy nie było możliwe (tak zwana funkcja współ¬dzielenia przerwania 1RQ4 przez porty COM 1/3 i IRQ3 przez COM 2/4 nie pozwalała na jednoczesne ko¬rzystanie z obu portów COM). ale w przypadku większości nowszych komputerów współdzielenie przerwań pomiędzy wieloma urządzeniami PCI jest już dopuszczalne. Nowsze wersje BIOS-u, jak również systemów operacyjnych wyposażonych w funkcję PnP, takich jak Windows 95B (OSR 2 lub nowszy), Windows 98 i Windows 2000/XP są kompatybilne z funkcją PCI IRQ Steering. Aby w pełni wykorzystać możliwości funkcji PCI IRQ Steering, zarówno BIOS, jak i system operacyjny musząją obsługiwać. Starsze wersje BIOS-u oraz system Windows 95 i 95A nie są z nią kompatybilne.
Zazwyczaj przydzielaniem urządzeniom PCI niepowtarzalnych przerwań zajmuje się BIOS. Jeśli system ob¬sługuje funkcję PCI IRQ Steering i jest ona uaktywniona, wtedy system operacyjny Windows przejmuje zada¬nie przydziału przerwań urządzeniom PCI. Nawet po włączeniu funkcji PCI IRQ Steering, BIOS początkowo w dalszym ciągu przypisuje przerwania. Chociaż system Windows dysponuje możliwością zmiany ustawio¬nych przerwań, to jednak zazwyczaj nie wykonuje tego w sposób automatyczny. Wyjątkiem jest sytuacja, gdy wystąpią konflikty, które muszą być koniecznie wyeliminowane. Jeśli zdarzy się, że zabraknie wolnych przerwań, wtedy funkcja PCI IRQ Steering może spowodować, że system Windows przypisze kilku urządze¬niom PCI jedno przerwanie, a tym samym umożliwi wszystkim komponentom systemu prawidłowe funkcjo¬nowanie. Przy braku funkcji PCI IRQ Steering system Windows w momencie wyczerpania puli dostępnych przerwań zaczyna wyłączać kolejne urządzenia.
Aby sprawdzić, czy system Windows 9x/Me jest kompatybilny z funkcją PCI IRQ Steering, wykonaj poniższe kroki:
1. Otwórz okno Menedżera urządzeń.
2. Kliknij dwukrotnie pozycję Urządzenia systemowe.
3. Kliknij dwukrotnie pozycję Magistrala PCI, a następnie kliknij zakładkę Sterowanie przerwaniami (IRQ). Znajduje się tam opcja Używaj sterowania przerwaniami (IRQ), która po włączeniu wyświetla stan routingu IRQ. Jeśli jest aktywna, wtedy będzie również podane, skąd została pobrana tabela przerwań.
Warto zauważyć, że w przypadku systemu Windows 2000/XP nie jest możliwe wyłączenie funkcji PCI 1RQ Steering. Poza tym w oknie Menedżera urządzeń brak jest karty Sterowanie przerwaniami (IRQ).
Funkcja PCI IRQ Steering jest sterowana przez jedną z czterech tabel, które są odczytywane przez system Windows. System Windows szuka kolejnych tabel i korzysta z pierwszej, którą napotka. Co prawda nie ma możliwości zmiany kolejności wyszukiwania tabel, ale poprzez włączanie lub wyłączanie wyświetlonych opcji Pobieraj tabelą przerwań IRO... (wyłączenie tabel powoduje, że system nie będzie ich szukał) można określić, która tabela zostanie odszukana jako pierwsza. System Windows szuka następujących tabel:
♦ ACPI BIOS.
♦ specyfikacji MS,
♦ wywołania trybu chronionego PCIBIOS 2.1,
♦ wywołania trybu rzeczywistego PCIBIOS 2.1.
Na początku, w celu konfiguracji funkcji PCI IRQ Steering, Windows próbuje posłużyć się tabelą ACPI BIOS. a następnie szuka tabeli specyfikacji MS, wywołania trybu chronionego PCIBIOS 2.1 i trybu rzeczy¬wistego PCIBIOS 2.1. System Windows 95 OSR2 i nowsze wersje umożliwiają zaznaczenie tylko tabel PCI¬BIOS 2.1 przy użyciu pojedynczej opcji wyboru, która domyślnie jest wyłączona. W przypadku systemu Windows 98, wszystkie, oprócz trzeciej (wywołania trybu chronionego PCIBIOS 2.1), tabele przerwań są za¬znaczone domyślnie.
Jeśli przy instalacji urządzenia PCI w systemie Windows 95 napotkasz na problemy związane z przydziela¬niem przerwania, wtedy powinieneś zaznaczyć tabelę PCIBIOS 2.1 i uruchomić ponownie komputer. W przy¬padku systemu Windows 98 należy wyłączyć tabelę ACPI BIOS, a następnie uruchomić ponownie komputer. Jeśli problem nie zniknie, należy zaznaczyć tabelę trybu chronionego PCIBIOS 2.1 i zrestartować komputer. Opcja Pobieraj tabelą przerwań IRQ z wywołania Trybu chronionego PCIBIOS 2.1 powinna być zaznaczona tylko wtedy, gdy urządzenie PCI nie działa prawidłowo. Aby wyświetlić opcję znajdującą się w oknie Mene¬dżera urządzeń systemu Windows, wykonaj poniższe kroki:
1. Otwórz okno Menedżera urządzeń.
2. Przesuń pasek przewijania do pozycji Urządzenia systemowe, a następnie kliknij ją dwukrotnie.
3. Zaznacz pozycję Magistrala PCI i kliknij Właściwości.
4. Aby sprawdzić lub zmienić aktualne ustawienia, kliknij zakładkę Sterowanie przerwaniami (IRQ).
Jeśli zakładka Sterowanie przerwaniami (IRQ) widoczna w oknie Menedżera urządzeń jest wyszarzona, wte¬dy należy sprawdzić, czy opcja Używaj sterowania przerwaniami (IRQ) została włączona. Jeśli tak nie jest, należy ją zaznaczyć i ponownie uruchomić komputer. Jeśli zakładka Sterowanie przerwaniami (IRQ) nadal jest nieaktywna, może to oznaczać, że tabela przerwań przekazana do systemu operacyjnego przez BIOS jest uszkodzona lub zawiera błędy. W takiej sytuacji należy uruchomić program BIOS Setup i upewnić się, że funkcja PCI IRQ Steering jest włączona. Jeśli to nie pomoże, może okazać się konieczne zaznaczenie opcji Pobieraj tabelą przerwań IRQ z wywołania Trybu chronionego PCIBIOS 2.1. Może to również oznaczać, że BIOS nie obsługuje funkcji PCI IRQ Steering. Aby sprawdzić, czy używana płyta główna lub BIOS są kom¬patybilne z funkcją PCI IRQ Steering, należy skontaktować się z ich producentem.
W przypadku systemów obsługujących funkcję PCI IRQ Steering, po wyświetleniu zawartości pozycji Urzą¬dzenia systemowe znajdującej się w oknie Menedżera urządzeń może być widoczna pozycja Programowalny kontroler przerwań. Oznacza to. że do urządzenia PCI zostało zamapowane przerwanie i w związku z tym nie jest dostępne dla urządzeń ISA, nawet jeśli w danej chwili nie korzysta z niego żadne urządzenie PCI. Aby sprawdzić przerwania zamapowane do urządzeń PCI, wykonaj poniższe kroki:
1. Wybierz Start/Ustawienia/Panel Sterowania, a następnie kliknij dwukrotnie ikonę System.
2. Kliknij zakładkę Menedżer urządzeń.
3. Kliknij dwukrotnie pozycję Urządzenia systemowe.
4. Kliknij dwukrotnie żądaną opcję Programowalny kontroler przerwań, a następnie kliknij zakładkę Zasoby.
Doszedłem do wniosku, że funkcja PCI IRQ Steering oraz mapowanie są źródłem sporej ilości problemów. Nawet pomimo to, że przerwania PCI (INTx#) mogą być współdzielone (w trybie domyślnym), to i tak każda karta (lub urządzenie) korzystająca z tej możliwości musi zostać zamapowana lub przekierowana do unikal¬nego przerwania ISA, które z kolei standardowo nie może być współdzielone. Zamapowanie kilku urządzeń PCI do tego samego przerwania ISA jest możliwe tylko wtedy, gdy:
♦ żadne urządzenie ISA nie korzysta z tego przerwania;
♦ BIOS i system operacyjny obsługują funkcję PCI IRQ Steering;
♦ funkcja PCI IRQ Steering jest aktywna.
Bez kompatybilności z funkcją PCI IRQ Steering korzyści wynikające ze stosowania przerwań PCI są zni¬kome. Wynika to stąd, że wszystkie pary przerwań PCI-ISA muszą być niepowtarzalne. Bez funkcji PCI IRQ Steering z łatwością można wyczerpać pulę wolnych przerwań. Jeśli jednak funkcja PCI IRQ Steering jest obsługiwana i aktywna, wtedy wiele urządzeń PCI będzie mogło współdzielić pojedyncze przerwanie, a tym samym możliwe będzie rozszerzenie systemu bez zagrożenia, że zostaną wyczerpane wszystkie dostępne przerwania. Jednym z ważniejszych powodów aktualizacji systemu Windows do wersji 98 lub nowszej jest lepsza obsługa funkcji PCI IRQ Steering, co jest szczególnie zauważalne w przypadku, gdy jesteś posiadaczem oryginalnej wersji OSR I systemu Windows 95.
Kolejny powód do zmartwienia wynika stąd, że na liście przerwań wyświetlonej w oknie Menedżera urządzeń systemu Windows może być widocznych wiele pozycji dotyczących mapowania przerwań PCI związanych z określonym przerwaniem ISA. Jedna z pozycji rzeczywiście oznacza mapowanie urządzenia, przykładowo wbudowanego kontrolera USB, do przerwania, natomiast druga pozycja związana z tym samym przerwaniem jest oznaczona jako IRQ Haider for PCI Steering. Chociaż druga pozycja wskazuje, że wykorzystuje to samo przerwanie, to jednak nie informuje o konflikcie zasobów. Zamiast tego, pozycja ta jest powiązana z chipse¬tem, który dokonał rezerwacji przerwania wykorzystanego w stworzonym mapowaniu. Jest to jedna z możli¬wości mechanizmu Pług and Play magistrali PCI i nowszych chipsetów płyt głównych. Systemy Windows 2000 i XP też pozwalają na mapowanie wielu urządzeń do tego samego przerwania, ale w celu uniknięcia niejasności nie jest w nich wykorzystywany termin IRO Holder.
Należy zauważyć, że z magistralą PCI może współpracować kilka urządzeń, nawet pomimo to. że wszystkie gniazda są wolne. Przykładowo, większość obecnie produkowanych systemów jest wyposażona w dwa kon¬trolery IDE i kontroler USB stanowiące urządzenia podłączone do magistrali PCI. Zazwyczaj kontrolery PCI IDE są mapowane do przerwania ISA 14 (podstawowy kontroler) i 15 (dodatkowy kontroler), natomiast kon¬troler USB może być zamapowany do dowolnego przerwania ISA z puli — 9, 10, 11 i 5. Wiele nowszych komputerów wyposażonych jest w dwa lub więcej kontrolerów USB (zwykle jeden na dwa porty USB), dlatego każdy z nich musi być mapowany do przerwania magistrali ISA.

Magistrala PCI współpracuje z dwoma typami urządzeń — nadrzędnymi (ang. bus masters — inicjatorami) i podrzędnymi (ang. slaves — docelowymi). Urządzenie nadrzędne jest w stanie przejąć kontrolę nad magi¬stralą i zainicjować operację przesłania danych, natomiast urządzenie podrzędne w zamierzeniu jest adre¬satem tej operacji. Większość urządzeń PCI może pełnić funkcję zarówno urządzenia nadrzędnego, jak i pod¬rzędnego. Aby spełnić wymagania zawarte w specyfikacji PC 97 lub nowszej, wszystkie gniazda PCI muszą współpracować z kartami będącymi urządzeniami nadrzędnymi.
Magistrala PCI jest magistralą arbitrażową. Oznacza to, że główny arbiter (część kontrolera magistrali PCI za¬warta w chipsecie płyty głównej) zarządza wszystkimi operacjami przesłania danych przez magistralę, dzięki czemu udziela sprawiedliwego i kontrolowanego dostępu wszystkim urządzeniom do niej podłączonym. Za¬nim urządzenie nadrzędne może przejąć kontrolę nad magistralą, musi najpierw przesłać do głównego arbitra żądanie przejęcia kontroli, a jeśli ją uzyska, może sterować magistralą tylko przez ograniczoną ilość cykli. Dzięki zastosowaniu takiego arbitrażu wszystkie urządzenia nadrzędne magistrali uzyskują do niej jednako¬wy dostęp, a ponadto rozwiązanie to zapobiega sytuacjom, w których jedno urządzenie zablokuje magistralę, jak również zakleszczeniom spowodowanym przez próbę uzyskania jednoczesnego dostępu przez wiele urzą¬dzeń. Tym sposobem magistrala PCI działa podobnie jak sieć lokalna LAN (ang. local area network) z tą różnicą, że znajduje się ona w całości wewnątrz systemu i pracuje ze znacznie wyższą częstotliwością niż ty¬powe sieci zewnętrzne łączące komputery.