اینترنت پنجره ها اندروید

تعمیر: خدمات "روش های فراخوانی از راه دور (RPC)" سرویس راه اندازی نشده است. روشهای راه دور تماس بگیرید (RPC - تماس از راه دور تماس) RPC دسترسی از راه دور

روش های راه دور از راه دور (RPC) روش تماس از راه دور تماس بگیرید

روش از راه دور Call - RPC (روش Remote Call - RPC) گسترش مکانیسم کنترل شناخته شده و قابل درک و اطلاعات موجود در برنامه در حال اجرا بر روی یک دستگاه برای انتقال کنترل و داده ها از طریق شبکه است. ابزارهای تماس از راه دور برای تسهیل سازمان محاسبات توزیع شده در نظر گرفته شده است. بزرگترین کارایی استفاده از RPC در آن دسته از برنامه های کاربردی که در آن ارتباط تعاملی بین اجزای راه دور با یک زمان پاسخ کوچک و مقدار نسبتا کمی از داده های انتقال یافته وجود دارد، به دست می آید. چنین برنامه های کاربردی RPC گرا نامیده می شود.

ویژگی های مشخصه تماس روش های محلی عبارتند از:

عدم تقارن، یعنی یکی از احزاب تعاملی، آغازگر است؛ همگام سازی، یعنی اجرای روش فراخوانی زمانی که از لحظه درخواست متوقف می شود و تنها پس از بازگشت از روش نامیده می شود.

پیاده سازی تماس های از راه دور به طور قابل توجهی پیچیده تر از اجرای چالش های تماس محلی است. بیایید با این واقعیت شروع کنیم که از زمانی که فراخوانی و روش های نامیده می شود بر روی دستگاه های مختلف انجام می شود، آنها فضاهای آدرس های مختلفی دارند و این باعث ایجاد مشکلات در هنگام انتقال پارامترها و نتایج، به ویژه اگر دستگاه ها یکسان نیستند. از آنجا که RPC نمی تواند بر روی حافظه مشترک حساب کند، این بدان معنی است که پارامترهای RPC نباید حاوی اشاره گرها در سلول های حافظه غیر Defo باشند و مقادیر پارامتر باید از یک کامپیوتر به دیگری کپی شود. افتخارات بعدی RPC از یک تماس محلی این است که لزوما از سیستم ارتباطی زیربنایی استفاده می کند، اما این نباید به وضوح در تعریف روش ها یا روش های خود قابل مشاهده باشد. ردیف باعث مشکلات اضافی می شود. اجرای برنامه ایجاد شده و روش محلی در یک دستگاه در یک فرآیند تک اجرا می شود. اما حداقل دو فرآیند در اجرای RPC شرکت می کنند - یکی در هر دستگاه. در صورتی که یکی از آنها برای تکمیل تکمیل شود، شرایط زیر ممکن است رخ دهد: هنگامی که تصادفات رویه ای رخ می دهد، از راه دور، رویه ها را "یتیم" ایجاد می کنند، و هنگامی که روش های دور افتاده به طور تصادفی تکمیل می شوند، باعث می شود روشهایی که به طور ناموفق انتظار پاسخ از راه دور را داشته باشند روش ها

علاوه بر این، تعدادی از مشکلات مربوط به ناهمگونی زبان های برنامه نویسی و محیط های عملیاتی وجود دارد: ساختارهای داده ها و روش های روش های پشتیبانی شده در هر یک از زبان برنامه نویسی به همان شیوه در همه زبان های دیگر پشتیبانی نمی شود.

این و برخی از مشکلات دیگر، تکنولوژی گسترده RPC را حل می کند که دارای بسیاری از سیستم عامل های توزیع شده است.

عملیات اصلی RPC

برای درک کار RPC، ابتدا اعدام یک روش محلی را در یک دستگاه معمولی به طور مستقل عمل کنید. به عنوان مثال، اجازه دهید آن یک تماس سیستم باشد

COUNT \u003d خواندن (FD، BUF، NBYETES)؛

جایی که FD یک عدد صحیح است
Buf - آرایه ای از شخصیت ها،
nbytes یک عدد صحیح است

برای برقراری تماس که باعث می شود این روش پارامترها را به پشته در جهت معکوس فشار دهد (شکل 3.1). پس از خواندن خواندن ساخته شده است، مقدار بازگشتی را به ثبت نام می دهد، آدرس بازگشت را حرکت می دهد و کنترل روش تماس را که پارامترهای پشته را انتخاب می کند، بازگرداند و آن را به آن بازگرداند حالت اولیه. توجه داشته باشید که در زبان با پارامترها می تواند نامیده شود یا با مرجع (به نام) یا با مقدار (با ارزش). با توجه به روش نامیده می شود، مقادیر متغیرهای محلی را آغاز می کنند. روش نامیده می شود آنها می توانند آنها را تغییر دهند، و این امر بر ارزش اصل اصلی این متغیرها در روش تماس گیرنده تاثیر نمی گذارد.

اگر اشاره گر به متغیر به روش نامیده می شود، تغییر در مقدار این متغیر، روش حاصل از تغییر در ارزش این متغیر و برای روش ایجاد کننده است. این واقعیت برای RPC بسیار قابل توجه است.

همچنین یک مکانیزم انتقال پارامتر دیگری وجود دارد که در S استفاده نمی شود. این تماس با کپی / بازیابی نامیده می شود و کپی شده است راه اندازی برنامه متغیرها در پشته به صورت مقادیر، و سپس کپی کردن پس از تماس بر اساس مقادیر اصلی روش تماس گرفته می شود.

تصمیم گیری در مورد مکانیزم برای انتقال پارامترهای استفاده شده توسط توسعه دهندگان زبان پذیرفته شده است. گاهی اوقات به نوع داده منتقل می شود. به عنوان مثال، در زبان، به عنوان مثال، داده های کل و دیگر اسکالر همیشه توسط ارزش و آرایه ها توسط مرجع منتقل می شود.

شکل. 3.1 a) پشته قبل از بررسی خواندن؛
ب) پشته در طول روش؛
ج) پس از بازگشت به برنامه تماس پشته کنید

ایده مبتنی بر RPC این است که تماس را به روش از راه دور که به نظر می رسد و همچنین تماس به روش محلی است. به عبارت دیگر - RPC شفاف: تماس گیرنده نیازی به دانستن این روش نامیده می شود بر روی یک دستگاه دیگر، و بالعکس.

RPC به شفافیت می رسد به شرح زیر است. هنگامی که روش نامیده می شود واقعا از راه دور است، کتابخانه به جای یک روش محلی، یک نسخه دیگر از روش به نام Client Subt (خرد - پلاگین) قرار می گیرد. مانند روش اصلی، خرد نامیده می شود با استفاده از توالی تماس (همانطور که در شکل 3.1)، هنگام دسترسی به هسته، یک وقفه وجود دارد. فقط در مقایسه با روش اصلی، پارامترها را در رجیسترها قرار نمیدهد و داده ها را از هسته درخواست نمی کند، بلکه یک پیام را برای ارسال یک دستگاه از راه دور به هسته تولید نمی کند.

مراحل اجرای RPC

تعامل اجزای نرم افزاری هنگام انجام یک تماس از راه دور از روش، در شکل 3.2 نشان داده شده است. پس از اینکه خرد مشتری توسط برنامه مشتری نامیده شد، اولین وظیفه آن این است که با فرستادن بافر پر کنید. در بعضی از سیستم ها، خرد مشتری دارای یک بافر طول ثابت است، هر بار از ابتدا پس از دریافت هر درخواست جدید، هر بار پر شده است. در سیستم های دیگر، بافر پیام یک استخر بافر برای زمینه های پیام فردی است و برخی از این بافر ها قبلا پر شده است. این روش به ویژه برای مواردی مناسب است که بسته یک فرمت را تشکیل می دهد عدد بزرگ زمینه ها، اما ارزش های بسیاری از این زمینه ها از تماس به تماس تغییر نمی کند.

سپس پارامترها باید به فرمت مناسب تبدیل شوند و به بافر پیام وارد شوند. در این مرحله، پیام آماده انتقال است، بنابراین قطع شدن تماس اصلی انجام می شود.

شکل. 3.2. تماس از راه دور تماس

هنگامی که هسته کنترل را دریافت می کند، زمینه ها را تغییر می دهد، ثبت نام پردازنده و کارت حافظه را ذخیره می کند (توصیفگرهای صفحه)، کارت حافظه جدیدی را تنظیم می کند که برای کار در حالت هسته استفاده می شود. از آنجا که زمینه های هسته و کاربر متفاوت است، هسته باید با دقت پیام را به فضای آدرس خود کپی کند تا بتواند به آن دسترسی داشته باشد، به یاد داشته باشید که آدرس مقصد (a، احتمالا، سایر زمینه های هدر) را به یاد داشته باشید و باید باشد انتقال به رابط شبکه آن. این کار را بر روی سمت مشتری انجام می دهد. تایمر انتقال روشن است، و هسته می تواند یک نظرسنجی چرخه ای از یک پاسخ را انجام دهد یا کنترل برنامه ریز را انتقال دهد، که هر فرآیند دیگر را انتخاب می کند. در مورد اول، پرس و جو تسریع شده است، اما چند برنامه چندگانه وجود ندارد.

در سمت سرور، بیت های ورودی توسط دستگاه دریافتی یا به بافر داخلی ساخته شده یا در RAM قرار می گیرند. هنگامی که تمام اطلاعات به دست آمده، یک وقفه تولید می شود. دستگیره وقفه صحت داده های بسته را بررسی می کند و تعیین می کند که باید آن را منتقل کند. اگر هیچکدام از مقررات این بسته را انتظار نداشته باشند، دستگیره باید آن را در بافر قرار دهد یا حتی آن را رد کند. اگر یک خرد انتظار وجود داشته باشد، پیام به آن کپی می شود. در نهایت، زمینه ها تغییر می کنند، در نتیجه ثبت نام ها و کارت حافظه، ارزش هایی را که در آن زمان زمانی که خرد شده بود، تماس گرفت.

در حال حاضر STRUM سرور شروع به کار می کند. این پارامترها را باز می کند و آنها را بر اساس پشته قرار می دهد. هنگامی که همه چیز آماده است، سرور تماس می گیرد. پس از اتمام این روش، سرور نتایج را به مشتری منتقل می کند. برای این، تمام مراحل فوق شرح داده شده تنها در جهت معکوس انجام می شود.

شکل 3.3 دنباله فرمان را نشان می دهد که باید برای هر تماس RPC انجام شود، و شکل 3.4 - که سهم کل زمان RPC برای اجرای هر یک از 14 مرحله آنها شرح داده شده است. مطالعات انجام شده بر روی یک ایستگاه کاری چند پردازنده دسامبر دسامبر انجام شد و اگرچه حضور پنج پردازنده لزوما تحت تاثیر نتایج اندازه گیری قرار گرفت، هیستوگرام توصیف شده در شکل، ایده کلی روند اجرای RPC را ارائه می دهد.

شکل. 3.3. مراحل اجرای روش RPC

شکل. 3.4. توزیع زمان بین 14 مرحله RPC

1. تماس بگیرید

2. تهیه بافر

3. پارامترهای بسته

4. فیلد هدر را پر کنید

5. چک کردن چکمه در پیام

6. وقفه به هسته

7. بسته بندی صف برای اعدام

8. انتقال پیام به کنترل کننده اتوبوس QBUS

9. زمان انتقال برای اترنت

10. یک بسته را از کنترلر دریافت کنید

11. روش برای پردازش وقفه

12. محاسبه چکمه

13. سوئیچینگ زمینه به فضای کاربر

14. انجام خرد سرور

اتصال دینامیک

سوال در مورد چگونگی تنظیم مشتری محل سرور را در نظر بگیرید. یکی از روش های حل این مشکل، استفاده مستقیم از آدرس شبکه سرور در برنامه مشتری است. فقدان این رویکرد، انعطاف پذیری فوق العاده ای است: هنگامی که سرور منتقل می شود، یا با افزایش تعداد سرورها، یا هنگامی که رابط کاربری در تمام این موارد و بسیاری از موارد دیگر تغییر می کند، لازم است که تمام برنامه هایی را که از آن استفاده کرده اند، مجددا مجددا مجددا استفاده کنیم وظیفه سفت و سخت از آدرس سرور. به منظور اجتناب از تمام این مشکلات، در برخی از سیستم های توزیع شده، اتصال به اصطلاح پویا استفاده می شود.

لحظه اولیه برای اتصال پویا یک تعریف رسمی (مشخصات) سرور است. مشخصات شامل نام سرور فایل، شماره نسخه و لیست روش های ارائه شده توسط این سرور برای مشتریان است (شکل 3.5). برای هر روش، توضیحات از پارامترهای آن نشان داده شده است که نشان می دهد آیا پارامتر ورودی یا خروجی نسبت به سرور است یا خیر. بعضی از پارامترها می توانند به طور همزمان ورودی و خروجی باشند - به عنوان مثال، یک آرایه مشخصی که به مشتری فرستاده می شود، به سرور ارسال می شود، و سپس به مشتری بازگردانده می شود (کپی / بازگرداندن عملیات).

شکل. 3.5. مشخصات سرور RPC

مشخصات سرور رسمی به عنوان داده های منبع برای برنامه Generator Staby استفاده می شود که هر دو مشتری و سرور را ایجاد می کند. سپس آنها در کتابخانه های مربوطه قرار می گیرند. هنگامی که برنامه کاربر (مشتری) هر روش را در مشخصات سرور تعریف می کند، روش خرد مربوطه با کد برنامه باینری همراه است. به طور مشابه، زمانی که سرور کامپایل می شود، سرور های سرور با آن ارتباط دارند.

هنگامی که سرور را شروع می کنید، اولین اقدام آن انتقال رابط سرور خود را با یک برنامه خاص به نام Binder "OHM است. این فرایند، به عنوان فرایند ثبت نام سرور شناخته می شود، شامل انتقال سرور نام آن، شماره نسخه، یک شناسه منحصر به فرد است و توصیفگر مکان درایور. توصیفگر به طور سیستماتیک مستقل است و ممکن است IP، اترنت، x.500 یا هر آدرس دیگری را ارائه دهد. علاوه بر این، ممکن است اطلاعات دیگر مانند احراز هویت داشته باشد.

برای مثال، هنگامی که مشتری یکی از مراحل راه دور را برای اولین بار می نامد، به عنوان مثال، خواندن، Client Class می بیند که هنوز به سرور متصل نیست و یک برنامه پیامی را ارسال می کند که درخواست واردات رابط را می فرستد نسخه دلخواه سرور مورد نظر اگر چنین سرور وجود داشته باشد، Binder توصیفگر توصیفگر و شناسه ی منحصر به فرد را به مشتری می کند.

مشتری هنگام ارسال یک پیام با پرس و جو از توصیفگر به عنوان یک آدرس استفاده می کند. این پیام شامل پارامترها و یک شناسه منحصر به فرد است که سرور Kernel به منظور ارسال پیام دریافتی به سرور دلخواه در صورتی که چندین نفر از آنها در این دستگاه وجود دارد استفاده می کند.

این روش متشکل از رابط های واردات / صادرات انعطاف پذیری بالا دارد. به عنوان مثال، ممکن است چندین سرور وجود داشته باشد که از همان رابط پشتیبانی می کنند و مشتریان به طور تصادفی بیش از سرورها توزیع می شوند. در چارچوب این روش، بررسی دوره ای از سرورها امکان پذیر می شود، تجزیه و تحلیل عملکرد آنها و در صورت امتناع از خاموش شدن خودکارکه شکست کلی سیستم را افزایش می دهد. این روش همچنین می تواند از احراز هویت مشتری پشتیبانی کند. به عنوان مثال، سرور می تواند تعیین کند که تنها توسط مشتریان از یک لیست خاص استفاده می شود.

با این حال، اتصال پویا دارای نقایص، به عنوان مثال، سربار اضافی (هزینه های موقت) برای صادرات و واردات رابط. مقدار این هزینه ها می تواند قابل توجه باشد، زیرا بسیاری از فرآیندهای مشتری زمان کوتاهی وجود دارد و هر بار فرآیند فرآیند را شروع می کند، روش رابط باید دوباره اجرا شود. علاوه بر این، برنامه Binder می تواند یک تنگنا در سیستم های توزیع شده بزرگ باشد، و ایجاد چندین برنامه هدف مشابه نیز افزایش سربار ایجاد و هماهنگ سازی فرآیندها را افزایش می دهد.

Semantics RPC در صورت شکست

در حالت ایده آل، RPC باید به درستی عمل کند و در صورت شکست. طبقات زیر را در نظر بگیرید:

مشتری نمی تواند مکان سرور را تعیین کند، به عنوان مثال، در صورت شکست سرور مورد نظر، یا به دلیل این واقعیت است که برنامه مشتری برای مدت زمان طولانی کامپایل شده و استفاده می شود نسخه قدیمی رابط سرور در این مورد، در پاسخ به درخواست مشتری، یک پیام شامل یک کد خطا است. درخواست از مشتری را به سرور از دست داد. ساده ترین راه حل - پس از یک زمان خاص، درخواست را تکرار کنید. پاسخ از دست رفته از سرور به مشتری. این گزینه توسط قبلی پیچیده تر است، زیرا برخی از روش ها Idempotent نیستند. iDemPotent این روش نامیده می شود، درخواست اعدام که می تواند چندین بار تکرار شود و نتیجه تغییر نخواهد کرد. یک نمونه از چنین روش می تواند یک فایل را بخواند. اما روش حذف برخی از مبلغ از یک حساب بانکی Idempotent نیست، و در صورت از دست دادن پاسخ، درخواست مکرر می تواند وضعیت حساب مشتری را به طور قابل توجهی تغییر دهد. یکی از راه حل های احتمالی این است که تمام مراحل را به شکل idempotent بفرستیم. با این حال، در عمل، همیشه موفق نمی شود، بنابراین روش دیگری می تواند مورد استفاده قرار گیرد - یک شماره سازگار از تمام درخواست ها توسط هسته مشتری. هسته سرور تعداد آخرین درخواست از هر یک از مشتریان را به یاد می آورد، و هنگام دریافت هر درخواست تجزیه و تحلیل را انجام می دهد - چه این درخواست اولیه یا تکراری است. سرور پس از دریافت درخواست سقوط کرده است. همچنین برای اموال اموال مهم است، اما متأسفانه درخواست های با پرسش های شماره گذاری نمی تواند اعمال شود. در این مورد، زمانی که شکست رخ داد، مهم است - قبل یا بعد از عملیات. اما کرنل مشتری نمی تواند این شرایط را تشخیص دهد، تنها زمانی شناخته شده است که زمان پاسخ منقضی شده است. سه رویکرد به این مشکل وجود دارد: صبر کنید تا سرور دوباره راه اندازی شود و سعی کنید عملیات را دوباره انجام دهید. این رویکرد تضمین می کند که RPC تا پایان حداقل یک بار و احتمالا بیشتر تکمیل شده است. بلافاصله یک برنامه برای یک خطا گزارش دهید. این رویکرد تضمین می کند که RPC بیش از یک بار انجام شده است. رویکرد سوم چیزی را تضمین نمی کند. هنگامی که سرور رد می شود، مشتری به هیچ وجه پشتیبانی نمی کند. RPC ممکن است یا انجام نشود، یا چندین بار ساخته شده است. در هر صورت، این روش بسیار آسان است.

هیچ یک از این روش ها بسیار جذاب نیست. و گزینه ایده آل که دقیقا یک اجرای RPC تضمین می شود، در پرونده عمومی نمی تواند بر ملاحظات اساسی اجرا شود. به عنوان مثال، یک عملیات از راه دور، یک چاپ از راه دور چاپ از برخی از متن است که شامل بارگذاری بافر چاپگر و نصب یک بیت در یک سیستم کنترل چاپگر، به عنوان یک نتیجه از آن چاپگر شروع می شود. سقوط سرور می تواند هر دو برای یک میکرو ثانیه و برای میکروسکوپ پس از نصب بیت کنترل رخ دهد. لحظه ای از شکست به طور کامل روش بازیابی را تعیین می کند، اما مشتری نمی تواند در مورد لحظه شکست بداند. به طور خلاصه، توانایی سقوط سرور به طور اساسی ماهیت RPC را تغییر می دهد و به وضوح نشان دهنده تفاوت بین سیستم متمرکز و توزیع شده است. در اولین مورد، فروپاشی سرور منجر به سقوط مشتری می شود و بهبودی غیرممکن است. در مورد دوم، سیستم بازگرداندن سیستم انجام می شود و احتمالا ضروری است.

مشتری پس از ارسال یک درخواست تصادف را متحمل شد. در این مورد، محاسبات نتایج انجام می شود، که هیچ کس انتظار ندارد. چنین محاسبات "یتیمان" نامیده می شود. حضور یتیمان می تواند مشکلات مختلفی را ایجاد کند: هزینه های غیر انعکاسی زمان پردازنده، مسدود کردن منابع، پاسخ به پاسخ درخواست فعلی به درخواست، که قبل از راه اندازی مجدد سیستم صادر شده توسط دستگاه مشتری صادر شد.

چگونه با یتیمان کار کنیم؟ 4 راه حل احتمالی را در نظر بگیرید.

تخریب. قبل از اینکه Client Stub یک پیام RPC ارسال کند، او یک علامت را در یک مجله نشان می دهد، اعلام می کند که او اکنون خواهد بود. ورود به سیستم بر روی یک دیسک یا در حافظه دیگری ذخیره می شود، شکست های پایدار. پس از حادثه، سیستم راه اندازی مجدد سیستم، مجله تجزیه و تحلیل شده و یتیم ها حذف می شوند. معایب این رویکرد عبارتند از: در ابتدا هزینه های افزایش یافته با یک رکورد هر RPC به دیسک، و در مرحله دوم، ناکارآمدی احتمالی ناشی از ظهور نسل دوم یتیم های تولید شده توسط تماس های RPC صادر شده توسط یتیم های نسل اول. تناسخ در این مورد، تمام مشکلات بدون استفاده از ضبط به دیسک حل می شود. این روش شامل تقسیم زمان برای دوره های متوالی است. هنگامی که مشتری راه اندازی مجدد می شود، یک پیام پخش را به تمام ماشین آلات در مورد آغاز دوره جدید انتقال می دهد. پس از دریافت این پیام، تمام محاسبات از راه دور حذف می شوند. البته، اگر شبکه جدا شود، بعضی از یتیمان می توانند زنده بمانند. تناسخ نرمی شبیه به مورد قبلی است، به جز اینکه تمام محاسبات از راه دور یافت نمی شود و نابود نمی شود، بلکه فقط محاسبه مشتری راه اندازی مجدد را محاسبه می کند. انقضاء. هر پرس و جو به یک دوره استاندارد T، که طی آن باید اجرا شود، داده می شود. اگر درخواست برای زمان اختصاص داده نشده انجام نشده باشد، یک کوانتومی اضافی اختصاص داده شده است. اگر چه نیاز دارد کار اضافیاما اگر پس از تصادف مشتری، سرور قبل از راه اندازی مجدد مشتری، منتظر یک فاصله زمانی است که تمام یتیم ها لزوما نابود شوند.

در عمل، هیچ یک از این رویکردها مطلوب نیست، علاوه بر این، تخریب یتیمان ممکن است وضعیت را تشدید کند. به عنوان مثال، اجازه دهید یتیم یک یا چند فایل پایگاه داده را مسدود کند. اگر یتیم به طور ناگهانی نابود شود، این قفل ها باقی خواهند ماند، علاوه بر این، یتیم های نابود شده ممکن است در صف های مختلف سیستم ایستاده باشند، در آینده آنها می توانند فرایندهای جدید و غیره را ایجاد کنند.

بسیاری از کاربران سیستم های کامپیوتری از مفاهیم مانند روش های از راه دور شنیده اند، روشهای راه دور یا RPC را فراخوانی می کنند. این فقط همه نیست که تصور شود که برای فناوری، چگونگی کار و آنچه که آنها نیاز دارند. اما بسیاری از کسانی که این سرویس را در سیستم های ویندوز قطع کرده اند، اغلب اشتباهات مربوط به خرابی های بحرانی را دریافت می کنند. در مورد این و بسیاری از چیزهای دیگر مورد بحث قرار خواهد گرفت.

روش های تلفنی از راه دور: این چیست؟

شروع به ایستادن با برخی از اطلاعات نظری. همانطور که در نظر گرفته شده روش های از راه دور (روشهای راه دور تماس) مکانیسم است که به شما اجازه می دهد تا هر گونه توابع سیستم های کامپیوتری را در فضای آدرس استفاده شده توسط ترمینال استفاده کنید. به سادگی قرار دهید، این یک راه برای دسترسی به یک کامپیوتر از راه دور، به عنوان مثال، از طریق یک شبکه محلی یا اتصال به اینترنت است.

با این حال، روش های از راه دور (روش های از راه دور تماس) به عنوان RPC (اختصار از تماس از راه دور از راه دور انگلیسی) نشان داده می شود، نه تنها به رایانه های از راه دور امکان پذیر است. در سطح محلی، چنین فن آوری ها نیز اعمال می شود. به عنوان ساده ترین مثال، شما می توانید یک تابع خاص از یک برنامه را از یک برنامه دیگر با تعامل با کتابخانه های ویژه تماس بگیرید.

علاوه بر این، کاملا در همه نسخه های ویندوز چنین خدماتی وجود دارد، و هنگامی که آن را خاموش یا رد می کند، اصلاح XP در همه کار نمی کند.

اصول کارکرد، اصول جراحی، اصول عملکرد

به عنوان یک قانون، "روش RPC روش RPC" برای کار در حالت سرویس گیرنده سرور نیاز به حداقل دو جزء اصلی دارد: یک پروتکل شبکه برای تبادل اطلاعات و زبان سریال سازی (ترجمه فرآیند یا ساختار اطلاعاتی داده ها به توالی بیت )

معماری ها می توانند به طور کامل متفاوت باشند و در توانایی های آنها متفاوت باشند. اما برای تبادل اطلاعات در سطح به اصطلاح حمل و نقل، پروتکل های UDP و TCP اغلب مورد استفاده قرار می گیرند، کمتر معمولا - HTTP.

به منظور رفتن به جنبه های فنی، ساده ترین توضیحات اصل عملیات چنین فن آوری ها می تواند مثال زیر باشد: فرآیند مشتری یک درخواست را به سرور با توضیحات روش انتخاب شده با پارامترهای مشخص شده تولید می کند و آن را می فرستد ، پس از آن سرور دستورالعمل مورد نیاز را انجام می دهد و تماس را به مشتری ارسال می کند که بر روی ماشین مشتری نمایش داده می شود. با این حال، Handler سرور خود، به طوری که در حالت آماده به کار صحبت می کند و تنها در لحظات دریافت درخواست های مشتری فعال می شود. لازم نیست که طرح "درخواست پاسخ" بلافاصله انجام شود.

در عین حال، حداکثر اثر عملکرد به دست آمده در هنگام مبادله مقدار نسبتا کوچک داده ها و زمان پاسخ کم اجزاء، که بین آن یک اتصال تعاملی ایجاد می شود، به دست می آید.

روش های از راه دور (روشهای راه دور تماس): ویژگی های مشخصه و پیاده سازی

بنابراین، دو ویژگی اصلی این فناوری ها را می توان تشخیص داد:

  • عدم تقارن (شروع روش از راه دور تنها یکی از طرفین)؛
  • همگام سازی (تعلیق روش تماس از زمان شروع درخواست و رزومه پس از ارسال پاسخ).

همانطور که برای پیاده سازی، رویه های از راه دور (روشهای راه دور تماس) امروز از چندین تکنولوژی اساسی استفاده می کنند، که به طور گسترده ای اعمال می شود عبارتند از:

  • DCE / RPC - پروتکل باینری بر اساس TCP / IP، SMB / SIFC، و غیره.
  • DCOM علاوه بر این شی گرا به انتقال منابع به اشیاء و خواستار پردازش روش ها؛
  • JSON-RPC - یک پروتکل متنی بر اساس HTTP؛
  • .NET Remoting یک پروتکل دودویی بر اساس UDP، TCP و HTTP است؛
  • جاوا RMI؛
  • صابون؛
  • XML RPC؛
  • خورشید RPC؛
  • zeroc یخ؛
  • ROUTIX.RPC و همکاران

مشکلات و وظایف

حالا چند کلمه در مورد کاستی ها. مهمترین مشکل، و، به این ترتیب، وظیفه پیاده سازی این است که همان عملیات فراخوانی یک روش از راه دور از طریق گره سرویس تماس از راه دور باید به طور همزمان بر روی ماشین های مختلف انجام شود، و اغلب با سیستم عامل های مختلف، فضاهای آدرس و معماری. در این فرآیند، این پارامترها باید از یک ترمینال به دیگری کپی شوند. این نه تنها پروتکل حمل و نقل را استفاده می کند، بلکه سریال سازی را نیز فراهم می کند که به شما امکان می دهد انواع مختلف داده ها را به ترتیب بایت تبدیل کنید.

نکته دوم با این واقعیت مرتبط است که روش های از راه دور (روشهای راه دور تماس) استفاده از یک فرآیند، هر دو در سطح محلی و دو (در دستگاه مشتری و سرور) استفاده نمی شود. بنابراین، اتمام اضطراری برنامه در یکی از پایانه ها ممکن است واکنش مشابهی از سوی دیگر را ایجاد کند.

در نهایت، یکی از اصلی ها، مشکل سازگاری با توجه به ناهمگونی برخی از زبان های برنامه نویسی، به رغم استانداردهای یکنواخت ایجاد شده است.

انواع اصلی زیر سیستم های اصلی

چالش از راه دور از روش های ویندوز 10 یا هر سیستم رتبه دیگر زیر به معنای استفاده از زیر سیستم های خاص است:

  • زیرسیستم حمل و نقل در نظر گرفته شده برای مدیریت اتصالات خروجی و ورودی با تحویل تضمین شده بسته های داده؛
  • پروتکل های استخر - مفهوم انجام روش در ترمینال نتیجه؛
  • سریال سازی (راهپیمایی) - تبدیل جریان داده ها به کدهای استاندارد بایت، مستقل از معماری؛
  • رمزگذاری ارسال و دریافت بسته ها با اعمال امضای دیجیتال بر روی آنها؛
  • سیستم تأیید اعتبار و مجوز

چه نوع برنامه ها نیاز به اجرای RPC دارند؟

اگر ما در مورد آنچه صحبت می کنیم صحبت کنیم ماژول های نرم افزاری سیستم عامل ها نیاز به نگهداری سرویس RPC را شامل می شود، همه آنها به سادگی غیر ممکن است.

اما در میان تمام اجزای شناخته شده سیستم های ویندوز، شما می توانید خدمات فکس، خدمات رمزنگاری، ورود خطا، کمک و پشتیبانی، دسترسی به دستگاه های HID، سرویس پیام رسانی (پیام رسان)، مدیریت دیسک و پارتیشن های منطقی، کنترل درایوهای قابل جابجایی را یادداشت کنید، سیستم صوتی، نصب ویندوز و اخبار خدا این است.

به نظر می رسد که این لیست به اندازه کافی برای درک چند جزء سیستم و خود کاربر وابسته به این سرویس است.

چه تاثیرات RPC را تحت تاثیر قرار می دهد

به طور کلی، بر اساس شرح قبلی، اثر RPC را می توان برآورد کرد. به عنوان مثال، چند مورد وجود دارد زمانی که صدا به طور کامل ناپدید شد زمانی که این سرویس خاموش است، سیستم امکان بازگرداندن سیستم پس از شکست های بحرانی و یا آغاز شده توسط کاربر، "FLEW" تنظیمات شبکه بی سیم امکان پذیر نیست.

اما بدترین چیز این است که اگر تماس از راه دور را به روش های RPC غیرفعال کنید، گاهی اوقات حتی ممکن است حتی به تنظیمات سیستم اصلی دسترسی پیدا کند، حداقل سه بار توسط مدیر در ترمینال خود، کاربر حداقل سه بار باشد.

آیا این امکان را غیر فعال کردن این سرویس وجود دارد؟

توسط و بزرگ، بسیاری از تلاش (و سعی کنید) برای غیرفعال کردن خدمات "روش از راه دور". آیا این قطعا ممنوع است؟ به طور کلی، سیستم خود، زمانی که پیاده سازی چنین تلاش برای انجام این کار، این را نمی دهد، اعلان مناسب را ارائه می دهد.

اما همه نمی دانند که در بخش خدمات (services.msc) هنوز هم چنین چیزی به عنوان "یابنده تماس از راه دور از روش های RPC" وجود دارد. در اینجا این فقط می تواند بدون دردسر برای سیستم غیر فعال باشد. برنامه های کاربردی که می توانند از آن استفاده کنند، به طور مستقل خدمات را در صورت لزوم به خدمات خود می پردازند.

از بین بردن خرابی ها و خطاها

در نهایت، بیایید ببینیم چه کاری می تواند انجام شود اگر یک خطا صادر شود زمانی که روش از راه دور نامیده می شود. در ساده ترین مورد، شما می توانید سعی کنید دوباره خدمات را فعال کنید (اگر البته، معلوم شود).

برای انجام این کار، در بخش مربوطه که در آن سرویس مورد نظر قرار دارد، منوی دوبار کلیک، منوی ویرایش پارامتر نامیده می شود، دکمه قدرت فشار داده شده است، و نوع نوبت خود را بر روی اتوماتیک نصب شده است. اگر چنین روشی را با یک سیستم بارگیری استاندارد انجام دهید، امکان پذیر نیست، می توانید سعی کنید اقدامات مشابهی را انجام دهید حالت امن. بعضی از متخصصان در همان زمان توصیه می شود که نرم افزار آنتی ویروس را غیرفعال کنند.

اگر این کمک نمی کند، اما در دست یک دیسک نصب یا بازیابی سیستم وجود دارد، شما می توانید کنسول فرمان را با حقوق مدیر اجرا کنید (شما نیازی به دانلود از دیسک ندارید) و این دستورات برای ثبت نام در آن:

  • cD Z: \\ i386 (Z - درایو نوری ادبیات)؛
  • expand Explorer.EX_٪ temp٪ \\ explorer.exe؛
  • گسترش svchost.ex_٪ temp٪ \\ svchost.exe.

پس از آن، "مدیر وظیفه" (Ctrl + Del + Alt یا TaskMGR را در منوی "Run" راه اندازی کنید و فرایند Explorer.exe را کامل کنید.

در "Dispatcher"، تمام فرآیندهای svhost.exe را متوقف کنید، پس از آن لازم است که مدت 60 ثانیه برای ورود به خط کپی٪ temp٪ \\ svchost.exe٪ systemroot٪ \\ system32 / y در رشته.

در نهایت، اگر به ویرایشگر دسترسی داشته باشید رجیستری سیستم (Regedit) بازسازی شده، شما باید از طریق شاخه HKCC از طریق سیستم و بخش های CurrentControlset بروید و با تغییر مقدار آن به صفر، به پارامتر CSConfiglags بروید.

این همه روش های اصلاح خطاهای مرتبط با RPC نیست. واقعیت این است که اگر این سرویس به نقض خدمات دیگر منجر شود، ابتدا باید مشکلات خود را از بین ببرد، اما تنها پس از آن اقدام علیه RPC انجام می شود. و نه همیشه به پارامترهای فوق توصیف شده و تنظیمات را می توان به دست آورد دسترسی کامل. اگر هیچ چیز واقعا اتفاق نمی افتد، همانطور که ناامید می شود، باید سیستم عامل را کاملا نصب مجدد کرد، هرچند من می خواهم امیدوار باشم که به این امر برسد.

نتیجه

در اینجا کوتاه و همه چیز مربوط به تکنولوژی و خدمات RPC است. در حقیقت، این همه به نظر می رسد بسیار سخت تر از آن است که در این مشخصات ارائه شده است، و برای درک کامل از موضوع شما نیاز به حداقل دانش اولیه. اما به منظور داشتن یک ایده مشترک در مورد RPC، تا کنون به اندازه کافی.

همانطور که برای قطع ارتباط، سعی نکنید در چنین چیزهایی شرکت کنید، در غیر این صورت کل سیستم رد خواهد شد. محلول اصلاح شده کاهش معمولا کمک می کند، اما تضمین کامل نمی تواند به هر حال داده شود، زیرا غیر فعال کردن سرویس می تواند باعث شکست در سایر اجزای دیگر شود.



برنامه هایی که از طریق شبکه ارتباط برقرار می کنند، نیاز به مکانیسم ارتباطی دارند. در سطح پایین، بسته دریافت شده، سیگنال پردازش شده توسط برنامه پردازش سیگنال شبکه تامین می شود. در سطح بالا، مکانیزم Rendezvous (Rendezvu) در جهنم عمل کرده است. NFS از مکانیسم تماس از راه دور (RPC) استفاده می کند، که در آن مشتری با سرور ارتباط برقرار می کند (نگاه کنید به شکل 1). با توجه به این روند، مشتری ابتدا به روش ارائه می دهد که یک درخواست را به سرور ارسال می کند. پس از ورود بسته با پرس و جو، سرور روش باز شدن آن را فراخوانی می کند، سرویس درخواست شده را انجام می دهد، پاسخ را ارسال می کند و کنترل به مشتری بازگردانده می شود.

رابط RPC را می توان از سه سطح ارائه داد:

  1. سطح بالا به طور کامل "شفاف" است. به عنوان مثال، برنامه این سطح ممکن است به روش Rnusers () مراجعه کند که تعداد کاربران را در دستگاه از راه دور باز می گرداند. شما لازم نیست که در مورد استفاده از مکانیزم RPC بدانید، همانطور که در برنامه درخواست تجدید نظر می کنید.
  2. سطح متوسط طراحی شده برای رایج ترین برنامه ها. تماس های RPC در این سطح در Regograms RegistrRPC () و CallRPC () مشغول به کار هستند: RegisterRPC () یک کد معمولی تیره می شود و CallRPC () یک تماس را به روش از راه دور اجرا می کند. تماس Rnusers () با استفاده از این دو زیرمجموعه اجرا می شود.
  3. سطح پایین تر برای وظایف پیچیده تر استفاده می شود که پیش فرض ها را به مقادیر پارامتر روش ها تغییر می دهند. در این سطح، شما می توانید به صراحت دستکاری جک های مورد استفاده برای ارسال پیام های RPC را دستکاری کنید.

به عنوان یک قاعده، شما باید از سطح بالا استفاده کنید و از استفاده از سطوح پایین تر بدون نیاز به استفاده از آن استفاده کنید.

با وجود این واقعیت که در این کتابچه راهنمای کاربر را تنها در C در نظر می گیریم، درخواست تجدید نظر به روش های از راه دور می تواند از هر زبان ساخته شود. عملیات مکانیزم RPC برای سازماندهی تعامل بین فرآیندهای دستگاه های مختلف از کار خود بر روی یک دستگاه متفاوت نیست.

RPC (روش تماس از راه دور، خدمات تماس از راه دور) یک رابط بین کاربران از راه دور و برخی از برنامه های میزبان خاص است که در درخواست های این کاربران راه اندازی شده است. سرویس RPC هر میزبان به عنوان یک قاعده، مشتریان را با طیف وسیعی از برنامه ها فراهم می کند. هر یک از این برنامه ها، به نوبه خود، از یک یا چند روش از راه دور است. به عنوان مثال، خدمات از راه دور سیستم فایل NFS، که بر روی تماس های RPC ساخته شده است، می تواند تنها از دو برنامه تشکیل شده باشد: به عنوان مثال، یک برنامه با رابط کاربری بالا در سطح بالا تعامل دارد، و دیگری با توابع I / O پایین سطح.

در هر تماس از راه دور، دو طرف درگیر هستند: یک سرویس گیرنده فعال که یک درخواست برای فراخوانی روش به سرور ارسال می کند و سرور که پاسخ را به مشتری ارسال می کند.

توجه داشته باشید. باید در نظر داشته باشید که اصطلاحات "مشتری" و "سرور" در این مورد به یک میزبان یا نرم افزار خاص معامله خاص مراجعه می کنند (فرآیند یا برنامه) می توانند هر دو به عنوان نقش مشتری و نقش سرور کار کنند. به عنوان مثال، یک برنامه ای که عملیات خدمات راه دور را تضمین می کند، در همان زمان می تواند یک مشتری در کار با سیستم فایل شبکه باشد.

پروتکل RPC بر روی مدل های تماس از راه دور ساخته شده است. مدل های تماس مشابه با مکانیسم فراخوانی روش های محلی. هنگامی که شما یک روش محلی را می نامید، استدلال ها را به مکان خاصی از حافظه، در متغیرهای پشته یا محیط زیست قرار می دهید و کنترل فرایند را در یک آدرس خاص ارسال می کنید. پس از اتمام کار، نتایج را در یک آدرس خاص خواندید و روند خود را ادامه دهید.

در مورد کار با یک روش از راه دور، تفاوت اصلی این است که تماس از عملکرد از راه دور به دو فرآیند عمل می کند: فرآیند مشتری و فرآیند سرور.

فرایند مشتری یک پیام را به سرور ارسال می کند که در آن پارامترهای روش نامیده می شود و پیام پاسخ با نتایج عملیات آن انتظار می رود. هنگام دریافت پاسخی، نتیجه خوانده می شود و روند ادامه دارد. در سمت سرور، روند تماس گیرنده تماس در حالت انتظار است، و هنگامی که پیام دریافت می شود، پارامترهای روش خواندن، آن را اجرا می کند، پاسخ را ارسال می کند و منتظر تماس بعدی می شود.

پروتکل RPC هیچ الزامی برای روابط اضافی بین فرآیندها اعمال نمی کند و نیازی به هماهنگ سازی توابع انجام نمی شود، به عنوان مثال تماس ها می توانند ناهمزمان و تصور کنند، بنابراین مشتری می تواند روش های دیگر را در طول پاسخ انجام دهد. سرور RPC می تواند یک فرایند جداگانه یا یک ماشین مجازی برای هر تابع را برجسته کند، بنابراین بدون انتظار برای پایان دادن به پرسشهای قبلی، می تواند بلافاصله پس از آن را قبول کند.

با این حال، بین تماس های روش های محلی و از راه دور، چندین تفاوت مهم وجود دارد:

  1. پردازش خطا مشتری در هر صورت باید اخطار اشتباهات را دریافت کند که هنگام فراخوانی روش های از راه دور بر روی سرور یا در شبکه رخ می دهد.
  2. متغیرهای جهانی از آنجا که سرور دسترسی به فضای آدرس مشتری ندارد، شما نمی توانید از پارامترهای پنهان در قالب متغیرهای جهانی استفاده کنید.
  3. کارایی. سرعت اجرای روش های دور از راه دور معمولا یک یا دو مرتبه زیر سرعت انجام روش های مشابه محلی است.
  4. احراز هویت. از آنجا که فراخوانی رویه های از راه دور بر روی شبکه رخ می دهد، لازم است از مکانیسم های احراز هویت مشتری استفاده شود.

اصول ساخت پروتکل.

پروتکل RPC می تواند از چندین پروتکل حمل و نقل مختلف استفاده کند. مسئولیت های پروتکل RPC تنها به ارائه استانداردها و تفسیر پیام ها وارد می شود. دقت و قابلیت اطمینان پیام ها به طور کامل توسط سطح حمل و نقل ارائه شده است.

با این حال، RPC می تواند انتخاب و برخی از ویژگی های پروتکل حمل و نقل را کنترل کند. به عنوان مثال از تعامل بین RPC و پروتکل حمل و نقل، ما روش را برای اختصاص پورت RPC از فرآیند برنامه از طریق RPC - Portmapper در نظر می گیریم.

این تابع به صورت پویا (بر اساس درخواست) یک پورت خاص را به اتصال RPC اختصاص می دهد. تابع Portmapper اغلب استفاده می شود، زیرا مجموعه ای که برای پورت های حمل و نقل RPC رزرو شده محدود است، و تعداد فرایندهایی که به طور بالقوه می توانند در همان زمان بسیار بالا کار کنند. برای مثال، PortMapper، هنگام انتخاب پورت های متقابل مشتری و سرور سرور NFS نامیده می شود.

سرویس PortMapper از پیام های پخش RPC به یک پورت خاص - III استفاده می کند. مشتری یک پیام پخش پورت RPC فعلی را ارسال می کند. سرویس PortMapper یک پیام Dachshund را تعیین می کند آدرس را تعیین می کند خدمات محلی RPC و پاسخ به مشتری را ارسال می کند. سرویس Portmapper RPC می تواند با هر دو پروتکل TCP و UDP کار کند.

RPC می تواند با پروتکل های مختلف حمل و نقل کار کند، اما هرگز توابع خود را تکرار نمی کند، به عنوان مثال اگر RPC بر روی TCP کار کند، تمام اتصال RPC و اتصال قابلیت اطمینان در TCP قرار می گیرد. با این حال، اگر پروتکل RPC در بالای UDP نصب شود، می تواند ویژگی های اضافی را برای ارائه پیام های تضمین شده ارائه دهد.

توجه داشته باشید.

وظایف برنامه می توانند پروتکل RPC را به عنوان یک روش خاص برای فراخوانی تابع در شبکه JSR در نظر بگیرند (دستورالعمل های زیرروئید پرش).

برای کار پروتکل RPC، لازم است شرایط زیر را انجام دهیم:

  1. شناسایی منحصر به فرد از تمام مراحل از راه دور در این میزبان. درخواست های RPC شامل سه فیلد شناسه - شماره برنامه از راه دور (سرویس)، شماره نسخه از راه دور و تعداد روش از راه دور برنامه مشخص شده است. شماره برنامه توسط سازنده خدمات اختصاص داده شده است، شماره روش نشان دهنده عملکرد خاص این سرویس است.
  2. شناسایی نسخه پروتکل RPC. پیام های RPC دارای قسمت نسخه پروتکل RPC هستند. این استفاده می شود برای مطابقت با فرمت های پارامترهای انتقال زمانی که مشتری در حال کار است نسخه های مختلف RPC
  3. ارائه مکانیسم های احراز هویت مشتری بر روی سرور. پروتکل RPC روش تأیید اعتبار مشتری را در سرویس فراهم می کند و در صورت لزوم با هر درخواست یا پاسخ به مشتری ارسال می شود. علاوه بر این، RPC به شما اجازه می دهد تا از مکانیسم های ایمنی اضافی استفاده کنید.

RPC می تواند از چهار نوع مکانیسم احراز هویت استفاده کند:

  • auth_null - بدون احراز هویت
  • auth_unix - احراز هویت یونیکس
  • AUTH_SHORT - احراز هویت با توجه به استاندارد یونیکس با ساختار رمزگذاری خود
  • auth_des - احراز هویت استاندارد
  1. شناسایی پیام های پاسخ به درخواست های مربوطه. پیام های پاسخ RPC شامل یک شناسه پرس و جو، بر اساس آنها ساخته شده است. این شناسه را می توان شناسه تراکنش RPC نامیده می شود. این مکانیزم در هنگام کار در حالت ناهمزمان و هنگام انجام یک توالی از چندین تماس RPC ضروری است.
  2. شناسایی خطا از پروتکل. تمام خطاهای شبکه یا سرور دارای شناسه های منحصر به فرد هستند که هر یک از شرکت کنندگان در ترکیب می توانند علت شکست در کار را تعیین کنند.

ساختار پروتکل پیام ها

هنگام ارسال پیام های RPC در پروتکل حمل و نقل، چندین پیام RPC را می توان در یک بسته حمل و نقل قرار داد. به منظور جدا کردن یک پیام از طرف دیگر، نشانگر ضبط استفاده می شود (نشانگر RM - رکورد). هر پیام RPC دقیقا یک RM "مشخص شده" است.

پیام RPC ممکن است شامل چندین قطعه باشد. هر قطعه شامل چهار بایت از عنوان و (از 0 تا 2 ** 31-1) داده ها است. اولین بیت از عنوان نشان می دهد که آیا این قطعه آخرین است و 31 بیت باقی مانده، طول بسته داده را نشان می دهد.

ساختار RPC به طور رسمی در زبان توصیف و نمایندگی از فرمت های داده - XDR با افزودنیهای مربوط به توصیف روش ها توصیف شده است. شما حتی می توانید بگویید که زبان توصیف RPC یک گسترش XDR است، تکمیل شده با کار با روش ها.

ساختار بسته RPC به شرح زیر است:


ساختار پاسخ (Reply_Body) ممکن است شامل ساختار منتقل شده در صورت یک خطا (سپس شامل یک کد خطا)، یا ساختار پردازش درخواست موفقیت آمیز (سپس شامل داده های بازگشتی).

رابط نرم افزار سطح بالا.

استفاده از زیرمجموعه ها در برنامه یک راه سنتی برای ساخت این کار است، آن را روشن تر می کند. اغلب استفاده شده از زیرمجموعه ها در کتابخانه جمع آوری می شوند که در آن آنها می توانند توسط برنامه های مختلف مورد استفاده قرار گیرند. در این مورد، ما در مورد تماس محلی (محلی) صحبت می کنیم، یعنی تماس، و اشیاء نامیده می شود در یک برنامه مشابه در یک کامپیوتر کار می کنند.

در مورد یک تماس از راه دور، فرآیند اجرا بر روی یک کامپیوتر فرآیند را بر روی یک کامپیوتر از راه دور آغاز می کند (I.E. در واقع کد روش را در یک کامپیوتر از راه دور راه اندازی می کند). واضح است که تماس از راه دور به این روش به طور قابل توجهی متفاوت از محلی سنتی است، اما از دیدگاه برنامه نویس، چنین تفاوت هایی به طور عملی وجود ندارد، I.E. معماری از راه دور از راه دور این روش به شما اجازه می دهد تا یک تماس محلی را شبیه سازی کنید.

با این حال، اگر در مورد یک تماس محلی، برنامه پارامترها را به روش نامیده می شود و نتیجه کار را از طریق یک پشته یا منطقه حافظه عمومی دریافت می کند، سپس در مورد یک تماس از راه دور، انتقال پارامترها به یک تبدیل می شود درخواست درخواست در شبکه، و نتیجه عملیات در پاسخ ورودی است.

این رویکرد پایه ای برای ایجاد برنامه های توزیع شده است و اگرچه بسیاری از سیستم های مدرن از این مکانیزم استفاده نمی کنند، مفاهیم اساسی و اصطلاحات در بسیاری از موارد حفظ می شوند. هنگام توصیف مکانیزم RPC، ما به طور سنتی فرایند فراخوانی را فراخوانی خواهیم کرد - مشتری، و فرایند راه دور که روش را اجرا می کند، سرور است.

فراخوانی روش از راه دور شامل مراحل زیر است:

  1. برنامه مشتری یک چالش محلی از روش پلاگین (خرد) را تولید می کند. در این مورد، مشتری "به نظر می رسد" است که باعث ایجاد یک خرد شدن می شود، در واقع روش سرور نامیده می شود. و در واقع، مشتری پارامترهای لازم را به پلاگین انتقال می دهد و نتیجه آن را باز می گرداند. با این حال، وضعیت کاملا راهی برای تصور کردن مشتری نیست. مشکل پلاگین این است که استدلال هایی را که برای روش از راه دور طراحی شده است، انجام شود، ممکن است آنها را به یک فرمت استاندارد تبدیل کنید و یک پرس و جو شبکه را تشکیل دهید. بسته بندی استدلال ها و ایجاد یک پرس و جو شبکه مونتاژ (Marshalling) نامیده می شود.
  2. درخواست شبکه بر روی شبکه به یک سیستم از راه دور ارسال می شود. برای این، پلاگین از تماس های مناسب استفاده می کند، به عنوان مثال، در بخش های قبلی مورد توجه قرار گرفته است. توجه داشته باشید که در همان زمان پروتکل های حمل و نقل مختلف می تواند مورد استفاده قرار گیرد، و نه تنها خانواده های TCP / IP.
  3. در یک میزبان از راه دور، همه چیز در جهت معکوس اتفاق می افتد. پلاگین سرور در انتظار پرس و جو است و در هنگام دریافت، پارامترها دریافت می کند، استدلال های فراخوانی را دریافت می کند. استخراج (unmarshalling) ممکن است شامل تبدیل های لازم (به عنوان مثال، تغییرات در مرتبه محل بایت).
  4. پلاگین تماس از این روش سرور را انجام می دهد که به درخواست مشتری ارسال می شود، آن را به استدلال های دریافت شده در شبکه منتقل می کند.
  5. پس از اتمام روش، کنترل با انتقال پارامترهای مورد نیاز به آن، به سرور وصل می شود. مانند یک پلاگین مشتری؛ پلاگین سرور تبدیل به مقدار بازگشتی به روش ارزش را با تشکیل یک پیام پاسخ شبکه که از طریق سیستم شبکه منتقل می شود، بازگردانده می شود.
  6. سیستم عامل پیام دریافتی را به پلاگین مشتری منتقل می کند، که پس از تبدیل مورد نظر، مقادیر را انتقال می دهد (که مقادیر بازگشتی با روش از راه دور) به مشتری می شود که آن را به عنوان بازده طبیعی از این روش درک می کند.

بنابراین، از نقطه نظر مشتری، یک تماس را به روش از راه دور می کند، زیرا این کار را برای محلی انجام می دهد. همان را می توان در مورد سرور گفت: تماس روش به صورت استاندارد اتفاق می افتد، یک شیء خاص (سرور پلاگین) تماس را به روش محلی می دهد و به آن بازگردانده می شود. مشتری پلاگین را به عنوان سرور نامیده می شود و سرور Cap مشتری خود را می گیرد.

بنابراین، شاخه ها هسته سیستم RPC هستند، مسئول تمام جنبه های تشکیل و انتقال پیام های بین مشتری و سرور راه دور (روش)، اگر چه مشتری و سرور بر این باورند که تماس ها به صورت محلی رخ می دهد. این مفهوم اصلی RPC است - به طور کامل پنهان کردن ماهیت توزیع شده (شبکه) تعامل در کد پلاگین. مزایای این روش واضح است: مشتری و سرور مستقل از پیاده سازی شبکه هستند، هر دو آنها در یک توزیع خاص کار می کنند ماشین مجازی، و روش های تماس ها یک رابط استاندارد دارند.

پارامترهای انتقال

انتقال پارامترها مقادیر باعث مشکلات خاصی نمی شود. در این مورد، پلاگین مشتری، مقدار پارامتر را در پرس و جو شبکه قرار می دهد، ممکن است تبدیل به فرم استاندارد (به عنوان مثال، تغییر سفارش بایت). هنگامی که پارامتر آدرس داده ها را نشان می دهد، از طریق انتقال اشاره گرها بسیار پیچیده تر است، و نه ارزش آنها. انتقال در درخواست آدرس از معنی محروم است، زیرا روش از راه دور در یک فضای آدرس کاملا متفاوت انجام می شود. اکثر. تصمیم سادهقابل اجرا به RPC ممنوعیت مشتریان انتقال پارامترها در غیر این صورت، به عنوان ارزش، اگر چه قطعا محدودیت های جدی را اعمال می کند.

اتصال (اتصال)

قبل از اینکه مشتری بتواند یک روش از راه دور ایجاد کند، لازم است آن را با یک سیستم از راه دور که دارای سرور مورد نظر است، مرتبط شود. بنابراین، وظیفه اتصال به دو تقسیم می شود:

  1. پیدا کردن یک میزبان از راه دور با سرور مورد نیاز
  2. پیدا کردن فرآیند سرور مورد نظر در این میزبان

رویکردهای مختلف می تواند برای پیدا کردن میزبان استفاده شود. یک گزینه احتمالی این است که یک کتاب مرجع متمرکز خاصی ایجاد کنید که در آن میزبان سرورهای خود را اعلام می کنند و مشتری می تواند میزبان و آدرس مورد نظر مناسب را انتخاب کند.

هر روش RPC به طور منحصر به فرد توسط شماره برنامه و روش ها تعیین می شود. شماره برنامه یک گروه از روش های از راه دور را تعریف می کند که هر کدام دارای تعداد خاص خود هستند. هر برنامه همچنین به شماره نسخه اختصاص داده شده است، بنابراین وقتی تغییرات جزئی دریافت می شود (به عنوان مثال، هنگام اضافه کردن یک روش) نیازی به تغییر شماره آن نیست. به طور معمول، چندین روش عملکردی مشابه در یک ماژول برنامه اجرا می شود، زمانی که شروع به سرور از این روش ها می شود، و توسط شماره برنامه شناسایی می شود.

بنابراین، هنگامی که مشتری می خواهد با یک روش از راه دور تماس بگیرد، باید تعداد برنامه ها، نسخه ها و روش های ارائه خدمات مورد نیاز را بداند.

برای ارسال یک درخواست به مشتری، لازم است که آدرس شبکه میزبان و شماره پورت مرتبط با برنامه سرور را ارائه دهیم که روش های مورد نیاز را ارائه می دهند. برای انجام این کار، از Daemon PortMap (IM) (در برخی از سیستم هایی که RPCBind (IM) نامیده می شود) استفاده کنید. شیطان در میزبان شروع می شود، که خدمات روش های از راه دور را فراهم می کند و از شماره پورت شناخته شده استفاده می کند. هنگام شروع راه اندازی سرور فرآیند، آن را در Portmap (IM) رویه ها و شماره های پورت ثبت می کند. در حال حاضر که مشتری نیاز به دانستن شماره پورت برای تماس با یک روش خاص، آن را ارسال یک درخواست به سرور Portmap (IM)، که، به نوبه خود، و یا بازگشت شماره پورت، و یا هدایت درخواست به طور مستقیم به سرور از راه دور و سرور را هدایت می کند پس از اعدام، پاسخ به مشتری را باز می گرداند. در هر صورت، اگر روش مورد نیاز وجود داشته باشد، مشتری یک شماره PortMap را از سرور PortMap دریافت می کند و درخواست های بیشتری را می توان به طور مستقیم به این پورت انجام داد.

پردازش موقعیت های ویژه (استثنا)

پردازش شرایط خاص هنگام فراخوانی روش های محلی یک مشکل خاص را نشان نمی دهد. یونیکس خطاهای پردازش فرآیندهای مانند تقسیم به صفر را فراهم می کند، تجدید نظر به یک منطقه حافظه نامعتبر و غیره. در صورت تماس از راه دور، احتمال وقوع شرایط اشتباه افزایش می یابد. به عنوان مثال، خطاهای مرتبط، برای به دست آوردن یک پیام شبکه اشتباه به خطاهای سرور و شاخه ها اضافه می شوند.

به عنوان مثال، هنگام استفاده از UDP، پیام ها پس از یک زمان خاص، به عنوان یک پروتکل حمل و نقل منتقل می شوند. مشتری یک خطا را باز می کند، اگر بعد از تعداد مشخصی از تلاش ها، پاسخ از سرور هرگز دریافت نشد. در مورد زمانی که پروتکل TCP مورد استفاده قرار می گیرد، مشتری اگر سرور اتصال TCP را قطع کند، یک خطا را باز می کند.

چالش معنایی

فراخوانی یک روش محلی به طور یکنواخت منجر به اجرای آن می شود که پس از آن کنترل به برنامه والدین بازگردانده می شود. در غیر این صورت، وضعیت زمانی است که یک روش از راه دور را فراخوانی می کند. زمانی که این روش به طور خاص انجام می شود، غیر ممکن است که به طور خاص انجام شود، آیا این کار را انجام می دهد، و اگر آن، تعداد دفعات انجام شود؟ به عنوان مثال، اگر درخواست توسط یک سیستم از راه دور پس از اتمام اضطراری برنامه سرور دریافت شود، این روش به طور کامل برآورده نخواهد شد. اگر مشتری هنگامی که پاسخ پس از یک دوره مشخص از زمان (Timeout) نتواند درخواست را دوباره ارسال کند، یک وضعیت را می توان ایجاد کرد، زمانی که پاسخ در حال حاضر در شبکه منتقل می شود، یک وضعیت ایجاد می شود و درخواست دوباره برای پردازش روش از راه دور پذیرفته می شود. در این مورد، این روش چندین بار اجرا خواهد شد.

بنابراین، پیاده سازی روش از راه دور می تواند توسط معانی زیر مشخص شود:

  • یک و تنها یک بار. این رفتار (در بعضی موارد مطلوب ترین) دشوار است که یک زنگ سرور را تقاضا کند.
  • حداکثر زمان این به این معنی است که این روش به طور کامل برآورده نشده است یا تنها یک بار انجام می شود. چنین بیانیه ای می تواند زمانی انجام شود که یک خطا به جای یک پاسخ طبیعی دریافت شود.
  • حد اقل یک بار. روش مطمئنا یک بار انجام شد، اما شاید بیشتر. برای عملیات عادی در چنین وضعیتی، روش از راه دور باید دارایی idempotency (از idemponent انگلیسی) باشد. این روش دارای اعدام چندگانه است که تغییرات تجمعی را ایجاد نمی کند. به عنوان مثال، خواندن فایل IDEMPotent، و اضافه کردن متن به فایل - نه.

ارائه داده ها

هنگامی که مشتری و سرور در یک سیستم بر روی یک کامپیوتر انجام می شود، مشکلات ناسازگاری داده ها رخ نمی دهد. و برای مشتری و برای سرور، داده ها در فرم باینری به همان اندازه به نظر می رسد. در مورد یک تماس از راه دور، این مورد با این واقعیت پیچیده است که مشتری و سرور را می توان بر روی سیستم های با معماری مختلف انجام داد که دارای ارائه داده های مختلف (به عنوان مثال، نمایندگی از مقدار نقطه شناور، سفارش از بایت ها، و غیره)

اکثر پیاده سازی سیستم RPC برخی از انواع استاندارد ارائه داده ها را تعریف می کنند که تمام مقادیر منتقل شده در پرس و جو ها و پاسخ ها باید تبدیل شود.

به عنوان مثال، فرمت ارائه داده در شرکت RPC Sun Microsystems به شرح زیر است:

  1. دستور بایت - بزرگترین - آخرین
  2. ارائه مقادیر نقطه شناور - IEEE
  3. ارائه نماد - ASCII

خالص

با استفاده از قابلیت های آن، سیستم RPC یک مکان متوسط \u200b\u200bبین سطح برنامه و سطح حمل و نقل را اشغال می کند. مطابق با مدل OSI، این مقررات مربوط به سطوح ارائه و جلسه است. بنابراین، RPC از لحاظ نظری مستقل از اجرای شبکه، به ویژه از پروتکل های شبکه سطح حمل و نقل است.

پیاده سازی نرم افزار سیستم، به عنوان یک قاعده، از یک یا دو پروتکل پشتیبانی می کند. به عنوان مثال، RPC توسعه نرم افزار Sun Microsystems از پیام ها با استفاده از پروتکل های TCP و UDP پشتیبانی می کند. انتخاب این یا پروتکل بستگی به الزامات برنامه دارد. انتخاب پروتکل UDP برای برنامه های کاربردی که ویژگی های زیر را دارند، توجیه می شود:

  • روش های نامیده می شود idempotent
  • اندازه استدلال های منتقله و نتیجه بازگشتی کمتر از اندازه بسته UDP - 8 کیلوبایت است.
  • سرور با چند صدها مشتری کار می کند. از زمان کار با پروتکل های TCP، سرور مجبور به پشتیبانی از ارتباط با هر یک از مشتریان فعال است، بخش مهمی از منابع آن را می گیرد. پروتکل UDP در این زمینه کمتر منابع است

از سوی دیگر، TCP فراهم می کند کار موثر برنامه های کاربردی با ویژگی های زیر:

  • این برنامه نیاز به یک پروتکل انتقال قابل اعتماد دارد
  • روش های غیر تحت تاثیر
  • اندازه استدلال یا نتیجه بازگشتی بیش از 8 کیلوبایت است

انتخاب پروتکل معمولا در پشت مشتری باقی می ماند و سیستم به روش های مختلف، تشکیل و انتقال پیام ها را سازماندهی می کند. بنابراین، هنگام استفاده از پروتکل TCP، که داده های منتقل شده یک جریان بایت است، باید پیام ها را از یکدیگر جدا کنید. برای این، به عنوان مثال، پروتکل ضبط رکورد توصیف شده در RFC1057 "RPC: روش از راه دور پروتکل تماس پروتکل نسخه 2" اعمال می شود، که در آن یک عدد صحیح 32 بیتی در ابتدای هر پیامی قرار می گیرد که اندازه پیام را تعیین می کند بایت

این متفاوت است و با معناشناسی تماس. به عنوان مثال، اگر RPC با استفاده از یک پروتکل حمل و نقل غیر قابل اعتماد (UDP) انجام شود، سیستم دوباره انتقال پیام را از طریق دوره های کوتاه (Timeouts) انجام می دهد. اگر برنامه مشتری پاسخی دریافت نکند، می توان با اطمینان گفت که این روش به صفر یا بیشتر تنظیم شده است. اگر پاسخ دریافت شد، برنامه می تواند نتیجه بگیرد که این روش حداقل یک بار انجام شد. هنگام استفاده از یک پروتکل حمل و نقل قابل اعتماد (TCP)، اگر یک پاسخ دریافت کنید، می توان گفت که این روش یک بار تکمیل شده است. اگر پاسخ دریافت نشود، قطعا می گویند که این روش برآورده نشده است، غیر ممکن است.

چگونه کار می کند؟

اساسا، سیستم RPC خود یک برنامه داخلی و برنامه سرور است. لذت بردن از آن است که در هنگام توسعه برنامه های توزیع شده، شما مجبور نیستید به جزئیات پروتکل RPC یا برنامه ریزی پردازش پیام بپردازید. این سیستم شامل وجود یک محیط توسعه مناسب است که تا حد زیادی زندگی اعمال شده را تسهیل می کند نرم افزار. یکی از نکات کلیدی در RPC این است که توسعه یک برنامه توزیع شده شروع به تعیین رابط شیء - توصیف رسمی از توابع سرور ساخته شده در یک زبان خاص است. بر اساس این رابط، پیکربندی مشتری و سرور به طور خودکار ایجاد می شود. تنها چیزی که باید انجام دهید پس از آن، نوشتن کد واقعی این روش است.

به عنوان مثال، RPC شرکت Sun Microsystems را در نظر بگیرید. این سیستم شامل سه بخش اصلی است:

  • rPCGEN (1) - کامپایلر RPC، که بر اساس شرح رابط از راه دور از راه دور، مشتریان مشتری و سرور را در قالب برنامه های S تولید می کند.
  • کتابخانه XDR (نمایندگی داده های خارجی)، که شامل توابع برای تبدیل است انواع متفاوت داده ها به یک نمایش مستقل دستگاه که به شما اجازه می دهد تا اطلاعات بین سیستم های ناهمگن را مبادله کنید.
  • کتابخانه ماژول ها اطمینان از عملکرد سیستم را به عنوان یک کل.

یک نمونه از ساده ترین برنامه توزیع شده برای ورود به سیستم را در نظر بگیرید. مشتری در هنگام راه اندازی، یک روش از راه دور برای ضبط یک پیام به یک فایل ورود به سیستم از راه دور را ایجاد می کند.

برای انجام این کار، شما باید حداقل سه فایل ایجاد کنید: log.x روش های روش از راه دور (در رابط توصیف زبان)، در واقع متن روش های راه دور log.c و متن اصلی برنامه اصلی مشتری () - client.c (در C) زبان.

کامپایلر RPCGEN (L) بر اساس مشخصات log.x، سه فایل را ایجاد می کند: متن از شاخه های مشتری و سرور در log clnt.c و log svc.c) و فایل توضیحات log.h استفاده شده توسط هر دو شاخه.

بنابراین، متون منبع برنامه ها را در نظر بگیرید.

این فایل نشان می دهد پارامترهای ثبت نام از راه دور - شماره های برنامه، نسخه ها و روش ها، و رابط تماس تعریف شده است - استدلال های ورودی و مقادیر بازگشت. بنابراین، روش RLOG تعریف شده است، رشته دریافت شده (که در ورود به سیستم ثبت می شود)، و مقدار بازگشت نشان می دهد اجرای موفق یا ناموفق عملیات سفارش شده است.


برنامه log_prog ( نسخه. log_ver ( int RLOG (رشته) \u003d 1؛ ) \u003d 1؛ ) \u003d 0x31234567؛

کامپایلر RPCGEN (L) فایل Log.h Header را ایجاد می کند، جایی که، به ویژه روش ها تعریف شده است:


این فایل را با دقت بررسی کنید. کامپایلر ترجمه نام RLOG را در فایل توضیحات رابط، در RLOG_1 تعریف می کند، جایگزین کاراکترهای بزرگ به خط و اضافه کردن شماره نسخه با حروف زیر را اضافه می کند. مقدار مقدار بازگشتی از int در int * تغییر کرده است. این قانون - RPC به شما اجازه می دهد تا هنگام ارسال رابط پارامتر ها، آدرس های خود را ارسال و دریافت کنید. همان نگرانی های قانون و انتقال به عنوان یک استدلال رشته. اگر چه نباید، در واقع، تابع rLog_L () نیز به عنوان یک استدلال به استدلال عملکرد RLOG_L () منتقل می شود.

علاوه بر فایل هدر، کامپایلر RPCGEN (L) ماژول های پلاگین مشتری و شاخه های سرور را ایجاد می کند. اساسا، در متن این فایل ها کل کد تماس از راه دور به پایان می رسد.

پلاگین سرور یک برنامه سرپایی تمام تعامل شبکه با مشتری (دقیق تر، با پلاگین آن) است. برای اجرای عملیات، سرور پلاگین یک تماس عملکرد محلی را تولید می کند، متن آن باید نوشته شود:


پلاگین مشتری این استدلال را که توسط روش راه دور منتقل می شود را می پذیرد، تبدیل لازم را ایجاد می کند، یک درخواست را به سرور PortMap (1M) تولید می کند، با سرور روش از راه دور ارتباط برقرار می کند و در نهایت مقدار بازگشتی را به مشتری انتقال می دهد. برای مشتری، تماس به روش از راه دور می آید به تماس با پلاگین و بدون متفاوت از تماس محلی محلی.

client.c.


#عبارتند از. #عبارتند از. "log.h" اصلی(int argc چار * argv) (client * cl؛ چار * سرور، * mystring، * clnttime؛ time_t bintime؛ int * نتیجه؛ اگر (argc! \u003d 2) (fprintf (stderf "، فرمت تماس:٪ s address_chost \\ n"، argv)؛ خروج (1)؛) سرور \u003d argv؛ / * ما یک توصیفگر مشتری دریافت می کنیم. در صورت شکست - بیایید به عدم امکان ایجاد ارتباط با سرور * / اگر ((C1 \u003d clnt_create (سرور، log_prog، log_ver، "udp")) \u003d\u003d null) (clnt_pcreateError (سرور)؛ خروج (2)؛) / * یک بافر را برای رشته برجسته کنید * / mystring \u003d ( چار *) malloc (100)؛ / * تعیین زمان رویداد * / bintime \u003d زمان ((time_t *) null)؛ clenttime \u003d ctime (و bintime)؛ Sprintf (MyString، "٪ S - مشتری در حال اجرا است"، clnttime)؛ / * اجازه دهید ما پیام را برای مجله ارائه دهیم - زمان شروع مشتری. در صورت شکست - من خطا را اعلام خواهم کرد * / اگر ((نتیجه \u003d rlog_l (و mystring، cl)) \u003d\u003d خالی) (fprintf (stderr "، error2 \\ n")؛ clnt_perror (CL، سرور)؛ خروج (3)؛) / * B مورد شکست در یک کامپیوتر از راه دور اجازه اطلاع خطا * / اگر (* نتیجه! \u003d 0) fprintf (stderr "، نوشتن خطا به مجله \\ n")؛ / * 0 توصیفگر اسکلت * / Cint Destroy (CL)؛ خروج (0)؛ )

پلاگین مشتری log_clnt.c با ماژول client.c برای دریافت برنامه مشتری اجرایی کامپایل شده است.


در حال حاضر در برخی از Server Server.Nowher.ru، شما باید فرآیند سرور را شروع کنید:


$ logger

پس از آن، هنگام شروع مشتری RLOG در دستگاه دیگری، سرور ورودی مناسب را به فایل ورودی اضافه می کند.

طرح عملیات RPC در این مورد در شکل نشان داده شده است. 1. ماژول ها به شرح زیر ارتباط برقرار می کنند:

  1. هنگامی که فرآیند سرور راه اندازی می شود، یک سوکت UDP ایجاد می کند و هر پورت محلی را با این سوکت متصل می کند. بعد، سرور تابع کتابخانه SVC_Register (3n) را برای ثبت نام شماره های برنامه و نسخه آن می نامد. برای انجام این کار، این تابع به فرآیند Portmap (IM) اشاره دارد و ارزش های مورد نیاز را انتقال می دهد. سرور Portmap (IM) معمولا زمانی آغاز می شود که سیستم مقداردهی شود و با پورت شناخته شده همراه باشد. در حال حاضر Portmap (3n) شماره پورت را برای برنامه و نسخه ما می داند. سرور منتظر درخواست است توجه داشته باشید که تمام اقدامات شرح داده شده توسط یک پلاگین سرور ایجاد شده توسط کامپایلر RPCGEN (IM) ساخته شده است.
  2. هنگامی که برنامه RLOG راه اندازی می شود، اولین چیزی که آن را انجام می دهد، باعث می شود که تابع کتابخانه CLNT_CREATE، نشان دهنده آدرس سیستم از راه دور، شماره های برنامه و نسخه، و همچنین پروتکل حمل و نقل باشد. این تابع یک درخواست را به سرور Portmap Server (IM) از راه دور ارسال می کند. Nowhere.m و دریافت یک شماره پورت از راه دور برای سرور ورودی.
  3. مشتری از روش RLOG_1 () تعریف شده در پلاگین مشتری می نامد و کنترل پلاگین را انتقال می دهد. این، به نوبه خود، یک درخواست (تبدیل استدلال به فرمت XDR) به عنوان یک بسته UDP و ارسال آن به یک پورت از راه دور دریافت شده از سرور PortMap (IM). سپس او برای برخی از زمان ها پاسخ می دهد و در صورت عدم درمان دوباره درخواست را ارسال می کند. تحت شرایط مطلوب، پرس و جو توسط سرور Logger (سرور پلاگین سرور) پذیرفته شده است. پلاگین تعیین می کند که کدام تابع (با شماره روش) نامیده می شود و عملکرد RLOG_1 () ماژول log.c را فرا می خواند پس از بازگشت به کنترل بازگشت به پلاگین، دومی این مقدار را که توسط تابع RLOG_1 () به فرمت XDR بازگردانده می شود، تبدیل می کند و یک پاسخ را به عنوان یک بسته UDP تولید می کند. پس از دریافت پاسخ، مشتری پلاگین ارزش بازگشت را بازیابی می کند، آن را تبدیل می کند و به برنامه سرپرست مشتری باز می گردد

) مفهوم تماس از راه دور

روش از راه دور Call - RPC (روش Remote Call - RPC) گسترش مکانیسم کنترل شناخته شده و قابل درک و اطلاعات موجود در برنامه در حال اجرا بر روی یک دستگاه برای انتقال کنترل و داده ها از طریق شبکه است. ابزارهای تماس از راه دور برای تسهیل سازمان محاسبات توزیع شده در نظر گرفته شده است. بزرگترین کارایی استفاده از RPC در آن دسته از برنامه های کاربردی که در آن ارتباط تعاملی بین اجزای راه دور با یک زمان پاسخ کوچک و مقدار نسبتا کمی از داده های انتقال یافته وجود دارد، به دست می آید. چنین برنامه های کاربردی RPC گرا نامیده می شود.

ویژگی های مشخصه تماس روش های محلی عبارتند از:

عدم تقارن، یعنی یکی از احزاب تعاملی، آغازگر است؛ همگام سازی، یعنی اجرای روش فراخوانی زمانی که از لحظه درخواست متوقف می شود و تنها پس از بازگشت از روش نامیده می شود.

پیاده سازی تماس های از راه دور به طور قابل توجهی پیچیده تر از اجرای چالش های تماس محلی است. بیایید با این واقعیت شروع کنیم که از زمانی که فراخوانی و روش های نامیده می شود بر روی دستگاه های مختلف انجام می شود، آنها فضاهای آدرس های مختلفی دارند و این باعث ایجاد مشکلات در هنگام انتقال پارامترها و نتایج، به ویژه اگر دستگاه ها یکسان نیستند. از آنجا که RPC نمی تواند بر روی حافظه مشترک حساب کند، این بدان معنی است که پارامترهای RPC نباید حاوی اشاره گرها در سلول های حافظه غیر Defo باشند و مقادیر پارامتر باید از یک کامپیوتر به دیگری کپی شود. تفاوت بعدی بین RPC از تماس محلی این است که لزوما از سیستم ارتباطی زیرزمینی استفاده می کند، اما این نباید به وضوح در تعریف روش ها یا روش های خود قابل مشاهده باشد. ردیف باعث مشکلات اضافی می شود. اجرای برنامه ایجاد شده و روش محلی در یک دستگاه در یک فرآیند تک اجرا می شود. اما حداقل دو فرآیند در اجرای RPC شرکت می کنند - یکی در هر دستگاه. در صورتی که یکی از آنها برای تکمیل تکمیل شود، شرایط زیر ممکن است رخ دهد: هنگامی که تصادفات رویه ای رخ می دهد، از راه دور، رویه ها را "یتیم" ایجاد می کنند، و هنگامی که روش های دور افتاده به طور تصادفی تکمیل می شوند، باعث می شود روشهایی که به طور ناموفق انتظار پاسخ از راه دور را داشته باشند روش ها

علاوه بر این، تعدادی از مشکلات مربوط به ناهمگونی زبان های برنامه نویسی و محیط های عملیاتی وجود دارد: ساختارهای داده ها و روش های روش های پشتیبانی شده در هر یک از زبان برنامه نویسی به همان شیوه در همه زبان های دیگر پشتیبانی نمی شود.

این و برخی از مشکلات دیگر، تکنولوژی گسترده RPC را حل می کند که دارای بسیاری از سیستم عامل های توزیع شده است.

عملیات اصلی RPC

برای درک کار RPC، ابتدا اعدام یک روش محلی را در یک دستگاه معمولی به طور مستقل عمل کنید. به عنوان مثال، اجازه دهید آن یک تماس سیستم باشد

COUNT \u003d خواندن (FD، BUF، NBYETES)؛

جایی که FD یک عدد صحیح است
Buf - آرایه ای از شخصیت ها،
nbytes یک عدد صحیح است

برای برقراری تماس که باعث می شود این روش پارامترها را به پشته در جهت معکوس فشار دهد (شکل 3.1). پس از خواندن خواندن، مقدار بازگشتی را به ثبت نام می برد، آدرس بازگشت را حرکت می دهد و کنترل روش تماس گیرنده را که پارامترهای پشته را انتخاب می کند، بازگرداند، آن را به حالت اصلی خود بازگرداند. توجه داشته باشید که در زبان با پارامترها می تواند نامیده شود یا با مرجع (به نام) یا با مقدار (با ارزش). با توجه به روش نامیده می شود، مقادیر متغیرهای محلی را آغاز می کنند. روش نامیده می شود آنها می توانند آنها را تغییر دهند، و این امر بر ارزش اصل اصلی این متغیرها در روش تماس گیرنده تاثیر نمی گذارد.

اگر اشاره گر به متغیر به روش نامیده می شود، تغییر در مقدار این متغیر، روش حاصل از تغییر در ارزش این متغیر و برای روش ایجاد کننده است. این واقعیت برای RPC بسیار قابل توجه است.

همچنین یک مکانیزم انتقال پارامتر دیگر وجود دارد که در S استفاده نمی شود. این تماس با Call-by-copy / restore نامیده می شود و این است که برنامه تماس را به پشته در قالب مقادیر کپی کنید و سپس پس از تماس تلفنی، کپی کنید مقادیر اصلی روش فراخوانی.

تصمیم گیری در مورد مکانیزم برای انتقال پارامترهای استفاده شده توسط توسعه دهندگان زبان پذیرفته شده است. گاهی اوقات به نوع داده منتقل می شود. به عنوان مثال، در زبان، به عنوان مثال، داده های کل و دیگر اسکالر همیشه توسط ارزش و آرایه ها توسط مرجع منتقل می شود.

شکل. 3.1 a) پشته قبل از بررسی خواندن؛
ب) پشته در طول روش؛
ج) پس از بازگشت به برنامه تماس پشته کنید

ایده مبتنی بر RPC این است که تماس را به روش از راه دور که به نظر می رسد و همچنین تماس به روش محلی است. به عبارت دیگر - RPC شفاف: تماس گیرنده نیازی به دانستن این روش نامیده می شود بر روی یک دستگاه دیگر، و بالعکس.

RPC به شفافیت می رسد به شرح زیر است. هنگامی که روش نامیده می شود واقعا از راه دور است، کتابخانه به جای یک روش محلی، یک نسخه دیگر از روش به نام Client Subt (خرد - پلاگین) قرار می گیرد. مانند روش اصلی، خرد نامیده می شود با استفاده از توالی تماس (همانطور که در شکل 3.1)، هنگام دسترسی به هسته، یک وقفه وجود دارد. فقط در مقایسه با روش اصلی، پارامترها را در رجیسترها قرار نمیدهد و داده ها را از هسته درخواست نمی کند، بلکه یک پیام را برای ارسال یک دستگاه از راه دور به هسته تولید نمی کند.

مراحل اجرای RPC

تعامل اجزای نرم افزاری هنگام انجام یک تماس از راه دور از روش، در شکل 3.2 نشان داده شده است. پس از اینکه خرد مشتری توسط برنامه مشتری نامیده شد، اولین وظیفه آن این است که با فرستادن بافر پر کنید. در بعضی از سیستم ها، خرد مشتری دارای یک بافر طول ثابت است، هر بار از ابتدا پس از دریافت هر درخواست جدید، هر بار پر شده است. در سیستم های دیگر، بافر پیام یک استخر بافر برای زمینه های پیام فردی است و برخی از این بافر ها قبلا پر شده است. این روش به ویژه برای این موارد مناسب است، زمانی که بسته یک فرمت را شامل تعداد زیادی از زمینه ها می شود، اما مقادیر بسیاری از این زمینه ها از فراخوانی تماس به تماس تغییر نمی کند.

سپس پارامترها باید به فرمت مناسب تبدیل شوند و به بافر پیام وارد شوند. در این مرحله، پیام آماده انتقال است، بنابراین قطع شدن تماس اصلی انجام می شود.

شکل. 3.2. تماس از راه دور تماس

هنگامی که هسته کنترل را دریافت می کند، زمینه ها را تغییر می دهد، ثبت نام پردازنده و کارت حافظه را ذخیره می کند (توصیفگرهای صفحه)، کارت حافظه جدیدی را تنظیم می کند که برای کار در حالت هسته استفاده می شود. از آنجا که زمینه های هسته و کاربر متفاوت است، هسته باید با دقت پیام را به فضای آدرس خود کپی کند تا بتواند به آن دسترسی داشته باشد، به یاد داشته باشید که آدرس مقصد (a، احتمالا، سایر زمینه های هدر) را به یاد داشته باشید و باید باشد انتقال به رابط شبکه آن. این کار را بر روی سمت مشتری انجام می دهد. تایمر انتقال روشن است، و هسته می تواند یک نظرسنجی چرخه ای از یک پاسخ را انجام دهد یا کنترل برنامه ریز را انتقال دهد، که هر فرآیند دیگر را انتخاب می کند. در مورد اول، پرس و جو تسریع شده است، اما چند برنامه چندگانه وجود ندارد.

در سمت سرور، بیت های ورودی توسط دستگاه دریافتی یا به بافر داخلی ساخته شده یا در RAM قرار می گیرند. هنگامی که تمام اطلاعات به دست آمده، یک وقفه تولید می شود. دستگیره وقفه صحت داده های بسته را بررسی می کند و تعیین می کند که باید آن را منتقل کند. اگر هیچکدام از مقررات این بسته را انتظار نداشته باشند، دستگیره باید آن را در بافر قرار دهد یا حتی آن را رد کند. اگر یک خرد انتظار وجود داشته باشد، پیام به آن کپی می شود. در نهایت، زمینه ها تغییر می کنند، در نتیجه ثبت نام ها و کارت حافظه، ارزش هایی را که در آن زمان زمانی که خرد شده بود، تماس گرفت.

در حال حاضر STRUM سرور شروع به کار می کند. این پارامترها را باز می کند و آنها را بر اساس پشته قرار می دهد. هنگامی که همه چیز آماده است، سرور تماس می گیرد. پس از اتمام این روش، سرور نتایج را به مشتری منتقل می کند. برای این، تمام مراحل فوق شرح داده شده تنها در جهت معکوس انجام می شود.

شکل 3.3 دنباله فرمان را نشان می دهد که باید برای هر تماس RPC انجام شود، و شکل 3.4 - که سهم کل زمان RPC برای اجرای هر یک از 14 مرحله آنها شرح داده شده است. مطالعات انجام شده بر روی یک ایستگاه کاری چند پردازنده دسامبر دسامبر انجام شد و اگرچه حضور پنج پردازنده لزوما تحت تاثیر نتایج اندازه گیری قرار گرفت، هیستوگرام توصیف شده در شکل، ایده کلی روند اجرای RPC را ارائه می دهد.

شکل. 3.3. مراحل اجرای روش RPC

شکل. 3.4. توزیع زمان بین 14 مرحله RPC

1. تماس بگیرید

2. تهیه بافر

3. پارامترهای بسته

4. فیلد هدر را پر کنید

5. چک کردن چکمه در پیام

6. وقفه به هسته

7. بسته بندی صف برای اعدام

8. انتقال پیام به کنترل کننده اتوبوس QBUS

9. زمان انتقال برای اترنت

10. یک بسته را از کنترلر دریافت کنید

11. روش برای پردازش وقفه

12. محاسبه چکمه

13. سوئیچینگ زمینه به فضای کاربر

14. انجام خرد سرور

اتصال دینامیک

سوال در مورد چگونگی تنظیم مشتری محل سرور را در نظر بگیرید. یکی از روش های حل این مشکل، استفاده مستقیم از آدرس شبکه سرور در برنامه مشتری است. فقدان این رویکرد، انعطاف پذیری فوق العاده ای است: هنگامی که سرور منتقل می شود، یا با افزایش تعداد سرورها، یا هنگامی که رابط کاربری در تمام این موارد و بسیاری از موارد دیگر تغییر می کند، لازم است که تمام برنامه هایی را که از آن استفاده کرده اند، مجددا مجددا مجددا استفاده کنیم وظیفه سفت و سخت از آدرس سرور. به منظور اجتناب از تمام این مشکلات، در برخی از سیستم های توزیع شده، اتصال به اصطلاح پویا استفاده می شود.

لحظه اولیه برای اتصال پویا یک تعریف رسمی (مشخصات) سرور است. مشخصات شامل نام سرور فایل، شماره نسخه و لیست روش های ارائه شده توسط این سرور برای مشتریان است (شکل 3.5). برای هر روش، توضیحات از پارامترهای آن نشان داده شده است که نشان می دهد آیا پارامتر ورودی یا خروجی نسبت به سرور است یا خیر. بعضی از پارامترها می توانند به طور همزمان ورودی و خروجی باشند - به عنوان مثال، یک آرایه مشخصی که به مشتری فرستاده می شود، به سرور ارسال می شود، و سپس به مشتری بازگردانده می شود (کپی / بازگرداندن عملیات).

شکل. 3.5. مشخصات سرور RPC

مشخصات سرور رسمی به عنوان داده های منبع برای برنامه Generator Staby استفاده می شود که هر دو مشتری و سرور را ایجاد می کند. سپس آنها در کتابخانه های مربوطه قرار می گیرند. هنگامی که برنامه کاربر (مشتری) هر روش را در مشخصات سرور تعریف می کند، روش خرد مربوطه با کد برنامه باینری همراه است. به طور مشابه، زمانی که سرور کامپایل می شود، سرور های سرور با آن ارتباط دارند.

هنگامی که سرور را شروع می کنید، اولین اقدام آن انتقال رابط سرور خود را با یک برنامه خاص به نام Binder "OHM است. این فرایند، به عنوان فرایند ثبت نام سرور شناخته می شود، شامل انتقال سرور نام آن، شماره نسخه، یک شناسه منحصر به فرد است و توصیفگر مکان درایور. توصیفگر به طور سیستماتیک مستقل است و ممکن است IP، اترنت، x.500 یا هر آدرس دیگری را ارائه دهد. علاوه بر این، ممکن است اطلاعات دیگر مانند احراز هویت داشته باشد.

برای مثال، هنگامی که یک مشتری یکی از مراحل راه دور را برای اولین بار می نامد، به عنوان مثال، خوانده شده، Client Sub می بیند که هنوز به سرور متصل نیست و یک پیام برنامه باند را می فرستد که از وارد کردن رابط کاربری نسخه دلخواه درخواست می کند سرور مورد نظر اگر چنین سرور وجود داشته باشد، Binder توصیفگر توصیفگر و شناسه ی منحصر به فرد را به مشتری می کند.

مشتری هنگام ارسال یک پیام با پرس و جو از توصیفگر به عنوان یک آدرس استفاده می کند. این پیام شامل پارامترها و یک شناسه منحصر به فرد است که سرور Kernel به منظور ارسال پیام دریافتی به سرور دلخواه در صورتی که چندین نفر از آنها در این دستگاه وجود دارد استفاده می کند.

این روش متشکل از رابط های واردات / صادرات انعطاف پذیری بالا دارد. به عنوان مثال، ممکن است چندین سرور وجود داشته باشد که از همان رابط پشتیبانی می کنند و مشتریان به طور تصادفی بیش از سرورها توزیع می شوند. به عنوان بخشی از این روش، یک نظرسنجی دوره ای از سرورها امکان پذیر است، تجزیه و تحلیل عملکرد آنها و در صورت عدم خاموش شدن، خاموش شدن اتوماتیک، که باعث افزایش شکست کلی سیستم می شود. این روش همچنین می تواند از احراز هویت مشتری پشتیبانی کند. به عنوان مثال، سرور می تواند تعیین کند که تنها توسط مشتریان از یک لیست خاص استفاده می شود.

با این حال، اتصال پویا دارای نقایص، به عنوان مثال، سربار اضافی (هزینه های موقت) برای صادرات و واردات رابط. مقدار این هزینه ها می تواند قابل توجه باشد، زیرا بسیاری از فرآیندهای مشتری زمان کوتاهی وجود دارد و هر بار فرآیند فرآیند را شروع می کند، روش رابط باید دوباره اجرا شود. علاوه بر این، برنامه Binder می تواند یک تنگنا در سیستم های توزیع شده بزرگ باشد، و ایجاد چندین برنامه هدف مشابه نیز افزایش سربار ایجاد و هماهنگ سازی فرآیندها را افزایش می دهد.

Semantics RPC در صورت شکست

در حالت ایده آل، RPC باید به درستی عمل کند و در صورت شکست. طبقات زیر را در نظر بگیرید:

مشتری نمی تواند مکان سرور را تعیین کند، به عنوان مثال، در صورت شکست سرور مورد نظر، یا به دلیل این واقعیت است که برنامه مشتری برای مدت زمان طولانی کامپایل شده و از نسخه قدیمی رابط سرور استفاده می شود. در این مورد، در پاسخ به درخواست مشتری، یک پیام شامل یک کد خطا است. درخواست از مشتری را به سرور از دست داد. ساده ترین راه حل - پس از یک زمان خاص، درخواست را تکرار کنید. پاسخ از دست رفته از سرور به مشتری. این گزینه توسط قبلی پیچیده تر است، زیرا برخی از روش ها Idempotent نیستند. iDemPotent این روش نامیده می شود، درخواست اعدام که می تواند چندین بار تکرار شود و نتیجه تغییر نخواهد کرد. یک نمونه از چنین روش می تواند یک فایل را بخواند. اما روش حذف برخی از مبلغ از یک حساب بانکی Idempotent نیست، و در صورت از دست دادن پاسخ، درخواست مکرر می تواند وضعیت حساب مشتری را به طور قابل توجهی تغییر دهد. یکی از راه حل های احتمالی این است که تمام مراحل را به شکل idempotent بفرستیم. با این حال، در عمل، همیشه موفق نمی شود، بنابراین روش دیگری می تواند مورد استفاده قرار گیرد - یک شماره سازگار از تمام درخواست ها توسط هسته مشتری. هسته سرور تعداد آخرین درخواست از هر یک از مشتریان را به یاد می آورد، و هنگام دریافت هر درخواست تجزیه و تحلیل را انجام می دهد - چه این درخواست اولیه یا تکراری است. سرور پس از دریافت درخواست سقوط کرده است. همچنین برای اموال اموال مهم است، اما متأسفانه درخواست های با پرسش های شماره گذاری نمی تواند اعمال شود. در این مورد، مهم است

    جاوا RMI به عنوان یک نوع از روش های چالش از راه دور مستقل از شبکه، مراحل اصلی کار با آن و هدف. مقایسه توزیع شده و غیر اختصاصی برنامه های جاوا. معماری، پلاگین و سطح اسکلت، لینک های از راه دور و حمل و نقل جاوا RMI.

    تدوین اولیه از پرس و جو SQL در محل اعدام. از دستورالعمل های آماده سازی استفاده کنید. با استفاده از نحو تعریف تماس برای دریافت مقدار بازگشتی توسط روش یا عملکرد. ایجاد دستورالعمل برای یک نمونه در صورت درخواست.

    هدف و طرح کار. ترکیب و نصب مشخصات برنامه های HTTP بسته بندی شده.

    روش ها و توابع را می توان به عنوان واحد برنامه های بسته تعریف کرد که برخی از الگوریتم را اجرا می کنند. در واقع، روش یا عملکرد تقریبا یک برنامه است.

    تنظیم خودکار TCP / IP، پیکربندی پیکربندی پویا با استفاده از bootp. آدرس های IP درخواست ها / پاسخ ها، از دست دادن و فرمت پیام، فازهای پیچ و تاب. پروتکل DHCP به عنوان گسترش پروتکل WWP. توزیع و تخصیص آدرس های IP.

    با مفهوم بازگشتی، ما قبلا ملاقات کرده ایم: نسبت های مکرر در عبارات ریاضی کاملا رایج هستند. بازگشتی در تعیین این است که مفهوم قابل تعریف از طریق این مفهوم تعیین می شود.

    1. مقدمه 2 2. بررسی اجمالی از تکنولوژی COM 2 2.1. ترکیب COM Object 3 2.2. اینترفیس 4 2.3. خواص COM اشیاء 6 2.4. سرور COM 6 2.5. مکانیزم Marshalling 7.

    بررسی ماهیت، اصل عملیات و هدف اصلی پایگاه های از راه دور. مدل کنترل از راه دور داده ها (مدل سرور فایل). انواع موازی TRIGGER مکانیسم برای ردیابی رویدادهای ویژه ای است که با دولت پایگاه داده مرتبط هستند.

    بسته بندی مدل های متامودل، واقعیت و امنیت. مدل مفهومی مشتری. یک مثال از عملکرد معماری توزیع شده. تکمیل پیاده سازی

    مفهوم DLL. به یاد آوردن فرآیند برنامه نویسی در DOS. تبدیل متن تبدیل در کد ماشین شامل 2 فرآیند: تدوین و پیوند. در طی پیوند در کد برنامه، نه تنها تبلیغات توابع و رویه ها، بلکه کد کامل آنها نیز قرار گرفت.

    توابع برای کار با TCP / IP، سوکت، اتصال، گوش دادن و پذیرش. توصیفگر فایل فرایندهای ارتباطی دریافت داده ها خواندن از سوکت به سوکت بنویسید سوکت بسته شدن متن برنامه ایجاد یک وب سرور در سیستم عامل QNX

    دسترسی به اینترنت دسترسی به اینترنت پیام های الکترونیکیذخیره شده در سرور شرح برنامه، آسان، APOP و احراز هویت احراز هویت. پیاده سازی توابع، راهنمای کاربر، الگوریتم های عملکرد برنامه، رابط گرافیکی.

    اصل عملیات اپراتورهای اصلی زبان برنامه نویسی توربو-پراکنده: اپراتور تخصیص، انتخاب مورد، انتقال بدون قید و شرط، چرخه، گرفتن، کامپوزیت. شرح رسمی و عملکرد تماس و روش. مورد نیاز برای لیست پارامترهای واقعی.

    اصل عملیات و هدف سرولت جاوا، اهمیت آنها در بهبود عملکرد سرورهای وب و بهبود برنامه نویسی، مزایا و معایب استفاده آنها. راه هایی برای تماس با سرولت از مرورگر و صفحات. ضبط و خواندن ویژگی های جلسه.

    معماری ویندوز NT. ساختار سیستم عامل بر اساس میکروسکوپی. زیرسیستم های امنیتی ویندوز NT.

    ابتدای اصلی پیام رسانی در سیستم های توزیع شده. روش های مربوطه بلوک های مسدود کردن و غیر مسدود کردن. bufferizable و نه primitives بافر.

    برنامه های کاربردی سرور بخش مشتری

    دو سال پیش، آژاکس در تعجب بود (و کلمه آژاکس سپس اختراع نکرد). در حال حاضر برنامه های کاربردی وب، که صفحات آن در پرواز به روز شد، به ترتیب چیزها. حتی برعکس: بدون آژاکس، برخی از خدمات را تصور می کنید.

    توصیف نحو و روش تماس. مولفه های. شرح نمونه و روش تماس انواع پارامترها برنامه