هر سیستم مستقلی که روی تکپردازنده اجرا میشود، به مکانیزمی شبیه به تایمر نیاز دارد که زمان اجرای فرآیند را ردیابی میکند، همچنین زمان صرف شده توسط فرآیند در استفاده از منابع مختلف - CPU، I/O، حافظه و غیره را بررسی میکند.
اما در مورد محیط توزیع شده چطور؟
سیستم توزیع شده بسیار پیچیده تر از سیستم مستقل است، سوال اصلی که مطرح می شود این است که چگونه چندین فرآیند در حال اجرا بر روی سیستم های مختلف را هماهنگ کنیم؟ حتی اگر مکانیزم تایمر را اعمال کنیم، باز هم آنقدر نامرتب است که نمیتوانیم مکانیسم تایمر خود را به درستی هماهنگ کنیم.
برای آن ما به مکانیزم تایمر با همگام سازی بین فرآیندها نیاز داریم و برای آن به یک ساعت جهانی نیاز داریم. اما در زمان واقعی، ما نمی توانیم ساعت جهانی را بپردازیم، که به سیستم نیاز دارد تا زمان یکسانی را در بین فرآیندها نمایش دهد، که ممکن نیست، زیرا هر CPU ساعت خود را دارد.
فرض کنید مثال بالا برای یک وضعیت ناهمگام ساعت است، که در آن دو فرآیند وجود دارد - ویرایشگر و کامپایلر، و ساعت در کادرهای مربعی نشان داده شده است، جایی که برنامه در ویرایشگر، همیشه دیر خواهد بود، یا به طور خاص تر، این کار را نخواهد کرد. دوباره کامپایل شود، به دلیل کندی ساعت در دستگاه.
در اینجا ما به طور خاص ساعت منطقی را درک می کنیم، زیرا ساعت مهمترین جنبه در سیستم DS است. نگران سفارش رویداد.
سفارش رویداد Lamport
او برخی از راههای زیر را برای درک ترتیب رویداد، بر اساس رویداد در میان فرآیندهای مختلف ایجاد کرد. او «رابطه اتفاق افتاده» را که در ساعتهای منطقی استفاده میشود، تعریف میکند، و رابطه قبل از وقوع را بهعنوان «آ» که شرایط را برآورده میکند، بیان میکند.
- فرض کنید اگر رویدادهای a و b در یک فرآیند داشته باشیم و در رویداد، یک رویداد قبل از b رخ می دهد، سپس قبل از آن اتفاق افتاده است به عنوان "aà b" نشان می دهد.
- فرض کنید، اگر a رویداد ارسال شما از یک فرآیند (P1) و b رویداد دریافتی شما از یک فرآیند دیگر (P2) باشد، قبل از اینکه به عنوان "aàb" نشان داده شود، اتفاق افتاده است. درک این موضوع ساده است که گیرنده نمی تواند پیام را دریافت کند مگر اینکه رویداد ارسال اتفاق افتاده باشد.
- آخرین شرط ارائه شده توسط لامپورت "رابطه گذرا" است که اگر aàb و bàc است، سپس با گذرا aàc است.
همچنین او شرایط دیگری را نیز در نظر گرفته است، زیرا یک رویداد هرگز نمی تواند قبل از خودش اتفاق بیفتد، به طور خاص شرط "aàa" هرگز نمی تواند برای هیچ رویداد a در فرآیند اتفاق بیفتد.
دو رویداد می توانند همزمان باشند، همزمانی در اینجا به معنای رابطه است، اگر این دو رویداد به هم مرتبط نباشند، می گوییم این دو رویداد همزمان هستند. این همچنین به این معنی است که این دو رویداد همزمان قبل از رابطه اتفاق نمیافتند. به طور کلی این اتفاق زمانی می افتد که دو رویداد در هیچ رویدادی شرکت نمی کنند یا به طور مستقیم یا غیرمستقیم با یکدیگر پیام رد و بدل نمی کنند.
علاوه بر این، در صورت رویدادهای همزمان، نمیتوانیم پیشبینی کنیم که کدام رویداد اول و کدام پس از آن اتفاق میافتد، زیرا آنها در رویداد شرکت نمیکنند. چنین سناریوهایی که قبل از رابطه اتفاق میافتند - «ارائهی تصادفی» نامیده میشوند.
مفهوم ساعتهای منطقی نشان میدهد که همگامسازی ساعت خیلی مهم نیست، اگر دو فرآیند در حال رویداد هستند یا در حال تبادل پیام هستند، لازم نیست ساعتهای آنها همگام شوند. این نشان میدهد که آنچه واقعاً اهمیت دارد هماهنگسازی ساعتها نیست، بلکه ترتیبی است که فرآیند میخواهد در آن انجام شود.
نسخه ساده تر
لامپورت در گزارش نهایی خود این کلیدها را به سمت ساعت منطقی در سیستم توزیع شده پیشنهاد کرد.
- آن فرآیندهایی که با یکدیگر تعامل ندارند، مهم نیستند.
- ترتیب رویدادها به جای داشتن ساعت جهانی یا زمان واقعی، کلید ساعت های منطقی است.
- صحت مطلق در ساعت منطقی اهمیت کمتری نسبت به ثبات دارد.
امیدوارم خوشت آمده باشد. روز خوبی داشته باشید و ممنون که خواندید.