بخشی از مقاله
چکیده :
طی دههای گذشته پیشرفت دانشِ الکترونیک و کامپیوتر باعث پیدایش ابزارهای مهم و کاربردی در زمینه اینترنت اشیا شده است. با بهرهگیری از سیستمهای عامل ارائهشده برای سیستم نهفته، بسیاری از پیشرفتهای مهندسی نرمافزار وارد حوزه اینترنت اشیا گردید. یکی از موضوعات مهم در اینترنت اشیا، توان پردازشی بوردها و بخشی از محاسبات است که دستگاهها قبل از ارسال اطلاعات به سرور بر روی دادهها انجام میدهند. در واقع این سوال مطرح میشود که در سیستمهای عامل نهفته، کارکرد نرمافزارها و قدرت عملکردی آنها، که در اصل برای سیستمهای غیرنهفته توسعه داده شدهاند چگونه است.
در واقع انتظارِ اجرای مناسب این نرمافزارها در سیستمهای نهفته، چالش مقایسه قدرت پردازشی این سیستمها را با کامپیوترهای رومیزی به وجود میآورد. در این مقاله، با بهکارگیری بورد رسپبری پای و کتابخانه بینایی ماشین - OpenCV - چندین آزمایش انجام شده است تا قدرت پردازشی سیستمهای نهفته و رومیزی با یکدیگر مقایسه شود. در آزمایش نخست از یکهسته و در آزمایش دیگر از چهار هسته برای هر یک از این دو سیستم استفاده شده است. نتایج حاکی از بیشتر بودن راندمان ناشی از موازیسازی الگوریتم، در سیستم نهفته نسبت به سیستم رومیزی بوده و نشاندهنده پتانسیل بالای این سیستمها در اجرای پردازشهای پیچیده برای کاربردهای اینترنت اشیا است.
کلید واژهها: سیستمهای نهفته، نرمافزار آزاد، بورد رسپبری پای، پردازش تصویر، اینترنت اشیا.
-1 مقدمه
زمانیکه مفهوم دیجیتال وارد حوزه الکترونیک شد تحولی شگرف در طراحی و ساخت مدارهای الکترونیکی به وجود آمد. نتیجه این تحول را میتوان در سیستمهای الکترونیکی پیشرفته امروزی مانند گوشیهای همراه، ساعتهای هوشمند، تلویزیونها و ... مشاهده کرد. روند پیشرفت و تکامل حوزه الکترونیک دیجیتال با گیتهای منطقی آغاز شد. این گیتها مدارهای الکترونیکی هستند که هر کدام تابع منطقی خاصی را پیادهسازی میکند. در ادامه برای پیادهسازی تابعهای پیچیده، گیتهای منطقی در کنار هم قرار گرفتند و باعث ایجاد مدارهای دیجیتالی ترکیبی شدند. به عنوان مثال بخش منطقی ریاضی - ALU - از ترکیب چندین گیت منطقی ساخته میشود. سپس جهت جلوگیری از سیمکشیهای خارجی در مدارها، مفهوم گیتهای منطقی برنامهپذیر ارائه شد.
با بهرهگیری از این مفهوم، تراشهای با نام آرایه گیتهای برنامهپذیر - FPGA - معرفی شد که طراحی بوردهای الکترونیکی را راحتتر کرد. اگرچه در ادامه محدودیت تعداد گیتهای منطقی و پیچیدهبودنِ پیادهسازیهای ترکیبی باعث شد طراحان به پیادهسازی ترتیبی با استفاده از مفهوم دیگری به نام ریزپردازنده روی بیاورند که نتیجه آن پیدایش میکروکنترلرها بود. میکروکنترلرها کدها را خط به خط اجرا کرده و زبان برنامهنویسی آنها به طور معمول C یا اسمبلی است.چالشی که در برنامهنویسی یک میکروکنترلر وجود دارد این است که طراح باید با رجیسترهای گوناگون آن آشنا بوده و زمانزیادی را صرف مقداردهی، پیکربندی و از این قبیل کارها کند. با گذشت زمان کتابخانهها و پلتفرمهایی ارائه شدند که برنامهنویسی میکروکنترلرها را، بدون درگیری مستقیمِ برنامهنویس با رجیسترها، ممکن میساخت.
برای مثال با بهرهگیری از این کتابخانهها، کاربر برای روشن یا خاموش کردن یک پینِ میکروکنترلر، تنها از دستور Set یا Write استفاده میکند. اگرچه به طور معمول هر میکروکنترلر کتابخانه خاصخود را دارد و طراح مجبور است برنامه خود را با توجه به سختافزار جدید مورد بازبینی و اصلاح قرار دهد و فرآیند دشوار دیباگ را از نو برای بستر جدید انجام دهد. همچنین بیشتر پلتفرمها و کتابخانههای موجود به صورت رایگان یا آزاد در اختیار کاربران قرار نداشتند. این در حالی است که با ظهور جنبش نرمافزار آزاد، اینگونه مشکلها در دنیای مهندسی نرمافزار با ارائه نرمافزارهای آزاد و متنباز در حال برطرفشدن بود. این دو مورد چالشهای بزرگی هستند که مهندسان الکترونیک و کامپیوتر را به سوی ارائه مفهومها و طرحهای جدید در این راستا سوق دادند. بنابراین طراحان در بسیاری از پروژهها، سختافزارها و نرمافزارهای مورد نیاز خود را از ابتدا طراحی و تولید نمیکنند و به بهبود بستر موجود و همچنین پیادهسازی ایدههای خود میپردازند.
به عنوان مثال میتوان به سیستمهای نهفته و سیستمهای عامل نهفته در این زمینه اشاره کرد.سیستم نهفته یک سیستم کامپیوتری تکهدف است که زیرمجموعهای از یک سیستم بزرگتر، جهت برآورده کردن هدفهای کنترلی و نظارتی سیستم است .[1] برای مثال میتوانبه سیستم کامپیوتری مورد استفاده در یک هواپیما، تلفنهای همراه و ... اشاره کرد. کلمه نهفته در بسیاری از موارد ناشی از این واقعیت است که وجود آنها در سیستم از دید ناظر خارجی محسوس نیست. با این حال محدودیتهای نرمافزاری در اینگونه پلتفرمها، نیاز به وجود سیستمعامل را مطرح کرد. سیستمعامل علاوه بر مدیریت سختافزارهای موجود، مدیریت وظیفههای گوناگون را نیز بر عهده میگیرد و به برنامهنویس این امکان را میدهد تا فقط روی حل مسئله اصلی پروژه تمرکز کند. در حال حاضر سیستمهای عامل آزاد یا متنبازی همچون FreeRTOS [2] و [3] RIOT برای استفاده در سختافزارها، توسط جامعه بزرگی از طراحان و برنامهنویسان مورد استفاده قرار میگیرند.
یکی دیگر از مزایای استفاده از این سیستمهای عامل، امکان استفاده از زبانهای سطح بالا و بسیار قدرتمندی همچون C++ در پروژههای الکترونیکی است. سیستمهای عاملی همچون RIOT تنها به مدیریت زمان و وظیفهها میپردازند و به دلیل محدودیتهای سختافزاری نمیتوانند حافظه را به شکل مناسب و حرفهای مدیریت کنند. همچنین به دلیل معماری خاص آنها، برنامه باید فقط برای این سیستم عامل و با استفاده از کتابخانههای آن نوشته شود. از این رو نیاز به سیستمهای عامل کاملتر و حرفهایتری همچون گنو/لینوکس [4] برای رویارویی با این محدودیتها حس شد. در ابتدا به دلیل قیمت و توان مصرفی بالای سختافزارهایی که بتوانند یک سیستم عامل پیشرفته را اجرا کنند، از گنو/لینوکس در دنیای الکترونیک و سیستمهای نهفته استقبال زیادی نشد. برای مثال گوشیهای تلفن همراه بدون سیستمهای عامل هوشمند عرضه میشدند.
ولی با پیشرفت دانش و فنآوری، قیمت سختافزار دچار افت شدیدی شد. همچنین از نظر توان مصرفی نیز بهبودهای بسیاری حاصل شد که باعث ارائه بوردهای الکترونیکی با قابلیت اجرای سیستمهای عامل پیشرفته مانند گنو/لینوکس شد. یکی از معروفترین بوردهای ارائهشده در این زمینه، بورد رسپبری پای Raspberry Pi میباشد که کارکرد آن بر اساس توزیعهای گوناگون گنو/لینوکس است. برای آشنایی با توزیعهای قابل استفاده در بورد رسپبری پای میتوان به [5] مراجعه کرد.همچنین سیستمعامل نهفته - Embedded Operating System - با هدف ارائه قابلیت اعتماد بالا، فشردگی و بهینگی در بهکارگیری سختافزار، برای سیستمهای نهفته طراحی شده است. بنابراین در این سیستمهای عامل، بسیاری از تابعهای غیرضروری که در کامپیوترهای غیرنهفته استفاده می شوند، حذف میشوند.
در برخی مراجع از عنوان سیستمعامل بیدرنگ - RTOS - نیز برای این سیستمها استفاده شده است .[6] در سیستمهای نهفته، واحدهای سختافزاری مانند RAM و ROM دارای محدودیت هستند که در سیستمهای غیرنهفته این محدودیت چشمگیر نیست. بنابراین طراحی و اجرای سختافزار سیستمهای نهفته باید با درنظر گرفتن کاربردهای بسیار خاص تحقق پذیرد تا وظیفههای مدنظر به شکل کاملی انجام شوند. جهت بهرهمندی بهینه از مزیتهای پردازنده مرکزی - که اغلب تنها پردازنده موجود نیز میباشد - ، به طور معمول سیستمعاملِ سیستمهای نهفته با زبان اسمبلی توسعه داده میشود؛ زیرا این زبان برنامهنویسی برای ماشین بهینه است و باعث بهبود سرعت و قابلیت اطمینان دستگاه میشود. البته این موضوع یک قاعده کلی نیست و بسیاری از سیستمهای نهفته از سیستمهای عاملی استفاده میکنند که با زبانهای سطح بالاتری مانند C نوشته شدهاند.
مهمترین مزیتهای بهرهگیری از سیستمهای عامل در سیستمهای نهفته عبارتند از:
.قابلیت اطمینان: سیستمهای عامل پیشرفته، با وجود حجم کار بالایی که انجام میدهند، به ندرت دچار مشکلی که به بازنگری مجدد نیاز داشته باشد، میشوند. برای مثال مدیریت حافظه بحث بسیار مهمی است که اگر در یک میکروکنترلر و برنامهای که اجرا میکند به شکل درستی مدیریت نشود، پس از مدتی ممکن است سیستم را ناپایدار کند. ریشهیابی اینگونه مشکلات، بسیار پیچیده و زمانبر است، در صورتی که مدیریت حافظه توسط سیستمعامل عمر بسیار طولانیتری دارد و از قابلیت اطمینان بسیار بالایی نیز برخوردار است.
.بهرهگیری از مهندسی نرمافزار و سرعت پیادهسازی: در صورتی که سیستمعامل توانایی استفاده از بسترهای نرمافزاری در حال توسعه یا توسعه دادهشده توسط مهندسان نرمافزار را داشته باشد، طراح میتواند از این نرمافزارها در صورت آزادبودن، در طراحیهای خود استفاده کند که این امر به صرفهجویی در وقت کمک فراوانی میکند. همچنین بیشتر بسترهای توسعه برنامه در سیستمعامل، به زبان انسان نزدیکتر بوده - سطح بالاتر - و این موضوع سبب سرعتبخشی به پیادهسازی، رفع عیب و نهاییسازی یک محصول میشود. لازم به ذکر میباشد که این مزیتها با تحمل پیچیدگیها و هزینه زمانی یا مالی بیشتر در میکروکنترلرها نیز قابل تحقق هستند. البته در برخی موارد سیستم نهفته نسبت به میکروکنترلردارای چالشهایی مانند محاسبه بیدرنگ، مصرف توان، و دسترسی به منابع سختافزاری سطح پایینتر نیز است که این چالشها در زمان بهکارگیری باید مدنظر طراح قرار گیرد.
بورد Arduino معروفترین مثال برای پلتفرمهای باز است که راحتی برنامهنویسی، سختافزار آماده و کنترلِ کیفیتشده این بوردها سبب فراگیر شدن آنها شده است. طیف گستردهای از پروژهها توسط این بوردها قابل انجام است که تعدادی از آنها در [7] آورده شده است. کارهای پژوهشی زیادی نیز در زمینه سیستمهای نهفته انجام پذیرفته است که در این زمینه میتوان به کارهایی مثل [8] و [9]، با تمرکز روی بورد رسپبری پای، اشاره کرد. همچنین در سالهای اخیر، کارهای پژوهشی دیگری نیز روی سیستمهای نهفته با بهرهگیری از سایر بوردها از قبیل [10] - بورد Galileo، شرکت اینتل - ، [11] - بورد Edison، شرکت اینتل - و - [12] بورد - Parallella انجام شده است.
-2 نقش گنو/لینوکس در سیستمهای نهفته
پروژه گنو با رهبری ریچارد استالمن - Richard Stallman - و با پیادهسازی برنامهها، کتابخانهها، ابزارهای توسعه و حتی بازی در سال 1984 میلادی کلید خورد .[4] همزمان با اجرای این پروژه جنبش نرمافزارهای آزاد نیز متولد شد. این پروژه برای تکمیلشدن به هستهای لازم داشت تا بتواند به عنوان سیستمعاملی کامل به کار گرفته شود. این هسته در سال 1991 میلادی توسط لینوس توروالدز - Linus Torvalds - به صورت متنباز ارائه شد .[13] ترکیب این هسته با پروژه گنو، سیستمعامل آزادی با نام گنو/لینوکس ایجاد کرد. در چند دهه گذشته، این سیستمعامل حوزه سیستمهای نهفته را به شکل مطلوبی تحت تاثیر خود قرار داده است. قدرت گنو/لینوکس در آزادبودنِ آن است که نتیجه آن تشویق اشتراکگذاری، بهبود روزافزون و رفع باگهای موجود در کدها است. این مسئله سبب ایجاد دنیای نرمافزاری بسیار قوی شده است که علاوه بر شاملشدن تمامی جنبههای نرمافزاری مورد نیاز یک پروژه، پشتیبانی از طیف وسیعی از سختافزارها را نیز ممکن ساخته است.
این قدرت و انعطافپذیری، مسیر ورود نرمافزارهای آزاد و متنباز به دنیای طراحی سختافزار و الکترونیک را هموار کرد.طبق آمار مربوط به سال 2015 میلادی [14]، حدود دو میلیارد دستگاه در قلب خود از سیستمعامل گنو/لینوکس یا هسته لینوکس استفاده میکنند. این دستگاهها شامل تلفنهای هوشمند دارای سیستمعامل - Android - که بر پایه هسته لینوکس توسعه داده شده است - ، تلویزیونهای هوشمند، تجهیزات شبکه، دستگاههای ضبط ویدئو، تجهیزات داخل وسائل نقلیه، سیستمهای کنترلی و رباتها، سیستمهای اتوماسیون صنعتی، تجهیزات ناوبری، تجهیزات هوایی و هوافضایی، تجهیزات پزشکی و سایر تجهیزاتی که کارهای پیچیده انجام میدهند، میشود. اما سوال اصلی اینجاست: کار یک تلویزیون، ساده بوده و قرار است جریانی از تصاویر ویدئویی را نمایش دهد.
در این صورت چرا نیاز است تا روی یک سیستم به نظر ساده مثل تلویزیون، یک سیستمعامل پیچیده همانند گنو/لینوکس را نصب کنیم؟ در پاسخ به این سوال باید گفت که امروزه تلویزیون منزل شما، مانند اجداد آنالوگ خود، فقط مشغول نمایش جریانی از ویدئوی ورودی نیست. در زمان کنونی جریان ورودی نیازمند چندین مرحله پردازش است و حتی ممکن است رمزگذاری نیز شده باشد. از طرف دیگر تلویزیون شما میتواند به اینترنت متصل شود و همچنین قادر است تا محتوای خود را از سایر دستگاهها مانند یک گوشی هوشمند یا یک سرور مدیای خانگی که به آن متصل است دریافت کند. به علاوه بسیاری از تلویزیونها بر روی خود قابلیت اجرای بازی و یا نرمافزارهای کاربردی را نیز دارند. برای مدیریت این سطح از پیچیدگی، وجود یک سیستمعامل امری ضروری میباشد.
در اینجا لازم است به این موضوع اشاره شود که مهمترین تفاوت موجود بین اکثر سیستمهای عامل نهفته و رومیزی در نوع کاربرد آنها است. سیستمعامل رومیزی برای انجام وظیفهها وارائه بیشترین خدمات ممکن در کاربردهای گوناگون طراحی میشود، در صورتی که یک سیستمعامل نهفته اینگونه نیست و هدف طراحی آن در بیشتر مواقع، استفاده در کاربردی خاص میباشد. در حقیقت، هنگام بهکار بردنِ سیستمعامل در سیستمهای نهفته، هدف، استفاده از مزایای آن مانند توانایی انجام موازی چندین پردازش، تخصیص زمان و مدیریت قوی حافظه است و نه استفاده همهمنظوره از تمام قابلیتهای موجود در آن.مزیتهای سیستمعامل گنو/لینوکس که آن را برای استفاده در سیستمهای نهفته بسیار مناسب کرده است عبارتند از:
.قابلیت پشتیبانی از پشته شبکه، برنامهریز وظیفهها، پروتکل USB، وسیلههای ذخیرهسازی، و همچنین پشتیبانی مناسب از ابزارهای رسانهای همچون صوت و تصویر.
.قابلیت پورتشدن به معماریهای مختلفی همچونMIPS ،ARM، x86 و .PowerPC
.نرمافزارهای این سیستمعامل آزاد یا متنباز میباشند.
.گنو/لینوکس جامعه توسعهدهندگان بزرگی دارد. بیش از هزار برنامهنویسِ فعال تنها برای هسته لینوکس که حدود هر 12 هفته بهروز رسانی میشود به صورت داوطلبانه مشغول کار هستند. وجود این جامعه به معنای پویایی، کمکرسانی و همفکری و میل به اشتراکگذاری پیشرفتها است.
-3 بیان مساله
امروزه سیستمهای نهفته جایگاه ویژهای در بسیاری از پروژههای دانشگاهی و صنعتی پیدا کردهاند. همانگونه که در بخشهای پیشین به آن اشاره شده است این سیستمها با بهرهگیری از سیستمعامل نهفته، بسیاری از پیچیدگیهایی که یک طراح باید در طراحیهای خود به آنها توجه داشته باشد را کمرنگ کردهاند. از سوی دیگر این موضوع باعث شد که بسیاری از بسترهای نرمافزاری دنیای مهندسی نرمافزار قابل استفاده در سیستمهای نهفته باشند. در نتیجه یک طراح الکترونیکی میتواند از بسیاری از توسعههای نرمافزاری قوی مرتبط با طراحی خود به راحتی استفاده کند. البته نرمافزارهای ارائهشده، در اصل برای بسترهای کامپیوترهای رومیزی که دارای پیکربندی قویتری نسبت به سیستمهای روی تراشه هستند، ارائه شدهاند.
از اینرو انتظارِ اجرای مناسب این نرمافزارها در سیستمهای نهفته، چالش مقایسه قدرت پردازشی این سیستمها را با کامپیوترهای رومیزی به وجود میآورد.در این مقاله قدرت پردازشی یک سیستم روی تراشه نهفته متداول یعنی نسخه 3 بورد رسپبری پای - شکل - 1 با یک کامپیوتر رومیزی، در اجرای یک الگوریتم بینایی ماشین مقایسه شده است. کامپیوتر رومیزی انتخابی دارای پردازنده شرکت اینتل Core-i7 6500U با فرکانس کاری 2/5 گیگاهرتز، و حافظه با دسترسی تصادفی 8 گیگابایتی از نوع DDR3 میباشد. همچنین سیستمعامل استفادهشده در کامپیوتر رومیزی Windows10 است. لازم به ذکر است که الگوریتم انتخابی، یک