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

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

تغییر جدید کرنل لینوکس و استفاده از استاندارد C11
تغییر جدید کرنل لینوکس و استفاده از استاندارد 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 خواهیم بود.

 

   منبع

0 نفر

پــــســنــدیـده انـد

توجه

سیاوش
سیاوش

کارشناس ارشد الکترونیک دیجیتال، علاقه‌مند به یادگیری

دیدگاه ها

2 دیدگاه

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه دوم : چالش برنامه نویسی به زبان C

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

Zeus ‌ Zeus ‌
  • 3 سال پیش
راه اندازی LCD گرافیکی Nokia 1661

راه اندازی LCD گرافیکی Nokia 1661

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

Zeus ‌ Zeus ‌
  • 4 سال پیش
ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش
همه چیز درباره ریموت کنترل‌های هاپینگ

همه چیز درباره ریموت کنترل‌های هاپینگ

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

Zeus ‌ Zeus ‌
  • 5 سال پیش
مسابقه سوم: استخراج داده از رشته ها در زبان C

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش
مسابقه ششم: بزن میکروکنترلر را بسوزون!

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 12 ماه پیش
آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش
ساخت ماینر با FPGA و ARM

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش
کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش
مسابقه چهارم: کدام حلقه سریع‌تر است؟

مسابقه چهارم: کدام حلقه سریع‌تر است؟

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

Zeus ‌ Zeus ‌
  • 2 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک