spufs() - Unix,Linux 系统调用
Tutorials Point


  Unix 初学者教程
  Unix Shell 编程
  高级 Unix
  Unix 有用参考
  Unix 有用资源
  精选读物

版权所有 © 2014 tutorialspoint



  首页     参考资料     讨论论坛     关于 TP  

spufs() - Unix,Linux 系统调用


previous next AddThis Social Bookmark Button

广告

名称

spufs - SPU 文件系统

描述

SPU 文件系统用于实现 Cell Broadband Engine 架构的 PowerPC 机器,以便访问协同处理器单元 (SPU)。

该文件系统提供类似于 posix 共享内存或消息队列的命名空间。对文件系统具有写权限的用户可以使用spu_create(2) 在 spufs 根目录中建立 SPU 上下文。

每个 SPU 上下文都由一个包含预定义文件集的目录表示。这些文件可用于操作逻辑 SPU 的状态。用户可以更改这些文件的权限,但不能实际添加或删除文件。

挂载选项

标签描述
uid=<uid>
 设置拥有挂载点的用户,默认为 0 (root)。
gid=<gid>
 设置拥有挂载点的组,默认为 0 (root)。

文件

spufs 中的文件大多遵循标准系统调用(如read(2) 或write(2))的标准行为,但通常只支持常规文件系统支持的操作的一个子集。此列表详细说明了支持的操作以及与各个手册页中行为的偏差。

所有支持read(2) 操作的文件也支持readv(2),所有支持write(2) 操作的文件也支持writev(2)。所有文件都支持access(2) 和stat(2) 系列操作,但struct stat 的 st_mode、st_nlink、st_uid 和 st_gid 字段仅包含可靠信息。

所有文件都支持chmod(2)/fchmod(2) 和chown(2)/fchown(2) 操作,但无法授予与可能的运行操作相矛盾的权限,例如wbox 文件上的读取权限。

当前的文件集为:

/mem

SPU 本地存储内存的内容。这可以像常规共享内存文件一样访问,并且包含 SPU 地址空间中的代码和数据。对打开的mem 文件可能的运行操作为:
标签描述
read(2), pread(2), write(2), pwrite(2), lseek(2)
 这些操作如文档中所述,但seek(2)、write(2) 和pwrite(2) 不支持超过文件结尾的操作。文件大小为 SPU 本地存储的大小,通常为 256 千字节。
mmap(2)
 mem 映射到进程地址空间可访问进程地址空间内的 SPU 本地存储。仅允许 MAP_SHARED 映射。

/mbox

第一个 SPU 到 CPU 通信邮箱。此文件是只读的,可以以 32 位为单位读取。该文件只能在非阻塞模式下使用,即使是 poll() 也不会阻塞。
标签描述
read(2)
 如果请求的计数小于四个,read 返回 -1 并将 errno 设置为 EINVAL。如果邮箱中没有可用数据,则返回值设置为 -1,errno 变成 EAGAIN。成功读取数据后,四个字节将放置在数据缓冲区中,并返回数值四。

/ibox

第二个 SPU 到 CPU 通信邮箱。此文件类似于第一个邮箱文件,但可以在阻塞 I/O 模式下读取,并且可以使用 poll 系列系统调用来等待它。对打开的ibox 文件可能的运行操作为:
标签描述
read(2)
 如果请求的计数小于四个,read 返回 -1 并将 errno 设置为 EINVAL。如果邮箱中没有可用数据并且文件描述符已使用 O_NONBLOCK 打开,则返回值设置为 -1,errno 变成 EAGAIN。

如果邮箱中没有可用数据并且文件描述符没有使用 O_NONBLOCK 打开,则调用将阻塞,直到 SPU 写入其中断邮箱通道。成功读取数据后,四个字节将放置在数据缓冲区中,并返回数值四。

poll(2)
 ibox 文件进行轮询会在有数据可供读取时返回 (POLLIN | POLLRDNORM)。

/wbox

CPU 到 SPU 通信邮箱。它是只写的,可以以 32 位为单位写入。如果邮箱已满,write() 将阻塞,并且可以使用 poll 来等待它再次变空。对打开的wbox 文件可能的运行操作为:write(2) 如果请求的计数小于四个,write 返回 -1 并将 errno 设置为 EINVAL。如果邮箱中没有可用空间并且文件描述符已使用 O_NONBLOCK 打开,则返回值设置为 -1,errno 变成 EAGAIN。

如果邮箱中没有可用空间并且文件描述符没有使用 O_NONBLOCK 打开,则调用将阻塞,直到 SPU 从其 PPE 邮箱通道读取数据。成功读取数据后,四个字节将放置在数据缓冲区中,并返回数值四。

标签描述
poll(2)
 ibox 文件进行轮询会在有空间可供写入时返回 (POLLOUT | POLLWRNORM)。

/mbox_stat

/ibox_stat

/wbox_stat

包含当前队列长度的只读文件,即有多少字可以从 mbox 或 ibox 读取,或者有多少字可以写入 wbox 而不会阻塞。这些文件只能以 4 字节为单位读取,并返回大端二进制整数。对打开的*box_stat 文件可能的运行操作为:
标签描述
read(2)
 如果请求的计数小于四个,read 返回 -1 并将 errno 设置为 EINVAL。否则,将一个四字节值放入数据缓冲区,其中包含可以从 (对于mbox_statibox_stat) 或写入 (对于wbox_stat) 相应邮箱而不阻塞或导致 EAGAIN 的元素数。

/npc

/decr

/decr_status

/spu_tag_mask

/event_mask

/srr0

SPU 的内部寄存器。表示形式是包含下一个要执行指令的数值的 ASCII 字符串。这些可在读/写模式下用于调试,但程序的正常运行不应依赖于它们,因为访问除 npc 之外的任何寄存器都需要保存 SPU 上下文,因此效率非常低。

这些文件的内容为:

标签描述
npc 下一个程序计数器
decr SPU 减计数器
decr_status 减计数器状态
spu_tag_mask SPU DMA 的 MFC 标签掩码
event_mask SPU 中断的事件掩码
srr0 中断返回地址寄存器

对打开的npcdecrdecr_statusspu_tag_maskevent_masksrr0 文件可能的运行操作为:

标签描述
read(2)
 当提供给read 调用的计数小于指针值加上换行符所需的长度时,从相同文件描述符的后续读取将导致完成字符串,而不管正在运行的 SPU 任务对寄存器的更改如何。当已读取完整字符串时,所有后续读取操作都将返回零字节,需要打开新的文件描述符才能再次读取值。
write(2)
 对文件进行write 操作会导致将寄存器设置为字符串中给定的值。从开头到第一个非数字字符或缓冲区的末尾解析字符串。对相同文件描述符的后续写入将覆盖之前的设置。

/fpcr

此文件提供对浮点状态和控制寄存器作为四个字节长的文件的访问。对fpcr 文件的操作为:
标签描述
read(2)
 如果请求的计数小于四个,read 返回 -1 并将 errno 设置为 EINVAL。否则,将一个四字节值放入数据缓冲区,其中包含 fpcr 寄存器的当前值。
write(2)
 如果请求的计数小于四个,write 返回 -1 并将 errno 设置为 EINVAL。否则,将一个四字节值从数据缓冲区复制,更新 fpcr 寄存器的值。

/signal1

/signal2

SPU 的两个信号通知通道。这些是基于 32 位字运行的读写文件。写入这些文件之一会在 SPU 上触发中断。写入信号文件的值可以通过通道读取从 SPU 读取,或者通过文件从主机用户空间读取。SPU 读取值后,将其重置为零。对打开的signal1signal2 文件可能的运行操作为:
标签描述
read(2)
 如果请求的计数小于四个,read 返回 -1 并将 errno 设置为 EINVAL。否则,将一个四字节值放入数据缓冲区,其中包含指定的信号通知寄存器的当前值。
write(2)
 如果请求的计数小于四个,write 返回 -1 并将 errno 设置为 EINVAL。否则,将一个四字节值从数据缓冲区复制,更新指定的信号通知寄存器的值。信号通知寄存器将被输入数据替换,或者更新为旧值和输入数据的按位或运算结果,具体取决于 signal1_type 或 signal2_type 文件的内容。

/signal1_type

/signal2_type

这两个文件会更改 signal1 和 signal2 通知文件的行为。它们包含一个数值 ASCII 字符串,读取为“1”或“0”。在模式 0(覆盖)中,硬件将信号通道的内容替换为写入其中的数据。在模式 1(逻辑或)中,硬件会累积随后写入其中的位。对打开的signal1_typesignal2_type 文件可能的运行操作为:
标签描述
read(2)
 当提供给read 调用的计数小于数字加上换行符所需的长度时,从相同文件描述符的后续读取将导致完成字符串。当已读取完整字符串时,所有后续读取操作都将返回零字节,需要打开新的文件描述符才能再次读取值。
write(2)
 对文件进行write 操作会导致将寄存器设置为字符串中给定的值。从开头到第一个非数字字符或缓冲区的末尾解析字符串。对相同文件描述符的后续写入将覆盖之前的设置。

示例

标签描述
/etc/fstab 条目
 none /spu spufs gid=spu 0 0

作者

Arnd Bergmann <[email protected]>,Mark Nutter <[email protected]>,Ulrich Weigand <[email protected]>

参见



previous next Printer Friendly

广告


  

广告



广告