• 沒有找到結果。

三、 DVB-RCS模擬的設計與實作

3.4. 通道資源分配系統

3.4.1. 分配者

我們在這一節介紹NCC_CTL 模組中一個稱為分配者的函式單元,分配者的工作是 分配反向通道資源。分配者將所有RCST 節點送來的要求訊息記錄在一個陣列,我們稱 之為「要求陣列」。在每一個視框開始時間,分配者呼叫內部函式「frame_scheduing( )」

來依據要求陣列做資源分配,並產生描述分配結果的TBTP 控制表格。此函式的實作與 使用的分配機制相關,模擬器使用者可以在檔案「timeslot_scheduler.cc」內重新定義自 己的分配機制。以下我們用偽碼(Pseudo Code)形式來介紹我們的分配者設計。

在frame_scheduing( )中,「request timeslot allocation」分配要求時槽;而「CRA allocation」、「RBDC allocation」、「VBDC/AVBDC allocation」、以及「FCA allocation」分 配資料時槽。要求時槽的分配使用Round-Robin 方式,一次分配一個要求時槽給一個

RCST 節點,然後換下一個 RCST 節點,直到所有要求時槽都分配完或者每一個 RCST 節點都有一個要求時槽。在我們的設計中,CRA 以及 RBDC 兩種額度都是受到保證,

所以CRA 以及 RBDC 分配要放置在其他資料時槽分配方式前面;而 FCA 是負責分配剩 餘的時槽,所以放在最後面。當時槽分配完畢之後,分配者就會按照分配表產生TBTP 控制表格,並發送給每一個RCST 節點。

分配者中使用的資料結構:

A[ ] //A[i] stores the total number of TRF timeslot allocated to RCST i.

RV[ ] //RV[i] stores the value of previous RBDC request from RCST i.

VV[ ] //VV[i] stores the backlog of VBDC/AVBDC request from RCST i.

CRA[ ] //CRA[i] stores the number of TRF timeslot to meet the //CRA_MAX_RATE of RCST i.

RMAX[ ] //RMAX[i] stores the number of TRF timeslot to meet the //RBDC_MAX_RATE of RCST i.

VMAX[ ] //VMAX[i] stores the number of TRF timeslot to meet the //VBDC_MAX_RATE of RCST i.

history[ ] //history[i] stores the history of VBDC requests from RCST i.

frame_scheduling()

1: for each return link channel Sp do

2: //assume all of the RCSTs on Sp are RCST 1, RCST 2, ..., RCST n.

3: reset A[ ] to be a zero vector

4: do request timeslot allocation for Sp 5: do CRA allocation for Sp

6: do RBDC allocation for Sp

7: do VBDC/AVBDC allocation for Sp 8: if FCA scheme is turned on then 9: do FCA allocation for Sp

10: end if 11: end for

3.4.1.1. CRA 分配

下面是CRA 分配的偽碼。CRA 分配中做的事相當簡單,它分配時槽給頻道上擁有 CRA 配額的 RCST 節點。

3.4.1.2. RBDC 分配

下面是RBDC 分配的偽碼。由於 RBDC 要求具有延續性,所以 RBDC 分配會先將 收集到的每一個RBDC 要求記錄到 RV 陣列,來自相同 RCST 節點的前一次 RBDC 要求 會被覆蓋掉。接下來是依據RV 陣列中尚未過期的 RBDC 要求分配時槽給 RCST 節點。

由於各個RCST 節點在 RBDC 分配中可拿到的頻寬有個上限值,所以在第七行中,分配 者對分配出去的時槽量做限制。

3.4.1.3. VBDC 分配

下面是VBDC 分配的偽碼。由於 VBDC 要求具有累加性,所以 VBDC 分配一開始 CRA allocation procedure

1: for i = 1 to n do 2: A[i] Å A[i] + CRA[i]

3: end for

RBDC allocation procedure 1: for each RBDC request Ri do

2: //assume Ri is submitted from RCST(Ri) and of value value(Ri).

3: RV[RCST(Ri)] Å value(Ri) 4: end for

5: for i = 1 to n do

6: if RV[i] has not expired yet then 7: A[i] Å A[i] + min(RV[i] ,RMAX[i]) 8: end if

9: end for

先將每一個收到的VBDC 要求累加到 VBDC 積欠量上;而 AVBDC 要求具有覆蓋性,

所以VBDC 分配會把每一個收到的 AVBDC 要求直接覆蓋掉原先的 VBDC 積欠量。接 下來VBDC 分配以 Round-Robin 方式做時槽分配,輪到的 RCST 節點如果尚有 VBDC 積欠量,而且該RCST 節點分配到的個數還沒到達上限值的話,就會分配一個時槽給它,

接著換下一個RCST 節點,直到所有的時槽都分配出去或者每一個 RCST 節點的 VBDC 積欠量都清空。

3.4.1.4. FCA 分配

FCA 分配的探討是我們這篇論文的主題,為了觀察 FCA 分配對網路效能的影響,

我們設計實作兩種FCA 機制:FCA-RR 以及 FCA-PR-m。FCA-RR 機制是把剩餘時槽做 平均分配;而FCA-PR-m 是把剩餘時槽依照每一個 RCST 節點發出的 VBDC 要求量做 比例性分配。

VBDC/AVBDC allocation procedure

1: declare AV[ ] //AV[i] records the number of TRF timeslot allocated to //RCST i in the VBDC/AVBDC allocation.

2: for each VBDC request Vi do

3: //assume Vi was submitted from RCST(Vi) and of value value(Vi).

4: VV[RCST(Vi)] ÅVV[RCST(Vi)] + value(Vi) 5: end for

6: for all AVBDC request Vi do

7: //assume Vi was submitted from RCST(Vi) and of value value(Vi).

8: VV[RCST(Vi)] Å value(Vi) 9: end for

10: while there exists spare TRF timeslots and VV[ ] is not a zero vector do 11: for i = 1 to n do

12: if there exists no spare TRF timeslots then 13: stop VBDC/AVBDC allocation

14: end if

15: if VV[i] ≠ 0 and AV[i] ≤ VMAX[i] then 16: AV[i] Å AV[i] + 1

17: A[i] Å A[i] + 1 18: VV[i] Å VV[i] − 1 19: end if

20: end for 21: end while

FCA-RR 分配機制

下面是FCA-RR 分配的偽碼。FCA-RR 分配以 Round-Robin 方式做時槽分配,一次 分配一個時槽給一個RCST 節點,然後換下一個 RCST 節點。在我們的設計中,FCA 分 配的時槽是給RCST 節點中的 JT 佇列使用,而 JT 是以 VBDC 方式來要求頻寬,所以當 FCA 分配時槽給某個 RCST 節點時,應該減低該 RCST 節點的 VBDC 積欠量。

FCA-PR-m 分配機制

FCA-PR-m 依據以往各個 RCST 節點發出的 VBDC 要求量來分配時槽,為此,分配 者使用一個歷史函式(History Function)來紀錄各個 RCST 節點的 VBDC 要求量,下面 這段偽碼被安插在VBDC/AVBDC allocation 之中來實現 VBDC 歷史紀錄,其中 m 值是 0 至 1 之間的權數。

下面是FCA-PR-m 分配的偽碼。首先分配者先將所有 RCST 節點的 VBDC 歷史值 做加總,接著依照RCST 節點的 VBDC 歷史值佔總值的比例做時槽分配,依照比例分配 後如果還有剩餘的時槽,以Round-Robin 方式分配剩餘時槽。與 FCA-RR 分配相同,當 FCA 分配時槽給某個 RCST 節點時,應該減低該 RCST 節點的 VBDC 積欠量。

1: for each RCST i do

2: history[i] = history[i] * m + VBDC_REQ_VALUE(i) * (1-m) 3: endfor

FCA allocation procedure – RR 1: while there exists spare TRF timeslot do 2: for i = 1 to n do

3: if there exists no spare TRF timeslot then 4: stop FCA allocation

5: end if

6: A[i] Å A[i] + 1 7: if VV[i] ≠ 0 then 8: VV[i] Å VV[i] − 1 9: end if

10: end for 11: end while

相關文件