Scroll to navigation

spu_create(2) System Calls Manual spu_create(2)

الاسم

spu_create - إنشاء سياق spu جديد

المكتبة

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

موجز

#include <sys/spu.h>          /* تعريف ثوابت SPU_* */
#include <sys/syscall.h>      /* تعريف ثوابت SYS_* */
#include <unistd.h>
int syscall(SYS_spu_create, const char *path, unsigned int flags,
            mode_t mode, int neighbor_fd);

ملاحظة: لا توفر glibc غلافًا لـ spu_create()، مما يستلزم استخدام syscall(2).

الوصف

تُستخدم استدعاء النظام spu_create() على أجهزة PowerPC التي تطبق بنية Cell Broadband Engine للوصول إلى وحدات المعالجة المتآزرة (SPUs). ينشئ سياقًا منطقيًا جديدًا لـ SPU في path ويعيد واصف ملف مرتبطًا به. يجب أن يشير path إلى دليل غير موجود في نقطة وصل نظام ملفات SPU (spufs). إذا نجح spu_create()، يُنشأ دليل في path ويُملأ بالملفات الموصوفة في spufs(7).

عند إنشاء سياق، يمكن تمرير واصف الملف المُعاد فقط إلى spu_run(2)، أو استخدامه كوسيط dirfd لعائلة استدعاءات النظام *at (مثل openat(2))، أو إغلاقه؛ العمليات الأخرى غير محددة. يُدمر سياق SPU المنطقي (مع جميع الملفات المنشأة داخل دليل path للسياق) بمجرد زوال المرجع الأخير للسياق؛ يحدث هذا عادةً عند إغلاق واصف الملف المُعاد بواسطة spu_create().

يحدد وسيط mode (مطروحًا منه أي بتات مضبوطة في umask(2) للعملية) الأذونات المستخدمة لإنشاء الدليل الجديد في spufs. راجع stat(2) للحصول على قائمة كاملة بقيم mode الممكنة.

يُستخدم neighbor_fd فقط عند تحديد العلم SPU_CREATE_AFFINITY_SPU؛ انظر أدناه.

يمكن أن يكون وسيط flags صفرًا أو أي مجموعة OR-ed بت-wise من الثوابت التالية:

بدلاً من استخدام الإشارات للإبلاغ عن أخطاء DMA، استخدم وسيط event لـ spu_run(2).
إنشاء عصابة SPU بدلاً من سياق. (العصابة هي مجموعة من سياقات SPU المرتبطة وظيفيًا ببعضها البعض والتي تشارك معلمات جدولة مشتركة—الأولوية والسياسة. في المستقبل، قد يُنفذ جدولة العصابة مما يتسبب في تبديل المجموعة كوحدة واحدة.)
سيُنشأ دليل جديد في الموقع المحدد بواسطة وسيط path. يمكن استخدام هذه العصابة لاحتواء سياقات SPU أخرى، عن طريق توفير اسم مسار داخل دليل العصابة لاستدعاءات أخرى لـ spu_create().
إنشاء سياق لا يتأثر بجدولة SPU. بمجرد تشغيل السياق، لن يُجدول خارجًا حتى يُدمر بواسطة العملية المنشئة.
نظرًا لعدم إمكانية إزالة السياق من SPU، تُعطل بعض الوظائف لسياقات SPU_CREATE_NOSCHED. ستتوفر مجموعة فرعية فقط من الملفات في دليل السياق هذا في spufs. بالإضافة إلى ذلك، لا يمكن لسياقات SPU_CREATE_NOSCHED تفريغ ملف أساسي عند التعطل.
يتطلب إنشاء سياقات SPU_CREATE_NOSCHED القدرة CAP_SYS_NICE.
إنشاء سياق SPU معزول. السياقات المعزولة محمية من بعض عمليات PPE (عنصر معالجة PowerPC)، مثل الوصول إلى المخزن المحلي لـ SPU وسجل NPC.
يتطلب إنشاء سياقات SPU_CREATE_ISOLATE أيضًا العلم SPU_CREATE_NOSCHED.
إنشاء سياق بتقارب مع سياق SPU آخر. تُستخدم معلومات التقارب هذه داخل خوارزمية جدولة SPU. يتطلب استخدام هذا العلم تمرير واصف ملف يشير إلى سياق SPU الآخر في وسيط neighbor_fd.
إنشاء سياق بتقارب مع ذاكرة النظام. تُستخدم معلومات التقارب هذه داخل خوارزمية جدولة SPU.

قيمة الإرجاع

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

الأخطاء

ليس لدى المستخدم الحالي صلاحية الكتابة إلى نقطة وصل spufs(7).
يوجد سياق SPU بالفعل في اسم المسار المُعطى.
path ليس مؤشر سلسلة صالحًا في مساحة عنوان العملية المستدعية.
path ليس دليلاً في نقطة وصل spufs(7)، أو تم توفير أعلام غير صالحة.
تم العثور على عدد كبير جدًا من الروابط الرمزية أثناء تحليل path.
وُصل إلى الحد الأقصى لواصفات الملفات المفتوحة لكل عملية.
المسار path طويل جداً.
وُصل إلى الحد الأقصى لإجمالي عدد الملفات المفتوحة على مستوى النظام.
تم طلب سياق معزول، لكن العتاد لا يدعم عزل SPU.
تعذر تحليل جزء من path.
تعذر على النواة تخصيص جميع الموارد المطلوبة.
لا توجد موارد SPU كافية متاحة لإنشاء سياق جديد أو تم الوصول إلى الحد الخاص بالمستخدم لعدد سياقات SPU.
هذه الوظيفة غير مقدمة من قبل النظام الحالي، لأن الأجهزة لا توفر وحدات SPUs أو لأن وحدة spufs غير محملة.
جزء من path ليس دليلاً.
تم إعطاء العلم SPU_CREATE_NOSCHED، لكن المستخدم لا يمتلك القدرة CAP_SYS_NICE.

الملفات

يجب أن يشير path إلى موقع أسفل نقطة الوصل لـ spufs. حسب الاصطلاح، يتم وصله في /spu.

المعايير

لينكس على PowerPC.

التاريخ

لينكس 2.6.16.

قبل إضافة العلم SPU_CREATE_AFFINITY_SPU في لينكس 2.6.23، كانت استدعاء النظام spu_create() تأخذ ثلاث وسائط فقط (أي، لم يكن هناك وسيطة neighbor_fd).

ملاحظات

spu_create() مخصص للاستخدام من المكتبات التي تنفذ واجهة أكثر تجريدًا لـ SPUs، وليس للاستخدام من التطبيقات العادية. انظر http://www.bsc.es/projects/deepcomputing/linuxoncell/ للمكتبات الموصى بها.

أمثلة

انظر spu_run(2) لمثال على استخدام spu_create()

انظر أيضًا

close(2), spu_run(2), capabilities(7), spufs(7)

ترجمة

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

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

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

8 فبراير 2026 صفحات دليل لينكس 6.18