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 <arndb@de.ibm.com>,Mark Nutter <mnutter@us.ibm.com>,Ulrich Weigand <Ulrich.Weigand@de.ibm.com>

參見



previous next Printer Friendly

廣告


  

廣告



廣告
© . All rights reserved.