إدارة الذاكرة في نظام التشغيل DOS

مناطق الذاكرة الفعلية لعائلة أجهزة الكمبيوتر الشخصية من IBM

في الحوسبة المتوافقة مع أجهزة IBM PC ، تشير إدارة ذاكرة نظام التشغيل DOS إلى البرامج والتقنيات المستخدمة لمنح التطبيقات إمكانية الوصول إلى أكثر من 640 كيلوبايت (640 × 1024 بايت) من "الذاكرة التقليدية".  كان حد 640 كيلوبايت خاصًا بأجهزة IBM PC والأجهزة المتوافقة معها؛ أما الأجهزة الأخرى التي تعمل بنظام DOS فكانت لها حدود مختلفة، فعلى سبيل المثال، كان بإمكان جهاز Apricot PC استيعاب ما يصل إلى 768 كيلوبايت، وجهاز Sirius Victor 9000 ما يصل إلى 896  كيلوبايت. وقد ازدادت إدارة الذاكرة في أجهزة IBM تعقيدًا بسبب الحاجة إلى الحفاظ على التوافق مع التصميم الأصلي لأجهزة الكمبيوتر الشخصية [ 1 ] ونظام DOS في الوضع الحقيقي ، مع السماح لمستخدمي الكمبيوتر بالاستفادة من كميات كبيرة من الذاكرة منخفضة التكلفة والأجيال الجديدة من المعالجات. وبما أن نظام DOS قد حل محله نظام Microsoft Windows وأنظمة تشغيل أخرى 32 بت غير مقيدة بحد 640  كيلوبايت الأصلي التعسفي لأجهزة IBM PC، فإن إدارة ذاكرة الكمبيوتر الشخصي لم تعد تتطلب من المستخدم التلاعب يدويًا بالإعدادات والمعلمات الداخلية للنظام.

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

الذاكرة التقليدية

كان معالج إنتل 8088 المستخدم في جهاز IBM PC الأصلي يحتوي على 20 خط عنوان، مما مكّنه من الوصول المباشر إلى 1 ميجابايت (2^ 20 بايت) من الذاكرة. وتم تخصيص مساحات مختلفة من هذه المساحة لأنواع مختلفة من الذاكرة لأغراض متنوعة. بدءًا من أدنى مساحة العنوان، كان جهاز الكمبيوتر مزودًا بذاكرة وصول عشوائي (RAM) للقراءة والكتابة، والتي استخدمها نظام التشغيل DOS وبرامج التطبيقات. تم تثبيت الجزء الأول من هذه الذاكرة على اللوحة الأم للجهاز (في الأجهزة الأولى جدًا، 64  كيلوبايت، ثم تم تعديلها لاحقًا إلى 256  كيلوبايت). ويمكن إضافة ذاكرة إضافية باستخدام بطاقات يتم توصيلها بفتحات التوسعة؛ تحتوي كل بطاقة على موصلات أو مفاتيح للتحكم في أي جزء من مساحة العنوان يصل إلى الذاكرة والأجهزة الموجودة على تلك البطاقة.

في جهاز IBM PC، كانت مساحة العناوين بأكملها حتى 640  كيلوبايت متاحة لذاكرة الوصول العشوائي (RAM). يُطلق على هذا الجزء من مساحة العناوين اسم "الذاكرة التقليدية" نظرًا لإمكانية وصول جميع إصدارات نظام التشغيل DOS إليها تلقائيًا عند بدء التشغيل. يُطلق على القطاع 0، وهو أول 64  كيلوبايت من الذاكرة التقليدية، اسم منطقة الذاكرة المنخفضة . عادةً ما يتم ضبط ذاكرة التوسعة لتكون متجاورة في مساحة العناوين مع ذاكرة اللوحة الأم. في حال وجود فجوة غير مخصصة بين ذاكرة اللوحة الأم وذاكرة التوسعة، فلن يتمكن نظام التشغيل DOS من اكتشاف الذاكرة تلقائيًا على أنها قابلة للاستخدام.

منطقة الذاكرة العليا

تشير منطقة الذاكرة العليا (UMA) إلى مساحة العناوين بين 640 و1024 كيلوبايت (0xA0000–0xFFFFF). تم حجز منطقة  128 كيلوبايت بين 0xA0000 و0xBFFFF لذاكرة شاشة VGA وذاكرة إدارة الشاشة القديمة (SMM). تم حجز منطقة 128 كيلوبايت بين 0xC0000 و0xDFFFF لذاكرة القراءة فقط الاختيارية للجهاز ، بما في ذلك BIOS الفيديو . تم حجز منطقة 64 كيلوبايت بين 0xE0000 و0xEFFFFF لنظام BIOS كمنطقة BIOS سفلية. تم حجز منطقة 64 كيلوبايت بين 0xF0000 و0xFFFFF لنظام BIOS كمنطقة BIOS عليا. [ 2 ]    

على سبيل المثال، امتدت مساحة ذاكرة محول الفيديو أحادي اللون من 704 إلى 736  كيلوبايت (0xB0000–0xB7FFF). في حال استخدام محول عرض أحادي اللون فقط، يمكن استخدام مساحة العناوين بين 0xA0000 و0xAFFFF لذاكرة الوصول العشوائي (RAM)، والتي ستكون متصلة بالذاكرة التقليدية. [ 3 ]

يجب أن تكون ذاكرة القراءة فقط (ROM) الخاصة بنظام BIOS في الجزء العلوي من نطاق العناوين، لأن عنوان بدء تشغيل وحدة المعالجة المركزية (CPU) ثابتٌ بحسب تصميم المعالج. يُحمّل عنوان بدء التشغيل في عداد البرنامج الخاص بوحدة المعالجة المركزية بعد إعادة ضبط الجهاز، ويجب أن تكون له قيمة محددة تبقى ثابتة حتى بعد انقطاع التيار الكهربائي عن النظام. عند إعادة الضبط أو التشغيل، تُحمّل وحدة المعالجة المركزية العنوان من ذاكرة القراءة فقط الخاصة بالنظام، ثم تنتقل إلى موقع محدد في ذاكرة القراءة فقط لبدء تنفيذ اختبار التشغيل الذاتي للنظام ، وفي النهاية تحميل نظام التشغيل.

بما أن بطاقة التوسعة ، مثل محول الفيديو أو وحدة تحكم القرص الصلب أو محول الشبكة، قد تستخدم تخصيصات من الذاكرة في العديد من مناطق الذاكرة العليا، فإن تكوين بعض تركيبات البطاقات يتطلب قراءة متأنية للوثائق، أو التجربة، للعثور على إعدادات البطاقة وتعيينات الذاكرة المناسبة. قد يؤدي تعيين جهازين لاستخدام نفس عناوين الذاكرة الفعلية إلى توقف النظام أو عدم استقراره. [ 3 ] لم تكن جميع العناوين في منطقة الذاكرة العليا تُستخدم في النظام النموذجي؛ إذ إن العناوين الفعلية غير المستخدمة ستُعيد بيانات غير مُعرَّفة وتعتمد على النظام إذا ما حاول المعالج الوصول إليها.

ذاكرة موسعة

مع انخفاض أسعار الذاكرة، تم تعديل برامج التطبيقات، مثل جداول البيانات وبرامج التصميم بمساعدة الحاسوب، للاستفادة من سعة الذاكرة الفعلية المتزايدة في النظام. لم تكن الذاكرة الافتراضية في معالجي 8088 و 8086 مدعومة من قبل مكونات المعالج، كما أن تقنية الأقراص في ذلك الوقت كانت تجعلها بطيئة ومعقدة للغاية وغير عملية. كانت الذاكرة الموسعة نظامًا يسمح لبرامج التطبيقات بالوصول إلى ذاكرة وصول عشوائي (RAM) أكبر من تلك المتاحة مباشرةً لمساحة عناوين المعالج. كانت هذه العملية بمثابة تبديل بين بنوك الذاكرة . فعند الحاجة إلى ذاكرة RAM إضافية، يقوم برنامج التشغيل بجعل جزء من الذاكرة الموسعة متاحًا للمعالج مؤقتًا؛ وعند تحديث البيانات في ذلك الجزء من الذاكرة، يتم استبداله بجزء آخر في مساحة عناوين المعالج. بالنسبة لجهازي IBM PC و IBM PC/XT ، اللذين يحتويان على 20 خط عنوان فقط، صُممت بطاقات ذاكرة موسعة خاصة تحتوي على ميغابايت أو أكثر من الذاكرة الموسعة، مع وجود دوائر منطقية على اللوحة لجعل تلك الذاكرة متاحة للمعالج في أجزاء محددة من مساحة عناوين 8088.

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

المعالج 80286 ومنطقة الذاكرة العالية

عند طرح جهاز IBM PC/AT ، أتاح تصميم الذاكرة المجزأة لمعالجات عائلة إنتل إمكانية الوصول إلى ما يزيد قليلاً عن 1 ميجابايت من الذاكرة في الوضع "الحقيقي". ولأن معالج 80286 كان يحتوي على أكثر من 20 خط عنوان، فقد أمكن لبعض تركيبات المقطع والإزاحة الإشارة إلى مواقع في الذاكرة أعلى من الموقع 0x0100000 (2 20 ). وبذلك، استطاع معالج 80286 الوصول إلى 16 ميجابايت من ذاكرة النظام، مما أدى إلى إلغاء مشكلة "التفاف" عناوين الذاكرة. وبما أن خط العنوان المطلوب أصبح موجودًا الآن، فإن التركيبة F800:8000 لم تعد تشير إلى العنوان الفعلي 0x0000000، بل إلى العنوان الصحيح 0x00100000.

نتيجةً لذلك، توقفت بعض برامج DOS عن العمل. وللحفاظ على التوافق مع سلوك الكمبيوتر الشخصي وXT، احتوت وحدة AT على بوابة خط A20 (البوابة A20) التي تجعل عناوين الذاكرة على وحدة AT تلتف إلى الذاكرة المنخفضة كما هو الحال في معالج 8088. يمكن التحكم بهذه البوابة، مبدئيًا عبر وحدة تحكم لوحة المفاتيح ، للسماح للبرامج المصممة لهذا الغرض بالوصول إلى 65,520 بايت إضافية (64  كيلوبايت) من الذاكرة في الوضع الحقيقي . عند بدء التشغيل ، يقوم BIOS أولًا بتفعيل A20 عند حساب واختبار جميع ذاكرة النظام، ثم يعطلها قبل نقل التحكم إلى نظام التشغيل. يُعد تفعيل خط A20 إحدى الخطوات الأولى التي يقوم بها نظام تشغيل x86 في الوضع المحمي أثناء عملية بدء التشغيل، غالبًا قبل نقل التحكم إلى النواة من برنامج التمهيد (كما هو الحال في Linux، على سبيل المثال).

منطقة الذاكرة العالية ( HMA ) هي منطقة ذاكرة الوصول العشوائي (RAM ) التي تتكون من أول 64  كيلوبايت، مطروحًا منها 16 بايت ، من الذاكرة الموسعة على جهاز IBM PC/AT أو جهاز كمبيوتر صغير متوافق.

في الأصل، كانت البوابة المنطقية عبارة عن بوابة متصلة بوحدة تحكم لوحة المفاتيح Intel 8042. وكانت عملية التحكم بها بطيئة نسبيًا. ومنذ ذلك الحين، أُضيفت طرق أخرى لتحسين كفاءة تعدد مهام البرامج التي تتطلب هذا التداخل مع البرامج التي تصل إلى جميع ذاكرة النظام. في البداية، كانت هناك طرق متنوعة، ولكن في النهاية استقرت الصناعة على طريقة PS/2 باستخدام بت في المنفذ 92h للتحكم في خط A20.

لن يؤدي فصل البوابة A20 إلى حجب جميع عمليات الوصول إلى الذاكرة التي تتجاوز 1 ميجابايت، بل فقط تلك التي تقع ضمن نطاقات 1 ميجابايت، و3 ميجابايت، و5 ميجابايت، وما إلى ذلك. يهتم برنامج الوضع الحقيقي فقط بالمساحة التي تزيد قليلاً عن 1 ميجابايت، لذا كانت البوابة A20 كافية.

يُتيح وضع 8086 الافتراضي ، الذي طُرح مع معالج Intel 80386 ، محاكاة التفاف A20 باستخدام إمكانيات الذاكرة الافتراضية للمعالج: حيث يُمكن ربط الذاكرة الفعلية بعناوين افتراضية متعددة، مما يسمح بإعادة ربط الذاكرة المُخصصة للميغابايت الأول من الذاكرة الافتراضية بالميغابايت الثاني منها. يُمكن لنظام التشغيل اعتراض التغييرات التي تطرأ على البوابة A20 وإجراء تغييرات مُقابلة على مساحة عناوين الذاكرة الافتراضية، مما يُلغي أهمية كفاءة تبديل البوابة A20.

كان نظام التشغيل ويندوز 2.0 أول نظام تشغيل يستخدم ذاكرة الوصول العشوائي للأجهزة (HMA) في منتجات مايكروسوفت عام 1987، حيث قدم برنامج تشغيل الأجهزة HIMEM.SYS . وابتداءً من الإصدار 5.0 من نظامي التشغيل DR-DOS (1990) و MS-DOS (1991)، أصبح بالإمكان تحميل أجزاء من نظام التشغيل في ذاكرة الوصول العشوائي للأجهزة (HMA)، مما أتاح تحرير ما يصل إلى 46  كيلوبايت من الذاكرة التقليدية . كما أمكن تحميل مكونات أخرى، مثل برامج تشغيل الأجهزة وسجلات المعاملات (TSRs)، في منطقة الذاكرة العلوية (UMA).

أدخلت تقنية 80286 ثغرة في ذاكرة MMIO (من 15 ميجابايت إلى 16 ميجابايت) لبعض أجهزة ISA .

معالج A20

معالج A20 هو برنامج يتحكم في الوصول إلى منطقة الذاكرة العالية. عادةً ما توفر برامج إدارة الذاكرة الموسعة هذه الوظيفة. في نظام DOS، كانت برامج إدارة مناطق الذاكرة العالية، مثل HIMEM.SYS، تتولى مهمة إضافية تتمثل في إدارة A20، وتوفر واجهة برمجة تطبيقات (API) لفتح/إغلاق A20. كان بإمكان نظام DOS نفسه استخدام هذه المنطقة لتلبية بعض احتياجاته التخزينية، مما يتيح مساحة أكبر من الذاكرة التقليدية للبرامج. تم تفعيل هذه الوظيفة من خلال التوجيه " DOS =HIGH" في ملف التكوين CONFIG.SYS .

بوابة A20 في المعالجات اللاحقة

أضاف معالجا إنتل 80486 وبنتيوم دبوسًا خاصًا يُسمى A20M# ، والذي عند تفعيله بمستوى منخفض، يُجبر البت رقم 20 من العنوان الفيزيائي على أن يكون صفرًا لجميع عمليات الوصول إلى ذاكرة التخزين المؤقت المدمجة أو الذاكرة الخارجية. كان هذا ضروريًا لأن معالج 80486 قدّم ذاكرة تخزين مؤقت مدمجة، وبالتالي لم يعد من الممكن إخفاء هذا البت في الدوائر المنطقية الخارجية. لا يزال البرنامج بحاجة إلى معالجة البوابة، ولا يزال عليه التعامل مع الأجهزة الطرفية الخارجية ( مجموعة الشرائح ) للقيام بذلك. [ 4 ]

المعالج 80386 والمعالجات اللاحقة

أتاحت معالجات إنتل، بدءًا من طراز 386، وضع 8086 افتراضي ، مما بسّط المكونات المادية اللازمة لتنفيذ ذاكرة موسعة لتطبيقات نظام التشغيل DOS. ودعمت برامج إدارة الذاكرة الموسعة، مثل منتج QEMM من شركة Quarterdeck وبرنامج EMM386 من مايكروسوفت، معيار الذاكرة الموسعة دون الحاجة إلى لوحات ذاكرة خاصة.

في معالجات 386 وما بعدها، قد تقوم برامج إدارة الذاكرة مثل QEMM بنقل الجزء الأكبر من كود برنامج التشغيل أو سجل المعاملات (TSR) إلى الذاكرة الموسعة، واستبداله بجزء صغير من الذاكرة قادر على الوصول إلى الكود الموجود في الذاكرة الموسعة. وقد تقوم هذه البرامج بتحليل استخدام الذاكرة لاكتشاف برامج التشغيل التي تتطلب ذاكرة وصول عشوائي (RAM) أكبر أثناء بدء التشغيل مقارنةً بما تحتاجه لاحقًا، ثم تستعيد الذاكرة التي لم تعد مطلوبة بعد بدء التشغيل وتعيد استخدامها. بل وقد تعيد تعيين مناطق الذاكرة المستخدمة عادةً لعمليات الإدخال/الإخراج المُرتبطة بالذاكرة. تعتمد العديد من هذه الحيل على افتراضات حول كيفية عمل برامج التشغيل والمكونات الأخرى. في الواقع، قد تقوم برامج إدارة الذاكرة بهندسة عكسية وتعديل كود الشركات المصنعة الأخرى أثناء التشغيل. وكما هو متوقع، لم تكن هذه الحيل ناجحة دائمًا. لذلك، تضمنت برامج إدارة الذاكرة أيضًا أنظمة معقدة للغاية من الخيارات القابلة للتكوين، وآليات استعادة في حال تسبب خيار مُحدد في عدم إمكانية تشغيل الكمبيوتر (وهو أمر شائع الحدوث).

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

ذاكرة موسعة

في سياق أجهزة الكمبيوتر المتوافقة مع IBM PC، تشير الذاكرة الموسعة إلى الذاكرة الموجودة في نطاق عناوين معالج 80286 والمعالجات اللاحقة، والتي تتجاوز حد 1 ميجابايت الذي تفرضه خطوط العناوين العشرين في معالجي 8088 و8086. لا تتوفر هذه الذاكرة مباشرةً لتطبيقات DOS التي تعمل في ما يُسمى "الوضع الحقيقي" لمعالج 80286 والمعالجات اللاحقة. لا يمكن الوصول إلى هذه الذاكرة إلا في الوضع المحمي أو الافتراضي لمعالج 80286 والمعالجات الأحدث.

انظر أيضاً

مراجع

  1. مولر، سكوت (1994). "7". ترقية وإصلاح أجهزة الكمبيوتر الشخصية (  الطبعة الرابعة). كيو . رقم ISBN 1-56529-932-9.
  2. "خريطة الذاكرة (x86) - ويكي مطوري أنظمة التشغيل" . wiki.osdev.org . تم الاطلاع عليه بتاريخ 20-12-2020 .
  3. 1 2 مولر، سكوت (1999). "6: الذاكرة". ترقية وإصلاح أجهزة الكمبيوتر الشخصية ( الطبعة الحادية عشرة). شركة كيو . ISBN  0-7897-1903-7.
  4. شانلي، توم (1996). بنية البرمجيات في الوضع المحمي . تايلور وفرانسيس . ص 60. ISBN  0-201-55447-X.