WEBVTT 00:00:00.000 --> 00:00:06.615 حسنا ، يوم ربيعي جميل هنا في الجامعة ، سأسجل اليوم 00:00:06.615 --> 00:00:13.230 في حرم جامعة ستانفورد ، حديقة جميلة والجو جميل ، والطلبة شوية وجايين 00:00:13.230 --> 00:00:18.455 موضوع محاضرة اليوم هيكون ما هو السوفتوير ؟ 00:00:18.455 --> 00:00:23.330 ما هو الكود ؟ كيف يتم تنفيذه على الكمبيوتر ؟ 00:00:23.330 --> 00:00:28.584 CPUلما اتكلمنا عن الهاردوير في الكمبيوتر ، اتكلمنا عن ال 00:00:28.584 --> 00:00:33.712 عقل الكمبيوتر ،، الذي يقوم بتنفيذ ما يسمى 00:00:33.712 --> 00:00:38.650 أوامر لفة الآلة 00:00:38.650 --> 00:00:43.968 أوامر لغة الآلة بسيطة جدا ،، الأمر الواحد ممكن يكون اضافة رقمين ،، والأمر اللي بعدة ممكن يكون 00:00:43.968 --> 00:00:48.784 مقارنة بين رقمين لإيجاد الرقم الأكبر ،، كمثال فيما سبق 00:00:48.784 --> 00:00:52.936 لما كنا بنكتب pixel.setRed(10) هذا امر اكثر تعقيدا 00:00:52.936 --> 00:00:57.077 منه لو تم كتابته بلغة الآلة 00:00:57.241 --> 00:01:01.525 لأنه لو تم كتابته بلغة الآلة سيتم كتابته في خمس او عشر أوامر 00:01:01.525 --> 00:01:05.134 بسيطة من اوامر الآلة ،، وعندما يتم تنفيذ هذه الاوامر 00:01:05.134 --> 00:01:09.528 واحدا تلو الأخر ،،، يكون لها تأثير تغيير قيمة اللون الأحمر 00:01:09.528 --> 00:01:13.660 في البيكسل لـ10 ،، تمام ،، وهنتكلم بالتفصيل عن الموضوع ده بعدين 00:01:13.817 --> 00:01:19.388 كيف يتم ذلك التفصيل للأمر ،، أعتقد ان السؤال المناسب الأن هو 00:01:19.388 --> 00:01:24.744 ما هو البرنامج ؟ ،، لنلقي نظرة على الجانب الأيمن من هذا الرسم 00:01:24.744 --> 00:01:29.447 فالبرنامج هو - وسأستخدم فايرفوكس كمثال 00:01:29.630 --> 00:01:34.760 البرنامج يتكون من مجموعة هائلة من الأوامر البسيطة مكتوبة بلغة الآلة ، 00:01:34.760 --> 00:01:39.523 ولذلك عندما يتم تشغيل الفايرفوكس على جهازك 00:01:39.523 --> 00:01:44.104 هذا يعني انها في مكان ما في الذاكرة RAM هناك مجموعة من الأوامر 00:01:44.287 --> 00:01:48.928 وعندما يتم تنفيذ هذه الأوامر فإن الفايفوكس يفعل ما يفعل 00:01:48.928 --> 00:01:53.753 مثل حركة مؤشر الكتابة ،، نسخ الروابط ،، الرسم فتح صفحات الويب ،وكل هذه الأشياء 00:01:53.936 --> 00:01:58.476 الأوامر المنفردة تكون بسيطة جدا اضافة رقمين مثلا 00:01:58.476 --> 00:02:02.532 فكيف يتم من هذه الاوامر البسيطة تنفيذ شئ كبير كحركة مؤشر الكتابة مثلا ؟ 00:02:02.532 --> 00:02:06.015 ويمكنني ان اقول ان العلاقة بينهما كالعلاقة بين الرمل والتمثال 00:02:06.015 --> 00:02:09.975 وهذا معناه ان الأمر الواحد مثل حبة الرمل أي ان الأمر وحده لا معنى له وليس له تأثير 00:02:09.975 --> 00:02:13.983 ومثله مثل كل حبات الرمل الأخرى ولكن عند وضعهم مع بعضهم بالشكل الصحيح 00:02:13.983 --> 00:02:17.466 تستطيع ان تبني تمثال معقد وبهذه الطريقة تم بناء فايرفوكس 00:02:17.466 --> 00:02:21.685 عن طريق هذه الأوامر البسيطة على هذا الأساس فإنه يعمل 00:02:21.685 --> 00:02:25.838 CPUعن طريق ال هنا على الجانب الأيسر يتم تنفيذ ما يسمى Fetch Execute cycle 00:02:25.838 --> 00:02:30.144 CPUهذا معناه ان ال هتبدأ من هنا مع الأمر الأول 00:02:30.144 --> 00:02:34.095 وهتحمل الأمر ده وتنفذه 00:02:34.095 --> 00:02:37.691 وهذا الأمر يقوم بجمع رقمين أو أي شئ آخر يقوله الأمر 00:02:37.691 --> 00:02:41.642 وعندما ينتهي من تنفيذ الأمر الأول ينتقل للأمر الثاني في قائمة الأوامر 00:02:41.642 --> 00:02:45.843 وينفذ هذا الأمر 00:02:45.843 --> 00:02:50.495 يقوم بتنفيذ الأوامر في نفس التسلسل 00:02:50.495 --> 00:02:55.146 CPUولذلك عندما نقول ان ال تعمل بسرعة 2جيجاهرتز هذا معناه انها تستطيع ان تنفذ 2مليار عمليه في الثانية 00:02:55.146 --> 00:03:00.109 من هذه الاوامر الصغيرة وهذه معناه ان هناك مجموعة كبيرة من الأوامر 00:03:00.109 --> 00:03:05.203 ولكني سأركز على مجموعة من الأنواع الخاصة للأوامر 00:03:05.203 --> 00:03:10.483 كمثال / الأمر الذي يمكنه تغيير ترتيب الأوامر 00:03:10.483 --> 00:03:15.267 CPUطبيعي ان ال تقوم بتنفيذ العمليات بالترتيب من اعلى الى اسفل 00:03:15.267 --> 00:03:20.361 ولكن دعنا نقول ان الامر الرابع يقول ارجع للأمر الأول ونفذه مرة أخرى 00:03:20.361 --> 00:03:24.304 CPUتخيل ماذا سوف تفعل ال ستقوم بتنفيذ الأمر الأول 00:03:24.304 --> 00:03:27.856 ثم الثاني ثم الثالث ثم الرابع ثم بعد ذلك ستقوم بتنفيذ الأمر الأول 00:03:27.856 --> 00:03:31.740 ثم الثاني ثم الثالث مرة أخرى ثم الثاني ثم الثالث مرة أخرى 00:03:31.740 --> 00:03:35.008 يمكنك ان ترى كم عدد المرات التي سوف يتم تنفيذ فيها هذه الاوامر 00:03:35.008 --> 00:03:38.797 فقط يمكنك ترتيب الاوامر بطريقة تمكنك من تنفيذ جزء من الكود 500.000 مرة 00:03:38.797 --> 00:03:42.728 يمكنك كتابة أمر يرجع ينفذ اوامر اخرى مرة بعد مرة 00:03:42.728 --> 00:03:47.408 نوع اخر من الاوامر 00:03:47.408 --> 00:03:53.235 امر يمكنه عمل اختبار وعلى اساسه يتخذ قرار 00:03:53.235 --> 00:03:58.847 من الممكن ان يتفادى الامر الخامس هنا 00:03:58.847 --> 00:04:02.316 وده يوضح معنى جملة if عندك امر يمكنه التحقق من شرط معين 00:04:02.316 --> 00:04:05.654 CPUواذا تحقق الشرط يخبر ال لتنتقل إلى هنا 00:04:05.654 --> 00:04:08.991 واذا لم يتحقق الشرط سوف تنتقل الى مكان اخر في الكود 00:04:09.123 --> 00:04:12.856 لذلك بترتيب الاوامر بطريقة معينة يمكننا الحصول على تأثير 00:04:12.856 --> 00:04:18.904 if ما نقول عليه جملة 00:04:18.904 --> 00:04:24.053 دعنا نرى كيف يتم تنفيذ البرنامج وكيف نصل لهذا 00:04:24.053 --> 00:04:28.828 دعنا نتخيل انك عندك فايرفوكس على فلاشة 00:04:28.828 --> 00:04:33.435 او على الهارد 00:04:33.435 --> 00:04:37.814 وهنا الرامات وهنا ال CPU 00:04:37.814 --> 00:04:42.184 فعندما يكون عندك الفايرفوكس على الهارد اللي هو الفايل 00:04:42.184 --> 00:04:46.429 وهنا دعنا نسميه firefox.exe 00:04:46.429 --> 00:04:50.674 هذا فقط شكل البرنامج في ويندوز .exe لكي يحافظ على كل شئ بوضوح 00:04:50.674 --> 00:04:55.485 الفايل ده firefox.exe يحتوي على العديد من ال bytes بداخله 00:04:55.485 --> 00:04:59.334 Bytesوغالبا هذه ال تكون مجموعة الأوامر التي يتكون منها البرنامج 00:04:59.334 --> 00:05:03.717 بالاضافة الى مجموعة من الايكونات واشياء اخرى 00:05:03.717 --> 00:05:08.163 دعنا نرى ماذا يحدث بعدما نضغط مرتين على Firefox.exe كيف يتم تشغيله ؟ 00:05:08.163 --> 00:05:12.951 واساسا ما يحدث هو خطوتين اول خطوة بتحصل هي 00:05:12.951 --> 00:05:17.512 مجموعة البايتس من الاوامر التي تكفي تقريبا للتشغيل 00:05:17.512 --> 00:05:22.186 يتم نسخها الى الرام ، فإنه فقط يتم نسخها يتم وضعها في الرام 00:05:22.186 --> 00:05:26.119 CPUحيث تستطيع ال CPUالوصول اليهم ،، ثم الخطوة الثانية تبدأ ال 00:05:26.119 --> 00:05:30.622 في تنفيذ الأمر الأول ، يتم التنفيذ هنا ثم تبدأ في تنفيذ الأمر الذي يليه 00:05:30.622 --> 00:05:35.257 في سلسلة الاوامر والآن يتم تشغيل الفايرفوكس 00:05:35.257 --> 00:05:40.191 هذا يقودنا الى سؤال الا وهو: من يقوم بفعل ذلك بالطريقة الصحيحة؟ من يقوم بتنفيذ كل ذلك بمجرد الضغط مرتين على الفايل؟ 00:05:40.191 --> 00:05:45.336 من يقوم بتشغيل الفايرفوكس؟ من يقوم بذلك في الحقيقة هو نظام التشغيل Operating System 00:05:45.336 --> 00:05:50.731 نظام التشغيل هو مجموعة البرامج الاشرافيه المنظمة 00:05:50.731 --> 00:05:56.718 والتي تتعامل مع النظام بالكامل وتنظم التعامل بداخله 00:05:56.940 --> 00:06:01.274 نظام التشغيل تحديدا ينظم البرامج المتعددة 00:06:01.274 --> 00:06:06.059 وتشغيل وغلق البرامج ، حيث ان الاجهزة الحديثة يمكنها تشغيل برامج متعددة في نفس الوقت 00:06:06.059 --> 00:06:10.732 ونظام التشغيل هو من ينظم ذلك 00:06:10.732 --> 00:06:15.066 حيث انه يبدأ البرنامج ويعطي جزأ منه للرام لاستخدامه 00:06:15.066 --> 00:06:19.126 ربما يعطيه نافذة ليرسمها وكذلك أنظمة التشغيل تحاول عزل البرامج عن بعضها 00:06:19.126 --> 00:06:22.864 حيث يكون لكل برنامج الرام الخاصة به حيث لا يمكن العبث بـ ذاكرة برنامج أخر 00:06:22.864 --> 00:06:26.602 وهذا يساعد اذا كان البرنامج يحتوى على خطأ Bug 00:06:26.602 --> 00:06:30.479 سيكون الخطأ في هذا البرنامج فقط ولن يظهر في برامج أخرى يتم تشغيلها في نفس التوقيت 00:06:30.479 --> 00:06:34.310 أو من الممكن ان البرنامج يحاول فعل شئ خطأ في برنامج آخر 00:06:34.448 --> 00:06:38.080 نظام التشغيل يحاول فصل كل منهما عن اللآخر وعلى ذلك فإن نظام التشغيل 00:06:38.080 --> 00:06:42.099 هو أول شئ يتم تنفيذه على جهازك عند تشغيله 00:06:42.099 --> 00:06:45.754 وهو من يظهر هذه النوافذ امامك ويظهرلك محتويات الهارد بتاعك 00:06:45.754 --> 00:06:49.454 ومن هنا يمكنك الضغط مرتين او فعل اي شئ آخر 00:06:49.454 --> 00:06:52.742 ونظام التشغيل سوف يشغل هذه البرامج لك وهذا في الحقيقة ما تراه 00:06:52.742 --> 00:06:56.292 عندما تقوم بتشغيل جهازك المحمول او الكاميرا الرقمية ربما لا تفكر بها ككمبيوتر 00:06:56.292 --> 00:06:59.297 ولكنها في الحقيقة كمبيوتر عندما يتم تشغيل الكاميرا لأول مرة 00:06:59.297 --> 00:07:02.582 هناك تقريبا عدد من البرامج ربما البرنامج 00:07:02.582 --> 00:07:05.707 الذي يأخذ الصور ، والبرنامج الذي يمكنك من تصفح الصور بعد تصويرها 00:07:05.707 --> 00:07:08.792 ولذلك عندما يتم تشغيل الكاميرا لأول مرة هناك بعض البرامج الرئيسية 00:07:08.792 --> 00:07:11.917 والتي يتم تشغيلها والتي تراها عندما تشغل الكاميرا 00:07:11.917 --> 00:07:17.467 وتمكنك من استخدامها أخر شئ 00:07:17.467 --> 00:07:21.344 هناك بعض المصطلحات مثل boot, reboot 00:07:21.344 --> 00:07:25.077 طول عمري بفكر فيهم بشكل مضحك منين جت التسمية دي بقى 00:07:25.077 --> 00:07:28.906 الحقيقة تسميتهم ترجع لموضوع بيضة الفرخة حيث ان الكمبيوتر عندما يتم تشغيله لأول مرة 00:07:28.906 --> 00:07:31.985 كيف ينظم نفسه ؟؟ 00:07:31.985 --> 00:07:36.058 كيف يمكنه تشغيل برنامج ؟ وهذا المصطلح في الحقيقة نكتة قديمة 00:07:36.058 --> 00:07:40.150 والنكتة بتقول: لو انت عايز تنط من فوق سور كل اللي محتاج تعمله انك تقلع البووووت بتاعك 00:07:40.150 --> 00:07:44.138 وترميه على السور وبعدين تتشعبط فيه وتنط السور ههههههههههه 00:07:44.138 --> 00:07:48.336 طبعا واضح انها قصة سخيفة ولكنها مثل 00:07:48.336 --> 00:07:52.271 ماهو البرنامج المفروض يبدأ به الكمبيوتر ليتمكن من تشغيل البرامج 00:07:52.271 --> 00:07:57.257 فإنه كقصة البيضه والفرخة ولذلك فإن طريقة التشغيل هي 00:07:57.257 --> 00:08:02.416 CPUال عندما ترى انها تم غلقها 00:08:02.416 --> 00:08:07.898 وانها لابد ان يتم تشغيلها مرة اخرى وان هناك برامج صغيره 00:08:07.898 --> 00:08:13.203 والتي يحتوي عليها الكمبيوتر لتشغيله في هذه اللحظة ،، وهذا البرنامج من الممكن 00:08:13.203 --> 00:08:17.551 ان يبحث اي جزء من الهاردوير يقوم بتشغيل بعض البرامج البدائية 00:08:17.551 --> 00:08:22.237 ثم يقوم بالبحث عن الهارد او فلاشة او 00:08:22.237 --> 00:08:26.584 او اي شئ يحتوى على نظام تشغيل ثم يمكنه تشغيل هذا النظام 00:08:26.584 --> 00:08:31.157 ثم الكمبيوتر يتمكن من التشغيل بهذه الطريقة ولذلك 00:08:31.157 --> 00:08:35.900 هذه العمليه تسمى بوووووت boot up والتي ترجع هذه التسمية الى قصة البوت القديمة 00:08:35.900 --> 00:08:40.473 ومن ثم تأتي كلمة rebooting والتي تعني اننا نريد الحصول على حالة جديدة 00:08:40.473 --> 00:08:44.320 حيث انه يقوم بغلق النظام والبداية من جديد والآن انت تعلم ذلك