2009-10-06 8 views
5

Czy można wyłączyć wszystkie przerwań w programie ASM/C/C++, aby uzyskać pełną kontrolę nad procesorem?Wyłączanie przerwań sprzętowych i programowych

Jeśli tak -> jak?

Jeśli nie -> jak działają "atomowe" wywołania systemowe (na przykład wpisanie sekcji krytycznej)?

Dzięki za pomoc!

+4

Musisz podać, z którego procesora korzystasz. I który system operacyjny, jeśli jest. W nowoczesnym systemie operacyjnym desktop/server kod użytkownika jest zwykle uruchamiany w trybie bez uprawnień, co uniemożliwia takie działanie. – nos

+0

Który procesor? Który system operacyjny? –

+0

MS Windows (XP SP2/SP3, Vista, 7) wersje x86 i x64, nowoczesne procesory Intel (np Intel Core 2 Duo) –

Odpowiedz

3

na x86 i większości innych współczesnych procesorów można uzyskać instrukcje atomowe. Te, które są GURANTEED, nie zostaną ukończone, zanim inny wątek/procesor może uzyskać dostęp do tej pamięci.

Pod Win32 posiadasz funkcje połączone *, które abstrakcyjne od ciebie na obsługiwanych platformach.

Na MIPS wiele instrukcji mogą mieć .I dodaje na końcu instrukcji w celu zapewnienia blokady.

+1

Na x86 może poprzedzać prefiksem pewnych instrukcji z "lock", aby je atomowej. – hirschhornsalz

+0

Ahh dzięki :) To musiało być coś takiego :) – Goz

+0

czy możesz dać mi przykład kodu źródłowego? –

4

W zespole x86 że polecenia są

  • sti zestaw przerwania umożliwiają BIT
  • cli wyraźne przerwania umożliwiają nieco

Te polecenia ustawiania i oczyścić IF Flag. Kiedy ustawiona jest flaga IF, procesor będzie obsługiwał przerwania sprzętowe, a gdy stanie się jasne, CPU zignoruje przerwania sprzętowe. Nie wpływa to jednak na obsługę przerwań niemaskowalnych, ani nie ma wpływu na przerwania lub wyjątki w oprogramowaniu. Te instrukcje również nie działają w trybie nieuprzywilejowanym (zwykle wszystko powyżej pierścienia 0, w zależności od IOPL).

+4

masz go od tyłu. STI umożliwia przerywanie. CLI wyłącza się. –

+0

Nie wyłącza również przerwań ani wyjątków programowych. – Stewart

+0

Dziękujemy za komentarze i poprawki: STI umożliwia przerywanie, CLI wyłącza przerywanie jest rzeczywiście poprawne. Byłem pewien, że było odwrotnie, ale nauczyłem się mojego montażu na C64, więc sprawdziłem to: 6510 miał wyłączone CLI i STI, aby umożliwić. Jestem zmieszany;-) –

0

X86 ma flagę przerwania (IF) w rejestrze FLAGS. Kiedy ta flaga jest ustawiona na 0, przerwań sprzętowych są wyłączone, w przeciwnym razie są one włączone. Polecenie cli ustawia tę flagę na 0, a sti ustawia ją na 1. Instrukcje, które ładują wartości do rejestru FLAGS (takie jak popf i iret) mogą również modyfikować tę flagę.

powodzenia!

Powiązane problemy