spufs(7)

الاسم
spufs - نظام ملفات SPU

الوصف
يُستخدم نظام ملفات SPU على أجهزة PowerPC التي تطبق بنية Cell Broadband Engine للوصول إلى وحدات المعالجة التآزرية (SPUs).

يوفر نظام الملفات مساحة أسماء مشابهة للذاكرة المشتركة POSIX أو قوائم الرسائل. يمكن للمستخدمين الذين لديهم أذونات كتابة على نظام الملفات استخدام spu_create(2) لإنشاء سياقات SPU تحت الدليل الجذر spufs.

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

  خيارات الوصل

uid=<uid>
    تعيين المستخدم المالك لنقطة الوصل؛ المبدئي هو 0 (الجذر).

gid=<gid>
    تعيين المجموعة المالكة لنقطة الوصل؛ المبدئي هو 0 (الجذر).

mode=<mode>
    تعيين وضع الدليل الأعلى في spufs، كسلسلة وضع ثماني. المبدئي هو 0775.

  الملفات
تتبع الملفات في spufs في الغالب السلوك القياسي لاستدعاءات النظام العادية مثل read(2) أو write(2)، لكنها غالبًا تدعم فقط مجموعة فرعية من العمليات المدعومة على أنظمة الملفات العادية. تسرد هذه القائمة العمليات المدعومة والانحرافات عن السلوك القياسي الموصوف في صفحات الدليل الخاصة.

جميع الملفات التي تدعم عملية read(2) تدعم أيضًا readv(2) وجميع الملفات التي تدعم عملية write(2) تدعم أيضًا writev(2). تدعم جميع الملفات عائلة عمليات access(2) و stat(2)، لكن بالنسبة للاستدعاء الأخير، الحقول الوحيدة من بنية stat المرتجعة التي تحتوي على معلومات موثوقة هي st_mode و st_nlink و st_uid و st_gid.

تدعم جميع الملفات عمليات chmod(2)/ fchmod(2) و chown(2)/ fchown(2)، لكنها لن تكون قادرة على منح أذونات تتعارض مع العمليات الممكنة (مثل، وصول قراءة على ملف wbox).

المجموعة الحالية من الملفات هي:

/capabilities
    يحتوي على سلسلة مفصولة بفواصل تمثل قدرات سياق SPU هذا. القدرات الممكنة هي:

    sched
        يمكن جدولة هذا السياق.

    step
        يمكن تشغيل هذا السياق في وضع الخطوة الواحدة، لتصحيح الأخطاء.

    قد تُضاف علامات قدرات جديدة في المستقبل.

/mem
    محتويات ذاكرة التخزين المحلية لـ SPU. يمكن الوصول إليها مثل ملف ذاكرة مشتركة عادي وتحتوي على كل من الكود والبيانات في مساحة عنوان SPU. العمليات الممكنة على ملف mem مفتوح هي:

    read(2)
    pread(2)
    write(2)
    pwrite(2)
    lseek(2)
        تعمل هذه كالمعتاد، باستثناء أن lseek(2) و write(2) و pwrite(2) غير مدعومة بعد نهاية الملف. حجم الملف هو حجم التخزين المحلي لـ SPU، والذي يبلغ عادة 256 كيلوبايت.

    mmap(2)
        تعيين mem في مساحة عنوان العملية يوفر الوصول إلى التخزين المحلي لـ SPU داخل مساحة عنوان العملية. يُسمح فقط بتعيينات MAP_SHARED.

/regs
    يحتوي على المسجلات العامة المحفوظة لسياق SPU. يحتوي هذا الملف على قيم 128 بت لكل مسجل، من المسجل 0 إلى المسجل 127، بالترتيب. يتيح ذلك فحص المسجلات العامة لأغراض التصحيح.

    تتطلب القراءة من هذا الملف أو الكتابة إليه أن يكون السياق خارج الجدولة، لذا لا يُوصى باستخدام هذا الملف في تشغيل البرنامج العادي.

    الملف regs غير موجود في السياقات التي أُنشئت بالعلم SPU_CREATE_NOSCHED.

/mbox
    صندوق البريد الأول للاتصال من SPU إلى CPU. هذا الملف للقراءة فقط ويُقرأ بوحدات 4 بايت. يُستخدم الملف فقط في الوضع غير المحظور - حتى poll(2) لا يُستخدم للحظر على هذا الملف. العملية الوحيدة الممكنة على ملف mbox مفتوح هي:

    read(2)
        إذا كان count أصغر من أربعة، يُرجع read(2) -1 ويضبط errno على EINVAL. إذا لم تكن بيانات متوفرة في صندوق البريد (أي لم يُرسل SPU رسالة صندوق بريد)، تُضبط القيمة المُرجعة على -1 ويُضبط errno على EAGAIN. عند قراءة البيانات بنجاح، تُوضع أربعة بايتات في مخزن البيانات وتُعاد القيمة أربعة.

/ibox
    صندوق البريد الثاني للاتصال من SPU إلى CPU. هذا الملف مشابه لملف صندوق البريد الأول، لكن يُقرأ في وضع الإدخال/الإخراج المحظور، لذا فإن استدعاء read(2) على ملف ibox مفتوح سيحظر حتى يكتب SPU بيانات إلى قناة صندوق بريد المقاطعة (إلا إذا فُتح الملف بـ O_NONBLOCK، انظر أدناه). أيضًا، يُستخدم poll(2) واستدعاءات نظام مماثلة لمراقبة وجود بيانات صندوق البريد.

    العمليات الممكنة على ملف ibox مفتوح هي:

    read(2)
        إذا كان count أصغر من أربعة، يُرجع read(2) -1 ويضبط errno على EINVAL. إذا لم تكن بيانات متوفرة في صندوق البريد وفُتح واصف الملف بـ O_NONBLOCK، تُضبط القيمة المُرجعة على -1 ويُضبط errno على EAGAIN.

        إذا لم تكن بيانات متوفرة في صندوق البريد وفُتح واصف الملف بدون O_NONBLOCK، سيحظر الاستدعاء حتى يكتب SPU إلى قناة صندوق بريد المقاطعة. عند قراءة البيانات بنجاح، تُوضع أربعة بايتات في مخزن البيانات وتُعاد القيمة أربعة.

    poll(2)
        يُرجع الاستقصاء على ملف ibox (POLLIN | POLLRDNORM) كلما توفرت بيانات للقراءة.

/wbox
    صندوق البريد للاتصال من CPU إلى SPU. هو للكتابة فقط ويُكتب بوحدات أربعة بايتات. إذا كان صندوق البريد ممتلئًا، سيحظر write(2)، ويُستخدم poll(2) للحظر حتى يتوفر صندوق البريد للكتابة مرة أخرى. العمليات الممكنة على ملف wbox مفتوح هي:

    write(2)
        إذا كان count أصغر من أربعة، يُرجع write(2) -1 ويضبط errno على EINVAL. إذا لم تكن مساحة متوفرة في صندوق البريد وفُتح واصف الملف بـ O_NONBLOCK، تُضبط القيمة المُرجعة على -1 ويُضبط errno على EAGAIN.

        إذا لم تكن مساحة متوفرة في صندوق البريد وفُتح واصف الملف بدون O_NONBLOCK، سيحظر الاستدعاء حتى يقرأ SPU من قناة صندوق بريد PPE (عنصر معالجة PowerPC). عند كتابة البيانات بنجاح، يُرجع استدعاء النظام أربعة كنتيجة وظيفته.

    poll(2)
        يُرجع الاستقصاء على ملف wbox (POLLOUT | POLLWRNORM) كلما توفرت مساحة للكتابة.

/mbox_stat
/ibox_stat
/wbox_stat
    هذه ملفات للقراءة فقط تحتوي على طول قائمة الانتظار الحالية لكل صندوق بريد—أي عدد الكلمات التي تُقرأ من mbox أو ibox أو عدد الكلمات التي تُكتب إلى wbox دون حظر. تُقرأ الملفات فقط بوحدات أربعة بايتات وتُعيد عددًا صحيحًا ثنائيًا كبير النهاية. العملية الوحيدة الممكنة على ملف *box_stat مفتوح هي:

    read(2)
        إذا كان count أصغر من أربعة، يُرجع read(2) -1 ويضبط errno على EINVAL. وإلا، تُوضع قيمة بأربعة بايتات في مخزن البيانات. هذه القيمة هي عدد العناصر التي تُقرأ من (لـ mbox_stat و ibox_stat) أو تُكتب إلى (لـ wbox_stat) صندوق البريد المعني دون حظر أو إرجاع خطأ EAGAIN.

/npc
/decr
/decr_status
/spu_tag_mask
/event_mask
/event_status
/srr0
/lslr
    السجلات الداخلية لوحدة SPU. تحتوي هذه الملفات على سلسلة ASCII تمثل القيمة السداسية عشرية للسجل المحدد. تتطلب عمليات القراءة والكتابة على هذه الملفات (باستثناء npc، انظر أدناه) أن يتم جدولة سياق SPU خارجيًا، لذا لا يُوصى بالوصول المتكرر إلى هذه الملفات لتشغيل البرنامج العادي.

    محتويات هذه الملفات هي:

    npc عداد البرنامج التالي - صالح فقط عندما تكون SPU في حالة توقف.

    decr
        مُخَفِّض SPU

    decr_status
        حالة المُخَفِّض

    spu_tag_mask
        قناع علامة MFC لـ SPU DMA

    event_mask
        قناع الأحداث لمقاطعات SPU

    event_status
        عدد أحداث SPU المعلقة (للقراءة فقط)

    srr0
        سجل عنوان العودة للمقاطعة

    lslr
        سجل حد التخزين المحلي

    العمليات الممكنة على هذه الملفات هي:

    read(2)
        يقرأ قيمة السجل الحالية. إذا كانت قيمة السجل أكبر من المخزن المُمرر إلى استدعاء النظام read(2)، ستستمر القراءات اللاحقة في القراءة من نفس المخزن حتى الوصول إلى نهاية المخزن.

        عند قراءة سلسلة كاملة، ستعيد جميع عمليات القراءة اللاحقة صفر بايت، ويجب فتح واصف ملف جديد لقراءة قيمة جديدة.

    write(2)
        عملية write(2) على الملف تضبط السجل على القيمة المُعطاة في السلسلة. تُحلل السلسلة من البداية حتى أول حرف غير رقمي أو نهاية المخزن. الكتابات اللاحقة لنفس واصف الملف تستبدل الإعداد السابق.

        باستثناء ملف npc، هذه الملفات غير موجودة في السياقات التي أُنشئت باستخدام العلم SPU_CREATE_NOSCHED.

/fpcr
    يوفر هذا الملف الوصول إلى سجل حالة النقطة العائمة والتحكم (fcpr) كملف ثنائي بأربعة بايت. العمليات على ملف fpcr هي:

    read(2)
        إذا كان count أصغر من أربعة، يُرجع read(2) -1 ويضبط errno على EINVAL. وإلا، تُوضع قيمة بأربعة بايت في مخزن البيانات؛ هذه هي القيمة الحالية لسجل fpcr.

    write(2)
        إذا كان count أصغر من أربعة، يُرجع write(2) -1 ويضبط errno على EINVAL. وإلا، تُنسخ قيمة بأربعة بايت من مخزن البيانات، مُحدثة قيمة سجل fpcr.

/signal1
/signal2
    توفر الملفات الوصول إلى قناتي إشعار الإشارة لوحدة SPU. هذه ملفات قابلة للقراءة والكتابة تعمل على كلمات بأربعة بايت. الكتابة إلى أحد هذه الملفات تُطلق مقاطعة على SPU. يمكن قراءة القيمة المكتوبة إلى ملفات الإشارة من SPU عبر قراءة قناة أو من مساحة مستخدم المضيف عبر الملف. بعد قراءة القيمة بواسطة SPU، تُعاد ضبطها إلى الصفر. العمليات الممكنة على ملف signal1 أو signal2 المفتوح هي:

    read(2)
        إذا كان count أصغر من أربعة، يُرجع read(2) -1 ويضبط errno على EINVAL. وإلا، تُوضع قيمة بأربعة بايت في مخزن البيانات؛ هذه هي القيمة الحالية لسجل إشعار الإشارة المُحدد.

    write(2)
        إذا كان count أصغر من أربعة، يُرجع write(2) -1 ويضبط errno على EINVAL. وإلا، تُنسخ قيمة بأربعة بايت من مخزن البيانات، مُحدثة قيمة سجل إشعار الإشارة المُحدد. سيُستبدل سجل إشعار الإشارة إما ببيانات الإدخال أو يُحدث إلى عملية OR بالبت للقيمة القديمة وبيانات الإدخال، اعتمادًا على محتويات ملفي signal1_type أو signal2_type على التوالي.

/signal1_type
/signal2_type
    يغير هذان الملفان سلوك ملفي الإشعار signal1 و signal2. يحتويان على سلسلة ASCII رقمية تُقرأ إما كـ "1" أو "0". في الوضع 0 (استبدال)، يستبدل العتاد محتويات قناة الإشارة بالبيانات المكتوبة إليها. في الوضع 1 (OR منطقي)، يجمع العتاد البتات المكتوبة إليه لاحقًا. العمليات الممكنة على ملف signal1_type أو signal2_type المفتوح هي:

    read(2)
        عندما يكون العدد المُقدم لاستدعاء read(2) أقصر من الطول المطلوب للرقم (بالإضافة إلى حرف سطر جديد)، ستكمل القراءات اللاحقة من نفس واصف الملف السلسلة. عند قراءة سلسلة كاملة، ستعيد جميع عمليات القراءة اللاحقة صفر بايت، ويجب فتح واصف ملف جديد لقراءة القيمة مرة أخرى.

    write(2)
        عملية write(2) على الملف تضبط السجل على القيمة المُعطاة في السلسلة. تُحلل السلسلة من البداية حتى أول حرف غير رقمي أو نهاية المخزن. الكتابات اللاحقة لنفس واصف الملف تستبدل الإعداد السابق.

/mbox_info
/ibox_info
/wbox_info
/dma_into
/proxydma_info
    ملفات للقراءة فقط تحتوي على الحالة المحفوظة لصناديق البريد وقوائم DMA لوحدة SPU. يسمح هذا بفحص حالة SPU، بشكل أساسي لتصحيح الأخطاء. يحتوي ملفا mbox_info و ibox_info كل على رسالة صندوق البريد بأربعة بايت التي كُتبت بواسطة SPU. إذا لم تُكتب أي رسالة إلى هذه الصناديق، فمحتويات هذه الملفات غير محددة. تحتوي ملفات mbox_stat و ibox_stat و wbox_stat على عدد الرسائل المتاحة.

    يحتوي ملف wbox_info على مصفوفة من رسائل صندوق البريد بأربعة بايت، والتي أُرسلت إلى SPU. مع أجهزة CBEA الحالية، طول المصفوفة هو أربعة عناصر، لذا يمكن قراءة حتى 4 * 4 = 16 بايت من هذا الملف. إذا كان أي إدخال في قائمة انتظار صندوق البريد فارغًا، فالبايتات المقروءة في الموقع المقابل غير محددة.

    يحتوي ملف dma_info على محتويات قائمة انتظار DMA لوحدة MFC الخاصة بـ SPU، ممثلة بالبنية التالية:

        struct spu_dma_info {
            uint64_t         dma_info_type;
            uint64_t         dma_info_mask;
            uint64_t         dma_info_status;
            uint64_t         dma_info_stall_and_notify;
            uint64_t         dma_info_atomic_command_status;
            struct mfc_cq_sr dma_info_command_data[16];
        };

    العضو الأخير في بنية البيانات هذه هو قائمة انتظار DMA الفعلية، التي تحتوي على 16 مدخلاً. تُعرّف بنية mfc_cq_sr كالتالي:

        struct mfc_cq_sr {
            uint64_t mfc_cq_data0_RW;
            uint64_t mfc_cq_data1_RW;
            uint64_t mfc_cq_data2_RW;
            uint64_t mfc_cq_data3_RW;
        };

    يحتوي ملف proxydma_info على معلومات مماثلة، لكنه يصف قائمة انتظار DMA الوكيل (أي عمليات DMA التي بدأتها كيانات خارج SPU) بدلاً من ذلك. الملف بالتنسيق التالي:

        struct spu_proxydma_info {
            uint64_t         proxydma_info_type;
            uint64_t         proxydma_info_mask;
            uint64_t         proxydma_info_status;
            struct mfc_cq_sr proxydma_info_command_data[8];
        };

    يتطلب الوصول إلى هذه الملفات أن يكون سياق SPU مجدولاً للخارج - الاستخدام المتكرر قد يكون غير فعال. لا ينبغي استخدام هذه الملفات لتشغيل البرنامج العادي.

    هذه الملفات غير موجودة في السياقات التي أُنشئت مع العلم SPU_CREATE_NOSCHED.

/cntl
    يوفر هذا الملف الوصول إلى سجلات التحكم في التشغيل وحالة SPU، كسلسلة ASCII. العمليات التالية مدعومة:

    read(2)
        ستعيد القراءات من ملف cntl سلسلة ASCII بقيمة سداسية عشرية لسجل حالة SPU.

    write(2)
        ستضبط الكتابات إلى ملف cntl سجل التحكم في تشغيل SPU للسياق.

/mfc
    يوفر الوصول إلى وحدة التحكم في تدفق الذاكرة لـ SPU. تعيد القراءة من الملف محتويات سجل حالة علامة MFC لـ SPU، وتبدأ الكتابة إلى الملف عملية DMA من MFC. العمليات التالية مدعومة:

    write(2)
        يجب أن تكون الكتابات إلى هذا الملف بتنسيق أمر DMA لـ MFC، المُعرّف كالتالي:

            struct mfc_dma_command {
                int32_t  pad;    /* reserved */
                uint32_t lsa;    /* local storage address */
                uint64_t ea;     /* effective address */
                uint16_t size;   /* transfer size */
                uint16_t tag;    /* command tag */
                uint16_t class;  /* class ID */
                uint16_t cmd;    /* command opcode */
            };

        يُطلب أن تكون الكتابات بحجم sizeof(struct mfc_dma_command) بايت بالضبط. سيُرسل الأمر إلى قائمة انتظار وكيل MFC لـ SPU، وتُخزّن العلامة في النواة (انظر أدناه).

    read(2)
        يقرأ محتويات سجل حالة العلامة. إذا فُتح الملف في وضع الحظر (أي بدون O_NONBLOCK)، فسيحظر القراءة حتى تكتمل علامة DMA (كما نُفذت بكتابة سابقة). في وضع عدم الحظر، سيُعاد سجل حالة علامة MFC دون انتظار.

    poll(2)
        سيحظر استدعاء poll(2) على ملف mfc حتى يمكن بدء DMA جديد (بفحص POLLOUT) أو حتى تكتمل DMA بدأت سابقاً (بفحص POLLIN).

        /mss يوفر الوصول إلى مرفق مزامنة متعددة المصادر (MSS) لـ MFC. عن طريق mmap(2) لهذا الملف، يمكن للعمليات الوصول إلى منطقة MSS لـ SPU.

        العمليات التالية مدعومة:

    mmap(2)
        يُعطي تعيين mss في مساحة عنوان العملية الوصول إلى منطقة MSS لـ SPU داخل مساحة عنوان العملية. يُسمح فقط بتعيينات MAP_SHARED.

/psmap
    يوفر الوصول إلى تعيين حالة المشكلة الكامل لـ SPU. يمكن للتطبيقات استخدام هذه المنطقة للواجهة مع SPU، بدلاً من الكتابة إلى ملفات سجلات فردية في spufs.

    العمليات التالية مدعومة:

    mmap(2)
        يُعطي تعيين psmap للعملية تعييناً مباشراً لمنطقة حالة مشكلة SPU. تُدعم فقط تعيينات MAP_SHARED.

/phys-id
    ملف للقراءة فقط يحتوي على رقم SPU الفعلي الذي يعمل عليه سياق SPU. عندما لا يعمل السياق، يحتوي هذا الملف على السلسلة "-1".

    رقم SPU الفعلي معطى بسلسلة ست عشرية ASCII.

/object-id
    يسمح للتطبيقات بتخزين (أو استرجاع) معرف واحد 64-بت في السياق. يُستخدم هذا المعرف لاحقًا بواسطة أدوات التنميط لتحديد السياق بشكل فريد.

    write(2)
        بكتابة قيمة ست عشرية ASCII في هذا الملف، يمكن للتطبيقات تعيين معرف الكائن لسياق SPU. تُستبدل أي قيمة سابقة لمعرف الكائن.

    read(2)
        قراءة هذا الملف تعطي سلسلة ست عشرية ASCII تمثل معرف الكائن لسياق SPU هذا.

أمثلة
لوصول mount(8) آلي لنظام ملفات SPU عند الإقلاع، في الموقع /spu الذي يختاره المستخدم، ضع هذا السطر في ملف الإعدادات fstab(5):
    none /spu spufs gid=spu 0 0

انظر أيضًا
close(2), spu_create(2), spu_run(2), capabilities(7)

مواصفات بنية محرك النطاق العريض Cell (CBEA)

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

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

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