Udostępnij przez


Wprowadzenie do anulowania rutyn

Każdy sterownik, w którym IRPs mogą być przechowywane w stanie oczekiwania na czas nieokreślony, musi mieć jedną lub więcej procedur Anuluj. Na przykład sterownik klawiatury może czekać przez czas nieokreślony na naciśnięcie przez użytkownika. Z drugiej strony, jeśli sterownik nigdy nie będzie kolejkować więcej IRPs niż może ukończyć w ciągu pięciu minut, prawdopodobnie nie potrzebuje procedury Anuluj.

Załóżmy, że wątek w trybie użytkownika tworzy żądanie we/wy, które jest kolejkowane przez procedurę obsługi sterownika urządzenia najwyższego poziomu, a wątek zgłaszający żądanie jest zakończony, gdy kolejka IRP jest w trakcie przetwarzania. IRP oczekujące w kolejce w imieniu zakończonego wątku powinny zostać anulowane. W związku z tym sterownik musi ustawić dostarczoną przez siebie procedurę Cancel dla każdego IRP, które dodaje do kolejki.

Sterownik, który tworzy skojarzone IRPy, musi je anulować, gdy główny IRP zostanie anulowany. Ze względu na to, że skojarzone elementy IRP nie są skojarzone z wątkiem żądającym, rutyna Anulowania głównego elementu IRP jest odpowiedzialna za anulowanie wszystkich skojarzonych z nim elementów IRP po anulowaniu głównego elementu IRP.

Liczba procedur Anulowania , które ma każdy sterownik, zależy od projektu kierowcy. Ogólnie rzecz biorąc, sterownik powinien mieć procedurę Anulowania dla każdego etapu przetwarzania we/wy, w którym IRP może być przechowywany w stanie oczekiwania na czas nieokreślony. Mówi się, że takie oczekujące IRPs są przechowywane w stanie anulowalnym.

Weź pod uwagę następujące wytyczne projektowe:

  • Sterownik najwyższego poziomu w łańcuchu sterowników warstwowych musi mieć co najmniej jedną procedurę Anuluj, jeśli kolejkuje IRPs lub w inny sposób przechowuje IRPs w stanie umożliwiającym ich anulowanie. W razie potrzeby może mieć więcej niż jedną procedurę Anuluj .

  • Sterowniki niższego poziomu, w których IRPs mogą być utrzymywane w stanie anulowalnym przez stosunkowo długie interwały, powinny również mieć co najmniej jedną procedurę Anuluj.

  • Jeśli sterownik zarządza własnymi wewnętrznymi kolejkami IRP, powinien mieć oddzielną procedurę Anuluj dla każdej z jego kolejek.

Niektóre sterowniki najwyższego poziomu dla urządzeń interaktywnych, takich jak klawiatura, mysz, dźwięk, klasa równoległa i sterowniki szeregowe, muszą mieć procedury Anuluj . Niektóre sterowniki niższego poziomu, takie jak sterownik portów równoległych, który przechowuje IRP w kolejce dla niektórych sterowników klasy wyższego poziomu przez stosunkowo dłuższe okresy, również powinny mieć procedury anulowania.

Sterowniki urządzeń pamięci masowej, wraz z pośrednimi sterownikami warstwowymi nad nimi, raczej nie mają procedur anulowania. Jest to odpowiedzialność sterownika systemu plików za obsługiwanie anulowania żądań operacji we/wy plików, podczas gdy pakiety IRP otrzymywane przez sterowniki magazynu masowego niższego poziomu są zazwyczaj przetwarzane zbyt szybko do ukończenia, aby można było je anulować.