internet pencereler Android
Genişletmek

Düzeltme: Servis "Uzaktan arama prosedürleri (RPC)" hizmeti piyasaya sürülmedi. Uzaktan Prosedürleri Çağrı (RPC - Uzaktan Prosedür Araması) Uzaktan Erişim RPC

Uzaktan Prosedürleri (RPC) Arama Uzaktan Prosedür Çağrı Kavramı

Uzaktan Prosedür Çağrı - RPC (Uzaktan Prosedür Çağrı - RPC), kontrol ve verileri ağ üzerinden aktarmak için bir makinede çalışan programın içindeki iyi bilinen ve anlaşılabilir kontrol mekanizmasını ve verileri genişletmektir. Uzaktan arama araçları, dağıtılmış hesaplama organizasyonunu kolaylaştırmaya yöneliktir. RPC kullanmanın en büyük verimliliği, uzak bileşenler arasında küçük bir yanıt süresi ve nispeten az sayıda bulaşan veri ile etkileşimli bir bağlantı bulunduğu uygulamalarda elde edilir. Bu tür uygulamaların RPC yönelimli olarak adlandırılır.

Yerel prosedürlerin çağrısının karakteristik özellikleri şunlardır:

Asimetri, yani etkileşim taraflarından biri başlatıcıdır; Senkronizasyon, yani, arama momentinden dururken arama prosedürünün yürütülmesi ve yalnızca denilen prosedürden döndükten sonra devam eder.

Uzaktan aramaların uygulanması, yerel arama zorluklarının uygulanması ile önemli ölçüde daha karmaşıktır. Arama ve çağrılan prosedürler farklı makinelerde gerçekleştirildiğinden, farklı adres alanlarına sahip olduklarından, farklı adres alanları var ve bu, özellikle makineler aynı değilse, parametreler ve sonuçları iletirken sorun yaratıyor. RPC paylaşılan hafızaya güvenemediğinden, bu, RPC parametrelerinin defo-bellek olmayan hücrelerde işaretçiler içermemesi ve parametre değerlerinin bir bilgisayardan diğerine kopyalanması gerektiği anlamına gelir. Sonraki Onur Yerel bir çağrıdan RPC, mutlaka temel iletişim sistemini kullanması, ancak bu prosedürlerin veya prosedürlerin kendilerini tanımlamada açıkça görülmemesidir. Uzaktan ek sorun yapar. Sebep programının yürütülmesi ve bir makinede ortaya çıkan yerel prosedür tek bir işlem içinde uygulanır. Ancak en az iki işlem RPC'nin uygulanmasına katılmaktadır - her bir makinede biri. Bunlardan birinin tamamlanması gerektiğinde, aşağıdaki durumlar ortaya çıkabilir: neden olan prosedür kazası, uzaktan neden olan prosedürler "artık" olacak ve uzak prosedürler yanlışlıkla tamamlandığında, uzaktan bir şekilde uzaktan bir cevap bekleyecek prosedürlere neden oluyor prosedürler.

Ek olarak, programlama dillerinin heterojenliği ve çalışma ortamlarının heterojenliği ile ilgili bir dizi problem vardır: Herhangi bir programlama dilinde desteklenen prosedürlerin veri yapıları ve prosedürleri, diğer dillerde de aynı şekilde desteklenmez.

Bunlar ve bazı problemler, birçok dağıtılmış işletim sisteminin altında yatan yaygın RPC teknolojisini çözer.

Temel RPC işlemleri

RPC'nin çalışmalarını anlamak için, ilk önce yerel bir prosedür çağrısının, özerk bir şekilde çalışan bir düzenli makinede yürütülmesini düşünün. Bırak, örneğin, bir sistem araması olacak

Sayım \u003d okuma (FD, BUF, NBYETES);

fD'nin bir tamsayı olduğu yer
BUF - Karakter dizisi,
Nbaytes bir tamsayıdır.

Prosedüre neden olan bir arama yapmak için parametreleri ters sırayla yığına iter (Şekil 3.1). Okunur çağrısı yapıldıktan sonra, dönüş değerini kayıt için yerleştirir, dönüş adresini hareket ettirir ve parametreleri yığıntan seçen arama prosedürünün kontrolünü döndürür, ilk durum. Parametreleri olan dilde adlandırılabileceğini veya referans olarak (ada göre) veya değere göre (değere göre). Denilen prosedürle ilgili olarak, değerler yerel değişkenler başlatılır. Denilen prosedür bunları değiştirebilir ve bu, bu değişkenlerin orijinallerinin arayan prosedüründeki değerini etkilemeyecektir.

Değişkene bir işaretçi adı verilen prosedüre iletilirse, bu değişkenin değerindeki değişiklik, ortaya çıkan prosedür bu değişkenin değerindeki ve neden olan prosedür için değişimi gerektirir. Bu gerçek RPC için çok önemlidir.

S'de kullanılmayan başka bir parametre iletim mekanizması da var. Kopyalama / geri yükleme denir ve kopyalamaktır. sebep Programı Yığındaki değişkenler Değerler biçiminde ve daha sonra arama işleminin orijinal değerlerinin üstesinden geldikten sonra tekrar kopyalanır.

Kullanılacak parametreleri iletmek için hangi mekanizmanın, dil geliştiricileri tarafından kabul edilir. Bazen iletilen veri türüne bağlıdır. Örneğin, örneğin, tüm ve diğer skaler verileri her zaman değer ve dizilerle iletilir - referans olarak.

İncir. 3.1. a) Okumayı kontrol etmeden önce yığın;
b) prosedür sırasında yığın;
c) Arama programına döndükten sonra yığın

RPC'ye dayanan fikir, yerel prosedürün aramasının yanı sıra görünen uzak prosedüre bir çağrı yapmaktır. Başka bir deyişle - RPC şeffaf yapmak için: Arayanın adı verilen prosedürün başka bir makinede olduğunu ve bunun tersi olduğunu bilmesi gerekmez.

RPC şeffaflığa aşağıdaki gibi ulaşır. Aradığınız prosedür gerçekten uzak olduğunda, kütüphane yerel bir prosedür yerine, istemci saplama (saplama - fiş) adlandırılan prosedürün başka bir sürümü yerine yerleştirilir. Orijinal prosedür gibi, saplama çağrı sırası kullanılarak denir (Şekil 3.1'de olduğu gibi), çekirdeğe erişirken de kesintiye sahiptir. Yalnızca orijinal prosedürün aksine, parametreleri kayıtlara yerleştirmez ve çekirdekten gelen verileri talep etmemektedir, bunun yerine uzak bir makineden çekirdeğe göndermek için bir mesaj oluşturur.

RPC Yürütme Adımları

Prosedürün uzak bir çağrısı yaparken yazılım bileşenlerinin etkileşimi, Şekil 3.2'de gösterilmektedir. Müşteri taslakları istemci programı tarafından çağrıldıktan sonra, ilk görevi tamponu göndererek doldurmaktır. Bazı sistemlerde, müşteri saplaması, her yeni talebin aldıktan sonra her seferinde her seferinde doldurulmuş tek bir sabit uzunluktaki tampona sahiptir. Diğer sistemlerde, mesaj tamponu bireysel mesaj alanları için bir tampon havuzdur ve bu tamponların bazıları zaten doldurulur. Bu yöntem, paketin oluştuğunun bir formatına sahip olduğu durumlar için özellikle uygundur. büyük sayı alanlar, ancak bu alanların çoğunun değerleri aramaya çağırmaktan değiştirilmez.

Daha sonra parametreler uygun formata dönüştürülmeli ve mesaj tamponuna eklenmelidir. Bu noktada, mesaj şanzıman için hazırdır, bu nedenle çekirdek çağrısının bir kesintisi gerçekleştirilir.

İncir. 3.2. Uzaktan Prosedür Araması

Çekirdek kontrol aldığında, bağlamları değiştirirse, işlemci kayıtlarını ve hafıza kartını (sayfa tanımlayıcıları) kaydeder, çekirdek modunda çalışmak için kullanılacak yeni bir hafıza kartı ayarlar. Çekirdeğin bağlamları ve kullanıcının farklılık gösterdiğinden, çekirdek, mesajı kendi adres alanına doğru bir şekilde kopyalamalıdır, böylece varış yeri adresini (bir, muhtemelen diğer başlık alanları) hatırlayın ve ağ arayüzüne aktarıldı. Bu, istemci tarafındaki çalışmayı tamamlar. Şanzıman zamanlayıcısı açık ve çekirdek bir yanıtın döngüsel bir anketi gerçekleştirebilir veya yürütülecek başka bir işlemi seçecek planlayıcının kontrolünü aktarabilir. İlk durumda, sorgu hızlandırılır, ancak çoklu program yoktur.

Sunucu tarafında, gelen bitler alıcı alet tarafından veya yerleşik tamponun içine veya RAM'de yerleştirilir. Tüm bilgiler elde edildiğinde, bir kesme oluşturulur. Kesinti işleyicisi, paket verilerinin doğruluğunu kontrol eder ve bıçakın nasıl iletilmesi gerektiğini belirler. Eğer saplamaların hiçbiri bu paketi beklemiyorlarsa, işleyici arabelleğe yerleştirmeli, hatta reddetmelidir. Bekleyen bir saplama varsa, mesaj buna kopyalanır. Son olarak, bağlamlar, rekorlar ve hafıza kartı ile sonuçlanır, aynı zamanda, saplamanın alım çağrısı yaptıkları zamanlar alır.

Şimdi sunucu saplaması çalışmaya başlar. Parametreleri açar ve buna göre yığına yerleştirir. Her şey hazır olduğunda, sunucu arar. Prosedürü tamamladıktan sonra, sunucu sonuçları istemciye iletir. Bunun için yukarıda açıklanan tüm aşamalar yalnızca ters sırada yapılır.

Şekil 3.3, her RPC çağrısı için gerçekleştirilmesi gereken komut sırasını göstermektedir ve Şekil 3.4 - Toplam RPC zamanının hangi payının, tarif edilen 14 aşamasının her birinin yürütülmesine nasıl harcanır. Çalışmalar, çok işlemeci bir iş istasyonu Dec Firefly'de gerçekleştirildi ve, beş işlemcinin varlığı ölçüm sonuçlarından mutlaka etkilenmesine rağmen, Şekilde tarif edilen histogram RPC yürütme işlemi hakkında genel bir fikir veriyor.

İncir. 3.3. RPC Prosedürü Yürütme Adımları

İncir. 3.4. RPC'nin 14 aşaması arasında zaman dağılımı

1. Arama bıçağı

2. Tamponu hazırlayın

3. Paket parametreleri

4. Başlık alanını doldurun

5. Mesajdaki sağlama toplamını hesaplayın

6. Çekirdeğe kesme

7. Yürütme için paket kuyruğu

8. Mesajın QBUS veri yolu denetleyicisine aktarılması

9. Ethernet için iletim süresi

10. Kontrolörden bir paket alın

11. İşleme Prosedürü Kesme

12. Checksum'un hesaplanması

13. Bağlamın kullanıcı alanına geçiş yapma

14. Sunucu Stubunu Yapma

Dinamik ciltleme

İstemcinin sunucunun konumunu nasıl ayarladığı sorusunu düşünün. Bu sorunu çözme yöntemlerinden biri, sunucunun ağ adresinin istemci programındaki doğrudan kullanımıdır. Bu yaklaşımın olmaması, olağanüstü esnekliktir: Sunucu taşındığında veya sunucu sayısında bir artışla veya arayüzün tüm bunlar ve diğer birçok durumda değiştirildiğinde, kullanılan tüm programları yeniden derlemek gerekir. Sunucu adresinin sert görevi. Tüm bu sorunları önlemek için, bazı dağıtılmış sistemlerde, denilen dinamik bağlanma kullanılır.

Dinamik bağlanma için ilk an, sunucunun resmi bir tanımdır (özellik). Şartname, dosya sunucusunun adını, bu sunucu tarafından müşteriler için verilen prosedürlerin sürüm numarasını ve listesini içerir (Şekil 3.5). Her prosedür için, parametrenin sunucuya göre giriş veya çıkış olup olmadığını belirten parametrelerinin bir açıklaması verilir. Bazı parametreler aynı anda girip çıkış olabilir - örneğin, istemciye sunucuya gönderilen belirli bir dizi orada değiştirilir ve ardından istemciye geri döner (kopyalama / geri yükleme işlemi).

İncir. 3.5. RPC Sunucusu Şartnamesi

Resmi sunucu spesifikasyonu, hem istemci hem de sunucu bıçaklarını oluşturan Staby Generator programının kaynak verileri olarak kullanılır. Sonra ilgili kütüphanelere yerleştirilirler. Kullanıcı (istemci) programı, sunucu spesifikasyonunda tanımlanan herhangi bir prosedüre neden olduğunda, karşılık gelen taslak prosedürü ikili program koduyla ilişkilidir. Benzer şekilde, sunucu derlendiğinde, sunucu bıçakları bununla ilişkilidir.

Sunucuyu başlattığınızda, ilk hareketi, sunucu arayüzünün Binder "OHM adlı özel bir programla aktarılmasıdır. Sunucu kaydı işlemi olarak bilinen bu işlem, ad sunucusunun, sürüm numarasının, benzersiz bir tanımlayıcının aktarılmasını içerir. ve sürücü konumu tanımlayıcısı. Tanımlayıcı sistemsel olarak bağımsızdır ve IP, Ethernet, X.500 veya diğer adresleri sunabilir. Ek olarak, kimlik doğrulaması gibi diğer bilgiler içerebilir.

Müşteri, ilk kez uzak prosedürlerden birini çağırdığında, örneğin, Müşteri saplaması, henüz sunucuya bağlı olmadığını görür ve arayüz ithalatı isteyen bir mesaj bağlayıcı programı gönderdiğini görür. İstenen sürüm İstediğiniz sunucu. Böyle bir sunucu varsa, bağlayıcı tanımlayıcıyı ve benzersiz tanımlayıcıyı istemci bıçağına iletir.

İstemci bıçağı Bir sorguyla bir mesaj gönderirken, tanımlayıcıyı bir adres olarak kullanır. Mesaj, bu makinede birkaç tane bulunmaması durumunda, sunucu çekirdeğini istediğiniz sunucuya göndermek için kullandığı parametreleri ve benzersiz bir tanımlayıcıyı içerir.

İthalat / dışa aktarma arayüzlerinde oluşan bu yöntem yüksek esnekliğe sahiptir. Örneğin, aynı arayüzü destekleyen birkaç sunucu olabilir ve müşteriler sunucuların üzerinden rastgele dağıtılır. Bu yöntem çerçevesinde, sunucuların periyodik anketi mümkün olur, performanslarının analizi ve reddetme durumunda, otomatik KapatmaBu, sistemin genel tamamını arttırır. Bu yöntem ayrıca müşteri kimlik doğrulamasını da destekleyebilir. Örneğin, sunucu, yalnızca belirli bir listeden müşteriler tarafından kullanılabileceğini belirleyebilir.

Bununla birlikte, dinamik bağlama, dışa aktarma ve içe aktarma arayüzleri için ek havai (geçici maliyetler) dezavantajları vardır. Bu maliyetlerin büyüklüğü önemli olabilir, çünkü birçok müşteri işlemi kısa süre var ve işlemin işlemi her başlattığında, arayüz prosedürü tekrar çalıştırılmalıdır. Ek olarak, bağlayıcı programı büyük dağıtılmış sistemlerde bir darboğaz olabilir ve birçok benzer amaç programının oluşturulması, işlemlerin oluşturulması ve senkronizasyonu yükünü de arttırır.

Arıza durumunda RPC semantiği

İdeal olarak, RPC doğru şekilde çalışmalı ve başarısızlık durumunda. Aşağıdaki başarısızlık sınıflarını düşünün:

Müşteri, sunucunun konumunu belirleyemez, örneğin, istenen sunucunun arızası durumunda veya müşteri programının uzun süre derlendiği ve kullanıldığı gerçeğinden dolayı eski versiyon Sunucu arayüzü. Bu durumda, bir istemci isteğine cevaben bir mesaj bir hata kodu içerir. İstemciden sunucuya bir istek kaybetti. En kolay çözüm - belirli bir zamandan sonra isteği tekrarlayın. Sunucudan istemciye cevap verdi. Bu seçenek bir önceki tarafından daha karmaşıktır, çünkü bazı prosedürler idampotent değildir. İdempotent, prosedür denir, yürütme talebi birkaç kez tekrarlanabilir ve sonuç değişmez. Böyle bir prosedürün bir örneği bir dosyayı okuyabilir. Ancak, bir banka hesabından bir miktar miktarın çıkarılması prosedürü iDempotent değildir ve cevap kaybı durumunda, tekrarlanan istek müşterinin hesabının durumunu önemli ölçüde değiştirebilir. Olası çözümlerden biri, tüm prosedürleri idampotent formuna getirmektir. Bununla birlikte, uygulamada her zaman başarılı olmaz, bu nedenle, başka bir yöntem kullanılabilir - tüm isteklerin istemci çekirdeğinin tutarlı bir numaralandırılması. Sunucu çekirdeği, müşterilerin her birinin en son taleplerinin sayısını hatırlar ve her istek alırken analizi gerçekleştirir - bu isteğin birincil veya tekrarlanmadığı. Talebi aldıktan sonra sunucu çarptı. Ayrıca mülkün mülkiyeti için önemlidir, ancak ne yazık ki numaralandırma sorgularıyla ilgili talepler uygulanamaz. Bu durumda, başarısızlık meydana geldiğinde, işlemden önce veya sonrasında önemlidir. Ancak müşteri çekirdeği bu durumları tanımıyor, sadece cevap süresinin süresi dolduğu biliniyor. Bu sorunun üç yaklaşımı vardır: Sunucu yeniden başlatılana ve işlemi tekrar çalıştırmaya çalışın. Bu yaklaşım, RPC'nin en az bir kere ve muhtemelen daha fazla bitene kadar tamamlanmasını sağlar. Hemen bir başvuruda bir hata bildirin. Bu yaklaşım, RPC'nin bir kereden fazla gerçekleştirilmesini sağlar. Üçüncü yaklaşım hiçbir şey garanti etmez. Sunucu reddettiğinde, istemcinin destek olmadığı ortaya çıkmaz. Rpc olabilir veya yerine getirilemez veya birçok kez yapılmış olabilir. Her durumda, bu yöntemin uygulanması çok kolaydır.

Bu yaklaşımların hiçbiri çok çekici değildir. Ve genel durumdaki tam olarak bir RPC uygulaması garanti altına alınacak ideal seçenek, temel hususlar üzerine uygulanamaz. Örneğin, bir uzaktan çalıştırma, yazıcı tamponunu yüklemeyi ve bir yazıcının başladığı bir yazıcı kontrol kaydında bir bit yüklemesini içeren bir metnin bir yazdırmasıdır. Sunucu çökmesi, kontrol bitini taktıktan sonra hem bir mikrosekond için hem de mikrosekond için oluşabilir. Arıza anı tamamen iyileşme prosedürünü tamamen belirler, ancak müşteri başarısızlık anını bilemez. Kısacası, sunucu çökmesinin yeteneği RPC'nin doğasını kökten değiştirir ve merkezi ve dağıtılmış sistem arasındaki farkı açıkça yansıtır. İlk durumda, sunucunun çöküşü müşterinin çökmesine yol açar ve iyileşme imkansızdır. İkinci durumda, sistemi geri yükleyecek sistem gerçekleştirilir ve muhtemelen gereklidir.

Bir istek gönderdikten sonra müşteri bir kaza geçirdi. Bu durumda, sonuçların hesaplanması, kimsenin beklememesidir. Bu tür hesaplamalar "yetimler" denir. Yetkilerin varlığı çeşitli sorunlara neden olabilir: yansıtıcı olmayan maliyetler, işlemci zamanın yansıtıcı maliyetleri, kaynakları engelleme, sistemi yeniden başlatmadan önce müşteri makine tarafından yayınlanan isteğe bağlı olarak, mevcut talebe cevap.

Yetimlerle nasıl yapılır? 4 olası çözüm düşünün.

Yıkım. Müşteri saplaması bir RPC mesajı göndermeden önce, şimdi yapacağını bildiren bir dergiye işaret ediyor. Günlük bir diskte veya başka bir hafızada, sürdürülebilir hatalarda saklanır. Kazadan sonra, sistem yeniden başlatılır, dergi analiz edilir ve yetimler ortadan kalkar. Bu yaklaşımın dezavantajları, öncelikle, her bir RPC'nin diske bir kaydı ile ilişkili maliyetler ve ikinciye, ikinci nesil yetimin ortaya çıkması nedeniyle birinci nesil yetimler tarafından verilen ikinci nesil yetimlerin ortaya çıkması nedeniyle olası verimsizliği içerir. Reenkarnasyon. Bu durumda, tüm problemler diske kayıt kullanmadan çözülür. Yöntem, zamanın sırayla numaralandırılmış periyotlar için bölünmesinden oluşur. Müşteri yeniden başlatıldığında, yeni dönemin başlangıcındaki tüm makinelere yayın mesajı iletir. Bu mesajı aldıktan sonra, tüm uzaktan hesaplamalar ortadan kaldırılır. Tabii ki, ağ bölümleniyorsa, bazı yetimler hayatta kalabilir. Yumuşak reenkarnasyon önceki duruma benzer, ancak tüm uzaktan hesaplamaların bulunmadığından ve yok edilmemesi dışında, ancak yalnızca yeniden başlatma istemcisini hesaplamaktadır. Son. Her sorguda, yürütülmesi gereken standart bir zaman dilimi verilir. Talep ayrılan süre boyunca gerçekleştirilmezse, ek bir kuantum tahsis edilir. Gerekse de ek işAncak, müşterinin kazasından sonra, sunucu istemciyi yeniden başlatmadan önce bir aralık bekliyorsa, tüm yetimler mutlaka tahrip edilir.

Uygulamada, bu yaklaşımların hiçbiri arzu edilmez, dahası, yetimlerin imhası durumunu ağırlaştırabilir. Örneğin, yetimin bir veya daha fazla veritabanı dosyasını engelledi. Yetim aniden tahrip edilirse, bu kilitler, ek olarak, yok edilen yetimler çeşitli sistem sıralarında durabilir, gelecekte yeni süreçlere ve benzerlerine neden olabilirler.

Bilgisayar sistemlerinin birçok kullanıcısı, uzak prosedürler olarak bu tür kavramları duymuş, uzak prosedürler veya RPC çağırır. Bu, herkes teknoloji için olduğunu, nasıl çalıştıklarını ve ihtiyaç duydukları şey olduğunu hayal etmiyor. Ancak, bu hizmeti Windows sistemlerinde kesenlerin çoğu, kritik başarısızlıklarla ilgili sıklıkla ilgili hatalar alabilir. Bu konuda ve diğer birçok şey tartışılacaktır.

Uzaktan arama prosedürleri: Nedir?

Bazı teorik bilgilerle durmaya başlayın. Uzak Prosedürler olarak kabul edildiği gibi (uzaktan kumanda işlemlerini çağırın), kullanılan terminal tarafından kullanılan adres alanında bilgisayar sistemlerinin işlevlerini başlatmanıza veya kullanmanıza izin veren bir mekanizmadır. Basitçe söylemek gerekirse, bu, örneğin bir yerel ağ veya internet bağlantısı üzerinden uzak bir bilgisayara erişmenin bir yoludur.

Bununla birlikte, uzak prosedürler (uzaktan kumanda prosedürlerini çağırın) RPC olarak gösterilir (İngilizce uzaktan prosedür aramasından kısaltma), sadece uzak bilgisayarlara değil. Yerel düzeyde, bu tür teknolojiler de uygulanır. En basit örnek olarak, özel kütüphanelerle etkileşime girerek bir programın bir başka uygulamasından belirli bir işlevi arayabilirsiniz.

Ayrıca, kesinlikle hepsinde windows sürümleri Böyle bir servis var ve verimliliği kapattığında veya reddedildiğinde, XP'nin modifikasyonu hiç çalışmıyor.

Çalışma prensibi

Kural olarak, istemci-sunucu modunda çalışmak için "Uzak RPC Prosedür Araması" hizmeti, en az iki ana bileşen gerektirir: veri değişimi ve seri hale getirme dili için bir ağ protokolü (bir işlemin veya bilgi yapının bit dizisine) ).

Mimariler yeteneklerinde tamamen farklı ve farklı olabilir. Ancak, sözde taşıma düzeyinde veri alışverişi için, UDP ve TCP protokolleri en yaygın olarak kullanılır, daha az yaygın olarak kullanılır - HTTP.

Teknik yönlere girmemek için, bu tür teknolojilerin çalışma prensibinin en basit açıklaması aşağıdaki örnekte olabilir: İstemci işlemi, sunucuya belirtilen parametrelerle seçilen prosedürün bir açıklaması ile bir istek oluşturur ve gönderir , ardından sunucu istenen direktifi gerçekleştirir ve müşteri aracında görüntülenen müşteriye çağrıyı gönderir. Bununla birlikte, sunucu işleyicisinin kendisi, Bekleme modunda konuşması ve yalnızca istemci isteklerini almanın anlarında etkinleştirilir. "Talep-Yanıt" şemasının hemen yapıldığı hiçbir şekilde gerekli değildir.

Aynı zamanda, nispeten az miktarda veri alışverişi yaparken maksimum performans etkisi ve bunun arasında etkileşimli bir bağlantının kurulduğu bileşenlerin düşük yanıt süresi elde edilir.

Uzaktan Prosedürler (Arama Uzaktan Prosedürleri): Karakteristik Özellikler ve Uygulama

Böylece, bu teknolojilerin iki ana özelliği ayırt edilebilir:

  • asimetri (uzaktan prosedürün sadece taraflardan birinin başlatılması);
  • senkronizasyon (Arama prosedürünün askıya alınması, talepin başlatılmasından bu yana ve bir cevap gönderdikten sonra devam ettirin).

Uygulamalar için, uzak prosedürler (uzaktan prosedürleri çağırın) bugün, en çok uygulananların aşağıdakileri aşağıdakileri kullandığı çeşitli temel teknolojileri kullanın:

  • DCE / RPC - TCP / IP, SMB / SIFC, vb. Dayalı İkili Protokol;
  • DCOM, nesnelere referansları iletmenin ve işleme yöntemleri çağrılarını iletmek için nesne yönelimli bir ektir;
  • JSON-RPC - HTTP'ye göre bir metin protokolü;
  • .NET Remoting, UDP, TCP ve HTTP'ye dayalı bir ikili protokoldür;
  • Java RMI;
  • SABUN;
  • XML RPC;
  • Güneş rpc;
  • Zeroc Buz;
  • Roidix.rpc ve ark.

Sorunlar ve Görevler

Şimdi eksiklikler hakkında birkaç kelime. En önemli sorun ve buna göre, uygulama görevi, uzaktan arama hizmeti düğümü aracılığıyla uzak bir prosedür çağırmanın aynı çalışmasının aynı anda farklı makinelerde ve genellikle çeşitli işletim sistemleri, adres boşlukları ve mimarisi ile aynı anda gerçekleştirilmesidir. İşlemde, bu parametreler bir terminalden diğerine kopyalanmalıdır. Bu, yalnızca nakliye protokolünü değil, aynı zamanda farklı veri türlerini bayt sekansına dönüştürmenizi sağlayan seri hale getirmeyi kullanır.

İkinci nokta, uzak prosedürlerin (Arama Uzaktan Prosedürleri), hem yerel düzeyde hem de iki (istemci makinede hem de sunucuda) bir işlem kullanmadığı gerçeğiyle ilişkilidir. Bu nedenle, programın terminallerden birindeki acil durum tamamlanması, diğer tarafta aynı reaksiyona neden olabilir.

Son olarak, şebekelerden biri, yerleşik tek tip standartlara rağmen, bazı programlama dillerinin heterojenliği nedeniyle uyumluluk sorunudur.

Ana Tipler Alt Sistemler

Windows 10 prosedürlerinin uzaktan mücadelesi veya aşağıdaki diğer herhangi bir sıralama sistemi, özel alt sistemlerin kullanımı anlamına gelir:

  • veri paketlerinin garantili teslimatı ile giden ve gelen bağlantıları yönetmek için kullanılan taşıma alt sistemi;
  • havuz protokolleri - sonuçta ortaya çıkan terminalde prosedürün gerçekleştirilmesi kavramı;
  • serileştirme (Yürüyüş) - Veri akışlarını mimarlıktan bağımsız olarak standart bayt kodlarına dönüştürme;
  • Şifreleme, onlardaki dijital imzanın uygulanmasıyla birlikte paketler gönderilir ve alındı;
  • kimlik Doğrulama ve Yetkilendirme Sistemi.

RPC uygulaması ne tür programlar gerektirir?

Ne hakkında konuşursak yazılım Modülleri İşletim sistemleri, RPC servisinin dahil edilmesini gerektirir, hepsi sadece imkansızdır.

Ancak, tüm iyi bilinen Windows-Systems bileşenleri arasında, faks servisine, şifreleme hizmetlerini, hata günlüğünü, yardım ve destek, HID cihazlarına erişim, mesajlaşma servisine (Messenger), disk yönetimi ve mantıksal bölümleri, çıkarılabilir sürücüleri kontrol edebilirsiniz, ses sistemi, windows Installer Ve Tanrı haberleri budur.

Bu listenin, sistemin kaç bileşeninin ve kullanıcının bu hizmete bağlı olduğunu anlamak için yeterli olduğu görülüyor.

RPC'yi etkiler

Genel olarak, önceki açıklamaya göre, RPC'nin etkisi tahmin edilebilir. Örneğin, ses tamamen ortadan kaybolduğunda, bu hizmet kapalı olduğunda, sistemin kritik başarısızlıklardan sonra veya kullanıcı tarafından başlatıldıktan sonra sistemi geri yüklemek için mümkün olmadığı zaman oldukça az sayıda durum vardır. Kablosuz ağ ayarlarını "uçtu".

Ancak en üzücü olan, RPC prosedürlerine uzaktan aramayı devre dışı bırakırsanız, bazen ana sistem ayarlarına bile erişmek mümkün değil, yönetici tarafından kendi terminalinde en az üç kez bir kullanıcı olabilir.

Bu hizmeti devre dışı bırakmak mümkün müdür

"Uzaktan Prosedür Araması" hizmetini devre dışı bırakmak için çok az ve büyük, birçok denedi (ve denedim). Kategorik olarak yasaktır. Genel olarak, sistemin kendisi, bunu yapmak için böyle bir girişimi uygularken, uygun bildirimi vermez.

Ancak Herkes, Hizmetler bölümünde (Servisler.msc) 'de, hala "RPC prosedürlerinin uzaktan çağrısının bulucu" olarak böyle bir şey olduğunu bilmiyor. Burada sadece sistem için ağrısız devre dışı bırakılabilir. Çalışmalarında kullanabilecek uygulamalar, gerekirse hizmeti bağımsız olarak arayacaktır.

Arızalar ve hataların ortadan kaldırılması

Son olarak, prosedür uzaktan aranırken bir hata verilirse, neler yapılabileceğini görelim. En basit durumda, hizmeti tekrar etkinleştirmeyi deneyebilirsiniz (tabii ki, sönerse).

Bunu yapmak için, istenen hizmetin bulunduğu ilgili bölümde, çift tıklama menüsünün parametre düzenleme menüsü olarak adlandırılır, Güç düğmesine basılır ve dönüş tipi otomatik olarak yüklenir. Standart bir yükleme sistemi ile böyle bir prosedür yaparsanız, mümkün değildir, benzer eylemler üretmeyi deneyebilirsiniz. güvenli mod. Bazı uzmanlar, Antivirüs yazılımını devre dışı bırakmak için aynı anda tavsiye edilir.

Bu yardımcı olmazsa, ancak elinizde sistemin kurulum veya kurtarma diski vardır, komut konsolunu Yönetici Hakları ile çalıştırabilirsiniz (diskten indirmeniz gerekmez) ve bu komutları içine kaydolmaya gerek yoktur:

  • cD Z: \\ i386 (Z - Edebiyat Optik Sürücü);
  • genişlet explorer.ex_% temp% \\ explorer.exe;
  • genişlet svchost.ex_% temp% \\ svchost.exe.

Bundan sonra, "Görev Yöneticisi" ni başlatın (Ctrl + Del + Alt veya Taskmgr, "Çalıştır" menüsünde ve Explorer.exe işlemini tamamlayın.

"Dispatcher" da, Svhost.exe'nin tüm işlemlerini durdurduktan sonra, bir dize% temp% \\ svchost.exe% SystemRoot% \\ System32 / Y kopyası% \\ system32 / y kopyasını girmek için 60 saniye boyunca zamanın olması gerekir.

Son olarak, editöre erişim varsa sistem kayıt defteri (Regedit) restore edilmiş, sistem ve currentControlSet bölümleriyle HKCC dalından geçmeniz ve değerini sıfıra değiştirerek CSCONFIGLAGS parametresine gidin.

Bu, tüm RPC ile ilişkili hataların düzeltilmesi yöntemleri değildir. Gerçek şu ki, eğer bu hizmet, diğer hizmetlerin ihlallerini gerektiriyorsa, önce performanslarıyla ilgili sorunları ortadan kaldırmak zorunda kalabilir, ancak daha sonra RPC'ye karşı biraz harekete geçmesi gerekir. Ve her zaman yukarıda tarif edilen parametrelere ve ayarlar elde edilemez tam erişim. Gerçekten hiçbir şey olmasa, uyumadığı için, işletim sistemini tam olarak yeniden yüklemek zorunda kalacak, ancak buna ulaşmayacağını ummak istiyorum.

Sonuç

İşte teknoloji ve RPC servisi ile ilgili kısa ve hepsi. Aslında, hepsi bu şartnamede sunulduğundan ve en azından ilk bilgiye sahip olmalısınız konuyu tam olarak anlamak için çok daha zor görünüyor. Ancak RPC hakkında ortak bir fikre sahip olmak için, bu kadar çok şey var.

Bağlantı kesişimine gelince, böyle şeylere girmeye çalışmayın, aksi takdirde tüm sistem reddedilir. Düşük düzeltme çözeltisi genellikle yardımcı olur, ancak tam garantinin yine de verilememesi, çünkü hizmetin devre dışı bırakılması diğer bileşenlerde arızalara neden olabilir.



Ağ üzerinden iletişim kuran programlar iletişim mekanizmasına ihtiyaç duyar. Alt seviyede, paket alınır, ağ sinyal işleme programı tarafından işlenen sinyal sağlanır. Üst düzeyde, rendezvous mekanizması (Rendezvu) cehennemde faaliyet göstermektedir. NFS, istemcinin sunucu ile etkileşime girdiği bir uzaktan prosedür arama mekanizması (RPC) kullanır (bkz. Şekil 1). Bu işlem doğrultusunda, müşteri önce sunucuya bir istek gönderen prosedürü ifade eder. Paketin bir sorgu ile gelmesi üzerine, sunucu açılışı için prosedürü çağırır, istenen hizmeti gerçekleştirir, cevabı gönderir ve kontrolü istemciye gönderilir.

RPC arayüzü üç seviyeden oluşan sunulabilir:

  1. Üst seviye tamamen "şeffaf". Bu seviyenin programı, örneğin, uzak makinedeki kullanıcı sayısını döndüren RNUSERS () prosedürüne bakın. Programda temyiz yaparken RPC mekanizmasının kullanımını bilmenize gerek yoktur.
  2. Ortalama seviye En yaygın uygulamalar için tasarlanmıştır. Bu seviyede RPC çağrıları Regogram RegistryRPC () ve CallRPC () (): RegisterRPC () ortak bir koyu kodu alır ve CallRPC (), uzaktan prosedür için bir arama yürütür. RNUSERS () çağrısı, bu iki alt yordam kullanılarak uygulanır.
  3. Alt seviye, varsayılanları prosedürlerin parametre değerlerine değiştiren daha karmaşık işler için kullanılır. Bu seviyede, RPC mesajlarını iletmek için kullanılan jakları açıkça manipüle edebilirsiniz.

Kural olarak, üst seviyeyi kullanmanız ve daha fazla ihtiyaç duymadan daha düşük seviyeleri kullanmaktan kaçınmalısınız.

Bu kılavuzda, yalnızca C'deki arayüzü düşünmemize rağmen, uzak prosedürlere yapılan itiraz herhangi bir dilden yapılabilir. RPC mekanizmasının, farklı makinelerdeki işlemler arasındaki etkileşimi organize etmek için çalışması, bir makine üzerindeki çalışmalarından farklı değildir.

RPC (uzaktan prosedür araması, uzaktan prosedür arama hizmeti), uzak kullanıcılar ve bu kullanıcıların isteklerinde başlatılan belirli ana bilgisayar programları arasındaki bir arayüzdür. Herhangi bir konağın RPC servisi, kural olarak müşterilere çeşitli programlar sunar. Bu programların her biri, sırayla, bir veya daha fazla uzaktan prosedürdendir. Örneğin, servis uzaktan kumandası dosya sistemi RPC çağrısında bulunan NFS, yalnızca iki programdan oluşabilir: Örneğin, bir program, üst düzey kullanıcı arayüzleri ve diğeri düşük seviye I / O işlevleriyle etkileşime girer.

Uzaktan prosedürün her bir çağrısında, iki taraf da dahildir: Prosedürü sunucuya çağırmak için bir istek gönderen bir aktif istemci ve müşteriye cevabı gönderen sunucuyu.

Not. Bu durumda "Müşteri" ve "Sunucu" terimlerinin belirli bir işleme özel bir işletmeye veya yazılıma (işlem veya program) hem müşteri rolü hem de sunucunun rolü olarak çalışabileceğini unutmayın. Örneğin, uzaktan prosedür servisinin çalışmasını sağlayan bir program, aynı anda bir ağ dosyası sistemi ile çalışmada bir müşteri olabilir.

RPC protokolü, yerel prosedürlerin çağrılmasının mekanizmasına benzer uzaktan prosedür arama modellerinde yerleşiktir. Yerel bir işlemi çağırdığınızda, argümanları belirli bir bellekten, yığın veya ortam değişkenlerine yerleştirirsiniz ve işlem kontrolünü belirli bir adrese gönderirsiniz. İşi tamamladıktan sonra, sonuçları belirli bir adreste okudunuz ve işleminize devam edersiniz.

Uzak bir prosedürle çalışma durumunda, ana fark, uzaktan fonksiyonun çağrısının iki işlem sunmasıdır: istemci işlemi ve sunucu işlemi.

İstemci işlemi, adı verilen prosedürün parametrelerinin etkin olduğu ve yanıt mesajının çalışmasının sonuçlarından beklediği sunucuya bir mesaj gönderir. Bir cevap alırken sonuç okunur ve işlem çalışmaya devam eder. Sunucu tarafında, arama işleyici işlemi bekleme durumundadır ve mesaj alındığında, prosedürün parametreleri okur, yürütür, cevabı gönderir ve bir sonraki aramayı bekler.

RPC protokolü, işlemler arasındaki ilave ilişkiler için herhangi bir gereklilik getirmez ve gerçekleştirilen fonksiyonların senkronizasyonu gerektirmez, yani çağrıların eşzamansız ve hayal edilebilir, bu nedenle müşteri cevap sırasında başka prosedürler yapabilir. RPC sunucusu, her işlev için ayrı bir işlemi veya sanal bir makineyi vurgulayabilir, bu nedenle, önceki sorguların sonunu beklemeden, hemen aşağıdakileri kabul edebilir.

Ancak, yerel ve uzak prosedürler için yapılan çağrılar arasında birkaç önemli fark vardır:

  1. Hata işlemesi. Herhangi bir durumda müşteri, sunucuda veya ağda uzak prosedürler çağırırken ortaya çıkan hataların bildirilmesi gerekir.
  2. Küresel değişkenler. Sunucu, müşterinin adres alanına erişmediğinden, uzak prosedürler olduğunda gizli parametreleri global değişkenler biçiminde kullanamazsınız.
  3. Verim. Uzaktan prosedürlerin yürütülmesinin hızı, genellikle benzer yerel prosedürler gerçekleştirme hızının altındaki siparişin bir veya ikisidir.
  4. Kimlik doğrulama. Uzaktan prosedürlerin çağrıları ağ üzerinden gerçekleştiğinden, müşteri kimlik doğrulama mekanizmalarını kullanmak gerekir.

Protokolün inşaat ilkeleri.

RPC protokolü birkaç farklı taşıma protokolünü kullanabilir. RPC protokolünün sorumlulukları, yalnızca Mesajlaşma'nın standartlarını ve yorumunun sağlanmasına girer. Mesajlaşma doğruluğu ve güvenilirliği tamamen taşıma seviyesi tarafından sağlanmaktadır.

Bununla birlikte, RPC, seçim protokolünün seçimini ve bazılarını kontrol edebilir. RPC ve taşıma protokolü arasındaki etkileşimin bir örneği olarak, uygulama işleminin RPC portunu RPC - PortMapper üzerinden atama prosedürünü düşünüyoruz.

Bu işlev dinamik olarak (istek üzerine) RPC bağlantısına belirli bir bağlantı noktası atar. PortMapper işlevi oldukça sık kullanılmaktadır, çünkü RPC taşıma bağlantı noktaları için ayrılmış set sınırlıdır ve potansiyel olarak aynı anda çalışabilecek işlemlerin sayısı çok yüksektir. Portmapper, örneğin, istemci etkileşim portlarını ve NFS sunucusu sunucusunu seçerken çağrılır.

PortMapper servisi, RPC yayın mesajlarını belirli bir bağlantı noktasına kullanır - III. Müşteri, geçerli bir RPC portu sorgusu yayın mesajı gönderir. PortMapper Service Saplar Bir Dachshund mesajı adresi belirler yerel servis RPC ve cevabı istemciye gönderir. RPC PortMapper servisi hem TCP hem de UDP protokolleriyle birlikte çalışabilir.

RPC, çeşitli taşıma protokolleriyle çalışabilir, ancak hiçbir zaman fonksiyonlarını çoğaltır, yani RPC TCP üzerinden çalışırsa, tüm RPC bağlantısı ve güvenilirlik bağlantısı bağlantısı TCP'ye yerleştirilir. Bununla birlikte, RPC protokolü UDP'nin üstüne takılıysa, garantili mesajların teslimatını sağlamak için ek özfonksiyonlar sağlayabilir.

Not.

Uygulama Görevleri, RPC protokolünü, JSR ağındaki bir işlevi çağırmak için belirli bir prosedür olarak görebilir (Subroutine talimatları).

RPC protokolünü çalıştırmak için aşağıdaki koşulları gerçekleştirmek gerekir:

  1. Bu ev sahibine uzaktan araştırılan tüm prosedürlerin benzersiz bir tanımlanması. RPC istekleri, üç tanımlayıcı alanı - uzak program numarası (Servis), uzak program sürüm numarası ve belirtilen programın uzaktan prosedür numarasını içerir. Program numarası servis üreticisi tarafından atanır, prosedür numarası bu hizmetin özel işlevini gösterir.
  2. RPC protokolü sürümünün tanımlanması. RPC mesajları RPC protokolü sürüm alanını içerir. İstemci çalıştığında, iletilen parametrelerin formatlarını eşleştirmek için kullanılır. Çeşitli versiyonlar Rpc.
  3. Sunucuda istemci kimlik doğrulama mekanizmalarını sağlamak. RPC protokolü, hizmette istemci kimlik doğrulama prosedürünü sağlar ve gerekirse, her istekle veya istemciye bir cevap gönderir. Ek olarak, RPC çeşitli ek güvenlik mekanizmalarını kullanmanıza izin verir.

RPC dört tür kimlik doğrulama mekanizması kullanabilir:

  • Auth_null - kimlik doğrulaması olmadan
  • Auth_unix - UNIX kimlik doğrulaması
  • Auth_short - UNIX standardına göre kendi kodlama yapısı ile kimlik doğrulaması
  • Auth_des - des Standart Kimlik Doğrulama
  1. İlgili taleplere yanıt mesajlarının tanımlanması. RPC yanıt mesajları, inşa edildikleri temelinde bir sorgu tanımlayıcısı içerir. Bu tanımlayıcının RPC çağrısı işlem tanımlayıcısı olarak adlandırılabilir. Bu mekanizma, asenkron modda çalışırken ve birkaç RPC çağrısının dizisini gerçekleştirirken özellikle gereklidir.
  2. Protokol hatasının tanımlanması. Tüm ağ veya sunucu hataları, bileşik katılımcıların her birinin çalışamama nedenini belirleyebileceği benzersiz tanımlayıcılara sahiptir.

Mesaj Protokolünün Yapısı

RPC mesajlarını taşıma protokolü üzerinden iletirken, birkaç RPC mesajı bir taşıma paketi içinde bulunabilir. Bir mesajı diğerinden ayırmak için, kayıt işaretçisi kullanılır (RM - kayıt işaretleyici). Her RPC mesajı tam olarak bir rm "işaretlendi".

RPC mesajı birkaç fragmandan oluşabilir. Her bir fragman, başlığın dört baytından ve (0 ila 2 ** 31-1) veriden oluşur. Başlığın ilk biti, bu parçanın sonuncusu olup olmadığını ve kalan 31 bit'in veri paketinin uzunluğunu gösterdiğini gösterir.

RPC yapısı, resmen açıklama dilinde ve veri formatlarının temsil edilmesinde - XDR, prosedürlerin açıklamasına ilişkin eklentilerle. RPC açıklama dilinin, prosedürlerle çalışmalarla tamamlanan XDR'nin bir genişlemesi olduğunu bile söyleyebilirsiniz.

RPC paketinin yapısı aşağıdaki gibidir:


Yanıt yapısı (Cevna_body), bir hata durumunda (daha sonra bir hata kodu içeriyorsa) iletilen yapı veya başarılı istek işlemenin yapısı içerebilir (daha sonra iade edilen verileri içerir).

Üst düzey yazılım arayüzü.

Programdaki alt yordamları kullanmak, görevi yapmanın geleneksel bir yoludur, onu daha net hale getirir. En sık kullanılan alt rutinler, çeşitli programlar tarafından kullanılabilecekleri kütüphanede toplanır. Bu durumda, yerel (yerel) çağrı, yani, arayanlar ve adı verilen nesneler bir bilgisayarda aynı programda çalışırız.

Uzak bir arama durumunda, bir bilgisayarda çalışan işlem işlemi uzak bir bilgisayarda başlatır (yani Uzak bir bilgisayardaki prosedür kodunu başlatır). Prosedürün uzaktan aramanın geleneksel yerelden önemli ölçüde farklı olduğu açıktır, ancak programcının bakış açısından bu farklılıklar pratik olarak yoktur, yani prosedürün uzak görüşlü mimarisi yerel bir aramayı simüle etmenizi sağlar.

Bununla birlikte, yerel bir arama durumunda, program parametreleri denilen prosedüre iletir ve bir yığın veya genel bellek alanı üzerinden çalışmanın sonucunu alır, daha sonra uzak bir çağrı durumunda, parametrelerin iletimi bir Ağ üzerinden bir istek talebi ve işlemin sonucu gelen yanıtta.

Bu yaklaşım, dağıtılmış uygulamalar oluşturmak için olası temeldir ve birçok modern sistem bu mekanizmayı kullanmamasına rağmen, birçok durumda temel kavramlar ve terimler korunur. RPC mekanizmasını tarif ederken, geleneksel olarak arama işlemini - istemci ve prosedürü uygulayan uzak işlemin sunucu olduğunu arayacağız.

Uzaktan Prosedür Araması aşağıdaki adımları içerir:

  1. Müşteri programı, bir fiş (saplama) adı verilen prosedürün yerel bir sorunu üretir. Bu durumda, müşteri "göründüğü", bir saplamaya neden olur, aslında sunucu prosedürü olarak adlandırılır. Ve aslında, müşteri gerekli parametreleri fişe aktarır ve sonucu döndürür. Bununla birlikte, durum sadece müşteriyi hayal etmenin yolları değildir. Fişin sorunu, uzaktan prosedür için amaçlanan argümanları almaktır, bunları standart bir formata dönüştürmek ve bir ağ sorgusu oluşturmak mümkündür. Argümanların ambalajlanması ve bir ağ sorgunun oluşturulması Meclis (marshalling) denir.
  2. Ağ isteği ağ üzerinden uzak bir sisteme gönderilir. Bunun için, fiş, örneğin önceki bölümlerde göz önünde bulundurulan uygun çağrıları kullanır. Aynı zamanda çeşitli taşıma protokollerinin yalnızca TCP / IP ailelerine de kullanılabileceğini unutmayın.
  3. Uzak bir ev sahibi üzerinde, her şey ters sırada olur. Sunucu fişi bir sorgu bekliyor ve alırken, prosedür arama argümanları alırken parametreleri alır. Bir ekstraksiyon (Unmarshalling) gerekli dönüşümleri içerebilir (örneğin, bayt konumunun sırasındaki değişiklikler).
  4. Fiş, müşterinin isteğine hitap eden, bu sunucu prosedürünün çağrısını, ağ üzerinden alınan argümanları iletir.
  5. Prosedürü tamamladıktan sonra, kontrol gerekli parametreleri kendisine ileterek sunucu fişine döner. Bir istemci fişi gibi; Sunucu fişi, isteğin geldiği ağ sistemi üzerinden iletilen bir ağ yanıt mesajı oluşturarak değer prosedürüne döndürülen değeri dönüştürür.
  6. İşletim sistemi, istenen dönüşümden sonra, istenen dönüşümün ardından (uzak prosedür tarafından geri dönen değerler olan değerler olan), işlemden normal bir geri dönüş olarak algılayan müşteriye ileten istemci fişine iletir.

Böylece, müşterinin bakış açısından, yerel için yapacağı gibi, uzak yordamaya bir çağrı yapar. Aynı sunucu hakkında söylenebilir: Prosedür araması standart bir şekilde gerçekleşir, belirli bir nesne (sunucu fişi) yerel prosedüre bir çağrı yapar ve buna geri döner. Müşteri, fişi denilen sunucu olarak algılar ve sunucu kendi istemci kapağını alır.

Böylece, fişler, istemci ve uzak sunucu (prosedür) arasındaki mesajların oluşumunun ve iletilmesinin tüm yönlerinden sorumlu olan RPC sisteminin çekirdeğidir, ancak, istemci ve sunucu çağrıların yerel olarak gerçekleştiğine inanmaktadır. Bu, RPC'nin ana konseptidir - fiş kodundaki etkileşimin dağıtılmış (ağ) doğasını tamamen gizlemek için. Bu yaklaşımın avantajları açıktır: müşteri ve sunucu ağ uygulamasından bağımsızdır, her ikisi de belirli bir dağıtım içinde çalışır. sanal makineve prosedürler çağrılarının standart bir arayüze sahip olması.

Transfer parametreleri

Parametre değerlerinin devri özel zorluklara neden olmaz. Bu durumda, istemci fişi, ağ sorgusundaki parametre değerini mümkündür, standart forma dönüşümünü gerçekleştirir (örneğin, baytların sırasını değiştirir). Parametre verilerin adresini temsil ettiğinde, işaretçilerin iletimi ile çok daha karmaşıktır. Adres isteğinde transfer, uzak prosedür tamamen farklı bir adres alanında gerçekleştirildiğinden anlamdan yoksundur. Çoğu. basit kararRPC'ye uygulanabilir, müşterilere parametreleri aksi takdirde, değer olarak, kesinlikle ciddi kısıtlamalar getirmesine rağmen, parametreleri iletir.

Ciltleme (bağlama)

Müşteri uzak bir prosedüre neden olmadan önce, istediğiniz sunucuya sahip bir uzak sistemle ilişkilendirilmesi gerekir. Böylece bağlama görevi ikiye ayrılır:

  1. Gerekli sunucuya sahip uzak bir ana bilgisayar bulma
  2. Bu konakta istediğiniz sunucu işlemini bulma

Host bulmak için farklı yaklaşımlar kullanılabilir. Muhtemel bir seçenek, ana bilgisayarların sunucularını ilan ettiği ve istemcinin bunun için uygun prosedürün ana bilgisayarını ve adresini seçebileceği belirli bir merkezi referans kitabı oluşturmaktır.

Her RPC prosedürü, program numarası ve prosedürleri tarafından benzersiz bir şekilde belirlenir. Program numarası, her biri kendi numarasına sahip olan bir grup uzaktan prosedürü tanımlar. Her program da sürüm numarasına atanır, böylece küçük değişiklikler (örneğin, bir prosedür eklerken) sayısını değiştirmenize gerek yoktur. Tipik olarak, birkaç işlevsel olarak benzer prosedürler, bir program modülünde, bu prosedürlerin sunucusu haline geldiğinde ve program numarası ile tanımlanan bir program modülünde uygulanır.

Böylece, müşteri uzak bir prosedür aramak istediğinde, gerekli hizmeti sağlayan program numaralarını, sürümünü ve prosedürleri bilmesi gerekir.

Müşteriye bir istek göndermek için, ana bilgisayarın ağ adresini ve gerekli prosedürleri sağlayan Sunucu programı ile ilişkili bağlantı noktası numarasını bilmek de gereklidir. Bunu yapmak için Portmap (IM) Daemon'u kullanın (bazı sistemlerde RPCbind (IM) olarak adlandırılır). Demon, uzaktan prosedürlerin hizmetini sağlayan ana bilgisayarda başlar ve iyi bilinen bağlantı noktası numarasını kullanır. Proses sunucusunu başlatırken, Portmap (IM) prosedürlerini ve port numaralarını kaydeder. Artık müşterinin belirli bir prosedürü aramak için port numarasını bilmesi gerektiği, Portmap sunucusuna (IM), bu da, bağlantı noktası numarasını döndürür veya talebi doğrudan uzaktan prosedür sunucusuna yönlendirir. Yürütüldükten sonra müşteriye bir cevap verir. Her durumda, eğer gerekli prosedür varsa, istemci portmap sunucusundan bir portmap numarası alır ve daha fazla talepler doğrudan bu bağlantı noktasına yapılabilir.

Özel Durumlar İşleme (İstisna)

Yerel prosedürleri ararken özel durumların işlenmesi özel bir sorunu temsil etmiyor. UNIX, ayırma gibi işlemlerin işleme hatalarını sıfıra, geçersiz bir bellek alanına hitap eder. Uzak bir prosedür çağırması durumunda, hatalı durumların olasılığı artmaktadır. Örneğin, hatalı bir ağ mesajı elde etmek için ilgili hatalar, sunucu hatalarına ve fişlerine eklenir.

Örneğin, UDP'yi kullanırken, belirli bir zaman aşımından sonra mesajlar bir taşıma protokolü olarak yeniden iletilir. İstemci, belirli bir sayıda girişimden sonra, sunucudan gelen yanıt asla alınmazsa bir hata döndürür. TCP protokolü kullanıldığında, eğer sunucu TCP bağlantısını keserse, istemci bir hata döndürür.

Semantics Mücadelesi

Yerel bir prosedürün çağrılması, kontrolün ebeveyn programına geri döndüğü bir şekilde yürütülmesine yol açar. Aksi takdirde, durum uzak bir prosedür çağırırkendir. Prosedürün özel olarak gerçekleştirilip gerçekleştirileceğini ve eğer öyleyse ne zaman yapılacağını belirlemek imkansızdır ve zamanın sayısı nedir? Örneğin, istek, sunucu programının acil bir şekilde tamamlanmasından sonra bir uzak sistem tarafından alındıysa, prosedür hiç yerine getirilmeyecektir. Cevap, belirli bir süre sonra (zaman aşımı) bir talebi yeniden gönderirse, bir istek yeniden gönderirse, cevap zaten ağ üzerinden iletildiğinde bir durum oluşturulabilir ve istek uzaktan prosedürü işlemek için tekrar kabul edilir. Bu durumda, prosedür birkaç kez yürütülecektir.

Böylece, uzaktan prosedürün uygulanması aşağıdaki semantiği ile karakterize edilebilir:

  • Bir ve sadece bir kez. Bu davranış (bazı durumlarda en çok arzu edilen) bir sunucu alarmı talep etmek zordur.
  • Azami zaman. Bu, prosedürün ya hiç yerine getirilmediği veya yalnızca bir kez yerine getirildiği anlamına gelir. Böyle bir ifade, normal bir yanıt yerine bir hata alındığında yapılabilir.
  • En azından bir kere. Kesinlikle prosedür bir kez yerine getirildi, ancak belki de daha fazla. Böyle bir durumda normal çalışma için, uzaktan prosedürün bir IDEMPotency özelliğine sahip olmalıdır (İngilizce iDemponent'ten). Prosedürün birden fazla yürütülmesi, kümülatif değişikliklere neden olmaz. Örneğin, dosyayı okumak iDempotent'dir ve dosyaya metin eklemek - NO.

Veri sunumu

Müşteri ve sunucu bir sistemde bir sistemde gerçekleştirildiğinde, veri uyumsuzluğu sorunları oluşmaz. Ve müşteri ve sunucu için, ikili formdaki veriler eşit görünüyor. Uzak bir arama durumunda, durum, müşterinin ve sunucunun, farklı veri sunumuna sahip olan farklı mimariye sahip sistemlerde (örneğin, yüzer nokta değerinin temsili) sistemlerde gerçekleştirilebileceği gerçeğiyle karmaşıktır. bayt, vb.)

RPC sisteminin çoğu uygulama, sorgularda ve yanıtlarda bulaşan tüm değerlerin dönüştürülmesi gerektiği bazı standart veri sunumu türlerini tanımlar.

Örneğin, RPC şirketi Sun Microsystems'deki veri sunum formatı aşağıdaki gibidir:

  1. Baytların sırası - en son - son
  2. Kayan nokta değerlerinin sunumu - IEEE
  3. Sembol Sunumu - ASCII

İşlevselliği ile, RPC sistemi, uygulama seviyesi ile taşıma seviyesi arasında bir ara yeri kaplar. OSI modeline göre, bu hüküm sunum ve oturum seviyelerine karşılık gelir. Böylece, RPC teorik olarak ağın uygulanmasından, özellikle de taşıma seviyesinin ağ protokollerinden bağımsızdır.

Kural olarak, sistemin yazılım uygulamaları, bir veya iki protokolü destekleyin. Örneğin, Sun Microsystems Yazılım Geliştirme RPC, TCP ve UDP protokollerini kullanarak mesajları destekler. Bunun veya protokolün seçimi, uygulamanın gereksinimlerine bağlıdır. UDP protokolünü seçmek, aşağıdaki özelliklere sahip uygulamalar için haklı çıkarılır:

  • IDEMPotent prosedürleri denir
  • İletilen argümanların boyutu ve döndürülen sonuç, UDP paketinin büyüklüğünden daha azdır - 8 KB.
  • Sunucu, yüzlerce müşteriyle çalışma sağlar. TCP protokolleriyle çalışırken, sunucu, aktif istemcilerin her biriyle bağlantıyı desteklemeye zorlanır, kaynaklarının önemli bir bölümünü alır. Bu konuda UDP protokolü daha az kaynak yoğundur

Öte yandan, TCP sağlar etkili iş Aşağıdaki özelliklere sahip uygulamalar:

  • Uygulama güvenilir bir iletim protokolü gerektirir
  • Etkilenmeyen prosedürler
  • Argümanların veya iade edilen sonuçların büyüklüğü 8 KB'yi aşıyor

Protokolün seçimi genellikle müşterinin arkasında kalır ve sistem farklı şekillerde, mesajların oluşumunu ve iletilmesini düzenler. Böylece, iletilen verilerin bir bayt akışının olduğu TCP protokolünü kullanırken, mesajları birbirinden ayırmanız gerekir. Bunun için, örneğin, RFC1057 "RPC: Remote Prosedür Çağrısı Protokolü Spesifikasyonu Sürüm 2" de açıklanan kayıt etiketleme protokolü uygulanır, burada mesajın boyutunu belirleyen her mesajın başlangıcına 32 bit bir tamsayı yerleştirilir. baytlar.

Bu, farklıdır ve aramanın semantiği ile. Örneğin, RPC güvenilmez bir taşıma protokolü (UDP) kullanılarak gerçekleştirilirse, sistem kısa süreler (zaman aşımına uğrayan) mesajın yeniden iletilmesini gerçekleştirir. İstemci uygulaması bir cevap almazsa, prosedürün sıfıra veya daha fazla kez ayarlandığı konusunda söylenebilir. Yanıt alındığında, uygulama işlemin en az bir kez yapıldığı sonucuna varılabilir. Güvenilir bir taşıma protokolü (TCP) kullanırken, bir yanıt alırsanız, prosedürün bir kez tamamlandığını söyleyebiliriz. Yanıt alınmazsa, prosedürün yerine getirilmediğini kesinlikle söyleyin, imkansız3.

Nasıl çalışır?

Temel olarak, RPC sisteminin kendisi yerleşik bir istemci programı ve sunucu programıdır. Dağıtılmış uygulamalar geliştirildiğinde, RPC protokolünün ayrıntılarına girmeniz veya mesaj işlemesini programlamanız gerektiğini memnun etmek. Sistem, uygulanan ömrü büyük ölçüde kolaylaştıran uygun bir gelişme ortamının varlığını içerir. yazılım. RPC'deki kilit noktalardan biri, dağıtılmış bir uygulamanın geliştirilmesinin, nesne arayüzünü belirlemeye başlamasıdır - özel bir dilde yapılan sunucu işlevlerinin resmi bir açıklaması. Bu arayüze dayanarak, istemci ve sunucu fişleri otomatik olarak oluşturulur. Bundan sonra yapmanız gereken tek şey prosedürün gerçek kodunu yazmaktır.

Örnek olarak, Sun Microsystems şirketinin RPC'sini göz önünde bulundurun. Sistem üç ana bölümden oluşur:

  • rPCGEN (1) - RPC Derleyici, uzaktan prosedür arayüzünün açıklamasına dayanan, S.'deki programlar şeklinde istemci ve sunucu fişlerini oluşturur.
  • XDR kütüphanesi (harici veri gösterimi), dönüşüm için işlevler içeren farklı şekiller Veriler, heterojen sistemler arasında bilgi alışverişinde bulunmanıza olanak tanıyan makineden bağımsız bir görüş.
  • Bir bütün olarak sistemin çalışmasını sağlayan modüllerin kütüphanesi.

Günlük için en basit dağıtılmış uygulamanın bir örneğini düşünün. Başlangıçtaki istemci, bir mesajın uzak bir bilgisayar günlük dosyasına kaydetmek için uzaktan bir prosedüre neden olur.

Bunu yapmak için, en az üç dosya oluşturmanız gerekir: log.x uzaktan prosedürler özellikleri (arayüz açıklama dilinde), aslında uzaktan prosedürlerin metni ve ana müşterinin baş programının metni () - Client.c (c) dilinde.

LOG.X spesifikasyonuna dayanan RPCGen Derleyici (L) üç dosya oluşturur: İstemci fişlerinin ve sunucunun log.c.c'teki ve Log.c log.c adresindeki metni) ve her iki fiş tarafından kullanılan log.h açıklama dosyasını oluşturur.

Öyleyse, programların kaynak metinlerini göz önünde bulundurun.

Bu dosya, uzaktan prosedürün kayıt parametrelerini gösterir - program numaraları, sürümler ve prosedürler ve arama arayüzü tanımlanır - giriş argümanları ve iade değerleri. Böylece, RLOG prosedürü tanımlanır, alıcı dizge (günlük olarak kaydedilecek) ve geri dönüş değeri, sipariş edilen işlemin başarılı veya başarısız bir şekilde yürütülmesini gösterir.


program Log_prog ( sürüm. Log_ver ( int. Rlog (string) \u003d 1; ) \u003d 1; ) \u003d 0x31234567;

RPCGEN (L) derleyicisi, özellikle, prosedürlerin tanımlandığı, log.h başlık dosyası oluşturur:


Bu dosyayı dikkatlice düşünün. Derleyici, Arabirim Açıklama dosyasında, RLOG_1'de tanımlanan RLOG adını çevirir, büyük harf karakterleri satıra değiştirin ve sürüm numarasını alt çizgi ile ekleyin. İade edilen değerin değeri int'den int * olarak değişti. Bu kural - RPC, parametrelerin arayüzünü tanımlarken bildirilen yalnızca adresleri iletmenizi ve almanızı sağlar. Aynı kural endişeleri ve bir dize argümanı olarak iletilir. Aslında, aslında, RLOG_L () işlevi de RLOG_L () işlevi argümanına bir argüman olarak da iletilir.

Başlık dosyasına ek olarak, RPCGen Derleyici (L) istemci fiş modüllerini ve sunucu fişlerini oluşturur. Temel olarak, bu dosyaların metninde, uzaktaki arama kodunun tamamı sonuçlandırılır.

Sunucu fişi, tüm ağ etkileşimini istemciyle (fişi ile daha kesin olarak) işleyen bir kafa programıdır. İşlemi yürütmek için, sunucu fişi, metnin yazılması gereken yerel bir işlev çağrısı üretir:


İstemci fişi, uzaktan prosedür tarafından iletilen argümanı kabul eder, gerekli dönüşümü yapar, Portmap sunucusuna (1m) bir istek oluşturur, uzaktan prosedür sunucusuyla iletişim kurar ve nihayet iade değerini istemciye iletir. Müşteri için, uzak yordamın çağrısı, fişi aramaya ve normal yerel aramadan farklı olmadığını açıklar.

client.c.


#Dahil etmek. #Dahil etmek. "Log.h" ana.(int. argc char. * argv) (müşteri * CL; char. * Sunucu, * MyString, * CLNTTime; time_t bintime; int. * Sonuç; eğer (Argc! \u003d 2) (FPRINTF (Stderr, "Çağrı Formatı:% s Address_chost \\ n", argv); çıkış (1);) Sunucu \u003d argv; / * Bir müşteri tanımlayıcısı alıyoruz. Arıza durumunda - Sunucu ile bağlantı kurmanın imkansızlığını bildirelim * / eğer ((C1 \u003d CLNT_CREERE (Sunucu, Log_prog, Log_ver, "UDP")) \u003d\u003d null) (CLNT_PCreateError (Sunucu); Çık (2);) / * Dize için bir tamponu vurgulayın * / MyString \u003d ( char. *) Malloc (100); / * Etkinlik zamanını belirleyin * / Bintime \u003d zaman ((time_t *) null); Clnttime \u003d ctime (& bintime); SprintF (MyString, "% s - müşteri çalışıyor", CLNTTime); / * Magazine için bir mesaj verelim - istemcinin başlangıç \u200b\u200bzamanı. Arıza durumunda - Hata bildiririm * / eğer ((Sonuç \u003d rlog_l (ve MyString, Cl)) \u003d\u003d BOŞ) (Fprintf (stderr, "error2 \\ n"); CLNT_PERROR (CL, Sunucu); Çık (3);) / * B Uzak bir bilgisayarda başarısızlık durumunda hata bildirelim * / eğer (* Sonuç! \u003d 0) FPRINTF (Stderr, "Dergiye Yazma Hatası \\ n"); / * 0 iskelet tanımlayıcısı * / Cint yok etmek (CL); Çık (0); )

LOG_CLNT.C istemci fişi, yürütülebilir istemci programını almak için Client.c modülüyle derlenir.


Şimdi bazı ana bilgisayar sunucusunda .Nowhere.ru, sunucu işlemini başlatmanız gerekir:


$ Logger.

Bundan sonra, istemci rlogu başka bir makinede başlatırken, sunucu günlük dosyasına uygun girişi ekler.

Bu durumda RPC çalışma şeması, Şekil 2'de gösterilmiştir. 1. Modüller aşağıdaki gibi etkileşime girer:

  1. Sunucu işlemi başlatıldığında, bir UDP soketi oluşturur ve yerel bağlantı noktasını bu sokete bağlar. Daha sonra, Sunucu, program numaralarını ve versiyonunu kaydetmek için SVC_Register (3N) kütüphane işlevini çağırır. Bunu yapmak için, işlev Portmap (IM) işlemini belirtir ve gerekli değerleri iletir. Portmap sunucusu (IM) genellikle sistem başlatıldığında başlatılır ve iyi bilinen bazı bağlantı noktalarıyla ilişkilendirilir. Şimdi Portmap (3N) programımız ve sürümümüz için port numarasını bilir. Sunucu bir istek bekliyor. Açıklanan tüm eylemlerin, RPCGen Derleyici (IM) tarafından oluşturulan bir sunucu fişi tarafından yapıldığını unutmayın.
  2. RLOG programı başlatıldığında, yaptığı ilk şey tetikleyiciler - CLNT_CREATE kütüphane işlevini, uzak sistemin adresini, program numaralarını ve sürümünün yanı sıra taşıma protokolünü de belirten birini çağırır. İşlev, Portmap sunucusuna (IM) uzak sunucuya bir istek gönderir .NowHere.m ve log sunucusu için bir uzak bağlantı noktası numarası alır.
  3. İstemci, istemci fişinde tanımlanan RLOG_1 () prosedürünü çağırır ve fişin kontrolünü iletir. Bu, sırayla, bir UDP paketi olarak bir istek oluşturur (argümanları XDR formatına dönüştürür) ve Portmap sunucusundan (IM) alınan bir uzak bağlantı noktasına gönderir. Sonra bir süredir bir cevap harcıyor ve tedavi dışı durumunda isteği yeniden gönderir. Olumlu koşullar altında, sorgu Logger Sunucusu (Sunucu Fiş Modülü) tarafından kabul edilir. Fiş, hangi işlevin (prosedür numarası ile) olarak adlandırıldığını belirler ve log.c. modülünün RLOG_1 () işlevini çağırır. Kontrolü fişe geri döndükten sonra, ikincisi RLOG_1 () işlevi tarafından döndürülen değeri XDR formatına dönüştürür ve bir UDP paketi olarak bir yanıt oluşturur. Cevap aldıktan sonra, istemci fişi dönüş değerini alır, dönüştürür ve müşterinin baş programına geri döner

) Uzaktan Prosedür Çağrı Kavramı

Uzaktan Prosedür Çağrı - RPC (Uzaktan Prosedür Çağrı - RPC), kontrol ve verileri ağ üzerinden aktarmak için bir makinede çalışan programın içindeki iyi bilinen ve anlaşılabilir kontrol mekanizmasını ve verileri genişletmektir. Uzaktan arama araçları, dağıtılmış hesaplama organizasyonunu kolaylaştırmaya yöneliktir. RPC kullanmanın en büyük verimliliği, uzak bileşenler arasında küçük bir yanıt süresi ve nispeten az sayıda bulaşan veri ile etkileşimli bir bağlantı bulunduğu uygulamalarda elde edilir. Bu tür uygulamaların RPC yönelimli olarak adlandırılır.

Yerel prosedürlerin çağrısının karakteristik özellikleri şunlardır:

Asimetri, yani etkileşim taraflarından biri başlatıcıdır; Senkronizasyon, yani, arama momentinden dururken arama prosedürünün yürütülmesi ve yalnızca denilen prosedürden döndükten sonra devam eder.

Uzaktan aramaların uygulanması, yerel arama zorluklarının uygulanması ile önemli ölçüde daha karmaşıktır. Arama ve çağrılan prosedürler farklı makinelerde gerçekleştirildiğinden, farklı adres alanlarına sahip olduklarından, farklı adres alanları var ve bu, özellikle makineler aynı değilse, parametreler ve sonuçları iletirken sorun yaratıyor. RPC paylaşılan hafızaya güvenemediğinden, bu, RPC parametrelerinin defo-bellek olmayan hücrelerde işaretçiler içermemesi ve parametre değerlerinin bir bilgisayardan diğerine kopyalanması gerektiği anlamına gelir. RPC arasındaki yerel arama arasındaki bir sonraki fark, mutlaka altta yatan iletişim sistemini kullanmasıdır, ancak bu prosedürleri veya prosedürleri tanımlamada açıkça görülmemelidir. Uzaktan ek sorun yapar. Sebep programının yürütülmesi ve bir makinede ortaya çıkan yerel prosedür tek bir işlem içinde uygulanır. Ancak en az iki işlem RPC'nin uygulanmasına katılmaktadır - her bir makinede biri. Bunlardan birinin tamamlanması gerektiğinde, aşağıdaki durumlar ortaya çıkabilir: neden olan prosedür kazası, uzaktan neden olan prosedürler "artık" olacak ve uzak prosedürler yanlışlıkla tamamlandığında, uzaktan bir şekilde uzaktan bir cevap bekleyecek prosedürlere neden oluyor prosedürler.

Ek olarak, programlama dillerinin heterojenliği ve çalışma ortamlarının heterojenliği ile ilgili bir dizi problem vardır: Herhangi bir programlama dilinde desteklenen prosedürlerin veri yapıları ve prosedürleri, diğer dillerde de aynı şekilde desteklenmez.

Bunlar ve bazı problemler, birçok dağıtılmış işletim sisteminin altında yatan yaygın RPC teknolojisini çözer.

Temel RPC işlemleri

RPC'nin çalışmalarını anlamak için, ilk önce yerel bir prosedür çağrısının, özerk bir şekilde çalışan bir düzenli makinede yürütülmesini düşünün. Bırak, örneğin, bir sistem araması olacak

Sayım \u003d okuma (FD, BUF, NBYETES);

fD'nin bir tamsayı olduğu yer
BUF - Karakter dizisi,
Nbaytes bir tamsayıdır.

Prosedüre neden olan bir arama yapmak için parametreleri ters sırayla yığına iter (Şekil 3.1). Okuma çağrısı yapıldıktan sonra, geri dönüş değerini kayıt defterine yerleştirir, dönüş adresini hareket ettirir ve parametreleri yığıntan seçen arayan prosedürünün kontrolünü döndürür, orijinal durumuna geri döndürür. Parametreleri olan dilde adlandırılabileceğini veya referans olarak (ada göre) veya değere göre (değere göre). Denilen prosedürle ilgili olarak, değerler yerel değişkenler başlatılır. Denilen prosedür bunları değiştirebilir ve bu, bu değişkenlerin orijinallerinin arayan prosedüründeki değerini etkilemeyecektir.

Değişkene bir işaretçi adı verilen prosedüre iletilirse, bu değişkenin değerindeki değişiklik, ortaya çıkan prosedür bu değişkenin değerindeki ve neden olan prosedür için değişimi gerektirir. Bu gerçek RPC için çok önemlidir.

S.'de kullanılmayan başka bir parametre şanzıman mekanizması da bulunur. Kopyalama / geri yükleme çağrısında bulunur ve arama programını yığına değer biçiminde kopyalamak ve daha sonra arama yapıldıktan sonra tekrar kopyalamaktır arama prosedürünün orijinal değerleri.

Kullanılacak parametreleri iletmek için hangi mekanizmanın, dil geliştiricileri tarafından kabul edilir. Bazen iletilen veri türüne bağlıdır. Örneğin, örneğin, tüm ve diğer skaler verileri her zaman değer ve dizilerle iletilir - referans olarak.

İncir. 3.1. a) Okumayı kontrol etmeden önce yığın;
b) prosedür sırasında yığın;
c) Arama programına döndükten sonra yığın

RPC'ye dayanan fikir, yerel prosedürün aramasının yanı sıra görünen uzak prosedüre bir çağrı yapmaktır. Başka bir deyişle - RPC şeffaf yapmak için: Arayanın adı verilen prosedürün başka bir makinede olduğunu ve bunun tersi olduğunu bilmesi gerekmez.

RPC şeffaflığa aşağıdaki gibi ulaşır. Aradığınız prosedür gerçekten uzak olduğunda, kütüphane yerel bir prosedür yerine, istemci saplama (saplama - fiş) adlandırılan prosedürün başka bir sürümü yerine yerleştirilir. Orijinal prosedür gibi, saplama çağrı sırası kullanılarak denir (Şekil 3.1'de olduğu gibi), çekirdeğe erişirken de kesintiye sahiptir. Yalnızca orijinal prosedürün aksine, parametreleri kayıtlara yerleştirmez ve çekirdekten gelen verileri talep etmemektedir, bunun yerine uzak bir makineden çekirdeğe göndermek için bir mesaj oluşturur.

RPC Yürütme Adımları

Prosedürün uzak bir çağrısı yaparken yazılım bileşenlerinin etkileşimi, Şekil 3.2'de gösterilmektedir. Müşteri taslakları istemci programı tarafından çağrıldıktan sonra, ilk görevi tamponu göndererek doldurmaktır. Bazı sistemlerde, müşteri saplaması, her yeni talebin aldıktan sonra her seferinde her seferinde doldurulmuş tek bir sabit uzunluktaki tampona sahiptir. Diğer sistemlerde, mesaj tamponu bireysel mesaj alanları için bir tampon havuzdur ve bu tamponların bazıları zaten doldurulur. Bu yöntem, paketi çok sayıda alandan oluşan bir formata sahip olduğunda, bu durumlar için özellikle uygundur, ancak bu alanların çoğunun değerleri aramaya kadar değişmez.

Daha sonra parametreler uygun formata dönüştürülmeli ve mesaj tamponuna eklenmelidir. Bu noktada, mesaj şanzıman için hazırdır, bu nedenle çekirdek çağrısının bir kesintisi gerçekleştirilir.

İncir. 3.2. Uzaktan Prosedür Araması

Çekirdek kontrol aldığında, bağlamları değiştirirse, işlemci kayıtlarını ve hafıza kartını (sayfa tanımlayıcıları) kaydeder, çekirdek modunda çalışmak için kullanılacak yeni bir hafıza kartı ayarlar. Çekirdeğin bağlamları ve kullanıcının farklılık gösterdiğinden, çekirdek, mesajı kendi adres alanına doğru bir şekilde kopyalamalıdır, böylece varış yeri adresini (bir, muhtemelen diğer başlık alanları) hatırlayın ve ağ arayüzüne aktarıldı. Bu, istemci tarafındaki çalışmayı tamamlar. Şanzıman zamanlayıcısı açık ve çekirdek bir yanıtın döngüsel bir anketi gerçekleştirebilir veya yürütülecek başka bir işlemi seçecek planlayıcının kontrolünü aktarabilir. İlk durumda, sorgu hızlandırılır, ancak çoklu program yoktur.

Sunucu tarafında, gelen bitler alıcı alet tarafından veya yerleşik tamponun içine veya RAM'de yerleştirilir. Tüm bilgiler elde edildiğinde, bir kesme oluşturulur. Kesinti işleyicisi, paket verilerinin doğruluğunu kontrol eder ve bıçakın nasıl iletilmesi gerektiğini belirler. Eğer saplamaların hiçbiri bu paketi beklemiyorlarsa, işleyici arabelleğe yerleştirmeli, hatta reddetmelidir. Bekleyen bir saplama varsa, mesaj buna kopyalanır. Son olarak, bağlamlar, rekorlar ve hafıza kartı ile sonuçlanır, aynı zamanda, saplamanın alım çağrısı yaptıkları zamanlar alır.

Şimdi sunucu saplaması çalışmaya başlar. Parametreleri açar ve buna göre yığına yerleştirir. Her şey hazır olduğunda, sunucu arar. Prosedürü tamamladıktan sonra, sunucu sonuçları istemciye iletir. Bunun için yukarıda açıklanan tüm aşamalar yalnızca ters sırada yapılır.

Şekil 3.3, her RPC çağrısı için gerçekleştirilmesi gereken komut sırasını göstermektedir ve Şekil 3.4 - Toplam RPC zamanının hangi payının, tarif edilen 14 aşamasının her birinin yürütülmesine nasıl harcanır. Çalışmalar, çok işlemeci bir iş istasyonu Dec Firefly'de gerçekleştirildi ve, beş işlemcinin varlığı ölçüm sonuçlarından mutlaka etkilenmesine rağmen, Şekilde tarif edilen histogram RPC yürütme işlemi hakkında genel bir fikir veriyor.

İncir. 3.3. RPC Prosedürü Yürütme Adımları

İncir. 3.4. RPC'nin 14 aşaması arasında zaman dağılımı

1. Arama bıçağı

2. Tamponu hazırlayın

3. Paket parametreleri

4. Başlık alanını doldurun

5. Mesajdaki sağlama toplamını hesaplayın

6. Çekirdeğe kesme

7. Yürütme için paket kuyruğu

8. Mesajın QBUS veri yolu denetleyicisine aktarılması

9. Ethernet için iletim süresi

10. Kontrolörden bir paket alın

11. İşleme Prosedürü Kesme

12. Checksum'un hesaplanması

13. Bağlamın kullanıcı alanına geçiş yapma

14. Sunucu Stubunu Yapma

Dinamik ciltleme

İstemcinin sunucunun konumunu nasıl ayarladığı sorusunu düşünün. Bu sorunu çözme yöntemlerinden biri, sunucunun ağ adresinin istemci programındaki doğrudan kullanımıdır. Bu yaklaşımın olmaması, olağanüstü esnekliktir: Sunucu taşındığında veya sunucu sayısında bir artışla veya arayüzün tüm bunlar ve diğer birçok durumda değiştirildiğinde, kullanılan tüm programları yeniden derlemek gerekir. Sunucu adresinin sert görevi. Tüm bu sorunları önlemek için, bazı dağıtılmış sistemlerde, denilen dinamik bağlanma kullanılır.

Dinamik bağlanma için ilk an, sunucunun resmi bir tanımdır (özellik). Şartname, dosya sunucusunun adını, bu sunucu tarafından müşteriler için verilen prosedürlerin sürüm numarasını ve listesini içerir (Şekil 3.5). Her prosedür için, parametrenin sunucuya göre giriş veya çıkış olup olmadığını belirten parametrelerinin bir açıklaması verilir. Bazı parametreler aynı anda girip çıkış olabilir - örneğin, istemciye sunucuya gönderilen belirli bir dizi orada değiştirilir ve ardından istemciye geri döner (kopyalama / geri yükleme işlemi).

İncir. 3.5. RPC Sunucusu Şartnamesi

Resmi sunucu spesifikasyonu, hem istemci hem de sunucu bıçaklarını oluşturan Staby Generator programının kaynak verileri olarak kullanılır. Sonra ilgili kütüphanelere yerleştirilirler. Kullanıcı (istemci) programı, sunucu spesifikasyonunda tanımlanan herhangi bir prosedüre neden olduğunda, karşılık gelen taslak prosedürü ikili program koduyla ilişkilidir. Benzer şekilde, sunucu derlendiğinde, sunucu bıçakları bununla ilişkilidir.

Sunucuyu başlattığınızda, ilk hareketi, sunucu arayüzünün Binder "OHM adlı özel bir programla aktarılmasıdır. Sunucu kaydı işlemi olarak bilinen bu işlem, ad sunucusunun, sürüm numarasının, benzersiz bir tanımlayıcının aktarılmasını içerir. ve sürücü konumu tanımlayıcısı. Tanımlayıcı sistemsel olarak bağımsızdır ve IP, Ethernet, X.500 veya diğer adresleri sunabilir. Ek olarak, kimlik doğrulaması gibi diğer bilgiler içerebilir.

Bir istemci, ilk kez uzaktan prosedürlerden birini çağırdığında, örneğin, istemci tasfiyesi henüz sunucuya bağlı olmadığını görür ve istenen sürümünün arayüzünü içe aktarmayı isteyen bir bağlayıcı program mesajı gönderir. İstediğiniz sunucu. Böyle bir sunucu varsa, bağlayıcı tanımlayıcıyı ve benzersiz tanımlayıcıyı istemci bıçağına iletir.

İstemci bıçağı Bir sorguyla bir mesaj gönderirken, tanımlayıcıyı bir adres olarak kullanır. Mesaj, bu makinede birkaç tane bulunmaması durumunda, sunucu çekirdeğini istediğiniz sunucuya göndermek için kullandığı parametreleri ve benzersiz bir tanımlayıcıyı içerir.

İthalat / dışa aktarma arayüzlerinde oluşan bu yöntem yüksek esnekliğe sahiptir. Örneğin, aynı arayüzü destekleyen birkaç sunucu olabilir ve müşteriler sunucuların üzerinden rastgele dağıtılır. Bu yöntemin bir parçası olarak, sunucuların periyodik bir anketi olası hale geliyor, performanslarının analizi ve reddetme, otomatik kapatma durumunda, sistemin genel yük devretme durumunu arttırır. Bu yöntem ayrıca müşteri kimlik doğrulamasını da destekleyebilir. Örneğin, sunucu, yalnızca belirli bir listeden müşteriler tarafından kullanılabileceğini belirleyebilir.

Bununla birlikte, dinamik bağlama, dışa aktarma ve içe aktarma arayüzleri için ek havai (geçici maliyetler) dezavantajları vardır. Bu maliyetlerin büyüklüğü önemli olabilir, çünkü birçok müşteri işlemi kısa süre var ve işlemin işlemi her başlattığında, arayüz prosedürü tekrar çalıştırılmalıdır. Ek olarak, bağlayıcı programı büyük dağıtılmış sistemlerde bir darboğaz olabilir ve birçok benzer amaç programının oluşturulması, işlemlerin oluşturulması ve senkronizasyonu yükünü de arttırır.

Arıza durumunda RPC semantiği

İdeal olarak, RPC doğru şekilde çalışmalı ve başarısızlık durumunda. Aşağıdaki başarısızlık sınıflarını düşünün:

Müşteri, sunucunun konumunu belirleyemez, örneğin, istenen sunucunun arızası durumunda veya istemci programının uzun süre derlendiği ve sunucu arayüzünün eski sürümünü kullandığı gerçeğinden dolayı. Bu durumda, bir istemci isteğine cevaben bir mesaj bir hata kodu içerir. İstemciden sunucuya bir istek kaybetti. En kolay çözüm - belirli bir zamandan sonra isteği tekrarlayın. Sunucudan istemciye cevap verdi. Bu seçenek bir önceki tarafından daha karmaşıktır, çünkü bazı prosedürler idampotent değildir. İdempotent, prosedür denir, yürütme talebi birkaç kez tekrarlanabilir ve sonuç değişmez. Böyle bir prosedürün bir örneği bir dosyayı okuyabilir. Ancak, bir banka hesabından bir miktar miktarın çıkarılması prosedürü iDempotent değildir ve cevap kaybı durumunda, tekrarlanan istek müşterinin hesabının durumunu önemli ölçüde değiştirebilir. Olası çözümlerden biri, tüm prosedürleri idampotent formuna getirmektir. Bununla birlikte, uygulamada her zaman başarılı olmaz, bu nedenle, başka bir yöntem kullanılabilir - tüm isteklerin istemci çekirdeğinin tutarlı bir numaralandırılması. Sunucu çekirdeği, müşterilerin her birinin en son taleplerinin sayısını hatırlar ve her istek alırken analizi gerçekleştirir - bu isteğin birincil veya tekrarlanmadığı. Talebi aldıktan sonra sunucu çarptı. Ayrıca mülkün mülkiyeti için önemlidir, ancak ne yazık ki numaralandırma sorgularıyla ilgili talepler uygulanamaz. Bu durumda, önemlidir

    Java RMI, ağdan bağımsız bir uzaktan zorluk prosedürü olarak, bununla çalışmanın ana basamakları ve amaç. Dağıtılmış ve ayrılmamış karşılaştırma Java Programları. Mimarlık, fiş ve iskelet seviyeleri, uzak bağlantılar ve taşıma Java RMI.

    SQL sorgularının yürütme yerine ön derlemesi. Hazırlık talimatlarını kullanın. İşlem veya işlev tarafından döndürülen değeri elde etmek için arama tanımı sözdizimini kullanarak. İstek üzerine bir örnek için talimatlar oluşturma.

    İşin amacı ve şeması. Kompozisyon ve kurulum. HTTP paket prosedürleri özellikleri.

    Prosedürler ve fonksiyonlar, bir algoritmayı uygulayan kapalı program birimleri olarak tanımlanabilir. Aslında, prosedür veya işlev neredeyse bir programdır.

    Otomatik TCP / IP Kurulumu, Dinamik Yapılandırma Yapılandırması. IP Taleplerin / Cevaplar, Kayıp ve Mesaj Formatı, Aşamalar Çözgü. WWP protokolünün genişletilmesi olarak DHCP protokolü. IP adreslerinin dağıtılması ve atanması.

    Özyineleme kavramı ile zaten tanıştık: Tekrarlayan oranlar matematiksel ifadelerde oldukça yaygındır. Tespitin özyinelemesi, tanımlanabilir konseptin bu kavramın kendisi ile belirlenmesidir.

    1. GİRİŞ 2 2. COM Teknolojisine Genel Bakış 2 2.1. COM nesnesinin bileşimi 3 2.2. Arayüzler 4 2.3. COM nesnelerinin özellikleri 6 2.4. COM sunucuları 6 2.5. Marshalling Mekanizması 7.

    Özü, çalışma prensibi ve uzak veritabanlarının temel amacı incelenmesi. Model uzaktan kumanda veri (dosya sunucusu modeli). Paralellik türleri. Tetikleyici, veritabanı durumu ile ilişkili özel olayları izlemek için bir mekanizmadır.

    Paketler Metamodel modelleri, gerçek ve güvenlik. Müşterinin kavramsal modeli. Dağıtılmış mimarinin işleyişinin bir örneği. Uygulamanın eksiksizliği.

    DLL kavramı. Programlama işlemini DOS'taki hatırlayın. Kaynak metni makine kodunda dönüştürme 2 işlemi dahil: derleme ve bağlama. Program koduna bağlama sırasında, yalnızca işlev ve prosedürlerin reklamları değil, aynı zamanda tam kodlarını da belirtti.

    TCP / IP, soket, bağlama, dinle ve kabul etme işlevleri. Dosya tanımlayıcısı. İletişim Süreçleri. Veri almak. Soketten okuma. Sokete yaz. Kapanış soketi. Programın metni Web sunucusu oluşturma işletim sistemi Qnx.

    İnternet Erişim Ağı Erişimi elektronik mesajlarsunucuda saklanır. Program açıklaması, kolay, apop ve kimlik doğrulama kimlik doğrulaması. Uygulama fonksiyonları, kullanım kılavuzu, program işleyen algoritmalar, grafik arayüzü.

    Turbo-Paskal Programlama Dilinin ana operatörlerinin çalışma prensibi: ödev operatörü, vaka seçimi, koşulsuz geçiş, döngü, yakalama, kompozit. Resmi açıklama ve arama işlevi ve prosedürleri. Gerçek parametrelerin listesi için gereksinimler.

    Java Servletlerinin işletme ve amacı, web sunucularının işlevselliğini arttırmada ve programlamalarını, avantajlarını ve dezavantajlarını iyileştirme ilkesi. Tarayıcıdan ve sayfalardan Servlet'leri aramanın yolları. Oturum niteliklerini kaydetme ve okuma.

    Windows NT mimarisi. Micoker'e göre işletim sisteminin yapısı. Windows NT Güvenli alt sistemleri.

    Dağıtılmış sistemlerde mesajlaşma temel ilkeleri. Adresleme yöntemleri. Engelleme ve engelleme dışı ilkeller. Tamponlu ve tamponlu primitifler.

    Uygulamalar sunucusu. Müşteri parçası.

    İki yıl önce, Ajax harikasındaydı (ve Ajax kelimesi sonra icat etmedi). Şimdi, sayfaları sineyde, şeylerin sırasına göre güncellenen web uygulamaları. Aksine bile: Ajax olmadan bazı hizmetleri hayal etmek zor.

    Sözdizimi Açıklama ve Arama Prosedürü. Parametreler. Örnek açıklama ve çağrı prosedürü. Parametre türleri. Program.