بلاگ خبری سیسوگ

تغییر جدید کرنل لینوکس و استفاده از استاندارد C11

تغییر جدید کرنل لینوکس

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

برای جزییات بیشتر با سیسوگ همراه باشید.

 

تغییر جدید کرنل لینوکس از کجا شروع شد

 سیستم‌عامل لینوکس به زبان C نوشته‌شده است، اما بسیاری از افرادی که از این سیستم‌عامل استفاده می‌کنند نمی‌دانند نسخه C استفاده‌شده برای نوشتن لینوکس، نسخه مربوط به سال ۱۹۸۹ است! این نسخه از زبان C با عنوان ANSI x3.159-1989 نیز شناخته می‌شود.

ازآنجایی‌که C89 همچنان پشتیبانی می‌شود و همچنین همه کامپایلرهای C با استانداردهای قدیمی سازگار است، این ارتقا لینوکس آن‌چنان که به نظر می‌رسد، چشم‌گیر نخواهد بود. پس این سؤال پیش می‌آید که اصلاً این کار چه ضرورتی دارد؟ خصوصاً وقتی‌که تغییرات پیش رو ویژگی‌های مفیدی که در نسخه‌های جدیدتر هستند را شامل نمی‌شود!

موضوع تغییر استاندارد C، زمانی مورد توجه قرار گرفت که توسعه یک Patch جدید با مشکل مواجه شد. در این Patch، هنگام برطرف کردن یک مشکل امنیتی بالقوه (که با توابع تخمین-اجرای اصلی linked-list مربوط به کرنل وجود داشت) مشکل دیگری بروز کرد. در زمان حل این مشکل، تروالدز متوجه شد که در استاندارد C99، متغیر iterator که به ماکروهای انتقال لیست داده می‌شود، باید در اسکوپی خارج از خود حلقه اعلان شود.

آقای تروالدز در لیست میلینگ کرنل لینوکس (LKML) نوشت:

تمام دلیل بروز یک خطای non speculation مانند این، عدم استفاده ما از ‘اعلان متغیرها در حلقه‌ها’ به سبک C99 است.

به طور کلی ماکروهایی مثل (list_for_each_entry) همیشه به این دلیل که نمی‌توانند متغیر iterator را در خود حلقه اعلان کند، آخرین ورودی HEAD را از حلقه خارج می‌کند.

 

راه حل چیست؟

بااینکه استاندارد C99 مربوط به بیش از 20 سال پیش است، اما امکان اعلان متغیرها در سطح بلاک را فراهم می‌کند. آرند برگمن توسعه‌دهنده لینوکس، گفته است که این کار قابل انجام است. وی همچنین اعلام کرده است که امکان رفتن به استاندارد C11 نیز وجود دارد و به عبارتی از آنجایی که C99 محبوبیت زیادی ندارد و C11 مزایایی مثل پشتیبانی از multithreading و امنیت بالا، انتقال به C11 منطقی‌تر به نظر می‌رسد.

کامپایلر مینیمال کرنل لینوکس برای C، یعنی GCC نسخه 5.1 از C11 پشتیبانی می‌کند

کامپایلر GCC نسخه ۵.۱ که معمولا برای کامپایل کرنل از آن استفاده می‌شود از استاندارد C11 نیز پشتیبانی می‌کند، بنابراین مهاجرت به C11 آسان خواهد بود. تروالدز اظهار داشته که «بسیار مشتاق هستم که بالاخره زمان انجام این تغییر فرارسیده است، خصوصاً با توجه به اینکه (استاندارد C) سال‌ها در حال تکامل بوده است.»

سرانجام پس از اطمینان از درستی عملکرد استاندارد جدید C، بدون بروز هیچ‌گونه اشکال در کرنل، تروالدز پروژه را کلید زده است.

این انتقال به زودی و در merge window 5.18 آزمایش می‌شود.

ازآنجاکه merge window 5.18 به‌زودی منتشر می‌شود می‌توانیم کرنل جدید را در ماه مارس 2022 امتحان کنیم.

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

 

   منبع

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

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

2 دیدگاه در “تغییر جدید کرنل لینوکس و استفاده از استاندارد C11

  1. Avatar for m.h.Yazdani m.h.Yazdani گفت:

    جادی تو کانال یوتیوب خودش کامل این مورد رو توضیح داده
    اگه بیشتر میخواهید بدونید دیدنش خالی از لطف نیست

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      سلام
      بله اتفاقا خیلی هم خوب توضیح داده و از روی سورس کد توضیح داده لینکش رو میذارم دوستان حتما ببینند

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *