بخش سوم - فصل بیست

بررسي نرم افزار با استفاده از روش مبتني بر ادراك

همانطور كه در (1992) IEC 113-3 نيز معرفي شد به دلايل امنيتي، شاخه هاي موازي بايد با موازي سازي سخت افزار پياده سازي شوند يا در زمان طراحي باسري‌سازي صريح حل شوند. روش اتخاذ شده در شكل 6 به تصوير كشيده شده است. گرچه نسبتاً محدود سازنده است اما كاملاً قابل پياده سازي است چون اكثر كنترل گرها و سيستمهاي همزمان (Real Time) به روش دوره اي كار مي كنند. علاوه براين، موجب تنزل بازبيني رفتار زماني سيستمهاي كامپيوتري به يك تست معمولي مي شود.


شكل 6 عمليات كنترل كاملاً تناوبي اين روش مبتني بر كلاك (clock) سخت افزاري است كه در آن ،دوره هاي پردازش علامتگذاري مي‌شود. طول سيكل به اندازه زمان اجرايي طولاني‌ترين مرحله اجراي نرم‌افزار انتخاب مي‌شود. علاوه براين ،مجموعه دستورالعمل هاي مفسري كه معماري مبتني بر ايمنی را پياده سازي مي‌كند و در بالا معرفي شد به وسيله دستور STEP بدون هيچ عملوندي بسط يافته است. همانطور كه در قالب نمودارهاي عمليات متوالي (ترتيبي) شرح داده شد برنامه هايي كه به وسيله مفسرها اجرا مي شوند شامل مجموعه اي از گامها است. يك دستورالعمل STEP قبل از تكه برنامه هر گام اضافه مي گردد كه كار اين دستورالعمل بررسي اين مسأله است كه آيا اين تكه برنامه در محدوده زماني يك سيكل اجرا شده است يا خير. اگر زمان اجراي آن تكه بيش از يك سيكل گام شود برنامه خاتمه پيدا كرده و پروسه تحت كنترل در حالت امن پايان داده مي شود. عموماً اجراي تكه كد قبل از رسيدن سيگنال گام بعدي تمام مي‌شود و سپس منتظر رخداد سيگنال كلاك كه بيانگر شروع گام بعدي است مي‌شود وقتي نهايتاً سيگنال گام بعدي مي‌رسد بسته به مقدار فعلي شرايط گذر،تصميمي مبني براينكه همان گام بايد تكرار شود يا گام منطقي بعدي بايد اجرا شود اتخاذ مي‌گردد. از آنجا كه انشعاب برنامه فقط به همين شيوه محدود مي شود از هرگونه دسترسي نامناسب به كد گامهاي غيرفعال ديگر و مكانهايي غير از شروع گام به طرز مؤثري جلوگيري مي‌شود. گرچه مشخص كردن سيكل گام باعث تعيين دقيق اجراي دوره‌اي گامهاي تكي مي‌گردد، در عين حال مدت پردازش عمليات مختلف در يك سيكل مي تواند متغير و در نتيجه غيرقابل تعيين باشد. از آنجا كه رفتار زمان بندي قابل پيش بيني فقط براي خارج مجموعه مهم است (براي عمليات ورودي و خروجي) تعيين دقيق زمان بندي به شيوه زير انجام مي‌پذيرد. عمليات ورودي و خروجي توسط وسايل مستقلي انجام مي‌پذيرد كه با كلاك همزمان شده است. وسايل ورودي هميشه داده هاي ورودي فعلي را فراهم مي‌كند و بدون توجه به اينكه در يك دوره خاص مورد استفاده قرار مي گيرند يا نه به ابتداي دوره‌هاي پردازش منصوب شده و تشكيل به اصطلاح تصاوير پردازش را مي دهند. داده‌هاي خروجي محاسبه شده ابتدا بافر مي شوند و سپس توسط كلاك پالس بعدي كه اجراي برنامه را از سر مي گيرد آزاد مي شوند. يك مثال عملي : برنامه كاربردي ترجمه به زبان سطح پايين با كمك يك مثال ساده و در عين حال واقعي تشريح مي شود سطوح نمايش متفاوت از يك برنامه، به عنوان مثال نمودار بلاك عمل، ليست شبكه اي و كد هدف جهت مفسر در معاري ما به جزئيات نشان داده شده است. بديهي است كه كشيدن يك نمودار بلاك عمل از روي يك برنامه هدف كه كارش انجام ترجمه به عنوان يك روش بازبيني نرم افزار است بسيار ساده و آسان خواهد بود.


شكل A-7 برنامه نظارت و تنظيم فشار شكل 7 در قالب گرافيكي به نمايش يك برنامه اتوماسيون صنعتي نمونه مي پردازد. اين برنامه نظارت و تنظيم فشار را انجام مي دهد و به صورت بلاك عمليات استاندارد كه در راهنماي 3696 VDI/VDE تعريف شد، شرح داده مي شود. يك مقدار سنجش انالوگ و متغير كنترل شده توسط يك بلاك عمل از نوع IN-A از كانال ورودي به آدرس INADR تأمين مي شود و در بازه XMIN تا XMAX به يك مقدار فيزيكي با واحد XUNIT مقياس مي شود. متغير كنترل شده به يك بلاك عمل از نوع C خورانده مي‌شود كه كارش تنظيم ديفرانسيلي – انتگرالي – نسبي متأثر از پارامترهاي كنترل IN ، KP و TV است. متغير تنظيم كننده حاصل به وسيله يك بلاك عمل خروجی از نوع OUT-A به يك مقدارآنالوگ تبديل مي شود و به كانالي كه به وسيله OUTADR مشخص شده هدايت مي شود. علاوه براين، متغير كنترل شده، هميشه تحت نظارت دو نمونه از نوع بلاك عمل استاندارد SAM است تا در محدوده مشخص شده با پارامترهاي LS و HS باقي بماند. چنانچه متغير كنترل شده خارج محدوده قرار گيرد يكي از خروجي هاي QS دو نمونه SAM مقدار True مي گيرد و به همين ترتيب خروجي از نوع بلاك عمل OR نيز True مي شود. اين به نوبه خود موجب مي شود اخطار نوع AM و بلاك عمل ذخيره پيام، يك ركورد اخطار زمان بندي شده ايجاد كنند. وروديهاي بلاك عمل استاندارد با استفاده از برنامه اي كه نه از طريق وروديهاي قابل مشاهده خارجي خود نرم افزار و نه به صورت داخلي به وسيله خروجي هاي بلاك هاي عمل استاندارد ديگر تغذيه نشده اند مقادير ثابت مي گيرند. فرم نمايش ليست شبكه اي برنامه مثال فوق كه با برنامه OrCAD توليد شده است در شكل 8 نشان داده شده است. نمودارهاي شبكه، نمايش‌هاي متني را تشكيل مي دهند كه كاملاً معادل طراحي هاي اصلي هستند (به جز براي جنبه‌هاي هندسي)



شكل 8 فرم نمايش شبكه اي يك برنامه نمونه

كد هدفي كه در نهايت براي مفسر به وسيله ترجمه اتوماتيك از فرم نمايش شبكه اي يك برنامه نمونه بدست مي آيد در شكل 9 ليست شده است و نسخه زبان اسمبلي قابل خواندن را نشان مي دهد. انواع بلاك هاي عمل ذكر شده در مثال SAM وC و AM داراي متغيرهاي حالت دروني هستند (به عنوان مثال C داراي سه متغير و دو مورد ديگر داراي يك متغير حالت دروني هستند)


شكل 9- نمايش كد هدف برنامه مثال كد هدف نمايش داده شده در شكل 9 بيانگر اين است كه فراخواني همه نمونه هاي بلاك عمل كه در برنامه رخ مي دهند، به طور مستقيم به رويه هايي متناظر مي گردند. هر يك از آنها با يك دستور GET آغاز مي شوند كه مشخصه بلاك مربوط را از خارج از محل ROM مناسب به مفسر انتقال مي‌دهد. سپس پارامترهاي ورودي با خواندن خانه‌هاي ROM (براي ثابت ها) يا RAM (براي پارامترهاي برنامه و مقادير بلافصل) مناسب فراهم مي شوند. نهايتاً چنانچه ورودي موجود باشد مقادير متغيرهاي وضعيت داخلي رويه از روي RAM خوانده مي شود. براي هر نمونه بلاك داده با وضعيت داخلي يك مجموعه مكانهاي برچسب دار متناظري (مثلاً RAM-LOC-B2-isv) وجود دارد. وقتي مفسر همه داده ها را دريافت كند، رويه را اجرا كرده و در صورت وجود نتیجه، مقادير پارامترهاي خروجي و / يا متغيرهاي وضعيت داخلي كه در محل RAM مربوطه ذخيره شده اند را باز مي گرداند. رابطـه بين خـروجي يك بلـوك داده و ورودي بلاك ديـگر با دستور PUT و GET پياده سازي مي شود. دستورPUT مقدار خروجي را در مكاني از RAM به عنوان يك مقدار موقتي مثل TMP-X ذخيره مي كند و دستور GET آن را از مكان مورد نظر مي خواند. به بيان ديگر هر گره (Node) در نمودار شبكه اي باعث دقيقاً یک انتقال از مفسر به يك سلول RAM و يك انتقال يا بيشتر از آنجا به مفسر است. جزئيات پياده سازي رويه هاي گوناگون بخشي از Firmware معماري است و به همين دليل غيرقابل مشاهده مي ماند. با توجه به ساختار توصيف شده فوق در خصوص برنامه هاي هدف مفسر، پروسه ترجمه و جداسازي كد هدف بسيار ساده است. براي انجام ترجمه، ابتدا دستورات STEP جستجو مي شوند كه به طور كاملاً واضح گامهاي متوالي مختلف موجود در برنامه را از هم جدا مي كند. كد بين دو دستور STEP به يك نمودار بلاك عمل مربوط مي شود. سپس اولين دستور GET تفسير مي گردد. بدين وسيله يك بلوك عمل جهت ترسيم در دياگرام بلاك عمل مشخص مي شود. با مقايسه GET هاي بعدي با توصيف بلاك عمل درون كتابخانه استفاده شده ، صحت ارسال پارامتر به سادگي قابل تایید است. علاوه بر اين براي هر GET كه با يك پارامتر مناسب متناظر است (ونه با يك متغير وضعيت داخلي) يك خط انتقال در نمودار كشيده مي شود. دونوع اتصال وجود دارد. در نوع اول ارتباطاتي از ثابت‌ها يا ورودي هاي برنامه به وروديهاي بلاك عمل يا از خروجي هاي بلاك عمل به خروجي هاي برنامه وجود دارد. در نوع دوم ارتباطات يكطرفه اي از خروجي هاي بلاك عمل به نقاط اتصال نامگذاري شده در نمودار يعني گره هاي ليست شبكه اي يا از چنين نقاطي به وروديهاي عمل وجود دارد. زمانيكه نمودار به طور كامل كشيده شود، نام اين نقاط قابل حذف است. با توجه به متغيرهاي وضعيت داخلي بايد مشخص شود كه مكانهاي RAM متناظر به درستي مقدار دهي شده اند و مقادير جديد حاصل از اجراي بلاك عمل درست در همان مكانهايي نوشته شده اند كه وضعيت هاي داخلي در همين فراخواني بلاك خوانده شده بودند. پروسه تشخيص بلاك عمل و تأييد پارامترهاي پاس شده دقيقاً همراه رسم نماد براي بلاك و اتصالات مربوط به آن آنقدر تكرار مي شود تا يك دستور STEP كه اين گام و نمودار بلاك عمل معادل را خاتمه مي دهد فرا برسد

نتايج و تجربيات : براساس معماري فوق يك نمونه اوليه از كنترل گر كامپيوتري و يك مفسر بلاك عمل كه اعمال نقض بولی، تركيب و تجزيه را به همراه تأخيرهاي زماني انجام مي دهد ساخته ايم. در حاليكه سه عمل اول جزئي هستند، زمان سنج تأخيري نيازمند يك تأييد رسمي صحت است كه به وسيله استخدام HOL انجام شده و مشخص گرديد كه اين عمل خيلي پركار و طولاني است. بهره برداري از كنترل گر در عمل نشان داد كه پياده سازي سيستم با قابليت خاموش شدن در حالت اضطراري به شيوه سيم بندي شده به همراه سيستم الكترونيكي برنامه‌ريزي شده ممكن است و الگوي برنامه نويسي مبتني بر ماژول هاي عمل تأييد شده موجود در برنامه هاي كاربردي تأييد شده توسط ترجمه هاي متعدد مي تواند باعث ظهور نرم افزاري عاري از هر خطا شود. اين مورد اخير، به همراه سكوهاي سخت افزاري با قابليت چشم پوشي از خطا امكان سيستمهاي محافظ قابل برنامه ريزي را فراهم مي كند كه اين سيستمها خصلت بدون خطا بودن خودشان را در شبكه اي از سيستمهاي سيم‌بندي شده، به اشتراك مي گذارند. به دلايل ارگانيكي نرم افزار پيچيده بهتراست به شيوه سلسله مراتبي و به طريقي طراحي شود كه فرمولاسيون ماژول هاي آن در قالب نمودار بلاك عمل هميشه در يك صفحه خروجي ترمينال (مانيتور) جا شود. همانطور كه قبلاً تشريح شد اين ماژول ها به صورت بلاك عمل در سطح بالاتر بعدي از ساختار سلسله مراتبي كه اجزاي داخلي آن به صورت مجرد بوده و توسط مفسر مذكور اجرا شده اند ظاهر مي گردد. از اين رو پيچيدگي بلاك عمل هرگز از حدود ده برابر مثال بخش 8 بيشتر نخواهد بود كه اين خود باعث مي‌شود پروسه تأييد به حداكثر چند ساعت كار ختم گردد.( براي هرگونه نمودار بلاك عمل خاص)

« نتيجه گيري» توجه به امنيت در جامعه رشد فزاينده اي يافته است و به تبع آن شاهد افزايش آگاهي محيطي نيز هستيم. اين رخداد تبعات مهمي در ارزيابي سيستمهاي كنترل شده توسط كامپيوتر داشته است. ما به مرور متوجه مسائل امنيتي ذاتي نرم افزار شديم. عدم استفاده از كامپيوترها براي اهداف اتوماسيون مرتبط با ايمني نه تنها غيرمنطقي است بلكه برعكس بنابه دلايل ذكر شده ترديدي وجود ندارد كه بهره برداري از چنين برنامه هاي كاربردي رو به افزايش است و اين خود باعث سخت تر شدن قابليت اعتماد به نرم افزار مي شود. در چنين شرايطي اين مقاله يك مسأله آزار دهنده را مورد بررسي قرار داد. در اين مقاله راه حلهايي براي همه سئوال هاي موجود در مبحث مجوز استفاده(License) ايمن یک نرم افزار ارائه نشده است. اما مقدمه اي برآن ذكر شده كه كاملاً شدني بوده و به گستره وسيعي از مشكلات كنترلي مرتبط با ايمني،قابل اعمال است. ازاين رو انتظار مي رود كه مفاهيم ارائه شده در اينجا، نهايتاً باعث شود منطق رله يا گسسته جايگزين سيستمهاي الكترونيكي قابل برنامه‌ريزي كه اجرا كننده نرم افزار تأييد شده ايمني و مسئول اعمال بحراني در اتوماسيون هستند گردد. همزمان با پاسخگويي به درخواست جامعه براي سيستمهاي كامپيوتري قابل اعتماد بيشتر، تحت محدوديت هاي اقتصاد پايدار، مفاهيم ارائه شده مي تواند بلافاصله به پياده‌سازي صنعتي راه پيدا كند. روش ما توجه ويژه اي به شرايط اقتصادي دارد.اين روش گامي به سمت الگوي مهندسي نرم افزار است كه عامل به وجود آمدن برنامه نويسي ايمن وساده مي باشد. مشخصه اين روش، سیستم طراحی مجتمع است که نه تنها در آن نشانی از پیچیدگیهای ریاضی نیست بلکه مفاهیم آن قابل فهم برای افراد متخصص نیز هست.این روش می تواند جایگزین روش تجربی بررسی مجوز استفاده از نرم افزار شود.تایید نرم افزار وقتی به عنوان یک پروسه اجتماعی رسیدن به توافق در نظر گرفته شود می تواند توسط قابلیتهایی مانند برنامه نویسی گرافیکی، استفاده مجدد از اجزا تایید شده قبلی،برنامه نویسی در سطح مشخصات(Specification level programming) و به وسیله پر کردن جدول تصمیم گیری تسهیل شود و تقریبا در همه جنبه ها حداکثر سادگی را ارائه دهد.سیستمهای کنترل مبنی بر نرم افزار هنوز هم از نظر قابلیت اعتماد پایین تر از اجزای سیم بندی شده معمولی محسوب می گردند. قدمت مهندسی نرم افزار با سالها تجربه در امر توسعه استراتژی ها می تواند این برتری را جهت غلبه بر نقایص توجیه کند. پیشنهاد روشهای برنامه نویسی اختصاصی را برای مدیریت این وضعیت مطرح کرده ایم که از قواعد و اصولی پیروی می کند که هر چه سیستمی به لحاظ امنیتی بحرانی تر باشد نرم افزار کنترل مربوط به آن ساده تر می شود.بنابراین فرد قادر است در بالاترین سطح ایمنی تنها با نگاه کردن به جدول نشانه-دلیل ،امنیت نرم افزار را تایید کند(بدون نیاز به استفاده از اثباتهای رسمی) برای کاهش نیازمندیها می توان نرم افزار کنترل را بر مبنای بلاک عملهای اثبات شده قبلی به صورت گرافیکی بنا کرد که این امر باعث تسهیل در روند توسعه نرم افزار در مقایسه با زبانهای منتی شده و اثباتهای امنیتی را در سطخ قابل قبولی محکم و پایدار و در عین حال ساده و غیر رسمی نگاه می دارد.