**المعالجة المتوازية** أو **المعالجة التفرعيّة** (بالإنجليزية: Parallel Processing)‏ هي تقنية حاسوبية تُنفذ بها عدة عمليات في وقت واحد، مما يؤدي إلى إنقاص زمن المعالجة. لذلك السبب تُستخدم في معالجة التطبيقات الكثيفة مثل التنبؤ بالمستقبل الاقتصادي، إنتاج المؤثرات المرئية للأفلام المستقبلية.

هناك طريقتان شائعتان تُنفذ بها العمليات المتوازية:

* فإما أنه يتم تنفذيها من خلال تنفيذ عدة برامج (عمليات) في وقت واحد (بالإنجليزية: multiprocessing)‏.
* أو من خلال توزيع التعليمات البرمجية إلى مراحل (بالإنجليزية: instruction-level)‏.

يحتاج تنفيذ عدة برامج في وقت واحد إلى ربط عدة معالجات أو عدة حواسيب مع بعضها بعضا لحل مشكلة معينة. بينما عملية توزيع التعليمات إلى مراحل وتنفيذ كل مرحلة في وقت واحد تتم باستخدام معالج وحيد.

إن الزمن اللازم لإيجاد حل مشكلة ما في حال تقسيمها إلى عشرة أجزاء ومعالجتها على عشرة حواسيب في نفس الوقت، يساوي إلى عشر الوقت الذي يحتاجه حاسوب غير موازي لحل كل جزء من أجزاء المشكلة العشرة بشكل تسلسلي.

صحيح أنه هناك العديد من التطبيقات القابلة للتجزيء إلى عمليات متوازية، ولكن هناك بعض العمليات من الصعب أن تُجزئ، لأن أجزاءها مرتبطة مع بعضها البعض، أي أن هناك أجزاء عليها أن تنتظر حل أجزاء أخرى حتى تستطيع حل الجزء الخاص بها.

أجزاء العملية التي لا يمكن أن تحل بطريقة متوازية تدعى أجزاء تسلسلية. في الحقيقة تحدد هذه الأجزاء التسلسلية الوقت الكلي اللازم من أجل حل مشكلة ما. على سبيل المثال: افرض أنه لدينا مشكلة ما نريد حلها، تتضمن هذه المشكلة 9 ملايين عملية يمكن أن تنجز بشكل متوازي وواحد مليون يجب أن تُنجز بشكل تسلسلي. بشكل نظري يمكننا القول: أن تسع ملايين حاسب تُنجز تسع أعشار المشكلة في وقت واحد، وتترك عشرًا لحله بشكل تسلسلي، وبذلك يكون زمن التنفيذ الكلي هو عشر الزمن في حال لم تكن المعالجة تفرعية.

المقدمة
-------

لتوضيح فكرة المعالجة التفرعية، لنتخيل أنه يوجد عدد كبير من المتقدمين نُحاول جمع المعلومات عنهم، فسيكون ذلك العمل صعبا وطويلا على شخص واحد، أما عندما يتواجد مجموعة من الناس يمكنهم المساعدة فإنه يُمكن تقسيم العمل على عدة أناس بحيث أن كل شخص يسأل سؤال معينا ويتخصص بالبحث عن معلومة معينة. إن هذه العملية في تقسيم العمل تُدعى: «**المعالجة التفرعية**».

بالنسبة لمفهوم الحاسوب فان المعالجة التفرعية تعني تقسيم معالجة تعليمات البرنامج الواحد على عدة معالجات، وأفضل مثال يتمثل في مخدمات شبكات الانترنيت والتي تستخدم رقائق Intel Xeon.

العملية الأساسية
----------------

للاطلاع على عنوان موقع URL والحصول على المزيد من المعلومات، نقوم بالاتصال بشبكة الإنترنت وإدخال عنوان الموقع في الحقل المخصص ضمن المتصفح، فتظهر صفحة هذا الموقع. تتم هذه العملية بالتفصيل الآتي:

1. يقوم المتصفح أولاً بتقسيم العنوان URL إلى ثلاثة أجزاء:
	1. البروتوكول: (http).
	2. اسم المخدم (السيرفر): (www.alrakameiat.com).
	3. اسم الملف المطلوب: (web-server.htm).
2. يتصل المتصفح مع مخدم الأسماء DNS Domain name server لتحويل اسم المخدم (www.alrakameiat.com) إلى عنوان IP، الذي يستخدمه بدوره للاتصال مع جهاز المخدم.
3. يقوم المتصفح بعد ذلك بالاتصال مع المخدم على عنوان الـ IP المحدد على البوابة 80.
4. وفقاً للبروتوكول HTTP يرسل المتصفح الطلب (GET) للسؤال عن الملف ثم يقوم بعدها المخدم بإرسال ملف نص HTML عن صفحة الويب إلى المتصفح.
5. يقرأ المتصفح مؤثرات HTML الموجودة ضمن النص ويشكل الصفحة ويظهرها على الشاشة.

نبذة عن العناوين IP address، البوابات (Ports)، البروتوكولات (Protocols):

### العناوين IP

لضمان استمرار الاتصال مع جميع الأجهزة فإنه يخصص لكل جهاز ضمن شبكة الإنترنت عنوان وحيد فريد يدعى عنوان IP. مصطلح IP هو اختصار لمصطلح بروتوكول الإنترنت Internet Protocol. يخصص لهذا العنوان كلمة بطول 32 خانة ثنائية، يعبر عنها عادة بأربعة أعداد (مجموعات ثمانية) تفصل فيما بينها فواصل عشرية. يأخذ عنوان الـ IP الشكل التالي: 216.27.61.137.

أطلق على الأعداد الأربعة ضمن العنوان IP بالمجموعات الثمانية لأن قيمها تتراوح بين 0 و 255 لها 28 قيمة ضمن كل مجموعة.

كل جهاز ضمن شبكة الإنترنت له عنوان IP وحيد. للمخدم عنوان IP مستقر لا يتغير غالباً، أما الأجهزة المنزلية التي تتصل بالشبكة عبر المودم فإنه يسند لها غالباً عنوان IP من قبل مزود خدمة الإنترنت ISP عند دخولها الشبكة. هذا العنوان وحيد عند كل دخول ويمكن أن يتغير عند الدخول التالي، ومنه نرى أن مزود خدمة الإنترنت ISP يحتاج فقط إلى عنوان IP واحد لكل مودم (أكثر منه لكل مستثمر) يعمل معه.

يمكن معرفة معلومات كثيرة عن جهازك ضمن شبكة الإنترنت باستخدام البرنامج WINIPCFG.EXE ضمن بيئة Windows. IPCONFIG>EXE ضمن بيئة / Windows XP 2000

### البوابات

إن أي جهاز من أجهزة المخدمات يقدم خدماته لشبكة الإنترنت عبر العديد من البوابات، بوابة واحدة لكل خدمة من خدماته، فمثلاً إذا كان المخدم يقدم خدمة الويب وخدمة FTP فإن خدمة الويب تكون على البوابة 80 وخدمة FTP على البوابة 21. وبالتالي يتم الاتصال مع المخدم باستخدام عنوان IP محدد وبوابة محددة. البوابات المعروفة والشائعة لها بوابات محددة ومعروفة، سنورد هنا بعضاً منها: - echo 7 - daytime 13 - qotd 17 (Quote of the day) - ftp21 - telnet 23 - time 37 - nameserver 42 - nickname 43 (Who is) - gopher 70 - finger 79 - www 80

### البروتوكولات

في حال اتصال الزبون مع المخدم عبر بوابة محددة فإنه يلج هذا المخدم مستخدماً بروتوكولاً خاصاً، ويعرف البروتكول بأنه طريقة محددة مسبقاً يتم وفقها اتصال الزبون مع المخدم بشكل سهل وفعال وبأقل قدر من الأخطاء أبسط أنواع البروتوكولات هو daytime protocol. إن استخدمت البوابة 13 للاتصال مع مخدم يدعم هذا البروتوكول فسوف يرسل لك المخدم التاريخ والوقت الجاري وينهي بعدها الاتصال. البروتوكول هو «إن اتصلت معي، سأرسل لك التاريخ والوقت وأقطع الاتصال بعدها».

في بروتوكول HTTP الأصلي، كل ما عليك إرساله هو اسم الملف الفعلي، مثل "/" أو "/web-" server.htm. عدِل هذا البروتوكول لاحقاً لمعالجة إرسال كامل عنوان URL. سمح هذا للشركات التي تستضيف نطاقات وهمية حيث يعيش العديد من النطاقات على جهاز واحد من استخدم عنوان IP واحد لجميع النطاقات التي تستضيفها.

المخدم عبارة عن برنامج بسيط جداً، وهو يتلقى اسم الملف المرسل مع الأمر GET، ثم يبحث عن الملف، يجده ويرسله إلى المتصفح.

إذا جمعت كل الأوامر والتعليمات التي تتعامل مع البوابة وتحقق الاتصال معها، فبإمكانك كتابة برنامج بلغة C يزودك بمخدم ويب بسيط بأقل من 500 سطر أوامر.

تضيف أغلب المخدمات مستويات مختلفة من الأمن والحماية لعملية التخديم التي تقوم بها. مثلاً هناك بعض الصفحات التي يتطلب الدخول إليها وتصفحها امتلاك اسم وكلمة مرور خاصين.فعند طلب هذه الصفحة تظهر أمامك مباشرة صفحة أولى تضم قائمة لطلب الاسم وكلمة المرور. والمخدم هنا يسمح فقط للأشخاص الأعضاء الذين يملكون كلمات مرور صحيحة برؤية هذه الصفحة.

بعض المخدمات الأخرى تقدم مستويات حماية أعلى مثل التشفير والتعمية مما يسمح بإرسال المعلومات الحساسة السرية عبر الإنترنت، مثل رقم بطاقة الائتمان.

ما سبق ينطبق على مخدمات الويب التي تنقل صفحات ثابتة وبسيطة، لا يتغير محتواها إلا بتعديلها من قبل المالك والمصمم.

### مخدمات الأسماء

بسبب صعوبة تذكر سلسلة الأرقام الطويلة التي تعرَف العنوان IP وعدم تآلف الكثير من الناس معها، وبما أن العنوان IP عرضة للتغيير في بعض الأحيان، تمتلك جميع مخدمات الإنترنت أسماء محددة مقروءة تدعى أسماء النطاق domain names مثلاً: www.yahoo.com http:// هو اسم دائم، محدد ومقروء. ومن الواضح أنه مقروء أكثر من سلسلة الأرقام السابقة. يتألف الاسم www.yahoo.com http:// من ثلاثة أجزاء:

1. اسم المضيف: www
2. اسم النطاق: yahoo
3. اسم نطاق المستوى الأعلى com

مخدمات اسم النطاق DNS (domain name servers) هي المسؤولة عن إسناد الأسماء المقروءة للعناوين IP، وهي عبارة عن قاعدة بيانات بسيطة تعمل على إسناد الاسم المناسب للعنوان IP المطلوب، وتنشره على كامل شبكة الإنترنت.

### الصفحات الديناميكية

* أي سجل ضيافة (حساب) Guest Book يسمح لك بإدخال رسالة بتنسيق HTML، وعند عرض هذا السجل ثانية، نجد أن الصفحة تتضمن مدخل الحساب الجديد.
* صفحة Whois في الموقع VeriSign التي تسمح لك بإدخال اسم نطاق ضمنها، والصفحة المشكلة تختلف تبعاً لاسم النطاق المدخل.
* تسمح لك محركات البحث بإدخال كلمة ومن ثم تبدأ بالبحث عنها، وتقوم بتوليد صفحة جديدة لإظهار نتائج البحث.
* في جميع هذه الحالات نجد أن عمل المخدم ليس بسيطاً ولا يقتصر على عرض الصفحة المطلوبة فقط. وإنما يقوم فعلياً بإجراء العديد من العمليات التي تبدأ بتنفيذ طلبات المستثمرين إلى توليد صفحات جديدة تبعاً لهذه الطلبات.
* في معظم هذه الحالات تستخدم مخدمات الويب ما يدعى نصوص واجهات البيانات الحاسوبية CGI script للقيام بهذا العمل.

البنية التفرعية
---------------

في عام 1966 م قام مهندس الإلكترون الأمريكي مايكل ج. فلين بالتمييز بين أربع أشكال للمعالِجات (طريقة تصميم المعالجات لمعالجة المعلومات والتعليمات البرمجية). فالمعلومات يُمكن أن تُرسل لمعالج دفعة واحدة، أو على عدة دفعات. وبشكل مشابه فإن التعليمات يُمكن أن تنجز تعليمة تعليمة، أو عدة تعليمات في المرة الواحدة.

### الحواسيب التسلسلية التي تعمل وفق مبدأ تعليمة واحدة كل مرة، معلومة واحدة كل مرة

(بالإنجليزية: SISD serial instructionstream stream,single data stream)‏ في هذه الحالة جزء واحد من أجزاء المعلومة يُرسل إلى معالج وحيد. فإذا كان لدينا 100 عدد يجب أن تُضربها بالعدد 3، فإن كل عدد من الأعداد المائة يُرسل إلى المعالج ويُضرب بالعدد 3 وثم يُخزن الناتج، وهكذا بالنسبة للعدد التالي في المجموعة، يُرسل ويُحسب حتى نحصل على المائة نتيجة مخزنة.
من التطبيقات المناسبة للشكل SISD، القرارات ذات النتائج المترابطة بشكل معقد. مثل: المعالجات الكلمية (بالإنجليزية: word processing)‏.

### عدة تعليمات كل مرة، معلومة واحدة كل مرة

(بالإنجليزية: A Multiple Instruction stream, Single Data stream MISD)‏ في هذ الحالة يقوم معالج بنسخ دفعة معلومات ويرسلها معلومة معلومة إلى معالجات أخرى، وكل معالج بدوره ينفذ على المعلومة نفسها برنامج تختلف عن المعالج الآخر. على سبيل المثال قد نرسل محتويات بنية معطيات في وقت واحد إلى عدة معالجات، كل معالج سوف يُوجد قيمة في بنية المعطيات، تختلف عن القيمة التي سيوجدها معالج آخر. من المشاكل التي يلائمها الحل بالمعالجة التفرعية MISD أنظمة المعالجة المرئية (وهو أن يأخذ البرنامج الحاسوبي معطياته من صورة رقمية كما في الرجل الآلي).

### -تعليمة واحدة وعدة معلومات A.

(بالإنجليزية:  Single Instruction stream, Multiple Data stream SIMD)‏ بمعنى آخر إجراء نفس التعليمة على معطيات مختلفة (ضرب مائة عدد بالرقم 3 في وقت واحد). وبذلك فإن معالجات SMID تُبرمج بشكل يشابه كثيرًا برمجة معالجات SISD، ولكن العمليات هنا تحدث على مصفوفة من القيم بدلًاُ من قيمة واحدة. ولذلك SIMD تُعرف بما يسمى مصفوفة المعالجات.
هناك العديد من التطبيقات التي تستخدم المعالِجات SIMD، كعمليات تحسين الصور، ومعالجات الرادار لضبط الملاحة الجوية.

### -عمليات مختلفة من أجل كل دفعة من المعلومات

(بالإنجليزية: A Multiple Instruction stream, Multiple Data stream MIMD)‏ هذا الشكل أكثر مرونة، ولكنه في نفس الوقت صعب التحقيق برمجيًا، لأنه يحتاج إلى تعليمات إضافية لتنسيق عمل المعالِجات. ومن الممكن أن يستخدم كبديل عن كل الأنظمة السابقة ولكن بشكل أقل كفاءة.
يستخدم هذا الشكل في بعض برامج الذكاء الصناعي، ودراسة ازدحام المدن.

الربط التفرعي
-------------

من العوامل المحددة لبنية الربط التفرعي كيفية ربط المعالجات مع بعضها البعض. فمن طرق الربط التفرعي جعل المعالجات تتشارك على ذاكرة واحدة، وبذلك ستتصل المعالجات مع بعضها عن طريق قراءة معطيات بعضها البعض. يدعى هذا النوع من الربط التفرعي الذاكرة المشتركة. في هذا النمط من الربط التفرعي، يمكن لأي معالج الولوج إلى معطيات الذاكرة، لذا يجب منع المعالجات المترابطة من أن تكتب سهوًا نتائجها فوق بعضها.

الطريقة الثانية في ربط المعالجات، السماح لها بالتواصل عن طريق رسائل، ترسلها المعالجات إلى بعضها. تُعرف هذه التقنية بتقنية تمرير الرسائل أو تقنية الذاكرة المقسمة، حيث أن المعطيات تُقسم وتُخزن في ذواكر المعالجات المنفصلة. هذه الطريقة في الربط تجعل من الصعب على المعالجات التشارك على المعلومات لأن المعالجات غير موصولة إلى ذاكرة واحدة، ولكنها تعتبر في نفس الوقت طريقة ربط آمنة لأنها تمنع المعالجات من كتابة نتائجها فوق بعضها.

في نظام الذاكرة المشتركة، عندما عدد المعالجات يزداد، يصبح من الصعب الولوج إلى الذاكرة، مما يؤدي إلى حدوث حالة اختناق.

لحل المحدودية في الذاكرة التشاركية، وحل مشكلة فردية الذواكر في نظام الذواكر المنفصلة، تُبنى الذواكر المنفصلة مع دارات تسمح للمعالِجات بدخول ذواكر بعضها البعض. هذه الطريقة المبتكرة تسمى بالذواكر المنفصلة المشتركة، بهذه الطريقة نستطيع التخلص من مشاكل التي واجهتنا في الطريقتين السابقتين.

حاسب الديب بلو
--------------

حاسب ديب بلو (بالإنجليزية: DEEP BLUE)‏: هو حاسوب فائق من إنتاج شركة (بالإنجليزية: IBM)‏ يستخدم تقنية المعالجة التفرعية الشاملة لحل المشاكل.

* تقنية المعالجة المتوازية الشاملة (بالإنجليزية: massively parallel processing technology)‏ (تقنية قادرة على إنجاز 100 عملية في المرة تكفي لحل جميع المشاكل التي نواجهها في الوقت الحاضر).

يستخدم هذا الحاسوب 256 معالاجا لحساب 50 إلى 100 مليار حركة شطرنج خلال ثلاث دقائق.
هناك حواسب تشبه ديب بلو تستخدم لحل التطبيقات الحقيقية في عالمنا مثل: التنبؤ الجوي، أبحاث العقارات والجينات، تحسين مخدمات الشابكة (الإنترنت).

أمثلة عن المعالجات المتزامنة
----------------------------

### المعالجات ثنائية النواة

المعالجات ثنائية النواة(بالإنجليزية: Dual Core)‏: وهو عبارة عن مصطلح يشير إلى شرائح الدارات المتكاملة (بالإنجليزية: IC)‏ التي تحتوي في داخلها على معالجين (نواتين) فيزيائيين كاملين يتوضعان على شريحة سيليكونية واحدة، أو على عدة شرائح سليكونية داخل ال (بالإنجليزية: ICE PACKAGE)‏.
كل نواة فيزيائية تملك مصادرها الخاصة من مسجلات ووحدات تنفيذ..الخ
في المعالج ذو النوى المتعددة، التي تتوضع على نفس الشريحة السليكونية، من ممكن لهذه النوى أن تشترك أو أن لا تشترك بالخابية (Cache).

المعالجات ثنائية النواة يمكن أن تصنع بأحد الأشكال التالية:

* لكل نواة الخافية الخاصة بها.
* النواتان تشتركان بخابية الشريحة.
* تقسم الخابية إلى قسم مخصص في حال عمل المعالج كمعالج وحيد وقسم آخر مشترك بين النواتين.

ونلاحظ أن المعالجات ثنائية النواة لا تستخدم الممر الأمامي (بالإنجليزية: FSB)‏ لتتصل مع بعضها البعض، بل تستخدم الممر الأمامي فقط لتتصل مع النظام الخارجي.

### المعالجة باستخدام تقانة النياسب (المسالك)المتعددة

المعالجة باستخدام تقنية النياسب المتعددة (بالإنجليزية: HYPER-THREADING TECHNOLOGY)‏: طورت شركة إنتل تقنية (بالإنجليزية: HT)‏ وزودت معالجاتها بها، بحيث يصبح بمقدور المعالج وحيد النواة أن ينفذ نيسبين، بشكل متوازي (في نفس الوقت) بدلا من طريقة تبديل السياق بين النياسب(بالإنجليزية: context switching)‏. فجدولة النياسب على نفس النواة الفيزيائية يسمح باستخدام أفضل لمصادر المعالج. يمكن أن نجد أن تقنية ال (بالإنجليزية: HT)‏ في معالجات إنتل (بالإنجليزية: XEON)‏ وبعض معالجات بنتيوم فور (بالإنجليزية: PENTIUM 4)‏.
أضافت هذه التقنية إلى المعالج الفيزيائي الوحيد، دارات وبرمجيات، تمكنه ليبدو وكأنه معالجين منفصلين (كل معالج من هذين المعالجين هو معالج منطقي وليس فيزيائي).

لكل من هذين المعالجين تحكم مقاطعة مبرمج خاص به (بالإنجليزية: Advanced Programmble Interrpt Controllers AIPC)‏ والذي يسمح بإدارة مقاطعات المعالِجات، وتقسيم المقاطعات بين المعالِجات (سواء كانت المقاطعات دينامكية أو ستاتيكية) بشكل منسجم.
الموارد المشتركة في هذه الحالة بين المعالِجات تشمل الكاش والمسجلات ووحدات التنفيذ (بالإنجليزية: Ececution Unites)‏
المعالجات المزودة بتقنية (بالإنجليزية: HT)‏ تحتاج إلى: أنظمة تشغيل تدعم (بالإنجليزية: HT)‏ وبيوس يدعم تقنية (بالإنجليزية: HT)‏.
من الملاحظ أنه يمكننا أن نجد معالج ثنائي النواة، كل نواة تحتوي على تقنية ال (بالإنجليزية: HT)‏ وبذلك المعالج يصبح المرء قادرًا على تشغيل أربع برامج (أو نياسب threads) في نفس الوقت.

التكلفة والأداء: كما أسلفنا بالذكر فإن المعالجات المزودة بتقنية ال (بالإنجليزية: HT)‏ تظهر لنظام التشغيل وكأنها معالجان منطقيان. ولكن من غير المتوقع أن تعمل بكفاءة معالجين فيزيائيين حقيقيين. فمعالجات (بالإنجليزية: HT)‏ تعمل بكفاءة أداء أعلى بحوالي 1.3 - 1.5 مرة من المعالجات التقليدية التي لا تحتوي هذه التقنية. وبذلك نكون قد رفعنا الأداء بحوالي 18 % إلى 30 % في بيئة المعالجات المتعددة المهام (بالإنجليزية: Multi-Tasking)‏ بمساحة أقل من 5 % من مساحة الشريحة السليكونية تأخذها دارات تقنية (بالإنجليزية: HT)‏.

في المعالجات الثنائية نلاحظ ارتفاع الأداء عن المعالجات وحيدة النواة بحوالي 10 % بالنسبة للتطبيقات وحيدة الخيط، وبحوالي 40 % - 80 % للتطبيقات المتعددة الخيوط.

مراجع
-----

1. ↑  Hinton، Geoffrey (2014). *Parallel models of associative memory*. New York: Psychology Press. ISBN:978-1-315-80799-7.
2. ↑  LaBerge، David؛ Samuels، S.Jay (1974). "Toward a theory of automatic information processing in reading". *Cognitive Psychology*. Elsevier BV. ج. 6 ع. 2: 293–323. DOI:10.1016/0010-0285(74)90015-2. ISSN:0010-0285.
3. ↑  Wässle، Heinz (2004). "Parallel processing in the mammalian retina". *Nature Reviews Neuroscience*. ج. 5 ع. 10: 747–757. DOI:10.1038/nrn1497. ISSN:1471-003X.

* أيقونة بوابةبوابة تقانة