أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

كيفية تعيين محول RAM في مساحة عنوان العملية

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية189327
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
الموجز
عند تعيين كمية كبيرة من الذاكرة محول قد تظهر الأعراض التالية:
  • عدم توفر نظام PTEs (NO_MORE_SYSTEM_PTES).
  • مساحة عنوان العملية المتجاورة غير كافية.
توضح هذه المقالة:
  • لماذا تحدث هذه المشكلات
  • كيفية التغلب عليها
  • طريقتان تعيين ذاكرة المحول إلى مساحة عنوان العملية
معلومات أخرى

مقدمة حول إدخالات جدول الصفحة (PTE)

كل عملية يتم تنفيذها على نظام Windows NT لديه عنوان ظاهري 4 غيغا بايت يتراوح بين 0x00000000 0xFFFFFFFF لاستخدامها. لذلك، عنوان 2 غيغابايت العليا تتراوح 0x8000000 0xFFFFFFFF الشائعة كافة العمليات الجاري تشغيلها في النظام ويتم يطلق عليه مساحة عنوان kernel أو نظام. المنطقة السفلية يتراوح بين 0x00000000 0x7FFFFFFF تسمى مساحة العنوان المستخدم.

من منظور عملية يشير كل عنصر في العنوان الظاهري conceptually إلى بايت ذاكرة الفعلية. وهو المسؤولية من الذاكرة الظاهرية إدارة (VMM) بالاقتران مع معالج وحدة إدارة الذاكرة (MMU) ترجمة أو تعيين كل عنوان ظاهري إلى عنوان فعلي المطابق. ينفذ VMM التعيين بواسطة تقسيم ذاكرة الوصول العشوائي إلى صفحة ذات حجم ثابت إطارات، إنشاء جداول صفحة لتخزين معلومات حول هذه الصفحة إطارات، ثم تعيين عليها. كل PTE يمثل إطار صفحة ويحتوي على المعلومات الضرورية VMM لتحديد موقع صفحة.

على x 86-based نظام يستخدم حجم صفحة 4 كيلوبايت ، هو الحد الأقصى لعدد PTEs المطلوبة لتعيين ٢ غيغابايت من مساحة العنوان 524,288 (2 غيغا بايت/4 كيلوبايت). على نظام نموذجية يتم استخدام هذه المساحة كما يلي:
  • الحد أقصى من 50.000 PTEs (تقريباً 195 عنوان ميغابايت) محجوزة للاستخدام العام.
  • يتم استخدام المتبقية في تعيين ذاكرة التخزين المؤقت لنظام و إعادة القذف ، التجمع المقسم إلى صفحات ، تجمّع غير مقسّم إلى صفحات ناحية تفريغ التعطل الكلي و إلخ.
يتم تحديد حجم تجمع PTE هذا تلقائياً عند بدء تشغيل النظام استناداً إلى مقدار الذاكرة الفعلية في النظام. يتم ضغط هذا التجمع بين التجمع المقسم إلى صفحات و تجمّع غير مقسّم إلى صفحات أيضاً يزداد حجم مع مقدار الذاكرة الفعلية في نظام أيضاً.

يستخدم النظام هذه PTEs بإنشاء كدسات مؤشر ترابط kernel أو تحميل برامج تشغيل الأجهزة (و DLLs الخاصة بهم) ، لتعيين مساحة العنوان الظاهرية نظام نقل I/O أو للمتصلين من MmMapIoSpace/MmMapLockedPages/MmGetSystemAddressForMdl/MmAllocateNonCachedMemory و لأغراض أخرى متنوعة. يمكن أن تصبح المستخدمة بكثرة هذا النظام تجمع PTE ثم تجزئة بكثرة. قد يكون كبيرًا بدرجة كافية وهذا يعني أن برنامج تشغيل قد لا تكون قادراً على الحصول على مساحة العنوان الظاهرية المتجاورة من النظام تجمع PTE في أي وقت محدد على الرغم من أن عنوان الإجمالي مساحة متبقية يظل فيه.

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

يجب أن تكون حذراً للغاية عند استخدام هذا المخطط تجمع فقط. استخدام أجزاء محول RAM تحتاج نظام فعلاً الوصول من أي سياق العملية وتعيين مقدار التي تحتاجها فقط. عدم التعيين نطاق محول بالكامل إذا لم تكن بالفعل بحاجة إلى الوصول إلى كافة من وضع النظام.

هام: التعيين الذاكرة بمجرد أن تنتهي في سياق العملية الأيمن. وإلا، سيتم تشغيل النظام من PTEs ثم فإنه سيتم الخطأ الاختيار. يمكنك زيادة العدد الافتراضي من حساب PTEs تعتمد على ذاكرة النظام الإجمالي - إلى قيمة القصوى بواسطة إضافة رقم (يساوي عدد الصفحات يمكن زيادة) إلى التسجيل عند:
   HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager   \Memory Management\SystemPages				
الذي يمكن أيضاً مراقبة حالياً المتوفرة "الحر إدخالات جدول صفحات النظام" باستخدام "مراقبة الأداء".

ملاحظة: لا يتم استخدامها في صفحات الذاكرة محول لاستبدال الصفحة. تظل المعينة في مساحة العنوان العملية حتى إذا كانت العملية الخاملة أو مبدلة بالكامل الخروج.

فيما يلي طريقتان الأكثر شيوعاً تعيين ذاكرة المحول. الأسلوب الأول بتعيين الذاكرة مباشرة إلى المستخدم العملية - المساحة ويرتبط الطريقة الثانية إلى النظام للعملية- المساحة واختيارياً إلى مساحة المستخدم. تتطلب كلا الطريقتين الذاكرة الفعلية أن القريبة. وبسبب التحديد، PTE أو قد لا تتمكن من تعيين كمية كبيرة من الذاكرة في النظام مساحة. ومع ذلك، قد تتمكن من تعيين إلى مساحة المستخدم إذا لم كان تجزئة أو استخدام.

أسلوب كائن المقطع

يوجد نموذج (MAPMEM) في Windows NT 4.0 DDK (متوفر من خلال عضوية Professional MSDN) الذي يظهر كيفية تنفيذ هذا التعيين. وفيما يلي مخطط تفصيلي التقنية:

  1. للحصول على العنوان الفعلي المترجمة ذاكرة المحول (HalTranslateBusAddress).
  2. فتح معالج مقطع (ZwOpenSection) \Device\PhysicalMemory جهاز الذاكرة الفعلية.
  3. مرجع مؤشر كائن (ObReferenceObjectByHandle) لمنع حذف.
  4. تعيين الذاكرة (ZwMapViewOfSection).
العنوان الظاهري من ZwMapViewOfSection صالحاً فقط في السياق عملية تعيينه. إذا كنت ترغب في الوصول إلى الذاكرة في برنامج تشغيل استدعاء الإجراءات المؤجلة (DPC) أو مقاطعة روتين خدمة (ISR) الذي يعمل في سياق عملية إجبارية "، يجب أيضاً تعيين الذاكرة في مساحة العنوان النظام (استخدم الطريقة التالية). التعيين (ZwUnMapViewOfSection) الذاكرة في نفس سياق العملية الذي قمت بتعيينه قبل إنهاء.

ملاحظة: في عام, يمكن أن يكون الخطيرة لاستخدام ZwMapViewOfSection باستخدام \Device\PhysicalMemory إلا إذا كان لديك بالفعل الصفحات الفعلية. برنامج تشغيل بتعيين صفحات أن فإنه لا تملك دائمًا الأسباب تلف الذاكرة لأنه يمكن للمالك تغيير سمات صفحة تحرير الصفحات ثم إجراء تغييرات أخرى. يجب تعيين محركات أقراص الذاكرة التي كانت تمتلك. أيضاً، غير قانوني حصراً لتعيين عنوان فعلي concurrently مع سمتان مختلفة (أي، المخزنة مؤقتاً writecombined أو noncached أو). يؤدي هذا الإجراء تلف TLB المعالج "و" نتائج غير متوقعة.

على WindowsXP ، ترجع الدالة ZwMapViewOfSection خطأ STATUS_CONFLICTING_ADDRESSES برامج التشغيل محاولة تعيين نفس عنوان فعلي concurrently مع سمات متعارضة.

أسلوب MmMapIoSpace

يظهر هذا الأسلوب كيفية تعيين ذاكرة في مساحة عنوان العملية النظام وفي مساحة العنوان المستخدم العملية.
  1. الحصول على العنوان الفعلي المترجمة ذاكرة المحول (HalTranslateBusAddress).
  2. تعيين الذاكرة في مساحة العنوان النظام غير المقسم إلى صفحات كما يلي:
          SystemVirtualAddress = MmMapIoSpace(PhysicalAddress, SizeofMemory,         CacheEnable);					
  3. تخصيص Mdl:
          Mdl = IoAllocateMdl(SystemVirtualAddress, SizeOfMemory, FALSE, FALSE,         NULL);
  4. إنشاء MDL لوصف صفحات الذاكرة:
          MmBuildMdlForNonPagedPool(Mdl);
  5. تعيين الذاكرة في العملية الخاص باستخدام مساحة المستخدم MmMapLockedPages. بسبب وجود عدم تناسق في القيمة المرجعة للدالة هذا بين قبل تثبيت SP4 و SP4 نشر الإصدارات من Windows NT استخدام العبارة التالية لجعل رمز هذا متوافق مع كافة إصدارات Windows NT:
          UserVirtualAddress = (PVOID)(((ULONG)PAGE_ALIGN(MmMapLockedPages(Mdl,         Mode))) + MmGetMdlByteOffset(Mdl));					
للحصول على معلومات إضافية، انقر فوق رقم المقالة أدناه لعرضها في "قاعدة المعارف لـ Microsoft:
199311INFO: MmMapLockedPages إرجاع العنوان الظاهري الفعلي في SP4
الميزة من هذه الطريقة هي الحصول على SystemVirtualAddress والتي يمكن استخدامها في أي سياق العملية (مثل DPCs ISR) و UserVirtualAddress التي يمكن استخدامها من قبل تطبيق وضع المستخدم في السياق الخاص به تعيينه.

في حالة تعيين في مساحة العنوان النظام التي يجب التعيين كما يلي:
MmUnmapIoSpace(SystemVirtualAddress, SizeofMemory);				
إذا تعيين في مساحة العنوان المستخدم التي يجب التعيين كما يلي فقط أثناء التشغيل في سياق العملية الذي قمت بتعيينه الذاكرة:
MmUnmapLockedPages(UserVirtualAddress, Mdl); Finally, free the MDL by calling:IoFreeMdl(Mdl);				
مراجع
لمزيد من المعلومات، راجع وثائق Windows NT 4.0 DDK أو "داخل Windows NT" بواسطة Helen Custer (Microsoft Press ١٩٩٣).
IoFreeMdl(Mdl) NO_MORE_SYSTEM_PTES ZwMapViewOfSection MmMapIoSpace MmMapLockedPages;

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 189327 - آخر مراجعة: 12/05/2015 08:56:26 - المراجعة: 1.2

Microsoft Win32 Device Driver Kit لـ Windows NT 4.0

  • kbnosurvey kbarchive kbmt kbhowto kbkmode KB189327 KbMtar
تعليقات