Aracılığıyla paylaş


Fırsatçı Kilit Örnekleri

Aşağıdaki örneklerde, fırsatçı kilitler yapılıp bozulurken veri ve SMB ileti hareketleri gösterilmektedir. İstemcilerin dosya öznitelik verilerini ve dosya verilerini önbelleğe alabileceğini unutmayın.

Ayrıca, bu örneklerin istemci uygulamalarının uzak sunuculardan fırsatçı kilitler istediği durumlara dayandığını unutmayın. Bu işlemler ağ yeniden yönlendiricisi ve uzak sunucu tarafından otomatik olarak başlatılır; istemci uygulaması veya uygulamaları tarafından doğrudan müdahale yoktur. Bu örnekler tarafından açıklanan işlemler, yerel istemci uygulamalarının doğrudan yerel dosya sisteminden fırsatçı kilitler istediği durumlarda genelleştirilebilir ve ağ üzerinden veri alışverişi yapılmaz.

Düzey 1 Fırsatçı Kilit

Aşağıdaki diyagramda, bir dosyadaki 1. düzey fırsatçı kilidin ağ trafiği görünümü gösterilmektedir. Oklar, varsa veri hareketinin yönünü gösterir.

Olay İstemci X Sunucu İstemci Y
1 Dosyayı açar, istek düzeyi 1 kilit ==>
2 <== Düzey 1 fırsatçı kilidi verir
3 ==> okuma, yazma ve diğer işlemleri gerçekleştirir
4 <== Dosyayı açma istekleri
5 <== Fırsatçı kilidi kırar
6 Önceden okunan verileri atar
7 Verileri yazar ==>
8 "Kapat" veya "bitti" iletisi gönderir ==>
9 Oks open operation ==>
10 ==> okuma, yazma ve diğer işlemleri gerçekleştirir <== Okuma, yazma ve diğer işlemleri gerçekleştirir

 

Olay 1'de, X istemcisi bir dosya açar ve açma işleminin bir parçası olarak dosyada düzey 1 fırsatçı bir kilit istemektedir. Olay 2'de, dosya başka hiçbir istemcide açık olmadığından sunucu düzey 1 kilidini verir. İstemci, 3. olayda dosyaya her zamanki gibi erişmeye devam eder.

Olay 4'te, istemci Y dosyayı açmaya çalışır ve fırsatçı bir kilit istemektedir. Sunucu, X istemcisinin dosyasının açık olduğunu görür. X istemcisi tüm yazma verilerini temizler ve dosya için okuma önbelleğini bırakırken sunucu Y'nin isteğini yoksayar.

Sunucu, X'e fırsatçı kilidi (olay 5) kıran bir SMB iletisi göndererek X'i temizlemeye zorlar. İstemci X "sessizce" tüm önceden okunan verileri atar; başka bir deyişle, bu işlem ağ trafiği oluşturmaz. Olay 7'de, istemci X önbelleğe alınmış yazma verilerini sunucuya yazar. X istemcisi önbelleğe alınmış verileri sunucuya yazmayı bitirdiğinde, X istemcisi sunucuya bir "kapat" veya "bitti" iletisi (olay 8) gönderir.

Sunucuya, X istemcisinin yazma önbelleğini sunucuya boşaltma işleminin tamamlandığını veya dosyayı kapattığını bildirdikten sonra, sunucu 9. olayda istemci Y için dosyayı açabilir. Sunucuda artık aynı dosya açık iki istemci olduğundan, ikisine de fırsatçı bir kilit verir. her iki istemci de dosyadan okumaya devam eder ve dosyaya bir veya ikisi de yazmaz.

Batch Fırsatçı Kilidi

Aşağıdaki diyagramda toplu fırsatçı kilidin ağ trafiği görünümü gösterilmektedir. Oklar, varsa veri hareketinin yönünü gösterir.

Olay İstemci X Sunucu İstemci Y
1 Dosyayı açar, batch lock ==>
2 <== Toplu fırsatçı kilidi verir
3 Dosyayı okur ==>
4 <== Veri gönderir
5 Dosyayı kapatır
6 Dosyayı açar
7 Veri arar
8 Verileri okur ==>
9 <== Veri gönderir
10 Dosyayı kapatır
11 <== Dosyayı açar
12 <== Fırsatçı kilidi kırar
13 ==> dosyasını kapatır
14 Oks open operation ==>
15 <== Okuma, yazma ve diğer işlemleri gerçekleştirir

 

Toplu fırsatçı kilitte, istemci X bir dosya açar, olay 1 ve sunucu, olay 2'de istemci X'e toplu kilit verir. İstemci X, sunucunun verilerle yanıt verdiği 3. olay olan olay 4 verilerini okumaya çalışır.

Olay 5,işte toplu fırsatçı kilidi gösterir. İstemci X'te uygulama dosyayı kapatır. Ancak, ağ yeniden yönlendiricisi kapatma işlemini filtreler ve bir kapatma iletisi iletmez, böylece "sessiz" bir kapatma gerçekleştirir. X istemcisi dosyanın tek sahipliğine sahip olduğundan ağ yeniden yönlendiricisi bunu yapabilir. Daha sonra, olay 6'da uygulama dosyayı yeniden açar. Ağ üzerinden veri akışı da yapılmaz. Sunucu söz konusu olduğunda, bu istemci 2. olaydan bu yana dosyayı açmıştır.

7, 8 ve 9 olayları, ağ trafiğinin her zamanki seyrini gösterir. Olay 10'da başka bir sessiz kapatma gerçekleşir.

Olay 11'de istemci Y dosyayı açmaya çalışır. X istemcisinde uygulama dosyayı kapatmış olsa bile, X istemcisinin dosyaya ilişkin görünümü, X istemcisinin açık olmasıdır. Bu nedenle, sunucu X istemcisine fırsatçı kilidi kıran bir ileti gönderir. X istemcisi artık ağ üzerinden yakın iletiyi gönderir, olay 13. Olay 14, sunucu istemci Y dosyasını açarken izler. X istemcisinde uygulama dosyayı kapattı, bu nedenle artık bu dosya için sunucudan veya sunucudan aktarım yapmaz. İstemci Y, 15. olayda her zamanki gibi veri aktarımlarını başlatır.

X istemcisine 2. olaydaki dosya üzerinde kilit verilmesi ve 13. olaydaki son kapanış arasında, istemcinin önbelleğe aldığı tüm dosya verileri, aradaki uygulama açma ve kapatma işlemlerine rağmen geçerlidir. Ancak fırsatçı kilit bozulduktan sonra önbelleğe alınan veriler geçerli kabul edilemez.

Fırsatçı Kilidi Filtrele

Aşağıdaki diyagramda, bir filtre fırsatçı kilidinin ağ trafiği görünümü gösterilmektedir. Oklar, varsa veri hareketinin yönünü gösterir.

Olay İstemci X Sunucu İstemci Y
1 Erişim hakları olmayan dosyayı açar ==>
2 <== Dosyayı açar
3 İstekler lock== filtre>
4 <== Kilit verir
5 ==> okumak için dosyayı açar
6 <== Dosyayı yeniden açar
7 Verileri okuma tutamacı ==> kullanarak okur
8 <== Veri gönderir
9 <== Veri gönderir
10 <== Veri gönderir
11 <== Dosyayı açar
12 ==> dosyasını açar
13 <== İstekler filtre kilidi
14 Filtre kilidini reddeder==>
15 <== Verileri okur
16 Verileri gönderir ==>
17 Verileri okur (önbelleğe alınmış)
18 ==> dosyasını kapatır
19 <== Dosyayı kapatır

 

Filtre fırsatçı kilidinde, istemci X bir dosya açar, olay 1 ve sunucu olay 2'de yanıt verir. İstemci daha sonra olay 3'te bir filtre fırsatçı kilidi ve ardından sunucu olay 4'te fırsatçı kilidi verir. İstemci X daha sonra, sunucunun olay 6'da yanıt verdiği 5. olayda okumak üzere dosyayı yeniden açar. ardından istemci, sunucunun verilerle yanıt verdiği verileri okumaya çalışır, olay 8.

Olay 9, işteki fırsatçı filtre kilidini gösterir. Sunucu istemciden önce okur ve istemci istememiş olsa bile verileri ağ üzerinden gönderir. İstemci verileri önbelleğe alır. Olay 10'da sunucu ayrıca gelecekte veri isteğinde bulunup istemcinin önbelleğe almaları için dosyanın başka bir bölümünü gönderir.

Olay 11 ve 12'de, başka bir istemci olan Y dosyayı açar. İstemci Y ayrıca bir filtre fırsatçı kilidi de istemektedir. Olay 14'te sunucu bunu reddeder. Olay 15'te istemci Y, sunucunun olay 16'da gönderdiği verileri istemektedir. Bunların hiçbiri X istemcisini etkilemez. Herhangi bir zamanda, başka bir istemci okuma erişimi için bu dosyayı açabilir. X istemcisinin filtre kilidini başka hiçbir istemci etkilemez.

Olay 17, istemci X okuma verilerini gösterir. Ancak, sunucu verileri zaten gönderdiğinden ve istemci verileri önbelleğe aldığı için ağ üzerinden hiçbir trafik geçmez.

Bu örnekte, X istemcisi hiçbir zaman dosyadaki tüm verileri okumaya çalışmadığından 9 ve 10 olayları tarafından gösterilen okuma işlemi "boşa harcanır"; diğer bir ifadeyle veriler hiçbir zaman kullanılmaz. Bu kabul edilebilir bir kayıptır çünkü okuma işlemi uygulamayı hızlandırmıştır.

Olay 18'de, X istemcisi dosyayı kapatır. İstemcinin ağ yeniden yönlendiricisi önbelleğe alınan verileri bırakır. Sunucu dosyayı kapatır.