


(او لعنة المقاطع) قيود بنية IBM PC

This work is licensed under a Creative Commons Attribution 4.0 International License.
By Steven W. McDougall
التاريخ القديم
أطلقت شركة Altair أول "كمبيوتر شخصي" في عام 1975. كان كمبيوترًا حقيقيًا، وكان متاحًا للشراء في شكل مجموعة تركيب (kit) مقابل 400 دولار. كان الإدخال يتم عبر مفاتيح تبديل على اللوحة الأمامية، بينما كان الإخراج يتم عبر مصابيح LED على اللوحة الأمامية (تعمل بنظام التشغيل/الإيقاف، وليس شاشات 7-قطع). كان السوق المستهدف لهذا الجهاز بشكل أساسي من هواة التقنية والمبرمجين المتحمسين.
بحلول أواخر السبعينيات، كانت هناك أجهزة كمبيوتر شخصية متاحة من العديد من الشركات، مثل Tandy وCommodore وTI وApple. لم تكن أجهزة الكمبيوتر من مختلف الشركات متوافقة مع بعضها البعض، حيث كان لكل شركة بنيتها الخاصة، ونظام تشغيلها الخاص، وواجهة ناقل البيانات الخاصة بها، وبرامجها الخاصة. عند شراء جهاز كمبيوتر من إحدى هذه الشركات، كان ذلك يعني التزامًا كبيرًا بمعايير تلك الشركة.
المعالج 6502
في عام 1980، كانت البنية المتطورة آنذاك ممثلة بمعالج Commodore 6502. يُعتبر 6502 معالجًا دقيقًا أحادي الشريحة، يتمتع ببنية 8/16، أي ناقل بيانات بحجم 8 بت وناقل عناوين بحجم 16 بت. يعكس نموذج البرمجة بنية العتاد: فالسجلات التي تخزن القيم، مثل المجمع (Accumulator)، بحجم 8 بت، بينما السجلات التي تخزن العناوين، مثل عداد البرنامج (Program Counter)، بحجم 16 بت. ويؤدي ناقل العناوين ذو 16 بت إلى توفير مساحة عنونة تصل إلى 64 كيلوبايت.
بحلول أوائل الثمانينيات، أصبحت شرائح DRAM بسعة 64 كيلوبايت متاحة على نطاق واسع، وكانت أجهزة الكمبيوتر المستندة إلى 6502، مثل Commodore 64 وApple ][، تُشحن مع ذاكرة RAM كاملة بسعة 64 كيلوبايت.
في عام 1980، قررت IBM دخول سوق الكمبيوتر الشخصي. أدركت - وبشكل صحيح - أن الانخفاض المستمر في أسعار DRAM سيجعل بنية 8/16 قديمة قريبًا. وكانت الخطوة المنطقية التالية هي بنية 16/32، مثل معالج Motorola 68000. كانت بنية 16/32 ستُحسن الأداء من خلال مضاعفة عرض نطاق الذاكرة، كما أنها كانت ستوفر مساحة عنونة تصل إلى 4 جيجابايت، وهي أكثر من كافية للمستقبل القريب.
لسوء الحظ، لم يكن المعالج 68000 متاحًا فعليًا في عام 1980، ولم تكن هناك أي معالجات دقيقة أحادية الشريحة أخرى ببنية 16/32. المشكلة تكمن في أن حجم الشريحة (Die Size) يزداد بشكل مباشر مع عرض السجلات. عند الانتقال من 8/16 إلى 16/32، فإن حجم جميع السجلات يتضاعف، وتصبح مسارات البيانات أعرض بمقدار الضعف، كما أن سلسلة الحمل (Carry Chain) في وحدة ALU تتضاعف من حيث عدد العناصر—بمعنى آخر، يتضاعف حجم التصميم بالكامل.
وفي عام 1980، لم تكن تقنية التصنيع (Process Technology) قد وصلت بعد إلى المستوى الذي يمكن عنده إنتاج معالج دقيق أحادي الشريحة ببنية 16/32 بسعر مقبول تجاريًا.
المعالج 8086
المعالج المتاح آنذاك كان Intel 8086. كان 8086 محاولة غير مدروسة لتوفير مساحة عنونة أكبر من 64 كيلوبايت دون تحمل التكاليف المرتبطة ببنية أكبر. في الأساس، كان 8086 يتمتع ببنية 16/16، حيث يحتوي على عداد برنامج (Program Counter) بحجم 16 بت، ووحدة حساب ومنطق (ALU) بحجم 16 بت، وأربعة سجلات للأغراض العامة بحجم 16 بت، بالإضافة إلى بعض السجلات الفهرسية بحجم 16 بت.
كما أنه يحتوي على أربعة سجلات مقاطع (Segment Registers) بحجم 16 بت. يجري المعالج جميع العمليات الحسابية ونقل البيانات باستخدام حساب 16 بت، باستثناء واحد: قبل إرسال العنوان إلى ناقل العناوين الخارجي (External Address Bus)، يختار 8086 أحد سجلات المقاطع، ثم يزحزحه 4 بتات إلى اليسار، ويضيف العنوان إليه باستخدام حساب 20 بت. ونتيجة لذلك، يكون العنوان الخارجي بحجم 20 بت، مما يمنح المعالج مساحة عنونة تصل إلى 1 ميجابايت.
يحدد أربعة سجلات مقاطع أربعة أنواع من المقاطع:
- CS – مقطع الكود (Code Segment)
- DS – مقطع البيانات (Data Segment)
- SS – مقطع المكدس (Stack Segment)
- ES – المقطع الإضافي (Extra Segment)
تستخدم معظم العمليات تلقائيًا سجل المقطع الصحيح: عمليات جلب التعليمات تستخدم CS، عمليات التحميل والتخزين تستخدم DS، وعمليات الدفع والسحب تستخدم SS. بعض العمليات، مثل نقل الكتل (block move)، تستخدم DS وES معًا—واحد للمصدر والآخر للوجهة.
تصف وثائق Intel هذه البنية على أنها تسهيل برمجي: هنا يوجد الكود الخاص بك، وهنا توجد بياناتك، وكل شيء مخزن بشكل مرتب في مقطعه الخاص. كما أن طلاب علوم الكمبيوتر يحبون البُنى المقسمة لأسباب مختلفة تتعلق بتصميم أنظمة التشغيل.
ولكن برمجة هذا المعالج كانت كابوسًا حقيقيًا. لا يمكنك ببساطة عنونة أي شيء مباشرة. أولًا، يجب التأكد من أن سجل المقطع مضبوط بشكل صحيح، ثم يجب بناء العنوان كإزاحة داخل هذا المقطع. يمكن لسجل المقطع أن يشير إلى أي مكان داخل مساحة العناوين 1 ميجابايت بالكامل، ولكن بمجرد ضبطه، فإنه يتيح الوصول فقط إلى مقطع بحجم 64 كيلوبايت. إذا كان لديك أكثر من 64 كيلوبايت من الكود أو البيانات، فيجب عليك إعادة تحميل سجلات المقاطع أثناء التشغيل.
إحدى المشكلات الرئيسية هي أنه لا توجد طريقة فعالة لفهرسة مصفوفة أكبر من 64 كيلوبايت، مما يجعل التعامل مع البيانات الكبيرة أمرًا معقدًا للغاية.
IBM والاستنساخات
في الظروف العادية، كان من الممكن أن يتم تجاهل تصميم معقد ومعيب مثل 8086 من قبل السوق ويختفي تدريجيًا. ومع ذلك، كان عام 1980 هو عام الحظ لشركة Intel. اختارت IBM المعالج 8086 ليكون المعالج الرئيسي للكمبيوتر الشخصي. بدعم من القوة التسويقية الهائلة لعلامة IBM وسمعتها القوية، تمكن IBM PC بسرعة من السيطرة على معظم السوق.
اختارت الشركات الأخرى إما الخروج من سوق أجهزة الكمبيوتر الشخصي (TI)، أو التوجه إلى الأسواق المتخصصة (Commodore, Apple)، أو التخلي عن بنيتها الخاصة لصالح بنية IBM (Tandy). مع اقتراب حصة السوق من 90%، أصبح الكمبيوتر الشخصي المعيار الفعلي.
بدأت شركات البرمجيات في تطوير أنظمة تشغيل (MicroSoft DOS, Digital Research DOS)، برامج جداول حسابية (Lotus 123)، معالجات نصوص (WordPerfect, WordStar)، ومترجمات برمجية (MicroSoft C, Borland C) تعمل على IBM PC. كما قامت شركات العتاد ببناء محركات أقراص، طابعات، وأنظمة جمع البيانات التي تتصل بالناقل الخارجي للكمبيوتر الشخصي.
على الرغم من أن IBM سيطرت في البداية على سوق الكمبيوتر الشخصي، إلا أنها فقدت هذه الهيمنة لاحقًا لصالح الشركات المصنعة للاستنساخات. كانت IBM معتادة على كونها المورد الاحتكاري للحواسيب المركزية الكبيرة، لكنها لم تكن مستعدة للمنافسة الشرسة التي نشأت عندما دخلت شركات مثل:
Compaq, Leading Edge, AT&T, Dell, ALR, AST, Ampro, Diversified Technologies وغيرها جميعًا في سباق للحصول على حصة من سوق الكمبيوتر الشخصي.
بالإضافة إلى الأسعار المنخفضة والأداء العالي، قدمت شركات الاستنساخ أمرًا بالغ الأهمية لسوق الكمبيوتر الشخصي: معيار عتادي مطلق.
لكي يتمكن مصنعو الأجهزة المستنسخة من بيع منتجاتهم، كان عليهم ضمان توافقها التام مع جميع برامج الكمبيوتر الشخصي الأصلية، وكذلك جميع الأجهزة الطرفية الموجودة لدى العملاء. الطريقة الوحيدة لتحقيق ذلك كانت تصميم الاستنساخ ليكون مطابقًا تمامًا للكمبيوتر الشخصي الأصلي من IBM على مستوى السجلات.
وهكذا، أصبح المعيار الذي حدده IBM PC ثابتًا وغير قابل للتغيير، حيث قامت العشرات من شركات الاستنساخ بشحن ملايين الأجهزة التي تطابقت معه في كل التفاصيل.
أدى هذا التوحيد القياسي إلى انخفاض تكلفة أنظمة الكمبيوتر الشخصي وانتشارها الواسع. ولكنه كان أيضًا عقبة خطيرة أمام محاولات تجاوز قيود بنية الكمبيوتر الشخصي.
مشاكل مساحة العناوين
يمنح المعالج 8086 الكمبيوتر الشخصي مساحة عنونة تبلغ 1 ميجابايت. يتم عرض هذه المساحة بشكل مناسب كمجموعة من ستة عشر مقطعًا منفصلًا بحجم 64 كيلوبايت، ويتم تخصيصها كما يلي:
المقطع | الاستخدام |
0-9 | RAM |
A-B | فيديو RAM |
C-D | ROM على بطاقات الإدخال/الإخراج |
E-F | ROM BIOS (كود نظام التشغيل) |
مع 10 مقاطع مخصصة لـ RAM، يمكن للكمبيوتر الشخصي الوصول إلى 640 كيلوبايت من الذاكرة الرئيسية. المساحة بين 640 كيلوبايت و1 ميجابايت محجوزة للأجهزة ونظام التشغيل. بحلول منتصف الثمانينيات، أصبحت هذه البنية قديمة.
كانت رقائق DRAM بسعة 256 كيلوبايت و1 ميجابايت متاحة؛ المستخدمون كانوا يشترون أجهزة كمبيوتر شخصي تحتوي بالفعل على 640 كيلوبايت من الذاكرة ويريدون المزيد. ولسوء الحظ، كما يوضح الجدول أعلاه، لم يكن هناك مكان لإضافة أي ذاكرة إضافية في الكمبيوتر الشخصي.
أحد الحلول كان أنظمة اختيار البنوك. كان على البائع تصميم بطاقة ذاكرة، وإضافة سجلات اختيار البنوك، وتعيين كتل محددة من الذاكرة إلى مساحة العناوين الخاصة بالكمبيوتر الشخصي، عادةً عند C0000.
مع نظام اختيار البنوك، كان على المبرمج إدارة سجلات اختيار البنوك يدويًا وتتبع أي بنك يحتوي على أي بيانات. اليوم، تتبع هذه الأنظمة عمومًا مواصفات الذاكرة الموسعة من Lotus/Intel/Microsoft (LIM-EMS). في هذا السياق، تشير كلمة Expanded تحديدًا إلى نظام اختيار البنوك.
سمحت الذاكرة الموسعة لعدد قليل من البرامج باستخدام أكثر من 640 كيلوبايت من RAM، لكنها كانت حلاً غير كافٍ على المدى الطويل لتلبية الحاجة إلى المزيد من الذاكرة.
الحل الوحيد الحقيقي هو الانتقال إلى بنية معالج أكبر. اتخذت Intel الخطوة الأولى في هذا الاتجاه من خلال تقديم المعالج 80286.
المعالج 80286
المعالج 80286 مشابه للمعالج 8086 في المفهوم. إنه يعتمد على بنية 16/24. ناقلات البيانات والسجلات بحجم 16 بت. ناقل العناوين الخارجي بحجم 24 بت، مما يوفر مساحة عنونة تبلغ 16 ميجابايت. يتم تحديد العناوين باستخدام محدد مقطع بحجم 16 بت وإزاحة بحجم 16 بت. يقوم محدد المقطع بتحديد وصف مقطع مقيم في الذاكرة. يحتوي وصف المقطع على عنوان قاعدة بحجم 24 بت، حجم مقطع بحجم 16 بت، وبعض بتات السمات. لإنشاء عنوان، تتم إضافة الإزاحة 16 بت إلى عنوان القاعدة 24 بت باستخدام حساب 24 بت، ثم يتم تمريره إلى ناقل العناوين الخارجي.
يوفر 80286 للمبرمج مساحة عنونة تبلغ 16 ميجابايت. ومع ذلك، فإنه لا يزال مقيدًا بالحاجة إلى التعامل مع سجلات المقاطع، وحقيقة أن كل مقطع يقتصر على 64 كيلوبايت، كما هو الحال في 8086. الأكثر أهمية أن 80286 محدود بضرورة الحفاظ على التوافق مع الكمبيوتر الشخصي.
عرفت Intel أنها لا يمكنها تسويق معالج جديد ما لم يكن قادرًا على تشغيل برامج الكمبيوتر الشخصي الموجودة. لذلك، صممت 80286 بوضعين مختلفين للتنفيذ:
- الوضع المحمي (Protected Mode) هو بنية 16/24 كما تم وصفها مسبقًا.
- الوضع الحقيقي (Real Mode) هو محاكاة دقيقة لبنية 16/16 الخاصة بـ 8086.
يُعرف الوضع الحقيقي أحيانًا باسم وضع DOS. عند تشغيل 80286، فإنه يبدأ في الوضع الحقيقي، مما يسمح له بالعمل كمعالج لأجهزة الكمبيوتر المستنسخة من IBM PC. عند استخدامه بهذه الطريقة، يوفر 80286 زيادة في الأداء بسبب تردده الأسرع وناقل بيانات 16 بت.
ومع ذلك، لا يزال المبرمج مقيدًا ببنية الكمبيوتر الشخصي، مع حد مساحة العناوين البالغ 1 ميجابايت وحد ذاكرة RAM عند 640 كيلوبايت. ونظرًا لأن برامج DOS والكمبيوتر الشخصي لن تعمل على 80286 في الوضع المحمي، فقد تم تشغيل معظم معالجات 80286 في الوضع الحقيقي.
جنون الذاكرة الممتدة
اليوم، يتم شحن معظم أجهزة الكمبيوتر الشخصية المزودة بمعالج 80286 مع عدة ميجابايت من ذاكرة RAM. نظرًا لأن 80286 يحتوي على مساحة عنونة تبلغ 16 ميجابايت، فإنه يتم عنونة هذه الذاكرة بشكل خطي—دون الحاجة إلى أي أجهزة اختيار بنوك. في الوضع المحمي، تكون جميع الذاكرة قابلة للاستخدام. في الوضع الحقيقي، يكون 640 كيلوبايت الأول فقط متاحًا، كما هو الحال في بنية الكمبيوتر الشخصي القياسية، أما الباقي فلا يمكن الوصول إليه.
يُطلق على الذاكرة غير القابلة للوصول لأنها تقع فوق حد 640 كيلوبايت الخاص بالبنية الأصلية للكمبيوتر الشخصي اسم "الذاكرة الممتدة"—ولا يجب الخلط بينها وبين الذاكرة الموسعة.
أكثر استخدام شائع لذاكرة الممتدة هو توفير قرص RAM لنظام DOS. عندما يحتاج البرنامج إلى الوصول إلى البيانات المخزنة على قرص RAM، فإنه يقوم بتعيين بت وضع يقوم بتحويل المعالج 80286 إلى الوضع المحمي. وهذا يمنحه إمكانية الوصول إلى الذاكرة الممتدة. ثم يقوم البرنامج بإجراء عملية نقل البيانات المطلوبة بين مساحة ذاكرته الخاصة وقرص RAM في الذاكرة الممتدة.
لسوء الحظ، لا توجد أي طريقة للعودة من الوضع المحمي إلى الوضع الحقيقي، لذلك يجب على البرنامج حفظ حالته وإعادة تعيين المعالج. عند إعادة التشغيل، يستأنف المعالج تنفيذ البرنامج الأصلي في الوضع الحقيقي. في الممارسة العملية، يتم التعامل مع كل هذا من خلال برنامج تشغيل لجهاز قرص RAM، مثل RAMDRIVE.SYS.
كانت نية Intel من تطوير 80286 هي توفير مسار لتطوير أنظمة الكمبيوتر الشخصي. على وجه التحديد، كانوا يأملون في أن يسمح وضع التوافق مع DOS للمعالج بكسب القبول في السوق، وأنه بمجرد وجود قاعدة كبيرة من معالجات 80286 مثبتة، سيبدأ مطورو البرامج في كتابة أنظمة تشغيل وبرامج تستفيد من ميزات الوضع المحمي.
لكن ما حدث فعليًا هو أن بائعي أجهزة الكمبيوتر المستنسخة استخدموه كمعالج 8086 عالي الأداء، وقام المستخدمون بتشغيله في الوضع الحقيقي تقريبًا بشكل حصري، بينما تجنب مطورو البرمجيات التعقيدات والقيود التي فرضتها البنية المقسمة للوضع المحمي.
المعالج 80386
كان المعالج التالي الذي قدمته Intel هو 80386. مثل 80286، يحتوي 80386 على بنية مقسمة، وكما هو الحال مع 80286، فإنه يحتوي على وضعين للتنفيذ: الوضع الحقيقي والوضع المحمي.
في الوضع المحمي، يعمل 80386 ببنية 32/32. مخطط التقسيم أكثر تعقيدًا حتى من ذلك الموجود في 80286، وسأجنبك التفاصيل. ومع ذلك، فإنه يدعم إزاحات مقاطع بحجم 32 بت، مما يسمح بأن يصل حجم المقطع الواحد إلى 4 جيجابايت. يتيح ذلك للمبرمج تعريف مقطع واحد يغطي جميع الذاكرة المتاحة، بدلاً من التعامل المستمر مع مجموعة من المقاطع بحجم 64 كيلوبايت. كما أنه يسمح بفهرسة المصفوفات التي تتجاوز 64 كيلوبايت.
في الوضع الحقيقي، يوفر 80386 محاكاة دقيقة لبنية 16/16 الخاصة بـ 8086.
لسوء الحظ، لم يتم استخدام إمكانيات 80386 أكثر مما تم استخدامه في 80286. برامج DOS والكمبيوتر الشخصي لن تعمل على معالج 80386 في الوضع المحمي، لذا يتم تشغيل معظم معالجات 80386 في الوضع الحقيقي.
المعالج في جهازي الحالي يعمل في الوضع الحقيقي. يوفر وصولاً إلى 640 كيلوبايت من الذاكرة الرئيسية وقرص RAM بسعة 3456 كيلوبايت، ليصل إجمالي الذاكرة المثبتة إلى 4 ميجابايت.
نماذج الذاكرة
سواء أحببنا ذلك أم لا، هناك ملايين من أجهزة الكمبيوتر الشخصية في العالم، وعلينا برمجتها في الوضع الحقيقي. يوفر MicroSoft C تسهيلات واسعة لاستغلال الموقف بأفضل شكل ممكن.
إحدى القضايا المهمة هي ما إذا كانت العناوين بحجم 16 بت أو 32 بت. عنوان 16 بت يوفر إزاحة داخل مقطع واحد. يجب أن يكون سجل المقطع قد تم تحميله مسبقًا بعنوان القاعدة المناسب. عنوان 32 بت يحتوي على عنوان قاعدة المقطع وإزاحة داخل ذلك المقطع. عند الوصول إلى الذاكرة باستخدام عنوان 32 بت، يقوم البرنامج أولًا بتحميل سجل المقطع من أعلى 16 بت من العنوان، ثم يستخدم أقل 16 بت كإزاحة داخل المقطع.
تتطلب عناوين 32 بت ذاكرة أكبر ودورات CPU أكثر، لكنها توفر الوصول إلى مساحة العناوين الكاملة 1 ميجابايت الخاصة بمعالج 8086.
إذا كان البرنامج يحتوي على أقل من 64 كيلوبايت من البيانات، فيمكنه تخزين جميع بياناته داخل مقطع بيانات واحد واستخدام عناوين 16 بت للوصول إليها. وبالمثل، إذا كان البرنامج يحتوي على أقل من 64 كيلوبايت من التعليمات البرمجية، فيمكنه تخزين كل الكود داخل مقطع واحد واستخدام عناوين 16 بت للقفزات واستدعاءات الدوال.
على العكس، إذا كان الكود أو البيانات لا تتناسب مع هذه الحدود، فيجب أن يستخدم البرنامج عناوين 32 بت. يوفر MicroSoft C جميع الاحتمالات الأربعة من خلال مجموعة من نماذج الذاكرة:
نموذج الذاكرة | عناوين البيانات | عناوين الكود |
---|---|---|
Tiny | 16-bit | 16-bit |
Small | 16-bit | 16-bit |
Compact | 32-bit | 16-bit |
Medium | 16-bit | 32-bit |
Large | 32-bit | 32-bit |
Huge | 32-bit | 32-bit |
نموذج الذاكرة Tiny هو نفس نموذج Small، باستثناء أن إجمالي حجم مقاطع الكود والبيانات معًا يجب ألا يتجاوز 64 كيلوبايت. بالإضافة إلى ذلك، ينتج Tiny نموذج ملف .COM بدلًا من .EXE.
ملفات .COM أصغر حجمًا قليلاً وتحمل بشكل أسرع تحت نظام DOS.
نموذج الذاكرة Huge هو نفسه Large، باستثناء أن المصفوفات الفردية يمكن أن تتجاوز حجم 64 كيلوبايت. ومع ذلك، لا تزال العناوين مخزنة كمجموعات مقطع:إزاحة، ويرفض المترجم إجراء العمليات الحسابية الكاملة لعناوين 32 بت عليها. ونتيجة لذلك، يجب أن يكون حجم عنصر المصفوفة قوة من 2.
اختيار نموذج الذاكرة هو خيار يتم تحديده أثناء الترجمة، لذا يمكنك التجربة بسهولة مع النماذج المختلفة.
ملاحظات
غير مدروس، معقد ومعيبفي رأيي
8086في الواقع، استخدم IBM PC المعالج 8088 وليس 8086. المعالج 8088 مماثل تمامًا لـ 8086 داخليًا، لكنه يحتوي على ناقل بيانات خارجي بحجم 8 بت. يؤدي هذا إلى المقايضة بين عرض نطاق الذاكرة وتكلفة النظام المنخفضة.
الذاكرة الموسعةتخيل أكورديون، حيث يتمدد المنفاخ خلف لوحة المفاتيح.
80286هناك أيضًا معالج 80186. إنه في الأساس 8086 ولكنه يحتوي على ساعات، وحدات تحكم في المقاطعات، ومكونات داعمة أخرى مدمجة في شريحة واحدة. يتم استخدامه بشكل أساسي كمعالج مضمن في معدات التحكم الصناعية.
الذاكرة الممتدةتخيل برجًا، مع طوابق إضافية تمتد إلى الأعلى أكثر فأكثر.
إعادة تعيين المعالجأنا لا أختلق هذا.
“ GameBoost - The All-In-One Gaming Services Platform with a mission to truly change the life of every day gamers. Whether you're looking for Currencies, Items, High-Quality Accounts or Boosting, we've got you covered! ”
