موضوع مقاله: PCLSRing | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # PCLSRing | مقدمه: سناریوی مشکل این سناریو عوارض خاصی را نشان می دهد فرآیند A یک تماس سیستمی زمان‌بر ایجاد می‌کند. | ## بخش 1: PCLSRing | منظور از "زمان بر" این است که سیستم باید فرآیند A را در یک صف انتظار قرار دهد و در صورت آماده شدن برای اجرا، می تواند فرآیند دیگری را برای اجرا برنامه ریزی کند. در حالی که فرآیند A در حالت انتظار است، فرآیند B سعی می کند با فرآیند A تعامل داشته باشد یا به آن دسترسی داشته باشد، به عنوان مثال، یک سیگنال برای آن ارسال کند. در واقع، فرآیند A در وسط یک تماس سیستمی قرار دارد، اما ITS این ظاهر را اعمال می کند که فراخوانی های سیستم برای سایر فرآیندها (یا حتی برای همان فرآیند) قابل مشاهده نیستند . راه حل ITS: راه اندازی مجدد شفاف اگر تماس سیستمی نمی تواند قبل از دسترسی کامل شود، باید راه اندازی مجدد شود. این به این معنی است که متن تا نقطه ورود به فراخوانی سیستم پشتیبان گیری می شود، در حالی که آرگومان های فراخوانی به روز می شوند تا هر بخشی از عملیات را که قبلاً تکمیل شده است منعکس کنند. برای عملیات ورودی/خروجی، این بدان معناست که آدرس شروع بافر باید بر روی داده‌هایی که قبلاً منتقل شده‌اند، ارتقا یابد، در حالی که طول داده‌هایی که باید منتقل شوند باید بر این اساس کاهش یابد. پس از تکمیل تعامل فرایند B، فرآیند A می تواند اجرا را از سر بگیرد و فراخوانی سیستم از همان جایی که متوقف شده بود از سر گرفته می شود. | ## بخش 2: PCLSRing | این تکنیک آنچه را که PDP-10 در سخت افزار انجام می دهد در نرم افزار منعکس می کند. برخی از دستورالعمل‌های PDP-10 مانند BLT ممکن است به دلیل وقفه یا خطای صفحه کامل نشوند. در طول پردازش دستورالعمل، PDP-10 رجیسترهای حاوی آرگومان‌ها را به دستورالعمل تغییر می‌دهد، به طوری که بعداً دستورالعمل می‌تواند دوباره با آرگومان‌های جدید اجرا شود که هر کار باقی مانده را تکمیل می‌کند. برای مثال، صفحات حافظه در فضای کاربر ممکن است در طول یک تماس سیستمی در ITS صفحه بندی نشوند. اگر این اجازه داده می‌شد، وقتی فراخوانی سیستم PCLSRed است و سعی می‌کند آرگومان‌ها را به‌روزرسانی کند تا تماس لغو شود، ممکن است صفحه حاوی آرگومان‌ها وجود نداشته باشد و فراخوانی سیستم باید مسدود شود و از موفقیت PCLSR جلوگیری شود. برای جلوگیری از این امر، ITS اجازه نمی دهد که صفحات حافظه در فضای کاربر پس از اولین بار دسترسی به آنها در طی یک تماس سیستمی، صفحه بندی شوند و تماس های سیستمی معمولاً با لمس صفحاتی در فضای کاربری که می دانند باید به آنها دسترسی داشته باشند، شروع می شود. راه حل یونیکس: راه اندازی مجدد در صورت درخواست این را با رویکرد اتخاذ شده در سیستم عامل یونیکس مقایسه کنید، جایی که قابلیت راه اندازی مجدد وجود دارد، اما شفاف نیست. | ## بخش 3: PCLSRing | در عوض، یک عملیات ورودی/خروجی تعداد بایت‌هایی را که واقعاً منتقل شده است (یا خطای EINTR در صورتی که عملیات قبل از انتقال واقعی بایت‌ها قطع شده بود) را برمی‌گرداند، و این به برنامه بستگی دارد که این را بررسی کرده و از سرگیری عملیات را مدیریت کند. در فلسفه یونیکس ، این مورد توسط ریچارد پی گابریل به عنوان مثالی از اصل " بدتر، بهتر است " ارائه شد. رویکردهای ناهمزمان یک اتفاف دیگری هم ممکن است پیش بیاید.در موارد فوق واضح است که فراخوانی سیستم باید همزمان باشد - یعنی فرآیند فراخوانی باید منتظر باشد تا عملیات تکمیل شود. این امر اجتناب ناپذیر نیست: در سیستم عامل OpenVMS ، تمام I/O و سایر عملیات وقت گیر ذاتاً ناهمزمان هستند، به این معنی که معنای فراخوانی سیستم این است که "عملیات را شروع کنید، و یک یا چند مورد از این اعلان ها را پس از تکمیل انجام دهید. مجموعه استانداردی از اعلان‌های موجود (مانند تنظیم یک پرچم رویداد، یا ارائه یک تله سیستم ناهمزمان )، و همچنین مجموعه‌ای از فراخوان‌های سیستم برای تعلیق صریح فرآیند در حین انتظار وجود دارد که عبارتند از: کاملاً راه اندازی مجدد به معنای ITS، و ب) تعداد بسیار کمتر از مجموعه تماس‌های سیستمی زمان‌بر واقعی است. OpenVMS نسخه‌های همزمان «شروع عملیات و صبر کردن برای تکمیل» جایگزین همه تماس‌های سیستمی زمان‌بر را ارائه می‌کند. اینها به صورت "اجرای عملیات ناهمزمان واقعی" و به دنبال آن "صبر کنید تا عملیات پرچم رویداد را تنظیم کند" اجرا می شود. | ## جمع‌بندی | هر گونه دسترسی به زمینه فرآیند در طول این مدت، آن را در آستانه (دوباره) ورود به تماس پرچم انتظار-برای-رویداد مشاهده خواهد کرد.