سایت خبرکاو

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

نحوه طراحی و ساخت نرم افزار پایدار

دستگاه های الکترونیکی که نرم افزار را اجرا می کنند در اطراف ما هستند. تلفن همراه، ماشین، مایکروویو، و تقریباً هر چیزی که در اطراف شما است - احتمال بسیار خوبی وجود دارد که قطعات الکترونیکی در حال اجرا نوعی نرم افزار باشند. این دستگاه ها به ناچار برق مصرف می کنند و دارای باتری و مدار هستند که با گذشت زمان از بین می روند. با گذشت زمان، این دستگاه ها با دستگاه های ارتقا یافته جدید ...

دستگاه های الکترونیکی که نرم افزار را اجرا می کنند در اطراف ما هستند. تلفن همراه، ماشین، مایکروویو، و تقریباً هر چیزی که در اطراف شما است - احتمال بسیار خوبی وجود دارد که قطعات الکترونیکی در حال اجرا نوعی نرم افزار باشند.

این دستگاه ها به ناچار برق مصرف می کنند و دارای باتری و مدار هستند که با گذشت زمان از بین می روند. با گذشت زمان، این دستگاه ها با دستگاه های ارتقا یافته جدید جایگزین می شوند. اما این بدان معناست که زباله های الکترونیکی بیشتر و بیشتری در سیاره ما جمع می شوند.

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

این بدان معناست که ما باید هم سخت افزار و هم نرم افزار را به گونه ای طراحی کنیم که اذعان کنیم که منابع زمین محدود است. این مقاله به شما معرفی می کند که چگونه می توانید نرم افزار خود را برای پایداری معماری کنید.

در اینجا چیزی است که ما پوشش خواهیم داد:

پیش نیازها

چرا الان به این موضوع فکر می کنیم؟

چه چیزی در معماری و برنامه نویسی برای پایداری درگیر است؟

نرم افزار خود را برای مصرف برق و انرژی مشخص کنید

محصول تاخیری انرژی

Greenup، Powerup و Speedup

ابزارهای پروفایل

تکنیک های نرم افزار و الگوهای طراحی برای پایداری

در نظر بگیرید که از کدام زبان برنامه نویسی استفاده کنید

آگاه سازی نرم افزار Power: به رویدادهای حرارتی واکنش نشان دهید

در صورت لزوم از حالت های کم مصرف روی سخت افزار استفاده کنید

معاوضه بین I/O مبتنی بر وقفه و Polling را تحلیل کنید

به ذخیره سازی نگاه کنید

طراحی نرم افزار با در نظر گرفتن طول عمر و قابلیت به روز رسانی

نتیجه

پیش نیازها

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

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

چرا الان به این موضوع فکر می کنیم؟

تغییرات آب و هوایی که توسط بشر ساخته شده است به طور پیوسته برای چندین دهه در حال افزایش است. انتشار کربن در حال افزایش بوده است. به عنوان بخشی از جامعه فناوری، ما می توانیم به کاهش برخی از عواملی که در تخریب محیط زیست زمین نقش داشته اند کمک کنیم.

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

چه چیزی در معماری و برنامه نویسی برای پایداری درگیر است؟

در متن این مقاله، وقتی نرم افزار معماری و برنامه نویسی را برای پایداری توصیف می کنم، به اهداف زیر اشاره می کنم:

طراحی نرم افزار به گونه ای که:

    کمترین مقدار انرژی ممکن را مصرف می کند تا کار را انجام دهد.

    با حفظ حداقل عملکرد مورد نیاز برای کار، کمترین میزان تخریب باتری را به همراه دارد.

    برای سخت افزاری که روی آن کار می کند به حداقل مقدار خنک کننده نیاز دارد.

    نتایج باعث می شود دستگاه ها دوام بیشتری داشته باشند.

خواهید دید که تکنیک هایی که در اینجا بحث خواهیم کرد، همگی دارای یک موضوع هستند: سخت افزار الکترونیکی را وادار کنید تا حداقل کار ممکن را برای تکمیل کار انجام دهد.

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

مشخصات نرم افزار خود را برای مصرف برق و انرژی

مشکلی که قابل اندازه گیری نیست، قابل حل نیست. در نتیجه، اندازه‌گیری انرژی و توان مصرفی نرم‌افزار یکی از اصلی ترین کارهایی است که هنگام طراحی با در نظر گرفتن پایداری باید انجام دهیم.

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

همانطور که می دانید، توان میزان مصرف انرژی است. به این معنا که:

\( P = dE/dt \)

در حوزه زمان پیوسته نیز می‌توان گفت:

\( انرژی = \int_{0}^{t} P \,dt \)

عملا، ما هرگز واقعاً اندازه گیری توان را در حوزه زمان پیوسته دریافت نمی کنیم. ما معمولاً اندازه گیری توان گسسته را در یک بازه زمانی داریم. پس نمودار قدرت در مقابل زمان ما ممکن است چیزی شبیه به این باشد:

تصویر-94
شکل 1: توان در مقابل زمان و مصرف انرژی محاسباتی

از آنجایی که n اندازه گیری مجزای توان در طول زمان داریم، مصرف انرژی را می توان به عنوان سطح زیر منحنی تخمین زد. این را می توان به عنوان مجموع n-1 ذوزنقه مدل کرد.

\( انرژی = \sum_{i=1}^{n-1} A^{i} \)، که در آن \( A^{i} \) مساحت ذوزنقه یکم است.

نرم افزار پروفایل سازی برای مصرف انرژی به فرآیند اندازه گیری انرژی مصرف شده توسط نرم افزار در حال اجرا اشاره دارد.

پس باید در حال تعیین قدرت یا انرژی باشید؟ پاسخ این است که، بستگی دارد. در برخی از سناریوها که شامل تعامل شدید کاربر است (که کاربر مقدار زمان صرف شده را کنترل می کند)، اندازه گیری قدرت منطقی تر است.

به عنوان مثال: هنگامی که کاربر در حال تماشای یک ویدیو در لپ تاپ یا تلفن همراه است، بسیاری از موارد مانند مدت زمان تماشای ویدیو، روشنایی صفحه، میزان صدای بلندگو و غیره را کنترل می کند.

در سناریوهای دیگر که کاربر کنترل زیادی بر کار انجام شده توسط دستگاه الکترونیکی ندارد، منطقی است که انرژی نمایه شود. یک مثال از چنین موردی ممکن است انرژی مورد نیاز برای ارسال پیام از طریق سرویس پیام کوتاه SMS / IP باشد (بدون احتساب انرژی مورد نیاز برای تایپ پیام).

بیایید در ادامه به برخی از معیارهای رایج برای پروفایل مصرف انرژی نگاه کنیم.

محصول تاخیری انرژی (EDT)

در مقاله تحقیقاتی استفاده شده است مفاهیم تاخیر انرژی زبان برنامه نویسی شما چیست؟ ، محصول تاخیر انرژی یک متریک وزنی است که به صورت زیر تعریف می شود:

\( EDT = E * T^{w} \)

که در آن E مصرف انرژی برای کار و T زمان صرف شده برای تکمیل کار است.

هدف این متریک این است که اندازه گیری انرژی یک عملیات را به ما بدهد و در عین حال متریک را برای مدت زمان صرف شده جریمه کند. یعنی عملیاتی که همان مقدار انرژی را مصرف می‌کند اما مدت زمان بیشتری برای انجام یک سیستم طول می‌کشد، EDT بالاتری دارد و پس بازده انرژی کمتری در نظر گرفته می‌شود.

وزن w می توان انتخاب کرد:

1: زمانی که کارایی انرژی یک نگرانی عمده است

2: وقتی هم انرژی و هم عملکرد مهم هستند

3: وقتی عملکرد مهمتر از بهره وری انرژی است

پس ، می‌توانید w به گونه‌ای تنظیم کنید که بر اساس شاخص‌های مناسب برای مورد استفاده شما - انرژی مهم‌تر یا عملکرد، ایده‌ای از انرژی و عملکرد سیستم نرم‌افزاری خود به شما ارائه دهد.

Greenup، Powerup و SpeedUp

عبدالسلام و همکاران در پایان نامه با استفاده از معیارهای Greenup، Powerup و Speedup برای ارزیابی بهره وری انرژی نرم افزار ، معیارهای جدیدی را برای اندازه گیری کارایی انرژی معرفی کردند.

آنها دیدند که EDT یک کاستی دارد: از آنجایی که این محصول حاصل دو کمیت (انرژی و زمان وزنی برای تکمیل کار مورد نظر) بود، ممکن بود که دو سیستم که EDT یکسان برای یک کار داشتند، در واقع زمانی که آن کار انجام می‌شد با هم تفاوت داشتند. به بهره وری انرژی و عملکرد - اما EDT آنها هنوز یکسان بود.

در نتیجه، نتیجه گیری اینکه کدام سیستم از نقطه نظر انرژی + عملکرد بهتر است، جایی که انرژی و عملکرد از اهمیت یکسانی برخوردار بودند، دشوار بود.

آنها 3 معیار را برای رسیدگی به این موضوع معرفی کردند.

    Speedup که به صورت زیر تعریف می شود:

\( افزایش سرعت = T_{پایه} / T_{opt} \)

که در آن \( T_{پایه} \) = زمان صرف شده برای تکمیل کار برای مورد بهینه نشده، \( T_{opt} \) = زمان تکمیل کار برای مورد بهینه شده.

اگر حالت بهینه‌سازی‌شده عملکرد بیشتری نسبت به حالت بهینه‌نشده دارد (از آنجایی که به یاد داشته باشید، می‌توانیم فقط برای انرژی، فقط عملکرد یا هر دو بهینه‌سازی کنیم) سپس Speedup > 1.

2. Greenup که به صورت زیر تعریف می شود:

\( Greenup = Energy_{base} / Energy_{opt} = P_{base} * T_{base} / P_{opt} * T_{opt} \).

در اینجا \( P_{base} \) میانگین توان مصرف شده توسط کار در حالت بهینه نشده و به طور مشابه، \( P_{opt} \) میانگین توان مصرف شده توسط کار در حالت بهینه نشده است.

اگر به مقادیر مختلف Speedup و Powerup نگاه کنیم، آنها می توانند در دسته های زیر قرار گیرند:

    Zone 1 : Powerup < 1 and Speedup <1 and Speedup > Powerup – در این سناریو، راه حل بهینه سازی شده برخی از عملکرد را قربانی می کند، اما کاهش قدرت بیشتری وجود دارد. در نتیجه Greenup > 1، پس صرفه جویی در انرژی وجود دارد.

    Zone 2 : Powerup < 1, Speedup > 1 – در این سناریو، راه حل بهینه شده در عملکرد بهبود یافته و در عین حال مصرف انرژی را کاهش می دهد. در نتیجه مصرف انرژی کاهش یافت و عملکرد بهبود یافت. این بهترین حالت برای هر بهینه سازی است.

    منطقه 3 : Powerup > 1، Speedup > 1 و Speedup > Powerup - در این مورد، میانگین مصرف برق بهبود یافته است، اما افزایش سرعت بیشتر از افزایش مصرف برق را جبران می کند. در نتیجه، انرژی مصرف شده بین راه حل های بهینه و بهینه نشده همچنان کاهش می یابد.

    منطقه 4 : Powerup > 1، Speedup > 1 و Powerup > Speedup - در این مورد، مصرف انرژی کاهش می یابد، اما عملکرد نیز کاهش می یابد. با این حال، مصرف انرژی به طور کلی افزایش یافته است زیرا از دست دادن عملکرد بیشتر از صرفه جویی در انرژی بود.

    منطقه 5 : Powerup > 1، Speedup <1 - در این مورد، مصرف انرژی افزایش یافته است زیرا کاهش عملکرد وجود دارد و همچنین افزایش مصرف انرژی وجود دارد.

    منطقه 6 : Powerup < 1، Speedup <1، Powerup > Speedup - در این مورد، عملکرد بهبود یافت، اما قدرت بیش از میزان بهبود عملکرد افزایش یافت. در نتیجه مصرف انرژی به طور کلی افزایش یافت.

شکل زیر (با الهام از این پایان نامه) مناطقی را نشان می دهد که مصرف انرژی در آنها افزایش و در کجا کاهش می یابد. رنگ قرمز (4، 5 و 6) و مناطق سبز (1، 2 و 3) این مناطق را به تصویر می کشد.

تصویر-90
شکل 2: مناطق مختلف برای افزایش سرعت و قدرت

ما به چند معیار پرداختیم که هر دو نقاط قوت و ضعف خود را دارند. نقطه قوت EDT این است که می توانید وزن بیشتری به عملکرد بدهید. اما نقطه ضعف آن این است که اغلب اوقات، ممکن است به شما نگوید که آیا یک راه حل واقعا بهتر از دیگری است یا خیر.

در حالی که دانستن مصرف انرژی بسیار مهم است، نباید مصرف برق را نادیده بگیرید. مصرف انرژی بالا، در میان اثرات دیگر، می تواند اثرات حرارتی نامطلوبی بر دستگاه های الکترونیکی داشته باشد. یعنی دمای پوسته و اجزای دستگاه شما می تواند افزایش یابد. این ممکن است منجر به:

    آسیب قطعات : قطعات الکترونیکی مانند حافظه، سیم ها و خازن های دستگاه شما ممکن است با افزایش دما آسیب ببینند.

    آسیب باتری : باتری ها ممکن است در دمای بالاتر آسیب ببینند. عمر آنها ممکن است کاهش یابد و در برخی موارد شدید نیز ممکن است منفجر شوند .

وسایل الکترونیکی تجاری معمولاً طوری ساخته می شوند که در محدوده دمایی 0 تا 70 درجه سانتیگراد کار کنند. اما برای تلفن های همراه معمولاً توصیه می شود که دمای کار بیش از 35 درجه سانتیگراد نباشد.

قبل از اینکه مشخصات انرژی و توان مصرف شده توسط یک کار خاص را در دستگاه های خود مشخص کنید، مهم است که تا آنجا که ممکن است این کار را جدا کنید.

منظور من این است که مهم است که ما به همان اندازه وظایف یا متغیرهای مصرف کننده انرژی دیگر را حذف کنیم. اینها ممکن است سرویس‌ها / دیمون‌ها یا تنظیمات دیگری روی دستگاه باشند که ممکن است به روش‌های غیرقابل اعتمادی بر توان مصرفی تأثیر بگذارند.

به عنوان مثال ، اگر دستگاه از اینترنت استفاده می‌کند، فرآیندهای پس‌زمینه ممکن است برخی از فعالیت‌ها را انجام دهند که ممکن است بین اجرای چند نمایه متفاوت باشد، پس به طور کلی ایده خوبی است که اینترنت را خاموش کنید (مگر اینکه کار اندازه‌گیری شده از اینترنت استفاده کند). ما می‌خواهیم این کار را انجام دهیم زیرا می‌خواهیم اعداد پروفیل توان قابل تکرار را از اجرا تا اجرا انجام دهیم.

پس به طور کلی، ایده خوبی است که چک فهرست ی از شرایطی تهیه کنید که باید ثابت باشند تا پروفایل توان قابل اعتماد و قابل تکرار باشد. این می تواند از سیستمی به سیستم دیگر متفاوت باشد.

ابزارهای پروفایل

حالا بیایید در مورد اینکه چگونه قدرت را می توان نمایه کرد صحبت کنیم. سیستم‌های مختلف ممکن است راه‌های متفاوتی را برای تعیین مشخصات انرژی مصرف‌شده ارائه دهند.

بسته به سیستم عامل و سخت افزار زیرین، چند گزینه وجود دارد. من به جزئیات این ابزارها نمی پردازم زیرا گزینه های زیادی وجود دارد و همچنین اسناد خوبی در وب سایت های رسمی آنها موجود است.

لینوکس

    PowerStat ابزاری است که می‌تواند مصرف انرژی را روی سخت‌افزار اینتل اندازه‌گیری کند که از رابط RAPL (محدودیت متوسط ​​توان در حال اجرا) پشتیبانی می‌کند.

    Cpu-energy-meter ابزاری است که انرژی مصرف شده توسط CPU ها را در یک دوره زمانی معین اندازه گیری می کند.

    Powertop ابزاری است که توسط اینتل ایجاد شده است که اطلاعات بسیاری از موارد مورد علاقه مانند مصرف انرژی، وضعیت C / P CPU، استفاده از CPU و عملیات سیستم فایل در هر ثانیه (و غیره) را به شما می دهد.

سیستم عامل مک

    گجت قدرت اینتل ابزاری است که توسط اینتل ایجاد شده است که به کاربران امکان نظارت بر مصرف انرژی، فرکانس CPU، استفاده از CPU و حتی دما را در ماشین‌های Mac مبتنی بر اینتل می‌دهد. توجه: با توجه به وب سایت اینتل، گجت پاور دیگر به روز رسانی نمی شود و به جای آن استفاده از اینتل عملکرد شمارنده را توصیه می کند.

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

    Powermetrics یک ابزار خط فرمان است که از قبل بر روی دستگاه های Apple Silicon و اینتل نصب شده است. این به شما کمک می کند تا اندازه گیری قدرت را برای عملکرد CPU و GPU بدست آورید.

    برنامه Activity Monitor از پیش روی Mac نصب شده است و به شما یک نمای کلی از عملکرد برنامه شما می دهد. همچنین یک نمای کلی از معیارهای مختلف در مورد مک شما به شما ارائه می دهد. در حالی که اعداد قدرت را به شما نمی دهد، هنوز یک ابزار مفید است.

اندروید

اسناد رسمی AOSP (پروژه منبع باز اندروید) دستورالعمل هایی را در مورد نحوه اندازه گیری قدرت اجزای سیستم در اینجا ارائه می دهد. این فرآیند ممکن است بسته به سازنده دستگاه متفاوت باشد.

Android Studio، IDE توسعه رسمی اندروید، همچنین یک Power Profiler برای اندازه گیری قدرت ارائه می دهد. مانیتور برق روی دستگاه (ODPM) توان مصرفی همه زیرسیستم های سودمند را از طریق ریل های برق خود گزارش می دهد. توجه: این اندازه‌گیری‌ها مختص هیچ برنامه‌ای نیستند، زیرا قدرت دستگاه را در کل اندازه‌گیری می‌کنند.

iOS

در طول توسعه برنامه iOS، توسعه دهندگان می توانند با استفاده از نمایه ساز داخلی XCode، تأثیر انرژی برنامه خود را اندازه گیری کنند.

ما در این بخش در مورد روش های مختلف برای پروفایل قدرت و انرژی صحبت کردیم. در بخش‌های آینده، برخی از تکنیک‌ها و ملاحظاتی را که باید به خاطر داشته باشید تا نرم‌افزار شما پایدارتر شود، مورد بحث قرار خواهم داد.

تکنیک های نرم افزار و الگوهای طراحی برای پایداری

در نظر بگیرید که از کدام زبان برنامه نویسی استفاده کنید

زبان های برنامه نویسی دارای سطوح مختلف انتزاعی نسبت به سخت افزاری هستند که روی آن اجرا می شوند. برخی مدلی از دستگاه ارائه شده به برنامه نویس دارند که واقعاً به سخت افزار واقعی آنها نزدیک است.

زبان‌هایی که مستقیماً در کد ماشین کامپایل می‌شوند، عموماً کارآمدتر هستند. آنها همچنین معمولاً کارایی بیشتری دارند، زیرا در مقایسه با زبان‌هایی که در یک ماشین مجازی تفسیر یا اجرا می‌شوند، مانند جاوا، سربار کمتری وجود دارد.

مقاله تحقیقاتی که قبلاً ذکر کردم ( پیامدهای تاخیر انرژی در زبان برنامه نویسی شما چیست ) این موضوع را به تفصیل مورد بحث قرار می دهد و خواندنی عالی است.

در حالی که بسیاری از سیستم عامل های محبوب اکثر API های خود را به زبان هایی مانند جاوا، کاتلین و سوئیفت دارند (که بومی نیستند)، آنها معمولاً API های حیاتی عملکرد را در کد بومی نیز در دسترس دارند - به عنوان مثال، کتابخانه NDK مبتنی بر رابط C Android. . اینها می توانند با همتایان خود که توسط ماشین مجازی اجرا می شوند ارتباط برقرار کنند و در ترکیب برای نوشتن برنامه های کاربردی کارآمد استفاده شوند.

قدرت نرم افزار را آگاه کنید: به رویدادهای حرارتی واکنش نشان دهید

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

دمای عملکرد دستگاه شما تنها به نرم افزاری که روی آن اجرا می شود (که شامل نرم افزار شما نیز می شود) بستگی ندارد. به دمای محیط نیز بستگی دارد.

به عنوان مثال: اگر یک گوشی هوشمند در یک روز گرم در خودرو استفاده شود، این احتمال وجود دارد که وقتی یک برنامه کاربردی روی آن اجرا می‌شود، فشار حرارتی به دستگاه وارد شود. پس شما به عنوان یک معمار نرم افزار در این مورد چه کاری می توانید انجام دهید؟

شما نمی توانید دمای محیط را کنترل کنید، اما می توانید نحوه واکنش نرم افزار خود به رویدادهای حرارتی را کنترل کنید. بسیاری از سیستم‌عامل‌های محبوب، APIهایی را برای «گوش دادن» به رویدادهای حرارتی ارائه می‌کنند. وقتی برنامه‌ها اعلان‌هایی دریافت می‌کنند که بار حرارتی دستگاه از حد معینی عبور کرده است، باید اقدامات لازم را انجام دهند.

به عنوان مثال ، اگر دستگاهی در حال پخش ویدئو است و اعلانی در مورد گرم شدن حرارتی دریافت می کند، ممکن است رزولوشن پخش ویدئو را کاهش دهد تا مصرف انرژی کاهش یابد.

اگر یک برنامه کنفرانس ویدیویی اعلان رویداد حرارتی نگران کننده ای دریافت کند، ممکن است بخواهد نرخ فریمی را که در آن فیلم می گیرد کاهش دهد / وضوح تصویر را کاهش دهد.

موارد زیر APIهای رویداد حرارتی در سیستم عامل های محبوب هستند

MacOS و iOS: NSNotificationCenter شنونده رویداد حرارتی را ارائه می دهد که برنامه های کاربردی فضای کاربران می توانند برای آن ثبت نام کنند .

Android: PowerManager یک onThermalStatusChangedListener ارائه می دهد که برنامه ها می توانند برای دریافت اعلان رویداد حرارتی ثبت نام کنند.

در صورت لزوم، از حالت های کم مصرف روی سخت افزار استفاده کنید

اکثر پردازنده های مدرن تمهیداتی برای کاهش مصرف برق دارند. در این حالت‌ها، پردازنده با تغییر سرعت ساعت پردازنده، انرژی کمتری مصرف می‌کند و در بین روش‌های مختلف، CPU را در حالت‌های غیرفعال مختلف قرار می‌دهد. سیستم عامل ها به کاربر این توانایی را می دهند که از این حالت های کم مصرف استفاده کند.

به عنوان مثال ، لینوکس دارای ابزار cpupower-frequency-set است که به کاربران اجازه می دهد تنظیمات فرکانس CPU را تغییر دهند.

به عنوان مثال دیگر، میکروکنترلرهای آردوینو به برنامه نویسان این توانایی را می دهند که در حالت های خواب مختلف زمانی که هیچ کار فعالی برای اجرا وجود ندارد، آنها را قرار دهند. این میکروکنترلرها معمولاً با یک وقفه از خواب بیدار می شوند که وظیفه ای برای پردازش آماده است.

معاوضه بین I/O مبتنی بر وقفه و Polling را تحلیل کنید

اغلب، نرم افزار برای پردازش داده ها باید روی یکی دیگر از اجزای سخت افزار یا نرم افزار منتظر بماند. معمولاً دو طرف درگیر هستند: تولید کننده داده و مصرف کننده داده

به عنوان مثال، یک برنامه تلفن همراه ممکن است در انتظار یک رویداد لمسی روی نمایشگر باشد. در اینجا مصرف کننده اپلیکیشن موبایل و تولید کننده سخت افزار + نرم افزار نمایشگر است.

مثال دیگر می تواند یک برنامه تعبیه شده بومی باشد که منتظر تغییر وضعیت یک ثبات CPU برای انجام برخی کارها است. در اینجا مصرف کننده برنامه تعبیه شده بومی و تولید کننده ثبات CPU است (خوب، ممکن است تولید کننده در واقع داده های دیگری را تولید کند، اما برای سادگی، ما فقط یک ثبت CPU را در اینجا در نظر می گیریم).

به طور کلی 2 راه برای انجام این کار وجود دارد:

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

 // psuedo-code while(poll) { bool data_available = check_data(); if (data_available) { process_data(); } sleep(SLEEP_TIME); // to avoid wasting cpu cycles }

اجرای نظرسنجی بسیار ساده به نظر می رسد. اما مگر اینکه کاملاً مطمئن باشید که داده یا شرایطی که منتظر آن هستید با فرکانس منظم در دسترس خواهد بود، معایبی دارد:

    نظرسنجی به محض در دسترس بودن داده ها پاسخ نمی دهد، زیرا پس از هر SLEEP_TIME ثانیه، در دسترس بودن را تحلیل می کند.

    با تحلیل مداوم هر بار که رشته نظرسنجی بیدار می شود، همچنان چرخه های cpu و در نتیجه مقداری توان را هدر می دهد.

ورودی/خروجی مبتنی بر وقفه: در این استراتژی، هیچ تحلیل صریحی برای داده هایی که در انتظار آماده شدن هستند وجود ندارد. درعوض، این مسئولیت تولیدکننده است که هر زمان که داده ها آماده شد، مصرف کننده را مطلع کند. مصرف کننده به صراحت با تولیدکننده تماس نمی گیرد، حتی به صورت دوره ای. در نتیجه، این باعث صرفه جویی در چرخه های CPU و همچنین انرژی می شود!

راه های متعددی برای پیاده سازی I/O مبتنی بر وقفه وجود دارد. می تواند وقفه های سخت افزاری و همچنین وقفه های نرم افزاری وجود داشته باشد.

به عنوان مثال، هنگامی که کاربر صفحه تلفن همراه را در یک مکان خاص لمس می کند، سیستم عامل می تواند یک تماس پاسخ به یکی از رشته های برنامه ارسال کند و به آن اطلاع دهد که یک رویداد ورودی لمسی آماده پردازش است. تا زمانی که تاپیک اعلان دریافت کند، می تواند کار دیگری انجام دهد یا فقط در خواب بماند!

پس به طور خلاصه، ورودی/خروجی مبتنی بر وقفه عموماً نسبت به نظرسنجی کارآمدتر است، و شما باید آن را ترجیح دهید، مگر اینکه دلیل بسیار خوبی برای استفاده از نظرسنجی وجود داشته باشد.

به ذخیره سازی نگاه کنید

حافظه پنهان در علوم کامپیوتر به فرآیند ذخیره داده ها در یک مکان ذخیره سازی اشاره دارد که معمولاً سریعتر از ذخیره سازی با تأخیر بالا (که معمولاً ظرفیت بیشتری دارند) دسترسی دارد.

ذخیره سازی در حافظه پنهان زمانی مفید است که همان مجموعه داده ها نیاز به خواندن یا اصلاح مکرر توسط نرم افزار داشته باشند. این امکان بازیابی کارآمد و استفاده مجدد از داده ها را فراهم می کند.

شما می توانید کش کردن را در عمل به اشکال مختلفی مشاهده کنید، مانند:

    حافظه دسترسی تصادفی (RAM) یک حافظه پنهان برای دیسک زیرین است

    حافظه پنهان CPU – L(n) – که در آن n سطح حافظه پنهان است. با کاهش n، اندازه کش معمولاً کوچکتر می شود و تأخیر بازیابی داده ها نیز کوچکتر می شود.

    برنامه‌ها می‌توانند داده‌های بازیابی شده از اینترنت را برای دسترسی سریع در حافظه دستگاه خود ذخیره کنند.

    سرورهای محلی می توانند داده ها را از سرورهای راه دور برای دسترسی سریع تر نیز ذخیره کنند.

و خیلی بیشتر.

تصویر-98
شکل 3: جریان داده ها از دیسک به CPU از طریق سلسله مراتب کش


در نتیجه کارآمدتر بودن در دسترسی به داده ها، کش معمولاً مصرف انرژی را کاهش می دهد و همچنین در مصرف انرژی صرفه جویی می کند.

قبل از اینکه نرم افزار بتواند از مزیت کش استفاده کند، باید معماری شود تا این امکان وجود داشته باشد. به طور کلی مراحل زیر می تواند به شما کمک کند:

    اولین چیز این است که مطمئن شوید به دنبال فرصت هایی برای ذخیره داده ها هستید.

    سپس، کش را پیاده سازی کنید. نحوه پیاده سازی آن به نوع نرم افزاری که می سازید بستگی دارد. ممکن است از عملیات ماتریس داده کاشی کاری تا ذخیره داده های بازیابی شده از اینترنت برای استفاده مجدد در آینده متغیر باشد.

    عملکرد نمایه، مصرف انرژی و انرژی را تحلیل کنید - و مطمئن شوید که این معیارها واقعاً بهبود می یابند. این امکان وجود دارد که با پیاده‌سازی‌های کمتر از حد بهینه، حافظه پنهان ایجاد شود - که ممکن است مصرف انرژی را افزایش داده و عملکرد را کاهش دهد.

طراحی نرم افزار با در نظر گرفتن طول عمر و قابلیت به روز رسانی

این مقاله در مورد انرژی و مصرف انرژی نرم افزار شما صحبت کرده است. در نهایت، چیز دیگری نیز وجود دارد که بسیار مهم است: توانایی نرم افزار شما برای مدت طولانی دوام و به روز رسانی شدن.

دوام طولانی مدت نرم افزار بسیار مفید است، زیرا به نوبه خود به این معنی است که دستگاه ها برای مدت طولانی تری به خوبی کار خواهند کرد. قابل به‌روزرسانی بودن نرم‌افزار به این معنی است که دستگاه‌های قدیمی‌تر به‌روزرسانی‌های امنیتی و آپشن های مهمی دریافت می‌کنند، که باعث می‌شود کاربران لزوماً برای دریافت نرم‌افزار بهتر نیازی به خرید دستگاه‌های جدیدتر نداشته باشند. این منجر به کاهش ضایعات الکترونیکی و انرژی صرف شده برای بازیافت قطعات الکترونیکی می شود.

به روز رسانی نرم افزار موضوع بزرگی است که من در اینجا به طور مفصل به آن نمی پردازم. اما اصولی وجود دارد که باید در نظر بگیرید که در هنگام طراحی برای به روز رسانی به شما کمک می کند:

نرم افزار خود را در ماژول هایی طراحی کنید که به خودی خود قابل به روز رسانی هستند : این ممکن است شامل داشتن رابط های دقیق بین ماژول های مختلف باشد به طوری که در به روز رسانی یک ماژول بسته نرم افزاری به طور کلی همچنان به درستی کار می کند.

بر استفاده از حافظه تا حد امکان کارآمد تمرکز کنید : اگر همه نرم افزارها با در نظر گرفتن کارایی حافظه طراحی شده باشند، دستگاه های الکترونیکی عمر بیشتری خواهند داشت، زیرا مقدار حافظه آنها برای مدت طولانی تری کافی خواهد بود.

به عنوان مثال، آیفون را در نظر بگیرید: نسل اول در سال 2007 دارای 128 مگابایت رم و 16 گیگابایت حافظه فلش (حداکثر) بود. امروزه آیفون 15 دارای 6 گیگابایت رم و حداکثر گزینه ذخیره سازی 1 ترابایت (1024 گیگابایت) است. این تقریباً ۱۶ برابر افزایش رم و ۶۴ برابر افزایش حافظه فلش است. این مورد نیاز بود زیرا میزان حافظه مورد نیاز برنامه ها و خود سیستم عامل به میزان زیادی افزایش یافت.

با گذشت زمان، اگر از حافظه به طور عاقلانه استفاده شود، می توانیم به آینده ای فکر کنیم که در آن دستگاه های الکترونیکی به جای اینکه هر 5 تا 6 سال یکبار از بین بروند، چندین دهه عمر کنند.

آزمایش باید ضد گلوله باشد : وقتی نرم‌افزار به‌طور مکرر به‌روزرسانی می‌شود، چندین نسخه از نرم‌افزار در دستگاه‌هایی اجرا می‌شود که با سایر نرم‌افزارهایی که ممکن است قدیمی‌تر باشند تعامل دارند. این قطعات نرم افزار هنوز باید به درستی کار کنند.

برای اینکه این اتفاق بیفتد، قبل از استقرار به روز رسانی، نرم افزار باید به طور کامل تست شود. به عنوان مثال: هنگامی که یک توسعه‌دهنده برنامه یک برنامه را منتشر می‌کند، باید با چندین نسخه از سیستم‌عامل‌ها آزمایش کند تا مطمئن شود که برنامه‌اش در همه آنها به خوبی عمل می‌کند.

نتیجه

این مقاله مفهوم نرم افزار مهندسی برای پایداری را معرفی کرده و در مورد اینکه چرا این امر ضروری است بحث شده است.

شما همچنین در مورد معیارهای مختلف و همچنین تکنیک هایی برای پایدار و کارآمدتر کردن نرم افزار خود یاد گرفتید.

در نهایت، امیدوارم به شما انگیزه داده باشد که در مورد مشکل بسیار جدی ای که در حال حاضر با آن روبرو هستیم و اینکه چگونه ما در جامعه فناوری می توانیم نقش خود را انجام دهیم فکر کنید.

امیدوارم از مقاله لذت برده باشید!

خبرکاو