موقف من الحياة اليومية#
فكّر في حاجتين بتقابلهم كل يوم:
نور السلم: فيه زرار تحت وزرار فوق. لو ضغطت أي واحد فيهم، النور حالته بتتقلب: لو كان مطفي يولّع، ولو والع يطفي.
عربية بتتحرك بشرطين: تخيّل عربية ما بتدورش غير لو المفتاح في الكونتاكت و رجلك على الفرامل في نفس الوقت. شرط واحد مش كفاية، لازم الاتنين.
في الحالتين فيه منطق: «لو كذا و كذا»، أو «لو كذا أو كذا». والكمبيوتر كله، من أول الآلة الحاسبة لحد أكبر سيرفر في العالم، مبني على منطق بسيط زي ده بالظبط، بس متكرر مليارات المرات.
خلاصة سريعة#
- الجبر البولياني (Boolean Algebra · الجبر البوليانيفرع من الرياضيات يتعامل مع قيمتين فقط هما 1 و0 (صح وخطأ)، وعمليات عليهما مثل AND وOR وNOT، وعليه تقوم دوائر الحاسوب.عرض في القاموس) بيتعامل مع قيمتين بس: 1 و0، يعني صح وغلط، أو شغال ومطفي.
- البوابة المنطقية (Logic Gate · البوابة المنطقيةجهاز فعلي ينفّذ دالة منطقية، فيستقبل مدخلات من 1 و0 ويخرج نتيجة من 1 و0، ومعظم البوابات اليوم ترانزستورات محفورة في شرائح السيليكون.عرض في القاموس) جهاز صغير حقيقي بياخد مدخلات من 1 و0 ويطلّع نتيجة، وأشهرها AND وOR وNOT.
- بوابة NAND لوحدها تقدر تبني أي بوابة تانية، يعني نظريًا ممكن تبني الكمبيوتر كله منها.
ببساطة#
تخيّل مفاتيح نور صغيرة جدًا:
- AND (و): مفتاحين ورا بعض على نفس السلك. النور ما بيولّعش غير لو الاتنين مفتوحين.
- OR (أو): مفتاحين جنب بعض، كل واحد ليه طريق للنور. النور بيولّع لو أي واحد فيهم مفتوح، أو الاتنين.
- NOT (لا): مفتاح «بالعكس»: لما تضغطه النور يطفي، ولما تسيبه يولّع.
بالتلات أفكار البسيطة دي، ومليارات المفاتيح الصغيرة اللي اسمها ترانزستورات، الكمبيوتر بيجمع ويقارن ويقرر.
بالتفصيل#
الجبر البولياني: رياضة بقيمتين بس#
حسب كتاب «The Elements of Computing Systems» (من مقرر Nand2Tetris)، الجبر البولياني بيتعامل مع قيم ثنائية، بنكتبها غالبًا 1 و0، وممكن نسميها صح/غلط أو آه/لأ أو شغال/مطفي.
والدالة البوليانية دالة بتاخد مدخلات ثنائية وبتطلّع نتيجة ثنائية. ولأن هاردوير الكمبيوتر كله مبني على النظام الثنائي، الدوال دي هي أول خطوة في بناء أي معالج.
جدول الحقيقة#
حسب نفس الكتاب، أبسط طريقة تشرح بيها أي دالة بوليانية إنك تكتب كل الاحتمالات الممكنة للمدخلات، وقصاد كل احتمال النتيجة. ده اسمه جدول الحقيقة (Truth Table · جدول الحقيقةجدول يعرض كل الاحتمالات الممكنة لمدخلات دالة منطقية، وأمام كل احتمال النتيجة التي تخرجها الدالة.عرض في القاموس).
لو عندك مدخلين، يبقى فيه 4 احتمالات: 00، 01، 10، 11. وده نفس اللي شفناه في مقال النظام الثنائي: كل مدخل بيضاعف عدد الاحتمالات.
العمليات الأساسية التلاتة#
حسب كتاب Nand2Tetris:
AND (و): النتيجة 1 لما المدخلين الاتنين يكونوا 1.
| A | B | A AND B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
OR (أو): النتيجة 1 لما واحد على الأقل من المدخلين يكون 1.
| A | B | A OR B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
NOT (لا): بتاخد مدخل واحد بس، وبتعكسه: الـ 1 يبقى 0، والـ 0 يبقى 1.
| A | NOT A |
|---|---|
| 0 | 1 |
| 1 | 0 |
بوابات تانية مشهورة#
حسب كتاب Nand2Tetris:
- XOR (اختصار Exclusive OR، يعني «أو» الحصرية): النتيجة 1 لما المدخلين مختلفين عن بعض، و0 لما يكونوا زي بعض. ودي بالظبط فكرة نور السلم اللي في أول المقال: أي زرار يتقلب، النور يتقلب.
- NAND (يعني Not-AND): عكس AND. النتيجة 0 بس لما الاتنين 1.
- NOR (يعني Not-OR): عكس OR. النتيجة 1 بس لما الاتنين 0.
| A | B | XOR | NAND | NOR |
|---|---|---|---|---|
| 0 | 0 | 0 | 1 | 1 |
| 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 0 | 0 | 0 |
من الفكرة للجهاز: البوابة المنطقية#
الجبر البولياني كلام على ورق. طب إزاي بيتحول لجهاز؟
حسب كتاب Nand2Tetris، البوابة المنطقية هي جهاز فعلي بينفّذ دالة بوليانية: ليها أطراف للمدخلات وأطراف للخرج. وأبسط البوابات معمولة من مفاتيح صغيرة جدًا اسمها ترانزستورات (Transistor · الترانزستورمفتاح إلكتروني صغير جدًا يمرر الكهرباء أو يمنعها، وتُبنى منه البوابات المنطقية.عرض في القاموس)، متوصلة ببعض بطريقة معيّنة.
والكتاب بيذكر إن الباحثين بنوا بوابات بطرق كتير جدًا: مغناطيسية، وضوئية، وحتى بيولوجية وهيدروليكية. لكن النهارده أغلب البوابات ترانزستورات محفورة في السيليكون، ومتجمعة في شرائح (Chips).
ومن البوابات بنبني حاجات أكبر: البوابات البسيطة بتتوصّل ببعض علشان تعمل بوابات أعقد، وهكذا لحد ما نوصل لحاجات زي وحدة الحساب والمنطق (ALU (Arithmetic Logic Unit) · وحدة الحساب والمنطقجزء داخل المعالج ينفّذ العمليات الحسابية والمنطقية الأساسية، مثل جمع رقمين أو المقارنة بينهما.عرض في القاموس) اللي شرحناها في مقال المعالج.
NAND: البوابة اللي تكفي لكل حاجة#
دي من أغرب وأهم المعلومات في المجال ده. حسب كتاب Nand2Tetris، بوابة NAND (NAND (Not-And) · بوابة NANDبوابة منطقية نتيجتها عكس نتيجة AND، فتخرج 0 فقط عندما يكون المدخلان 1. ويمكن بناء أي دالة منطقية باستخدام بوابات NAND وحدها.عرض في القاموس) ليها خاصية مميزة: تقدر تبني منها AND وOR وNOT من غير أي بوابة تانية.
ولأن أي دالة بوليانية ممكن تتبني من AND وOR وNOT، يبقى أي دالة بوليانية ممكن تتبني من NAND لوحدها.
ليه ده مهم؟ لأن الكتاب بيقول إنك لو عندك جهاز فعلي بينفّذ NAND، تقدر تستخدم نسخ كتير منه، متوصلة بطريقة معيّنة، علشان تنفّذ أي دالة بوليانية في الهاردوير. وكتاب Nand2Tetris نفسه قائم على الفكرة دي: بيبدأ من NAND، ويبني منها خطوة خطوة لحد كمبيوتر كامل.
مثال من الكتاب: تقدر تعمل OR من NAND بالشكل ده:
x OR y = (x NAND x) NAND (y NAND y)
كام دالة ممكنة؟#
حسب كتاب Nand2Tetris، لو عندك متغيرين، فيه 16 دالة بوليانية ممكنة بالظبط، ومنهم AND وOR وXOR وNAND وNOR وغيرهم. ليه 16؟ لأن جدول الحقيقة فيه 4 سطور، وكل سطر نتيجته ممكن تكون 0 أو 1، يعني 2 × 2 × 2 × 2 = 16 شكل مختلف للعمود الأخير.
منين جت الفكرة دي؟#
- عالم الرياضيات الإنجليزي George Boole نشر كتابه «An Investigation of the Laws of Thought» سنة 1854، وفيه حط أسس الجبر اللي اتسمى باسمه بعد كده.
- وبعدها بحوالي 80 سنة، Claude Shannon ربط الجبر البولياني بدوائر المفاتيح الكهربائية في رسالة الماجستير بتاعته في MIT، واتنشر بحث منها سنة 1938. ومن هنا بقى ممكن نصمم دوائر الكمبيوتر بالمعادلات.
للمتعمقين
XOR من AND وOR وNOT
حسب كتاب Nand2Tetris، بوابة XOR ممكن تتبني من البوابات الأساسية بالشكل ده:
XOR(a, b) = OR(AND(a, NOT(b)), AND(NOT(a), b))
يعني: «a صح وb غلط» أو «a غلط وb صح». وده بالظبط معنى «مختلفين».
الجبر البولياني بيفصل الفكرة عن الجهاز
الكتاب بيوضح نقطة مهمة: لأن الجبر البولياني بيوصف سلوك أي تقنية مفاتيح، سواء كهربائية أو ضوئية أو غيرها، علماء الكمبيوتر يقدروا يصمموا بالمنطق نفسه من غير ما يقلقوا من تفاصيل الكهرباء، ويسيبوا التنفيذ الفعلي لمهندسي الإلكترونيات والفيزيا. وده نفس مبدأ الطبقات اللي بنشوفه في كل حتة في الكمبيوتر.
جرّب العمليات المنطقية على Linux
الطرفية في Linux (Bash) بتعرف تعمل العمليات دي على الأرقام. حسب توثيق GNU Bash، & معناها AND، و| معناها OR، و^ معناها XOR، والعملية بتتعمل على كل بت لوحده (Bitwise):
echo $(( 1 & 0 )) $(( 1 | 0 )) $(( 1 ^ 1 ))0 1 0
وعلى أرقام أكبر، العملية بتتعمل على كل بت لوحده. مثلًا 6 بالثنائي 110 و3 بالثنائي 011:
echo $(( 6 & 3 )) $(( 6 | 3 )) $(( 6 ^ 3 ))2 7 5
يعني 110 AND 011 = 010 (وده 2)، و110 OR 011 = 111 (وده 7)، و110 XOR 011 = 101 (وده 5). جرّبنا الأمرين دول فعليًا على Fedora Linux.
أخطاء شائعة#
- «OR معناها واحد بس من الاتنين»: غلط. OR بتطلّع 1 حتى لو الاتنين 1. اللي بتطلّع 1 لما واحد بس يكون 1 اسمها XOR.
- «البوابات المنطقية حاجة نظرية على الورق»: غلط. البوابات أجهزة حقيقية، وأغلبها النهارده ترانزستورات في شرائح السيليكون.
- «الكمبيوتر محتاج أنواع كتير جدًا من البوابات»: نظريًا لأ. NAND لوحدها تكفي لبناء أي دالة.
- «NOT بتاخد مدخلين زي باقي البوابات»: غلط. NOT بتاخد مدخل واحد بس وبتعكسه.
المصطلحات#
- الجبر البولياني (Boolean Algebra · الجبر البوليانيفرع من الرياضيات يتعامل مع قيمتين فقط هما 1 و0 (صح وخطأ)، وعمليات عليهما مثل AND وOR وNOT، وعليه تقوم دوائر الحاسوب.عرض في القاموس): رياضيات تتعامل مع القيمتين 1 و0 وعمليات مثل AND وOR وNOT.
- جدول الحقيقة (Truth Table · جدول الحقيقةجدول يعرض كل الاحتمالات الممكنة لمدخلات دالة منطقية، وأمام كل احتمال النتيجة التي تخرجها الدالة.عرض في القاموس): جدول بكل احتمالات المدخلات ونتيجة الدالة لكل احتمال.
- البوابة المنطقية (Logic Gate · البوابة المنطقيةجهاز فعلي ينفّذ دالة منطقية، فيستقبل مدخلات من 1 و0 ويخرج نتيجة من 1 و0، ومعظم البوابات اليوم ترانزستورات محفورة في شرائح السيليكون.عرض في القاموس): جهاز فعلي ينفّذ دالة منطقية.
- الترانزستور (Transistor · الترانزستورمفتاح إلكتروني صغير جدًا يمرر الكهرباء أو يمنعها، وتُبنى منه البوابات المنطقية.عرض في القاموس): مفتاح إلكتروني صغير تُبنى منه البوابات.
- بوابة NAND (NAND (Not-And) · بوابة NANDبوابة منطقية نتيجتها عكس نتيجة AND، فتخرج 0 فقط عندما يكون المدخلان 1. ويمكن بناء أي دالة منطقية باستخدام بوابات NAND وحدها.عرض في القاموس): عكس AND، ويمكن بناء أي دالة منطقية منها وحدها.
- وحدة الحساب والمنطق (ALU (Arithmetic Logic Unit) · وحدة الحساب والمنطقجزء داخل المعالج ينفّذ العمليات الحسابية والمنطقية الأساسية، مثل جمع رقمين أو المقارنة بينهما.عرض في القاموس): جزء المعالج المبني من بوابات منطقية لإجراء العمليات الحسابية والمنطقية.
- النظام الثنائي (Binary (Base-2) · النظام الثنائينظام عدّ يستخدم رقمين فقط هما 0 و1، وكل خانة فيه تساوي ضعف الخانة التي على يمينها. وهو النظام الذي يخزّن به الحاسوب البيانات.عرض في القاموس): نظام العد بالرقمين 0 و1 الذي تعمل به البوابات.
اختبر نفسك#
بوابة AND مدخلاتها 1 و0. النتيجة كام؟
إظهار الإجابة
0. بوابة AND بتطلّع 1 بس لما المدخلين الاتنين يكونوا 1.
أنهي بوابة بتطلّع 1 لما المدخلين يكونوا مختلفين بس؟
إظهار الإجابة
XOR. بتطلّع 1 لما واحد 1 والتاني 0، وبتطلّع 0 لما يكونوا زي بعض. وده نفس سلوك نور السلم بزرارين.
ليه بوابة NAND مهمة جدًا رغم إنها بسيطة؟
إظهار الإجابة
لأنها لوحدها تكفي لبناء أي دالة منطقية. منها تقدر تعمل AND وOR وNOT، ومنهم تقدر تعمل أي حاجة تانية، فنظريًا ممكن تبني كمبيوتر كامل من NAND بس.