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 من الثوابت التالية:

SPU_CREATE_EVENTS_ENABLED
    بدلاً من استخدام الإشارات للإبلاغ عن أخطاء DMA، استخدم وسيط event لـ spu_run(2).

SPU_CREATE_GANG
    إنشاء عصابة SPU بدلاً من سياق. (العصابة هي مجموعة من سياقات SPU المرتبطة وظيفيًا ببعضها البعض والتي تشارك معلمات جدولة مشتركة—الأولوية والسياسة. في المستقبل، قد يُنفذ جدولة العصابة مما يتسبب في تبديل المجموعة كوحدة واحدة.)

    سيُنشأ دليل جديد في الموقع المحدد بواسطة وسيط path. يمكن استخدام هذه العصابة لاحتواء سياقات SPU أخرى، عن طريق توفير اسم مسار داخل دليل العصابة لاستدعاءات أخرى لـ spu_create().

SPU_CREATE_NOSCHED
    إنشاء سياق لا يتأثر بجدولة SPU. بمجرد تشغيل السياق، لن يُجدول خارجًا حتى يُدمر بواسطة العملية المنشئة.

    نظرًا لعدم إمكانية إزالة السياق من SPU، تُعطل بعض الوظائف لسياقات SPU_CREATE_NOSCHED. ستتوفر مجموعة فرعية فقط من الملفات في دليل السياق هذا في spufs. بالإضافة إلى ذلك، لا يمكن لسياقات SPU_CREATE_NOSCHED تفريغ ملف أساسي عند التعطل.

    يتطلب إنشاء سياقات SPU_CREATE_NOSCHED القدرة CAP_SYS_NICE.

SPU_CREATE_ISOLATE
    إنشاء سياق SPU معزول. السياقات المعزولة محمية من بعض عمليات PPE (عنصر معالجة PowerPC)، مثل الوصول إلى المخزن المحلي لـ SPU وسجل NPC.

    يتطلب إنشاء سياقات SPU_CREATE_ISOLATE أيضًا العلم SPU_CREATE_NOSCHED.

SPU_CREATE_AFFINITY_SPU (منذ Linux 2.6.23)
    إنشاء سياق بتقارب مع سياق SPU آخر. تُستخدم معلومات التقارب هذه داخل خوارزمية جدولة SPU. يتطلب استخدام هذا العلم تمرير واصف ملف يشير إلى سياق SPU الآخر في وسيط neighbor_fd.

SPU_CREATE_AFFINITY_MEM (منذ Linux 2.6.23)
    إنشاء سياق بتقارب مع ذاكرة النظام. تُستخدم معلومات التقارب هذه داخل خوارزمية جدولة SPU.

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

الأخطاء

EACCES
    ليس لدى المستخدم الحالي صلاحية الكتابة إلى نقطة وصل spufs(7).

EEXIST
    يوجد سياق SPU بالفعل في اسم المسار المُعطى.

EFAULT
    path ليس مؤشر سلسلة صالحًا في مساحة عنوان العملية المستدعية.

EINVAL
    path ليس دليلاً في نقطة وصل spufs(7)، أو تم توفير أعلام غير صالحة.

ELOOP
    تم العثور على عدد كبير جدًا من الروابط الرمزية أثناء تحليل path.

EMFILE
    وُصل إلى الحد الأقصى لواصفات الملفات المفتوحة لكل عملية.

ENAMETOOLONG
    المسار path طويل جداً.

ENFILE
    وُصل إلى الحد الأقصى لإجمالي عدد الملفات المفتوحة على مستوى النظام.

ENODEV
    تم طلب سياق معزول، لكن العتاد لا يدعم عزل SPU.

ENOENT
    تعذر تحليل جزء من path.

ENOMEM
    تعذر على النواة تخصيص جميع الموارد المطلوبة.

ENOSPC
    لا توجد موارد SPU كافية متاحة لإنشاء سياق جديد أو تم الوصول إلى الحد الخاص بالمستخدم لعدد سياقات SPU.

ENOSYS
    هذه الوظيفة غير مقدمة من قبل النظام الحالي، لأن الأجهزة لا توفر وحدات SPUs أو لأن وحدة spufs غير محملة.

ENOTDIR
    جزء من path ليس دليلاً.

EPERM
    تم إعطاء العلم 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 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

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