هماهنگ سازی task و thread ها و Ada :
اجرای یک برنامه تحت Ada دربرگیرنده اجرای یک یا چند task می باشد.هر task ، یک يا چند thread جداگانه برای کنترل مستقل یا همزمان در نقاطی که با سایر task ها تداخل دارد ایجاد می کند. شکل های مختلف این هماهنگ سازی و اثر متقابل بین task ها در این چند برگ توضیح داده می شود. این شکل ها به دسته بندی کلی زیر تقسیم می شوند :
۱- فعال سازی و نابود سازی یک task

۲- صدا زدن یک برنامه خاص که هماهنگ سازی را بر عهده بگیرد وداده ها و بخش های اشتراکی را مدیریت کند.
۳- یک برنامه وقفه ای که شامل یک سری delay ها باشد. یا شامل یک سری برنامه های زمان بندی که به هر کدام از task زمان خاصی را بدهد.
۴- یک سیستم خاتمه دهنده که به یک task اجهزه خاصی برای از بین بردن و از کار انداختن task دیگر می دهد.

زمان دهی پویا و زمان دهی ایستا static semantic , dynamic semantic :
در طول یک دوره یک task غیر فعال می تا زمانی که به فعالیت بازگردد. زمانی که یک task آماده شروع فعالیت گردید باید بخش ها و داده های مورد نیاز کامپیوتر به آن اختصاص داده شود. هر چند که این اجرا ممکن است روي یک سیستمmulti proccessorاجرا شود اما باز هم در چنین سیستم هایی اوقاتی پیش می آید که از دید task سیستم single proccess است و یا حتی روی هر یک از proccessor ها چندین task شروع به فعالیت می کنند. در این حالت به طور کلی دو نوع الگوریتم شروع به تقسیم بندی منابع سخت افزاری می نمایند که به نام های زمان دهی پویا و زمان دهی ایستا معروف هستند. هر چند هرکدام از این دو الگوریتم خود به الگوریتم های فراوان هماهنگ سازی دیگر تقسیم می شوند.
سیستم زمان دهی ایستا به این شکل عمل می کند که قبل از شروع به فعالیت task مشخصات آن را خوانده و به آن زمان می دهد. در صورتی که task ای از قبل نداند که چه مقدار زمان برای اجرا نیاز دارد این سیستم جوابگو نخواهد بود.

اما سیستم زمان دهی پویا که بسیار سنگین تر و پیچیده تر می باشد در هر لحظه اجرای task ها از آن ها توسط massage گزارش تهیه می کند و از این که یک task خاص چه مقدار زمان برای ادامه کار خود لازم دارد مطلع می شود و توسط زیر الگوریتم های مربوط به خود shairing را انجام می دهد. اما هر task چه قسمت هایی دارد؟ ما برای دانستن عمل هماهنگ سازی باید با قسمت های مختلف یک task آشنا شويم

همزماني و مناطق بحراني
موثر واقع شدن يك هسته مركزي بازدخولي نياز به استفاده از همزماني دارد: اگر يك مسيركنترل هسته مركزي در حاليكه روي يك ساختمان داده هسته مركزي فعاليت مي كند، متوقف شود، هيچ مسيركنترل هسته مركزي ديگري اجازه نخواهد داشت تا بر روي همان ساختمان داده فعاليت كند مگر آنكه به يك وضعيت ثابت و پايدار بازگردد. بعلاوه برخورد دومسيركنترل مي تواند منجر به تخريب اطلاعات ذخيره شده بشود. بعنوان مثال، چنين تصور كنيم كه يك V متغيرجهاني شامل تعدادي از موارد (items) قابل استفاده بعضي اجزا سيستم است. اولين مسيركنترل هسته مركزي (A) متغير را ميخواند و تعيين مي كند كه فقط يك مورد ( آيتم) قابل استفاده وجود دارد. در اين نقطه، مسيركنترل هسته مركزي ديگر (B) فعال شده و همان متغير را مي خواند كه هنوز داراي ارزش ۱ مي باشد. بنابراين V , B را كاهش داده و شرع به استفاده از آیتم مي كند. سپس A فعاليت رادوباره آغاز مي كند زيرا تقريبا ارزش V محتوي ۱ـ مي شود و دو راه كنترل هسته مركزي از يك آيتم با اثرات تخريبي پتانسيلي استفاده مي كنند؛ مي گوئيم كه “شرايط مسابقه” موجود است.

بطوركلي، دسترسي امن به متغير سراسری با استفاده از “عمليات اتميك” فراهم ميشود. در مثال قبل، اگر دومسيركنترل متغير را بخوانند و V را با يك عمل بدون تداخل و تنها كاهش دهند، تخريب داده، امكان پذیر نخواهد بود. با اينحال هسته هاي مركزي شامل ساختمان داده هاي بسياري هستند كه نمي توانند با يك عمل تنها قابل دسترسي باشند. براي مثال، معمولا جابجائي عنصر کليد از يك ليست پيوندي تنها با يك عمل ممكن نيست، زيرا هسته مركزي حداقل به دو نقطه دسترسي در آن واحد نياز دارد. هربخشي از كد كه بايد توسط پردازش به پايان برسد، قبل از اينكه يك پردازش ديگر بتواند وارد شود ناحيه بحراني است. اين مشكلات نه تنها در ميان مسیرهای كنترل هسته مركزي بلكه در ميان پردازشهائي كه از داده هاي مشتركي استفاده مي كنند نيز رخ ميدهد. تكنيكهاي هم زماني متعددي شکل گرفته اند. بخش بعدي به بررسي چگونگي هم زمان كردن و راههاي كنترل هسته مركزي مي پردازد.

هسته های مرکزی انحصاری
در جستجوي راه حل ساده اي براي حل مشکلات هم زمانی، اكثر هسته هاي مركزي يونيكس هاي ابتدائي انحصاري هستند : وقتي پردازشي در وضعيت هسته مركزي اجرا مي شود، نمي تواند بطور اختياري متوقف شده و يا با پردازش ديگري جايگزين شود . بنابراين در يك سيستم تك پردازشي تمام ساختمان داده هاي هسته مركزي كه توسط پاسخگوي وقفه (interrupts) و استثناءها(exception update) به روز نشده اند براي دسترسي به هسته مركزي امن و مطمئن هستند. در واقع، يك پردازش در وضعيت هسته مركزي مي تواند بصورت اختياري از CPU صرف نظر كند، اما در اين مورد بايد اطمنيان حاصل كند كه تمامي ساختمان داده هاي قابل دسترسي قبلي را كه مي توانسته اند تغيير كنند را بايد دوباره چك كند. انحصاري بودن در سيستمهاي چند پردازنده اي بي تاثير است زيرا دو مسيركنترل هسته مركزي كه در CPU هاي متفاوت در حال اجرا هستند مي توانند با هم به ساختمان داده يكساني دسترسي پيدا كنند.

غیر فعال کردن وقفه ها
مكانيسم ديگر همزماني در سيستمهاي تك پردازشي عبارتست از غيرفعال كردن تمامي وقفه های سخت افزاري قبل از ورود به منطقه بحراني و فعال كردن مجدد انها دقيقا بعد از ترك منطقه بحراني . اين مكانيسم با وجود سادگي از نقطه اپتيمال بسيار دور است. اگر منطقه بحران وسيع باشد، وقفه ها براي زمان نسبتا طولاني غيرفعال باقي مي مانند و تمامي فعاليتهاي سخت افزار را منجر به فريز مي كنند. علاوه براين، در يك سيستم چند پردازنده اي اين مكانيسم كارگر نيست . هيچ راهي براي اطيمنان از عدم دسترسي CPU ديگری، به ساختمان داده هاي مشابهي كه در منطقه حفاظت شده بحراني update شده اند، وجود ندارد.

Semaphores
انيسم ديگري كه به وسعت استفاده شده و در هر دو سيستم چند پردازنده و تك پردازنده موثر است. برپايه استفاه از Semaphores مي باشد . Semaphores به زبان ساده يك محاسبه گر وابسته به ساختمان داده مي باشد. Semaphores توسط تمامي نخهاي هسته مركزي قبل از اينكه اين نخ ها به ساختمان داده دسترسي پيدا كنند چك مي شود. هر Semaphore ممكنست بصورت بخشي تشكيل يافته از موارد زير مشاهده شود: يك متغير صحیح (integer) ليستي از پردازشهايي كه در انتظار اجرا هستند. دو تابع خودكار : () down () up تابع (پائين) down ارزش Semaphore را كاهش مي دهد. اگر ارزش جديد كمتر از O باشد.

اين تابع پردازشهاي در حال اجرا را به ليست Semaphore اضافه كرده و سپس بلوكه مي شود ( مثلا درخواست ریز برنامه). تابع (بالا) up ارزش Semaphore را افزايش ميد هد و اگر ارزش جديد بيشتر يا مساوي صفر باشد. يك يا چند پردازش در ليست Semaphore را مجددا فعال مي كند. هر ساختمان داده براي محفاظت Semaphore خودش را داراست كه با ۱ شروع مي شود. وقتي مسيركنترل هسته مركزي مي خواهد به ساختمان داده دسترسي پيدا كند. تابع ( ) down را در Semaphore مناسب اجرا مي كند اگر ارزش Semaphore جديد منفي نباشد، دسترسي به ساختمان داده فراهم مي شود. ازطرفي پردازشي كه مسيركنترل هسته مركزي را اجرا مي كند به ليست Semaphore اضافه شده و بلوكه مي شود. وقتي پردازش ديگري تابع () up را در آن Semaphore اجرا مي كند، به يكي از پردازشهائي كه در ليست Semaphore قرارداد اجازه پيشرفت مي دهد.

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

يك قفل چرخشی بسيار مشابه Semaphore مي باشد اما ليست پردازش ندارد . وقتي پردازشي به قفلي برخورد مي كند كه توسط پردازش ديگري بسته شده است در اطراف قفل “تنيده مي شود” يك حلقه را اجرا مي كند تا زمانيكه قفل باز شود. در حقيقت، قفلهاي چرخشی در محيط هاي تك پردازنده بي فايده اند. وقتي يك مسيركنترل هسته مركزي تلاش مي كند كه به يك ساختمان داده قفل شده دسترسي پيدا كند، اجراي يك حلقه بي انتها را آغاز مي كند. بنابراين، مسيركترل هسته مركزي كه در حال update كردن ساختمان داده محافظت شده مي باشد، شانسي براي ادامه اجراي فعاليت و آزاد كردن قفل چرخشی نخواهد داشت و نتيجه نهائي به hang كردن سيستم منتهي مي شود.

اجتناب از بن بست
پردازشها يا راههاي كنترل هسته مركزي كه با ديگر راههاي كنترل هم زمان شده اند ممكن است به راحتي وارد مرحله بن بست شوند. ساده ترين مورد بن بست وقتي اتفاق مي افتد كه پرداش P1 به ساختمان داده a و پردازش P2 به ساختمان داده b دسترسي پيدا كند ول ي P1 بر b و P2 براي a منتظر بمانمد. انتظارهاي چرخه اي ، پيچيده تري هم ممكنست در بين گروههاي پردازش ها اتفاق بیافتد . در واقع يك شرط بن بست فريز كامل پردازشها و مسیرهای کنترل هسته مركزي متاثر را ايجاد مي كند. در آنجا كه طراحي هسته مركزي مورد توجه واقع باشد افزايش تعداد Semaphore هاي هسته مركزي به يک مسئله در مورد بروز بن بست تبديل مي شود. چرا که در اين حالت اطمينان از اينكه هيچ شرط بن بستی در طول مسیر کنترل بوقوع نمی پیوندد مشکل می شود . سيستم عاملهاي متعددي از جمله ليناكس، با معرفي تعداد بسيار محدود انواع Semaphore و با درخواست Semaphore ها به صورت صعودي از اين امر (تعدد سمافور) اجتناب مي كنند.

توليد اطلاعات به صورت استاتيک و مسائل امنيتي آن
معمولترين نوع دسترسي به اطلاعات در اينترنت استفاده از صفحات HTML است. هنوز هم بسياري از متخصصين، اين روش در دسترس گذاري اطلاعات (Web Publishing) را به روشهاي ديگر ترجيح ميدهند. البته دلايل اصلي آنها بيشتر مربوط به سادگي و قابليت انعطاف اين روش است.
درين روش اطلاعات يک بار توليد ميشود. توليد اطلاعات (صفحات HTML) ميتواند به صورت دستي يا به صورت اتوماتيک توسط برنامه هاي معمولي Client-Server انجام شود. پس از انجام اين فاز کليه اطلاعات بر روي سايت و سرور اصلي قرار ميگيرد (Upload).

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

استفاده ازين روش مزايا و معايب خاص خود را دارد. مزيت آن امنيت بالاست. در واقع درينجا هيچ ارتباز اکيتيوي با سرور پايگاه داده وجود ندارد. اطلاعات به صورت برون خط (Offline) بر روي سرور وب بارگذاري ميشوند و پس ازان هيچ ارتباطي مابين کاربر عادي و چپايگاه داده وجود نخواهد داشت. بدين ترتيب خطر حملات به پايگاه داده کاهش چشمگيري مي يابد. اما از ديگر سو مديريت حجم انبوه اطلاعات با استفاده ازين روش بسيار دشوار ميباشد . ضمن اينکه قابليت انعطاف روش نيز بسيار محدود است. در واقع زماني که ازين روش استفاده ميکنيم هدف اصلي خدمت رساني و سهولت استفاده را قرباني امنيت کرده ايم.

. توليد اطلاعات به صورت ديناميک
اين روش متداول ترين شيوه ايست که امروزه جهت ارائه خدمات بر بستر وب مورد استفاده قرار ميگيرد. درين روش صفحات موجود بر روي سرور وب عملا داراي هيچ اطلاعاتي نميباشند يا داراي حداقل اطلاعات هستند. تمامي اطلاعات در پايگاه داده است. به محض دريافت هر تقاضايي توسط سرور وب ، صفحات مورد درخواست او به صورت ديناميک از طريق جستجوي (Query) مناسب در پايگاه داده توليد ميشود.
براي پياده سازي اين روش طيف وسيعي از تکنولوژيها وجود دارد. ASP،JSP،PHP،CGI،ISAPI… و چندين روش ديگري که عم٥ما حول همين توليد يناميک اطلاعات إر محيط ب طراحي شده اند. نيت هريک ازين زبانها و روشها خود موضوع مفصل و جداگانه است اما از ديد بح حاضر چند نکته مرا با مد نظر داشت:
طي بخش گذشته عموما توجه ما معطوف به اين مطلب بود که چگونه جلوي دستيابي افراد غير مجاز به سيستم و اطلاعات گرفته شود. اما هيچ گاه به اين مطلب اشاره نکرديم که مجاز يا غير مجاز بودن افراد را چگونه تشخيص ميدهيم. در واقع روش شناسايي افراد در يک سيستم امن چگونه ميتواند باشد.

ابتدايي ترين روشي که درين زمينه ميتوان در نظر گرفت تصديق اعتبار ساده بر حسب نام کاربري و کلمه عبور است. گرچه پياده سازي اين روش سنتي بسيار ساده است اما امنيتي هم که تامين ميکند حداقل امنيت ممکن است. درين روش کاربر يکبار در سيستم شناسايي ميشود و پس ازان اطلاعات به صورت عادي بر روي شبکه جريان مي يابد. مشکلات اين روش را ميتوان به صورت زير خلاصه کرد:

TLS
TLS (Transport Layer Security)، جانشین SSL، برپایه SSL3.0 بنا شده است، اما به کاربران یک انتخاب کلید عمومی و الگوریتمهای Hashing می‌دهد. (الگوریتمهای Hashing فانکشن‌های یک‌طرفه‌ای برای حفظ جامعیت پیامها هستند و توسط بیشتر پروتکلها استفاده می‌شوند.) اگرچه TLS و SSL تعامل ندارند، اما چنانچه یکی از طرفین ارتباط TLS را پشتیبانی نکند، ارتباط با پروتکل SSL3.0 برقرار خواهد شد. بیشتر مزایا و معایب SSL به TLS هم منتقل می‌شود، و معمولا وجه تمایز خاصی وجود ندارد، و از همه نسخه‌ها به عنوان SSL یاد می‌شود.
S/MIME

S/MIME ( Secure Multipurpose Internet Mail Extention) که اختصاصاً برای پیام‌رسانی ذخیره-و-ارسال طراحی شده است، بعنوان استاندارد امنیت ایمیل برتر شناخته شده است. مانند بیشتر پروتکل‌های رمزنگاری (مثلا SSL ، TLS و IPSec)، S/MIME با رمزنگاری تنها سروکار ندارد. بهرحال، علاوه بر تصدیق هویت کاربران و ایمن‌سازی جامعیت پیامها (برای مثال مانند آنچه SSL انجام می‌دهد)، S/MIME توسط امضای دیجیتال، رکوردهای پایداری از صحت پیامها ایجاد می‌کند (ضمانت هویت فرستنده چنانچه به محتوای پیام مشخصی مرتبط شده). این عمل باعث می‌شود فرستنده پیام نتواند ارسال آن‌را انکار کند.