GearsOSの分散ファイルシステムの設計

Takahiro Ikki, Shinji Kono 琉球大学

GearsOSとその現状

従来の物より発展した分散ファイルシステムの設計

CbC (Continuation based C)

 CodeGearとDataGearの関係

CbCのサンプルプログラム

__code CG2(int num3){
  printf("num = %d\n", num3);
  exit(0);
}

__code CG1(int num, int num1){
  int num2 = num + num1;
  goto CG2(num2);
}

int main(){
  int a = 2;
  int b = 3;
  goto CG1(a, b);
}

メタレベルのGear

 ノーマルレベルとメタレベルの視点からのGearの関係

GearsOSの構成

typedef struct Queue<>{
    union Data* queue;
    union Data* data;

    __code whenEmpty(...);
    __code clear(Impl* queue, __code next(...));
    __code put(Impl* queue, union Data* data, __code next(...));
    __code take(Impl* queue, __code next(union Data* data, ...));
    __code isEmpty(Impl* queue, __code next(...), __code whenEmpty(...));
    __code next(...);
} Queue;
typedef struct SynchronizedQueue <> impl Queue {
  struct Element* top;
  struct Element* last;
  struct Atomic* atomic;
} SynchronizedQueue;

ContextとGearの関係性

 Contextの参照

GearsOSのトランスコンパイラ

分散フレームワークChristie

ChristieのGear

DataGearManagerによる通信

 RemoteDGMの関係図

TopologyManagear

 TopologyManager

GearsFileSystemの方針

GearsFSのファイル構造1/4

 Queueの構造

GearsFSのファイル構造2/4

 streamによるファイルアクセス

GearsFSのファイル構造3/4

GearsFSのファイル構造4/4

 DataGearの保存形式

遠隔からのファイル操作

 socketを通じたレコード送信

socketからの受信データ取り出し

__code getDataLocalDGMQueue(struct LocalDGMQueue* cQueue, __code next(...), __code whenEOF(...), __code whenError(...)){
    union Data* recv_data;
    recv_size = recv(cQueue->socket, recv_data, sizeof(union Data), 0);
    if (recv_size == -1) {
        printf("recv error\n");
        goto whenError(...);
    }
    FileString* fileString = NEW(FileString);
    fileString = recv_data;
    if (fileString->EoF) == 1) {
        send_buf = 0;
        send_size = send(cQueue->socket, &send_buf, 1, 0);
        if (send_size == -1) {
            printf("send error\n");
        }
        close(cQueue->buffer);
        goto whenEOF(...);
    } else {
        send_buf = 1;
        send_size = send(cQueue->socket, &send_buf, 1, 0);
        if (send_size == -1) {
            printf("send error\n");
            goto whenError(...);
        }
    }

    Gearef(context, cQueue)->data = recv_data;
    goto putLocalDGMQueue(recv_data, next);
}

RemoteDGMのsocketによるデータ送信

WordCount例題

ChristieAPIによるWordCount

 ChristieAPIによるWordCount

GearsFSのディレクトリ

 GearsOSのディレクトリ

GearsFSのバックアップ(1/2)

 非破壊的なツリー編集

GearsFSのバックアップ(2/2)

GearsFSの並列処理

GearsOSの問題点

課題

結論

この先保留ページ

GearsOSのImplementation

研究成果

API手順

WordCount手順

 WordCountの遷移図