حميد يوسف زاده
 
yousefz@ccwmagazine.com       

کنفرانس هسته لینوکس
چه تغييراتی را در هسته لينوكس مشاهده خواهيم كرد

 

روزهای 28 و 29 مارس 2001 شهر سنخوزه در ايالات متحده ميزبان برنامهنويسان هسته لينوكس بود كه در رقابت نشست هسته لينوكس گردهم آمده بودند تا در يك ملاقات رودرو با يكديگر، راهكارهای آتی را در مورد هسته لينوكس و سمتوسوی ان ترسيم كنند. در دو قسمت قبلی اين گزارش مروری داشتيم بر هشت سخنرانی از 13 سخنرانی اين نشست. در بخش پايانی، به مرور پنج سخنرانی ديگر اين كنفرانس میپردازيم.

سخنرانی شماره 8: مديريت حافظه در هسته لينوكس
    سخنران Rik van Riel بود كه در مورد آينده مديريت حافظه مجازی در لينوكس صحبت كرد. در اين سخنرانی برخی جنبههای مديريت حافظه كه آسان ايجاد بهبود در آنها وجود دارد، مورد بررسی قرار گرفت. در واقع در پيادهسازی فعلی مديريت حافظه، مكانيزم انتخاب صفحهای از حافظه كه بايد جايگزين شود، به اين صورت است كه جدول صفحات حافظه پويش میشود و صفحاتی كه امكان جايگزين شدن دارند، از حافظه اصلی خارج میشوند. اين روش به خوبی كار میكند ولی اين روش بهترين روش نيست و نياز به بهبود دارد.
    در اين بحث روش نگاشت معكوس (reverse mapping) مطرح شد. اكنون فهميدن اين كه چه پردازههايی دارای يك نگاشت مجازی برای يك صفحه فيزيكی هستند مشكل است. اما اگر يك نگاشت معكوس وجود داشته باشد، انتخاب صفحهها برای جايگزينی میتواند با پويش حافظه فيزيكی انجام گيرد كه باعث بهبودهايی میشود. اما اين كار هزينه سنگينی دارد كه آن دوبرابر شدن اندازه جدول صفحات است.
    برای حل شدن اين مشكل نيز بزرگ كردن اندازه صفحات پيشنهاد شد كه آن نيز باعث هدر رفتن حافظه در بسياری از كاربردها میشود. در ادامه استفاده تركيبی از صفحات كوچك و بزرگ مورد بحث حضار قرار گرفت. سپس به اشتراك گذاشتن جداول صفحات پيشنهاد شد. در پيادهسازی فعلی اگر دو پردازه نگاشتی به يك ناحيه از حافظه مجازی ايجاد كنند، دو جدول صفحه جداگانه برای آنها ايجاد میشود كه اين باعث هدر رفتن حافظه به ميزان زياد میشود. با استفاده از روش اشتراك، اين مشكل حل میشود.
    در ادامه يك صحبت كلی در مورد مكانيزمهای Readahead انجام شد. سپس نياز لينوكس به افزايش كارايی Thrashing مطرح شد. سخنران مكانيزمی را پيشنهاد كرد كه با استفاده از آن هنگامی كه سيستم آغاز به thrash میكند، پردازهها را متوقف میكند. درپايان لزوم بهبود كد فعلی برای سولت نگهداری آن بيان شد و اين كه بايد مستندات بيشتری در اين كد قرار داده شود.

سخنرانی شماره 10: ورودی/خروجی ناهمگام
    اين سخنرانی توسط LaHaise ايراد شد كه در مورد پيادهسازی خود از ورودی/خروجی ناهمگام (asymchromous) صحبت كرد. ورودی/خروجی ناهمگام خوب در هسته لينوكس برای مدتها يك آرزو بوده است كه به نظر میرسد اين آرزو بالاخره در نگارش 5/2 از هسته به واقعيت خواهد رسيد.
    سخنران بيان كرد كه تصميم گرفته است روش Poslx را مستقيماً پيادهسازی نكند، بلكه روشی انعطافپذيرتر و عملیتر انتخاب كند. در پيادهسازی وی برخی فراخوانیهای سيستمی (system call) جديد فراهم میشود:
فراخوانی سيستمی submit_ios()__ كه به يك پردازنده اجازه میدهد يك عمل ناهمگام را تقاضا كند.
فراخوانی سيستمیio_cancel()__برای لغو اعمال تقاضا شده قبلی
فراخوانی سيستمیio_getevents()__برای لغو اعمال تقاضا شده قبلی
فراخوانی سيستمی io_wait()__كه به يك پردازنده اجازه میدهد منتظر تكميل يك عمل خاص بماند.
    اين پيادهسازی همچنين يك device جديد به نام /dev/aio ايجاد میكند كه برای نگاشت بخشی از حافظه به كار میرود برای اطلاعات تكميل عمليات ورودی/خروجی ناهمگام استفاده میشود.
    يكی از مشكلات موجود، اين است كه چگونه تكميل عمليات در هسته را بايد به پردازهها اطلاع داد. معمولاً اين كار توسط صفهای انتظار انجام میشود. اما در حالت ناهمگام پردازه در اين صف قرار نمیگيرد. برای حل اين مشكل سخنرانی كه صف انتظار را گسترش داده است تا به نحوي به پردازهها اطلاع داده شود.
    البته كارهای ديگری نيز برای ورودی/خروجی ناهمگام انجام شود. ازجمله مستند كردن كد، درنظر گرفتن محدوديتهای منابع، گسترش انواع devece كه ورودی/خروجی ناهمگام را پشتيبانی میكنند، و بسياری كارهای ديگر.

سخنرانی شماره 11: مديريت نيرو
    در اين سخنرانی Amdy Grover از اينتل كار خود زمينه مديريت نيرو (Power management) در لينوكس را ارائه كرد. كد قبلی كه مبتنی بر APM بود، منقرض شده است و اكنون ACPI به عنوان روش استاندارد مطرح است.
    پيادهسازی اينتل از ACPI توسط FreeBSD استفاده شده است و اينتل منتظر هسته 5/2 است تا آن را برای لينوكس ارائه كند. برای ايجاد درك بهتر در مورد ميزان پيچيدگی ACPI كافی است بدانيم پيادهسازی آن 5 الی 7 نفر سال كار برده است و هنوز هم پشتيبانی انتقال سيستم به حال خواب (Sleep) را ندارد.
    خواب بردن سيستم يك كار پيچيده است. كه ACPI بايد بتواند تمامی deveceهای سيستم را پيدا كند، به آنها بگويد كه حالت خود را ذخيره كند، و سپس آن را خاموش كند. اين كار بايد در ترتيب درست انجام شود، مثلاً خاموش كردن كنترلی ديسك در حالی كه ديسكی در آن در حال گردش است، اشتباه غيرقابل قبولی است.
    سخنران برای انجام اين كار روشی را پيشنهاد كرد كه البتهبيشتری آن هم انجام شده است و برای هسته 5/2 آماده خواهد بود.

سخنرانی شماره 12: Bitkeeper
    سخنرانی توسط LaryMcvoy از LMBench ايراد شد. Bitkeeper يك مكانيزم كنترل لورس است كه به نظر خيلی خوب میرسد. اين محصول برخی قابليتها را دارد كه آن را بر فراز سيستم CVS میكند. اما بيشتر مزايای آن را میتوان در واسط كاربر آن دانست. كار با اين سيستم لذتبخش و آسان است و ابزارهای مختلفی دراختيار كاربران قرار داده میشود. مثلاً يك ابزار مناسب برای مشاهده سابقه (history) سيستم وجود دارد كه يافتن آخرين تغييردهنده يك كد را بسيار آسان میكند. Bitkeeper را میتوان يك پيشرفت قابل ملاحظه در عرصه توليد تيمی نرمافزار دانست.
    سخنران سعی داشت ايجاد كنندگان هسته را متقاعد كند كه برای مدتی از Bitkeeper استفاده كنند. در زمان برگزاری كنفرانس هيچ موافقتی با اين موضوع صورت نگرفت ولی استفاده از آن در توليد هسته 52 دور از انتظار نيست.

سخنرانی شماره 12: مباحثه
    آخرين بخش از كنفرانس يك ميزگرد بود. اين بحث توسط Ted Tso رهبری میشد. او پيشنهاد كرد كه برنامهنويسان هسته (و مخصوصاً لينوس توروالدز) يك تاريخ قطعی برای اتمام كارهايی كه روی هسته 5/2 انجام میشود، تعيين شود. به اين ترتيب هر كسی میداند چه زمان بايد كه خود را آماده كند.
    همچنين استفاده از يك روش رسمی و برنامهريزی شده برای پروسه كنترل باگها مورد تأييد قرار گرفت. بحثی در مورد Bugzilla و همچنين GNATS انجام شد كه هيچ كدام مورد تأييد حضار قرار نگرفتند.

 

  

  
 م6

 

 
 
 

 

 
 Copyright CCW Magazine