cacheflush(2)

الاسم
cacheflush - مسح محتويات خبيئة التعليمات و/أو البيانات

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#include <sys/cachectl.h>

int cacheflush(int nbytes;
               void addr[nbytes], int nbytes, int cache);

ملاحظة: في بعض البنى، لا يوجد غلاف glibc لاستدعاء النظام هذا؛ انظر الإصدارات.

الوصف
cacheflush() يمسح محتويات الخبيئة (الخبائن) المشار إليها لعناوين المستخدم في النطاق من addr إلى (addr+nbytes-1). يمكن أن يكون cache واحدًا مما يلي:

ICACHE
    مسح خبيئة التعليمات.

DCACHE
    الكتابة العكسية إلى الذاكرة وإبطال أسطر الخبيئة الصالحة المتأثرة.

BCACHE
    مثل (ICACHE|DCACHE).

قيمة الإرجاع
cacheflush() يُرجع 0 عند النجاح. عند الخطأ، يُرجع -1 ويضبط errno للإشارة إلى الخطأ.

الأخطاء

EFAULT
    بعض أو كل نطاق العنوان من addr إلى (addr+nbytes-1) غير قابل للوصول.

EINVAL
    cache ليس واحدًا من ICACHE أو DCACHE أو BCACHE (ولكن انظر الأخطاء).

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

  متغيرات خاصة بالبنية
يوفر glibc غلافًا لاستدعاء النظام هذا، مع النموذج الأولي الموضح في الملخص، للبنى التالية: ARC وCSKY وMIPS وNIOS2.

في بعض البنى الأخرى، يوفر لينكس استدعاء النظام هذا، مع وسائط مختلفة:

M68K:
    int cacheflush(unsigned long addr, int scope, int cache,
                   unsigned long size);

SH:
    int cacheflush(unsigned long addr, unsigned long size, int op);

NDS32:
    int cacheflush(unsigned int start, unsigned int end, int cache);

في البنى المذكورة أعلاه، لا يوفر glibc غلافًا لاستدعاء النظام هذا؛ استدعه باستخدام syscall(2).

  بديل GCC
ما لم تكن بحاجة إلى التحكم الدقيق الذي يوفره استدعاء النظام هذا، فربما ترغب في استخدام الدالة المضمنة في GCC __builtin___clear_cache()، التي توفر واجهة محمولة عبر المنصات المدعومة من GCC والمترجمات المتوافقة:

    void __builtin___clear_cache(void *begin, void *end);

في المنصات التي لا تتطلب مسح خبيئة التعليمات، لا يكون لـ __builtin___clear_cache() أي تأثير.

ملاحظة: في بعض المترجمات المتوافقة مع GCC، يستخدم النموذج الأولي لهذه الدالة المضمنة char * بدلاً من void * للمعاملات.

المعايير
تاريخيًا، كان استدعاء النظام هذا متاحًا في جميع متغيرات MIPS UNIX بما في ذلك RISC/os وIRIX وUltrix وNetBSD وOpenBSD وFreeBSD (وأيضًا في بعض أنظمة تشغيل MIPS غير UNIX)، بحيث يكون وجود هذا الاستدعاء في أنظمة تشغيل MIPS معيارًا واقعيًا.

العلل
نوى لينكس الأقدم من لينكس 2.6.11 تتجاهل الوسيطين addr و nbytes، مما يجعل هذه الدالة باهظة التكلفة نسبيًا. لذلك، يتم دائمًا مسح الخبيئة بأكملها.

تتصرف هذه الدالة دائمًا كما لو أن BCACHE قد مرر للوسيط cache ولا تقوم بأي تدقيق للأخطاء على الوسيط cache.

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.