Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Przekierowania sieciowe używają blokad oportunistycznych (oplocks), aby zoptymalizować wydajność dostępu do plików i zmniejszyć ruch sieciowy w środowiskach klient-serwer.
Ta dokumentacja jest przeznaczona dla deweloperów przekierowania sieci, chociaż niektóre informacje dotyczą deweloperów aplikacji klienckich. Aby uzyskać więcej dokumentacji oplock związanych z aplikacjami klienckimi, zobacz artykuły Opportunistic Locks zestawu Windows SDK.
Omówienie oplocka
Blokada (oplock - blokada oportunistyczna) to blokada, którą klient umieszcza na pliku, który znajduje się na serwerze. W większości przypadków klient żąda oplock, aby móc przechowywać dane w pamięci podręcznej lokalnie. Przekierowania sieciowe na klientach z podłączonymi serwerami zdalnymi używają oplocków, podobnie jak aplikacje klienckie w kontekście serwerów lokalnych. Aby zapoznać się z opisem różnych bieżących i starszych typów oplocków, zobacz Typy oplocków.
Oplocks umożliwiają klientom serwera plików (takim jak klienci korzystający z protokołów SMB i SMB2) dynamiczne zmienianie strategii buforowania dla danego pliku lub strumienia w spójny sposób. Użycie blokad zwiększa wydajność i zmniejsza użycie sieci. Aby zwiększyć wydajność sieci dla zdalnych operacji na plikach, klient może buforować dane plików lokalnie, co zmniejsza lub eliminuje konieczność wysyłania i odbierania pakietów sieciowych. Przykład:
- Klient może nie musi zapisywać informacji w pliku na serwerze zdalnym, jeśli klient wie, że żaden inny proces nie uzyskuje dostępu do danych.
- Klient może buforować dane odczytu z pliku zdalnego, jeśli klient wie, że żaden inny proces nie zapisuje danych w pliku zdalnym.
Aplikacje i sterowniki mogą również używać oplocków do przezroczystego uzyskiwania dostępu do plików bez wpływu na inne aplikacje, które mogą wymagać korzystania z tych plików.
Systemy plików, takie jak NTFS, obsługują wiele strumieni danych na plik. System przyznaje oplocks na uchwytach strumienia, co oznacza, że system przyznaje oplock dla danego otwartego strumienia plików, a operacje mają zastosowanie do tego strumienia. Poza kilkoma wyjątkami, operacje na jednym strumieniu nie wpływają na oploki w innym strumieniu. Aby uzyskać więcej informacji, zapoznaj się z Żądanie i udzielanie oplocks.
W przypadku systemów plików, które nie obsługują alternatywnych strumieni danych, takich jak FAT, należy rozumieć "plik", gdy w dyskusjach o oplock mowa jest o "strumieniu".
Jądro implementuje podstawową funkcjonalność pakietu oplock, głównie za pośrednictwem rutin FsRtlXxx, takich jak FsRtlInitializeOplock. Systemy plików wywołują ten pakiet, aby zaimplementować funkcjonalność oplock w swoim systemie plików. Artykuły dotyczące „oplock” w tej sekcji opisują, jak system plików NTFS współdziała z pakietem kernela „oplock”. Inne systemy plików działają w podobny sposób, chociaż mogą występować drobne różnice.
Klucze Oplock
Uchwyt strumienia można skojarzyć z kluczem oplock, który jest wartością identyfikatora GUID, identyfikującą wiele uchwytów należących do tego samego widoku pamięci podręcznej klienta. Bardziej dokładne jest stwierdzenie, że klucz oplock jest skojarzony ze strukturą FILE_OBJECT do której odnosi się uchwyt strumienia. To rozróżnienie jest ważne podczas duplikowania uchwytu, takiego jak DuplicateHandle. Każdy z tych zduplikowanych uchwytów odnosi się do tej samej podstawowej struktury FILE_OBJECT.
Możesz jawnie podać klucz oplock (do IoCreateFileEx) podczas tworzenia uchwytu strumienia. Jeśli nie określisz wyraźnie klucza oplock podczas tworzenia uchwytu, system traktuje uchwyt jako mający unikatowy klucz oplock skojarzony z nim. Ten unikalny klucz różni się od każdego innego klucza na dowolnym innym uchwycie.
Mechanizm oplock ulega przerwaniu, gdy spełnione są wszystkie następujące warunki:
- Operacja pliku jest odbierana na uchwycie innym niż tej, na której udzielono oplocka.
- Klucz oplock skojarzony z uchwytem oplocka różni się od klucza skojarzonego z uchwytem operacji.
- Operacja nie jest zgodna z aktualnie przyznanym oplockiem.
Zerwanie blokady występuje nawet wtedy, gdy ten sam proces lub wątek wykonuje niezgodną operację. Na przykład wyłączna blokada oplocka przerywa się natychmiast, gdy:
- Proces otwiera strumień, dla którego udzielono wyłącznego oplocka.
- Ten sam proces ponownie otwiera ten sam strumień przy użyciu innego (lub bez) klucza oplock.
Aby uzyskać więcej informacji, zobacz Breaking oplocks (Łamanie blokad).
Pamiętaj, że klucze oplock istnieją na uchwytach i "umieszcza się je" na uchwycie podczas jego tworzenia. Uchwyt można skojarzyć z kluczem oplock, nawet jeśli nie udzielono żadnych blokad.