جزء من مليار من المتر (1 مقسوم على 1000مليون)..
سؤال اجابته تدرس في عدة مناهج دراسية كاملة, ساحاول ان اكتب فيه لاحقا ان شاء الله..
الاسلاك و الوصلات الكثيرة التي تربط بين اجزاء اللوحة الام المختلفة تكون طويلة جدا اذا ما قارنناها بالمسافات التي تربط اجزاء المعالج ببعض, و يكفي انك لو نظرت الى اللوحة الام, بتقدر تشوف الوصلات دي, الفكرة بقا انهم بيواجهوا صعوبات في نقل البيانات عن طريق هذه الوصلات الطويلة لانه مع الترددات المرتفعة, تتحول نسبة من الاشارات الكهربية الى مجالات مغناطيسية حول هذه الاسلاك, و دي نقطة خطيرة جدا لانه كل ما زاد التردد كل ما زاد التحول الى مجال مغناطيسي خارج من هذه الاسلاك, و بالتالي اي اشارات كهربية (بيانات) مرسلة من و الى اي جزء من اجزاء اللوحة الام, سيُفقَد جزء منها و يتحول الى مجال مغناطيسي يُرسل في الهواء, لذلك في هذه الحالة (الترددات المرتفعة), الاسلاك تتحول الى Antenna !!
معمارية
المعالج هي هاردوير بحت, و لكن ليكون تعامل المبرمجين مع المعالج اسهل, فيعطي مصنعين المعالج بعض الاكواد او الرموز التي ترمز الى عملية حسابية او منطقية داخل المعالج, و هذه الرموز او الاكواد تكون مخزنة داخل المعالج في ذاكرة دائمة او ROM + يوجد وحدة داخل المعالج تسمى Instruction Decoderو وظيفتها ترجمة هذه الرموز الى عمليات تقوم بها ال ALU او ال Arithmetic & Logic Unit داخل المعالج..
عشان كدا على سبيل المثال, لو المبرمج كتب الامر ADD, ازاي ال ALU هيفهم انه المفروض يعمل عملية جمع؟ هي بالطريقة اللي ذكرتها, انه كلمة ADD ترسل الى ال Instruction Decoder و بعدها ال ID يقوم بالنظر في القاموس (الذاكرة الدائمة التي تم ذكرها سابقا) الذي يحتوي على معنى هذه الرموز, و بعد ذلك يرسل امر الجمع الى ال ALU ..
دول سؤالين في واحد, و هحاول ابسط اجابتهم على قد ما اقدر:
اختيار المصممين لطريقة تصميم الكاش داخل المعالج يعتمد و بالدرجة الاولى على طريقة عمل المعالج نفسه, او معمارية المعالج, و بالتالي تصميم الكاش يكون بالطريقة التي تناسب هذه المعمارية, لذلك هتلاقي مثلا تصميم كاشات معالجات انتل مختلف عن معالجات AMD عشان اختلاف معمارية المعالجات..
الجزء الثاني من السؤال و الأهم هو, ليه بيصمموا كذا مستوى من مستويات الكاش, L1 و L2 و L3 ؟
عشان نجاوب على السؤال دا لازم الاول نعرف
وظيفة الكاش, و الكاش ببساطة مثل المخزن الذي توضع فيه البيانات و الاوامر التي عليها الدور في التنفيذ, بدل ما المعالج لسا هيجيب البيانات من الرامات, بنوفر في الوقت و نخليه يجيبها من الكاشات اللي هي اقرب بكتير جدا للانوية من الرامات و بالتالي زمن التاخير او ال Latency هتكون اقل بكتير, و الكاشات باستمرار بتتعامل مع الرامات و بتجيب منها البيانات اللي
متوقع انه البروسيسور محتاجها و خلي بالك من جملة "متوقع البروسيسور محتاجها" لانه دا فعلا اللي بيحصل,على سبيل المثال:
انت و انا رحنا مكتبة عامة, و قدامنا مجموعة كبيرة من الكتب و فرضا انها مرقمة, رحت انت قايللي انا محتاج الكتاب رقم واحد, رحت و جبتهولك, و بعدها طلبت الكتاب رقم ثلاثة, رحت و جبتهولك, و بعدها طلبت الكتاب رقم خمسة, رحت و جبتهولك, و بعدها طلبت رقم 7, المرة دي بقا رحت و جبتلك الكتابين رقم 7 و رقم 9
, لاني متوقع منك تقللي هات الكتاب رقم 9 بعد 7 على اساس انك ماشي على الارقام الفردية, و بالتالي لما انت (البروسيسور) تحتاج الكتاب رقم 9, هتلاقيه عندي على طول و مش هتضطر تستنا لما اروح اجيبهولك من مكانه..
في الحكاية السيطة دي انت كنت بتمثل البروسيسور, و انا كنت بمثل حاجتين, اول حاجة الكاشات, لاني كنت ماسك الكتابين في ايدي و ممكن امسك اكتر و بالتالي دا يناظر تخزين البيانات داخل الكاشات, تاني حاجة بقا و المهمة جدا توقعي للكتاب القادم, و دا يناظره ال BPU و ال Branch Prediction Unit و دي الوحدة المسئولة عن "توقع" مجموعة البيانات القادمة التي سيحتاجها المعالج بعد تنفيذ الاوامر الحالية..
طيب, دلوقتي في احتمالين ممكن يحصلوا لما تخلص انت الكتاب رقم 7, اول احتمال انك هتطلب مني الكتاب رقم 9 فعلا, و ساعتها هديهولك على طول, و بكدا ابقا وفرت الوقت, دي بقا بنسميها Cache Hit يعني البروسيسور وجد البيانات اللي هو محتاجها على طول مباشرة في الكاش..
و الاحتمال التاني طبعا انك هتقللي هات الكتاب رقم 8 مثلا, ساعتها بقا هروح المشوار دا تاني اجيبلك رقم 8 و بالتالي توقعي مكنش في محله و دا بنسميه Cache Miss, يعني البروسيسور ملقاش اللي هو عايزه في الكاش و بالتالي اتضطر يستنى شوية على ما تيجي البيانات اللي هو محتاجها من الرامات..
طيب ايه علاقة الكلام دا بمستويات الكاش؟!
شوف يا سيدي, دلوقتي احنا عندنا متغيرين (هما اكثر, بس للتبسيط الذي لا يخل بالمعنى), اولهم ال Latency او زمن التاخير و دا عايز اقللها على قد ما اقدر, و تاني متغير هو ال Cache Hit/Miss و دا احنا نتمنى انه دايما يكون Hit..
تعالى نتخيل انا و انت تاني
بس المرة دي اتفقنا على تصميم مستوى واحد كبير من الكاش, لازم طبعا نعرف المتغيرين اللي عندنا هتكون اخبارهم ايه عشان نقدر نوصل لافضل تصميم ممكن..
طيب, لما الكاش تكون كبيرة, بالتالي هقدر اخزن فيها بيانات اكثر, او بالاصح اقدر اخزن بيانات "متوقعة" اكثر, يعني في المثال بتاعنا و احنا في المكتبة, ساعتها لما تطلب انت الكتاب رقم 7, هقدر اشيل معايا رقم 7 و 8 و 9 مثلا عشان اكون ضامن انه طلبك القادم هيكون واحد منهم, و بالتالي كدا نقطة ال Cache Hit/Miss بقت افضل (هناك عوامل اخرى تتحكم في دقة ال BPU لم اتطرق اليها الآن)
طيب تعالى نشوف ايه اخبار تاني متغير و هو ال Latency, طالما الكاش كبيرة يبقا الزمن اللي الكاش محتاجاه عشان تدور على الامر جواها و تديه للبروسيسور هيكون كبير نسبيا, و دا انا مش عايزه..
فعشان يتغلبوا على النقط دي, قسموا الكاش الى عدة مستويات, اسرعها و اقربها لنواة المعالج هي ال L1 او ال Level 1 Cache و دا اول مستوى بيدور فيه البروسيسور, لو ملقاش اللي عايزو فيه, بينتقل للمستوى الثاني الاكبر في المساحة و هكذا..
ما شاء الله, انت كدا عرفت الفكرة الاساسية لعمل الدوائر الكهربية للرامات..
استاذ الخلف شرح هذه الجزئية بطريقة ممتازة و لكني ساضيف جزء صغير بما انك قلت "جزء من الطاقة مقيد في مكان"..
شوف يا سيدي, كل مكان او Block في الرام عبارة عن ترانزيستور + مكثف, و تعالى نتخيل انه كل مكان في الرام عبارة عن غرفة, باب هذه الغرفة هو الترانزيستور, و هو كل شغله ON او OFF يعني باب الغرفة اما مفتوح و جاهز لاستقبال او ارسال البيانات او مغلق, اما بالنسبة للمكثف فوظيفته هي تخزين للطاقة (او الشحنات) كما ذكرت انت, و هذه الشحنات تمثل البيانات و هي تُخزن في الرامات بهذه الطريقة..
و آسف اخي مضطر استاذن الآن و اعتذر عن عدم اضافة صور توضيحية لانها هتعقد الموضوع اكتر
و للحديث بقية ان شاء الله
المفضلات