الوصول إلى معلومات وحدة المعالجة المركزية على Linux باستخدام تعليمات cpuid
في هذا السؤال، يسعى المطور إلى الوصول إلى معلومات وحدة المعالجة المركزية في بيئة Linux باستخدام طريقة مشابهة للوظيفة _cpuinfo() في Windows API. يحاول الكود المقدم استخدام تعليمات التجميع (cpuid) لاسترداد هذه المعلومات، لكن المطور يرغب في تجنب الحاجة إلى التجميع اليدوي.
يكمن الحل في استخدام ملف رأس cpuid.h المتوفر عند تجميع التعليمات البرمجية باستخدام دول مجلس التعاون الخليجي. يعلن هذا الرأس عن وظيفتين:
unsigned int __get_cpuid_max(unsigned int __ext, unsigned int *__sig);
int __get_cpuid(unsigned int __level, unsigned int *__eax, unsigned int *__ebx, unsigned int *__ecx, unsigned int *__edx);
ترجع الدالة __get_cpuid_max أعلى قيمة إدخال مدعومة لتعليمات cpuid. يمكنك تحديد __ext كـ 0x0 للحصول على المعلومات الأساسية أو 0x8000000 للحصول على معلومات موسعة.
تقوم وظيفة __get_cpuid باسترداد معلومات وحدة المعالجة المركزية لمستوى محدد وإرجاع البيانات في سجلات eax وebx وecx وedx. تقوم بإرجاع قيمة غير الصفر إذا نجحت وصفر إذا كان المستوى المطلوب غير مدعوم.
مثال الاستخدام:
#include#تشمل إنت الرئيسي () { int غير الموقعة eax، ebx، ecx، edx؛ // احصل على الحد الأقصى لمستوى CPUID المدعوم unsigned int max_level = __get_cpuid_max(0x0, NULL); // التكرار على مستويات مختلفة لـ CPUID لـ (مستوى int غير الموقع = 0؛ المستوى
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3