10568 words
53 minutes
Osaka University IST Graduate Entrance Exam (2009)

大阪大学 情報科学研究科 情報工学 2008年8月実施 アルゴリズムとプログラミング#

Author#

KardeniaPoyu

Description#

配点: (1) 20点, (2-1) 20点, (2-2) 20点, (2-3) 20点, (2-4) 20点

ハッシュ法 (hash method) によって,いくつかの非負整数 (nonnegative integer) を,添字 (index) の範囲が 0~n1n-1,要素数が nn の配列 (array) に格納 (store) することを考える.ここで,格納する非負整数を nn で割った剰余 (remainder) を返すハッシュ関数 (hash function) を用いて,ハッシュ値 (hash value) を添字とするセル (cell) に非負整数を格納するものとする.なお,衝突 (collision) が生じた際には,ハッシュ値に整数 kk (k1k \ge 1) を加えて nn で割った剰余を添字とするセルに格納する.それでもなお衝突が生じる場合には,非負整数が格納されていないセルが見つかるまで,kk2k,3k,4k,2k, 3k, 4k, \cdotskk の倍数へ順に置き換えて同様の処理を行うものとする.以下の各問に答えよ.

(1) n=10,k=1n = 10, k = 1 とするハッシュ法を考える.どのセルにも非負整数が格納されていない状態から始めて,まず 21 を添字が 1 のセルに格納し,次に 15 を添字が 5 のセルに格納した状態を考える.これに続けて,28 と 35 をこの順番で格納するとき,それぞれどのセルに格納されるか,その添字を答えよ.

(2) 図 1 に示すC言語で書かれたプログラムは,あらかじめ10個の非負整数を配列に格納しておき,キーボードから入力された非負整数が配列に格納されているかどうかを,ハッシュ法によって調べるプログラムである.以下の各小問に答えよ.

(2-1) このプログラムが 43 行目まで実行された後の,table[0]table[19] の値を答えよ.なお,解答にあたっては,解答用紙の欄を用いること.

(2-2) 関数 search(int *table, int d) は,非負整数 d が配列 table に格納されていればその添字を,格納されていなければ -1 を返す.そのような動作となるように,プログラム中の空欄 (ア) ~ (エ) を適切に埋めよ.

(2-3) このプログラムでは,SKIP は 3 となっている.これを 4 に変更すると,45 行目の printf 文以降が実行されない.このような問題が生じる理由を簡潔に答えよ.

(2-4) 小問 (2-3) のような問題が生じないようにするためには,一般に MAXSKIP の間にどのような関係が成立していなければならないか,簡潔に答えよ.

#include <stdio.h>
#define EMPTY -1
#define MAX 20
#define SKIP 3
int hash(int x){
return x % MAX;
}
int next(int x){
x = x + SKIP;
return x % MAX;
}
void store(int *table, int d){
int h;
h = hash(d);
while (table[h] != EMPTY) h = next(h);
table[h] = d;
}
int search(int *table, int d){
int h;
h = (ア) ;
while (table[h] != EMPTY) {
if (table[h] == d) return (イ) ;
h = (ウ) ;
}
return (エ) ;
}
int main(){
int i, query;
int table[MAX];
int data[] = {31,45,59,25,95,39,76,27,65,43};
/* 配列を初期化する */
for (i=0; i<MAX; i++) table[i] = EMPTY;
/* 10個の非負整数を格納する */
for (i=0; i<10; i++) store(table, data[i]);
/* キーボードから非負整数を入力する */
printf("Query: ");
scanf("%d", &query);
/* 入力された非負整数が配列に格納されているかどうかを調べる */
if (search(table, query) != -1) printf("Found.\n");
else printf("Not found.\n");
return 0;
}

Kai#

(1)#

  • 28 の格納:
    • ハッシュ値:28mod10=828 \bmod 10 = 8。インデックス 8 のセルは空(EMPTY)であるため、28 はインデックス 8 のセルに格納される
  • 35 の格納:
    • ハッシュ値:35mod10=535 \bmod 10 = 5。インデックス 5 のセルはすでに 15 によって占有されているため衝突が発生する。
    • 次のセルの探索:(5+k)mod10=(5+1)mod10=6(5 + k) \bmod 10 = (5 + 1) \bmod 10 = 6。インデックス 6 のセルは空であるため、35 はインデックス 6 のセルに格納される

解答:28:8,35:6


(2-1)#

プログラムの設定より、MAX = 20SKIP = 3EMPTY = -1 である。ハッシュ関数は xmod20x \bmod 20、衝突解決法は線形探索法(増分は 3)である。 data[] の 10 個の要素を順に格納するプロセスは以下の通りである:

  1. 31: 31mod20=11    31 \bmod 20 = 11 \implies 空のため、table[11] = 31
  2. 45: 45mod20=5    45 \bmod 20 = 5 \implies 空のため、table[5] = 45
  3. 59: 59mod20=19    59 \bmod 20 = 19 \implies 空のため、table[19] = 59
  4. 25: 25mod20=5    25 \bmod 20 = 5 \implies 衝突。(5+3)%20=8(5+3)\%20 = 8 は空のため、table[8] = 25
  5. 95: 95mod20=15    95 \bmod 20 = 15 \implies 空のため、table[15] = 95
  6. 39: 39mod20=19    39 \bmod 20 = 19 \implies 衝突。(19+3)%20=2(19+3)\%20 = 2 は空のため、table[2] = 39
  7. 76: 76mod20=16    76 \bmod 20 = 16 \implies 空のため、table[16] = 76
  8. 27: 27mod20=7    27 \bmod 20 = 7 \implies 空のため、table[7] = 27
  9. 65: 65mod20=5    65 \bmod 20 = 5 \implies 衝突 8\to 8 (衝突) (8+3)%20=11\to (8+3)\%20 = 11 (衝突) (11+3)%20=14\to (11+3)\%20 = 14 は空のため、table[14] = 65
  10. 43: 43mod20=3    43 \bmod 20 = 3 \implies 空のため、table[3] = 43

最終的な table の状態:

  • table[0] = -1
  • table[1] = -1
  • table[2] = 39
  • table[3] = 43
  • table[4] = -1
  • table[5] = 45
  • table[6] = -1
  • table[7] = 27
  • table[8] = 25
  • table[9] = -1
  • table[10] = -1
  • table[11] = 31
  • table[12] = -1
  • table[13] = -1
  • table[14] = 65
  • table[15] = 95
  • table[16] = 76
  • table[17] = -1
  • table[18] = -1
  • table[19] = 59

(2-2)#

  • (ア): hash(d)
  • (イ): h
  • (ウ): next(h)
  • (エ): -1 (または EMPTY)

(2-3)#

SKIP を 4 に変更した場合、gcd(MAX,SKIP)=gcd(20,4)=41\gcd(\text{MAX}, \text{SKIP}) = \gcd(20, 4) = 4 \ne 1 となり、互いに素ではなくなる。 このとき、10番目の要素 43 の格納(store の呼び出し)において:

  • 43mod20=343 \bmod 20 = 3(衝突:すでに 39 が格納されている)。
  • 次に探索されるインデックスのシーケンスは:3711151933 \to 7 \to 11 \to 15 \to 19 \to 3 \to \dots となり、長さ 5 の巡回サイクルを形成する。
  • このサイクルに含まれるセル(table[3]=39, table[7]=27, table[11]=31, table[15]=95, table[19]=59)はすべて EMPTY(-1)ではない。
  • そのため、store 内の while (table[h] != EMPTY) ループから抜けることができず、無限ループに陥る。
  • 結果として、43行目の store が終了せず、プログラムは45行目の printf 以降を実行できない。

(2-4)#

一般に、MAXSKIP が**互いに素(coprime、すなわち最大公約数 gcd(MAX,SKIP)=1\gcd(\text{MAX}, \text{SKIP}) = 1)**でなければならない。 二つの値が互いに素である場合のみ、任意の開始位置からハッシュ表のすべてのセル(MAX 個)を重複なく探索でき、空きセルが存在する限り必ずそこに到達できるため、無限ループを避けることができる。


大阪大学 情報科学研究科 情報工学 2008年8月実施 計算機システムとシステムプログラム#

Author#

KardeniaPoyu

Description#

配点: (1-1) 21点, (1-2) 10点, (1-3-1) 4点, (1-3-2) 15点, (2-1) 18点, (2-2) 32点

(1) 計算機におけるメモリアクセスに関して以下の各小問に答えよ.

(1-1) (a)~(g) にあてはまる語句を下の(ア)~(コ)の選択肢から選んで記号で答えよ.ただし,同じ選択肢を複数回用いてもよい.

主記憶 (main memory) 内のデータへのアクセスは,語(ワード,word)を単位とした格納位置を示すアドレス (address) を指定することによって行われる.このとき,アクセスされたデータの写しを小容量であるが高速のキャッシュメモリ (cache memory)(以下,キャッシュ)に一時的に作っておき,次に同じデータがアクセスされたときにキャッシュからデータを取り出すことにより,見かけ上主記憶のアクセス速度を高速化することが広く行われている.これは,一度アクセスされたデータは繰り返し利用される確率が高いという [ (a) ],近いアドレスに格納されたデータはまとまってアクセスされる確率が高いという [ (b) ] を利用するものである.アクセスされるデータの写しがキャッシュに存在する確率をヒット率 (hit ratio) という.

主記憶のデータの写しは,一定 of 大きさの連続したアドレスに格納されたデータを単位として作られる.このとき,写しを作る大きさで主記憶を先頭から区切ったときの各々の区分をブロック (block) と呼ぶ.また,キャッシュをブロックと同じ大きさに分けた時の各々の区分をブロック枠 (block frame) という.ブロックに対しその写しを作るブロック枠を割り当てることを,ブロックのマッピング (mapping) と呼ぶ.ブロックのマッピングを行うための方式には,任意のブロック枠を割り当てることができる [ (c) ] 方式,ブロック枠の割り当てが一意的に決められている [ (d) ] 方式がある.[ (d) ] 方式は,[ (c) ] 方式よりも,キャッシュが同じ容量を持つときのヒット率は一般に [ (e) ]く,キャッシュの使用効率も [ (e) ]い.また,これら2つの方式を組み合わせた方式として,ブロック枠を同数の集合に分け,それぞれの集合に対し [ (f) ] 方式を適用する [ (g) ] 方式がある.

選択肢 (ア)空間的局所性 (spatial locality) (イ)セット連想(群連想)マッピング (set associative mapping) (ウ)時間的局所性 (temporal locality) (エ)アドレスマルチプレクス (address multiplex) (オ)直接マッピング (direct mapping)  (カ)完全連想マッピング (fully associative mapping) (キ)ライトスルー (write through)   (ク)ファイルマッピング (file mapping) (ケ)高               (コ)低

(1-2) キャッシュに必要な写しが存在しない新たな主記憶のブロックがアクセスされたとき,キャッシュに空きブロック枠がないならば,ブロック枠のどれかを選択してデータを入れ替える必要がある.このとき,入れ替えるべきブロック枠を選択するアルゴリズムをブロック置き換えアルゴリズム (block replacement algorithm) という.ブロック置き換えアルゴリズムとしては,LRU (Least Recently Used), FIFO (First-In First-Out) などがある.この LRU および FIFO について,

  • 実装の容易さ
  • ブロック枠の数とヒット率の関係 の観点で比較した上で,それぞれの特徴をその特徴を有する理由とともに述べよ.

(1-3) 1 ブロックの大きさが 4 語,ブロック枠の数が 4 のキャッシュについて以下の各小問に答えよ.ただし,主記憶のアドレスは 8 ビットで指定されるものとする.また,ブロックのマッピング方式としては,セット数 2 のセット連想マッピング方式が用いられるものとする.

(1-3-1) 主記憶のアドレスのうち,セット内で各ブロックを識別するタグ (tag) に何ビット用いられるか答えよ.

(1-3-2) 64 個の語を格納する配列 a[i] (0i630 \le i \le 63) を考える.a[i] は,主記憶上のアドレス 00 ~ 3F (16進数表記) に a[0] から,a[63] まで順に格納され,常駐しているものとする.また,主記憶上の各ブロックにはブロック番号が 0 から順に割り振られるものとする.すなわち,主記憶上のアドレス 00~03 はブロック番号 0, 04~07 はブロック番号 1, …, 3C~3F はブロック番号 15 となる. このとき,あるプログラムが下記の順で配列にアクセスを行ったとする.

a[0], a[4], a[8], a[53], a[54], a[55], a[56], a[4], a[20], a[21]

ブロック置き換えアルゴリズムとして LRU を用いた場合の,上記アクセスにおけるヒット率を求めよ.ただし,プログラム実行前にはキャッシュの内容は空に初期化されているものとする. 導出過程として,各アクセスの結果,ブロック枠に割り当てられるブロックのブロック番号を解答用紙の対応するセット番号の欄に記入せよ.また,アクセスされるデータの写しがキャッシュに存在するとき,「キャッシュヒット」欄に〇を記入せよ.


(2) 単一プロセッサをもつマルチプログラミングシステムに関して以下の各小問に答えよ.

(2-1) 次の説明文および図 1 の(a)~(f)にあてはまる語句を下の(ア)~(ソ)の選択肢から選んで記号で答えよ.

単一プロセッサをもつマルチプログラミングシステムにおいて,実行中のプログラムの実体であるプロセスは実行 (running) 状態,実行可能 (ready) 状態,待ち (waiting または blocked) 状態の 3 状態を遷移する.

生成されたプロセスはまず [ (a) ] となる.その後,そのプロセスは [ (b) ] され,[ (c) ] に遷移する.[ (c) ] にあるプロセスは,入出力処理の完了を待つなどの事象を待つ操作を開始することにより,[ (d) ] に遷移する.あるいは,[ (c) ] にあるプロセスは,強制的に [ (e) ] され,[ (a) ] に遷移する.[ (d) ] にあるプロセスは,入出力操作の完了や何らかの事象の発生により,[ (a) ] に遷移する.このように,生成されたプロセスは 3 状態を遷移し,[ (c) ] を経て終了する.なお,実行中のプロセスを次に実行すべきプロセスと切り替えることを [ (f) ] という.

選択肢 (ア)レイテンシ (latency) (イ)コンテクストスイッチ (context switch) (ウ)待ち状態 (エ)コンパイル (compile) (オ)ソースプログラム (source program) (カ)実行可能状態 (キ)ディスパッチ (dispatch) (ク)実行可能プログラム (executable program) (ケ)リンク (link) (コ)ライブラリ (library) (サ)インターセクション (intersection) (シ)実行状態 (ス)スループット (throughput) (セ)オブジェクトプログラム (object program) (ソ)プリエンプション (preemption)

(2-2) 単一プロセッサをもつマルチプログラミングシステムでは,新たに生成されたプロセス,および実行可能状態になったプロセスは,レディキュー (ready queue) の末尾に格納され,レディキューの先頭よりプロセッサにディスパッチされ実行される.この際,レディキューにどのような順序でプロセスを格納し,どのタイミングでプロセッサにディスパッチするかを決定するスケジューリングアルゴリズムは,プロセスの実行順序,ターンアラウンドタイム (turnaround time),応答時間 (response time) に影響を与える.

いまレディキューに格納されたプロセスが全くない状態を初期状態とし,プロセス A, B, C, D が表 1 に示される生成時刻で生成され,同じく表 1 に示される処理時間で処理が完了すると仮定する.

表 1: プロセスの生成時刻とその処理時間

プロセス生成時刻 (T)処理時間
A06
B11
C44
D92

このとき,スケジューリングアルゴリズムとして FIFO (First-In First-Out) 方式,RR (Round Robin) 方式を採用した場合,プロセス A, B, C, D がプロセッサで処理される様子をそれぞれの方式ごとに解答用紙に図示せよ.また,プロセス A, B, C, D の平均ターンアラウンドタイムおよび平均応答時間についてもそれぞれの方式について求めよ.

ただし,下記の点に留意すること.

  1. ある時刻に生成あるいはプリエンプションされたプロセスは,その時刻に直ちにレディキューに格納される.生成されたプロセスとプリエンプションされたプロセスが,レディキューに同時刻に格納される場合は,生成されたプロセスが先にレディキューに格納される.
  2. あるプロセスの処理が完了あるいはプリエンプションされた時刻から次のプロセスがプロセッサにディスパッチされ実行される時刻までに要する処理時間(プロセスの切り替えに要する処理時間)を 1 とする.ただし,時刻 T=0 でプロセス A がプロセッサにディスパッチされ実行されるまでに要する処理時間については 0 とする.
  3. プロセスがディスパッチされ実行されてからプリエンプションされるまでの時間をタイムスライス (time slice) と呼び,それを 2 とする.
  4. タイムスライス中にプロセスが終了した時は,次のプロセスがディスパッチされる.

Kai#

(1-1)#

  • (a): ウ(時間的局所性)
  • (b): ア(空間的局所性)
  • (c): カ(完全連想マッピング)
  • (d): オ(直接マッピング)
  • (e): コ(低)
  • (f): カ(完全連想マッピング)
  • (g): イ(セット連想マッピング)

(1-2)#

  • 実装の容易さ (Ease of Implementation):
    • FIFO: 実装が非常に容易である。各ブロックがキャッシュに入った順番(キューや循環バッファ、単純なカウンタによる)のみを管理すればよく、ヒット(キャッシュヒット)時に情報の更新を行う必要がない。
    • LRU: 実装が比較的複雑である。キャッシュへのアクセス(ヒット・ミス問わず)が発生するたびに、アクセスされたブロックの「最近の参照履歴(タイムスタンプやスタック位置など)」を更新する必要があり、より多くのハードウェア(比較器や状態レジスタ)と消費電力を要する。
  • ブロック枠の数とヒット率の関係 (Number of Blocks vs. Hit Ratio):
    • FIFO: スタックアルゴリズムの性質を満たさないため、ブロック枠(キャッシュ容量)を増やした際、特定のアクセスパターンでヒット率が逆に低下する現象(Beladyの偏執現象 / Belady’s Anomaly)が発生することがある。
    • LRU: スタックアルゴリズムの性質を満たすため、ブロック枠を増やすことでヒット率が低下することは決してなく、常に向上または維持されることが保証される。

(1-3-1)#

  • キャッシュのブロック枠の総数は 4。2ウェイセット連想方式(セット数 2)なので、セットの数(Set count)は 4/2=24 / 2 = 2 である。
  • セットを識別するためのインデックス(Index)のビット幅:log2(2)=1\log_2(2) = 1 ビット。
  • 1ブロックの大きさは 4 語(ワード)であるため、ブロック内オフセット(Offset)のビット幅:log2(4)=2\log_2(4) = 2 ビット。
  • 主記憶のアドレスは 8 ビットであるため、タグ(Tag)のビット幅は以下の通りとなる: Tag bits=8Index bits(1)Offset bits(2)=5 bits\text{Tag bits} = 8 - \text{Index bits} (1) - \text{Offset bits} (2) = 5\ \text{bits}

解答5 ビット


(1-3-2)#

各アドレスに対応するブロック番号 B=Address/4B = \text{Address} / 4、およびマップされるセット番号 S=Bmod2S = B \bmod 2 は以下の通りである。 LRU置換ポリシーにおける各セットの状態遷移(左側が MRU(最も新しく参照)、右側が LRU(最も古く参照)):

アクセス順配列要素主記憶アドレス (10進数)ブロック番号 BBセット番号 SSセット 0 の状態セット 1 の状態キャッシュヒット
1a[0]000[0][]Miss
2a[4]411[0][1]Miss
3a[8]820[2, 0][1]Miss
4a[53]53131[2, 0][13, 1]Miss
5a[54]54131[2, 0][13, 1]〇 (Hit)
6a[55]55131[2, 0][13, 1]〇 (Hit)
7a[56]56140[14, 2] (0を置換)[13, 1]Miss
8a[4]411[14, 2][1, 13]〇 (Hit)
9a[20]2051[14, 2][5, 1] (13を置換)Miss
10a[21]2151[14, 2][5, 1]〇 (Hit)

全 10 回のアクセスのうち、ヒットは 4 回(第 5, 6, 8, 10 回目)。 平均ヒット率4/10=40%4 / 10 = 40\%


(2-1)#

  • (a): カ(実行可能状態)
  • (b): キ(ディスパッチ)
  • (c): シ(実行状態)
  • (d): ウ(待ち状態)
  • (e): ソ(プリエンプション)
  • (f): イ(コンテクストスイッチ)

(2-2)#

FIFO 方式#

非プリエンプティブ(非横取り)方式。プロセスは生成された順に実行され、プロセスの切り替え時に 1 のコンテクストスイッチオーバーヘッドが発生する。

Gantt チャート (FIFO):

T = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
[------ プロセス A ------] (切) [B] (切) [------ プロセス C ------] (切) [--- プロセス D ---]
  • プロセス A: 生成 T=0T=0, 実行 [0,6][0, 6], 完了 T=6T=6。周転時間 =60=6= 6 - 0 = 6, 応答時間 =00=0= 0 - 0 = 0

  • プロセス B: 生成 T=1T=1, 実行 [7,8][7, 8], 完了 T=8T=8。周転時間 =81=7= 8 - 1 = 7, 応答時間 =71=6= 7 - 1 = 6

  • プロセス C: 生成 T=4T=4, 実行 [9,13][9, 13], 完了 T=13T=13。周転時間 =134=9= 13 - 4 = 9, 応答时间 =94=5= 9 - 4 = 5

  • プロセス D: 生成 T=9T=9, 実行 [14,16][14, 16], 完了 T=16T=16。周転時間 =169=7= 16 - 9 = 7, 応答時間 =149=5= 14 - 9 = 5

  • 平均ターンアラウンドタイム (Average Turnaround Time): 6+7+9+74=7.25\frac{6 + 7 + 9 + 7}{4} = 7.25

  • 平均応答時間 (Average Response Time): 0+6+5+54=4.0\frac{0 + 6 + 5 + 5}{4} = 4.0

RR (Round Robin) 方式#

タイムスライスは 2、コンテクストスイッチオーバーヘッドは 1。

  • 平均ターンアラウンドタイム (Average Turnaround Time): 13+3+15+74=9.5\frac{13 + 3 + 15 + 7}{4} = 9.5
  • 平均応答時間 (Average Response Time): 0+2+4+54=2.75\frac{0 + 2 + 4 + 5}{4} = 2.75

大阪大学 情報科学研究科 情報工学 2008年8月実施 計算理論#

Author#

KardeniaPoyu

Description#

配点: (1-1) 15点, (1-2) 15点, (1-3) 20点, (2-1) 15点, (2-2) 15点, (2-3) 20点

(1) 有限オートマトン (finite automaton) に関して以下の各小問に答えよ.なお有限オートマトン M1,M2,M3M_1, M_2, M_3 それぞれを以下の状態遷移図 (state transition diagram) の通り定める.各有限オートマトンの初期状態 (initial state) は a,h,la, h, l であり,受理状態 (accepting state) は c,k,m,nc, k, m, n である.また,入力記号 (input symbol) の集合は Σ={0,1}\Sigma = \{0, 1\} とする.

图 1:有限オートマトン M1,M2,M3M_1, M_2, M_3

M1M_1#
stateDiagram-v2
direction LR
state "a (Initial)" as a
state "c (Accepting)" as c
[*] --> a
a --> d : 0
a --> b : 1
d --> a : 0
d --> g : 1
b --> c : 0
b --> e : 1
c --> g : 0
c --> e : 1
e --> g : 0
e --> b : 1
g --> e : 0
g --> f : 1
f --> c : 0
f --> g : 1
M2M_2#
stateDiagram-v2
direction LR
state "h (Initial)" as h
state "k (Accepting)" as k
[*] --> h
h --> i : ε
h --> k : ε
i --> j : 1
i --> k : 0
j --> i : ε
k --> i : 0
k --> k : 1
M3M_3#
stateDiagram-v2
direction LR
state "l (Initial)" as l
state "m (Accepting)" as m
state "n (Accepting)" as n
[*] --> l
l --> l : 0
l --> m : 0, 1
m --> l : 0
m --> n : 1
n --> m : 0
n --> n : 1

(1-1) 有限オートマトン M1M_1 が受理 (accept) する語 (word) の内,長さ 4 以下のもの全てを示せ.

(1-2) 有限オートマトン M2M_2ε\varepsilon-動作 (ε\varepsilon-move) を有する.最初に,M2M_2 の各状態に対する ε\varepsilon-閉包 (ε\varepsilon-closure) を示せ.次に,求めた ε\varepsilon-閉包から ε\varepsilon-動作のない非決定性 (non-deterministic) 有限オートマトン M2M_2' を構成し,状態遷移図で示せ.ただし M2M_2'M2M_2 と同じ状態集合を有するものとし,状態遷移図には状態名も記入せよ.なお,ある状態 xx に対する ε\varepsilon-閉包とは,xx そのものと xx から ε\varepsilon-動作のみで到達できる状態全ての集合をいう.

(1-3) 有限オートマトン M3M_3 と同じ言語 (language) を受理する状態数が最小 (minimum) の決定性有限オートマトン M3M_3' を求めて,状態遷移図で示せ.なお M3M_3' を求める過程は示さずに,結果のみを示せ.

(2) 文脈自由文法 (context-free grammar) に関して以下の各小問に答えよ.なお文法 G1,G2G_1, G_2 それぞれを以下の通り定める.

文法 G1(V1,T1,P1,S1)G_1(V_1, T_1, P_1, S_1)

  • 非終端記号の集合 V1={A}V_1 = \{A\}
  • 終端記号の集合 T1={if,then,else,e,s}T_1 = \{\text{if}, \text{then}, \text{else}, \text{e}, \text{s}\}
  • 開始記号 S1=AS_1 = A
  • 生成規則の集合 P1={Aif e then A,Aif e then A else A,As}P_1 = \{ A \to \text{if e then } A, \quad A \to \text{if e then } A \text{ else } A, \quad A \to \text{s} \}

文法 G2(V2,T2,P2,S2)G_2(V_2, T_2, P_2, S_2)

  • 非終端記号の集合 V2={B,C,D}V_2 = \{B, C, D\}
  • 終端記号の集合 T2={if,then,else,e,s}T_2 = \{\text{if}, \text{then}, \text{else}, \text{e}, \text{s}\}
  • 開始記号 S2=BS_2 = B
  • 生成規則の集合 P2={BC,BD,Cif e then B,Dif e then D else B,Ds}P_2 = \{ B \to C, \quad B \to D, \quad C \to \text{if e then } B, \quad D \to \text{if e then } D \text{ else } B, \quad D \to \text{s} \}

(2-1) 文法 G1G_1 における文 “if e then s else if e then s\text{if e then s else if e then s}” に対する最左導出 (leftmost derivation) および最右導出 (rightmost derivation) における導出の過程をそれぞれ示せ.

(2-2) 文法 G1G_1 における文 “if e then if e then s else s\text{if e then if e then s else s}” に対する異なる 2 通りの導出木 (derivation tree) を示せ.

(2-3) 文法 G2G_2 は曖昧である.具体的な根拠を示せ.

Kai#

(1-1)#

状態遷移および受理状態 cc に至る長さ 4 以下の経路の解析:

  • 受理状態は cc のみである。
  • 長さ 2 の受理語:
    • a1b0c    a \xrightarrow{1} b \xrightarrow{0} c \implies 10
  • 長さ 4 の受理語:
    • a0d0a1b0c    a \xrightarrow{0} d \xrightarrow{0} a \xrightarrow{1} b \xrightarrow{0} c \implies 0010
    • a0d1e1b0c    a \xrightarrow{0} d \xrightarrow{1} e \xrightarrow{1} b \xrightarrow{0} c \implies 0110
    • a1b1e1b0c    a \xrightarrow{1} b \xrightarrow{1} e \xrightarrow{1} b \xrightarrow{0} c \implies 1110

解答10, 0010, 0110, 1110


(1-2)#

ε\varepsilon-閉包 (ε\varepsilon-closure)#

各状態から ε\varepsilon 動作のみで到達できる状態の集合(自身を含む):

  • ε-closure(h)={h,i,k}\varepsilon\text{-closure}(h) = \{h, i, k\}
  • ε-closure(i)={i}\varepsilon\text{-closure}(i) = \{i\}
  • ε-closure(j)={i,j}\varepsilon\text{-closure}(j) = \{i, j\}
  • ε-closure(k)={k}\varepsilon\text{-closure}(k) = \{k\}

ε\varepsilon-動作のないNFA M2M_2'#

状態遷移関数を δ(q,a)=ε-closure(δ(ε-closure(q),a))\delta'(q, a) = \varepsilon\text{-closure}(\delta(\varepsilon\text{-closure}(q), a)) と定義し、状態集合と初期状態は不変とする。

  • 状態集合{h,i,j,k}\{h, i, j, k\}、初期状態:hh
  • 受理状態ε-closure(q)\varepsilon\text{-closure}(q) に元の受理状態 kk が含まれる状態が受理状態となる。よって、受理状態は {h,k}\{h, k\}
  • 状態遷移
    • δ(h,0)={k}\delta'(h, 0) = \{k\}
    • δ(h,1)={i,j,k}\delta'(h, 1) = \{i, j, k\}
    • δ(i,0)={k}\delta'(i, 0) = \{k\}
    • δ(i,1)={i,j}\delta'(i, 1) = \{i, j\}
    • δ(j,0)={k}\delta'(j, 0) = \{k\}
    • δ(j,1)={i,j}\delta'(j, 1) = \{i, j\}
    • δ(k,0)=\delta'(k, 0) = \emptyset
    • δ(k,1)={k}\delta'(k, 1) = \{k\}

M2M_2' の状態遷移図

stateDiagram-v2
[*] --> h
h --> k : 0
h --> i : 1
h --> j : 1
h --> k : 1
i --> k : 0
i --> i : 1
i --> j : 1
j --> k : 0
j --> i : 1
j --> j : 1
k --> k : 1
state h %% accepting
state k %% accepting

(1-3)#

部分集合構成法(Subset Construction)を用いて NFA M3M_3 を DFA に変換し、等価な状態を併合して最小化(Minimization)を行う。 最小化された決定性有限オートマトン(DFA)M3M_3' の状態集合は 5 つとなる:

  • S0={l}S_0 = \{l\} (初期状態、非受理)
  • S1={l,m}S_1 = \{l, m\} (受理状態)
  • S2={m}S_2 = \{m\} (受理状態)
  • S3={m,n}S_3 = \{m, n\} (受理状態)
  • S4={n}S_4 = \{n\} (受理状態)

DFA M3M_3' の状態遷移図

stateDiagram-v2
[*] --> S0
S0 --> S1 : 0
S0 --> S2 : 1
S1 --> S1 : 0
S1 --> S3 : 1
S2 --> S0 : 0
S2 --> S4 : 1
S3 --> S1 : 0
S3 --> S4 : 1
S4 --> S2 : 0
S4 --> S4 : 1
state S1 %% accepting
state S2 %% accepting
state S3 %% accepting
state S4 %% accepting

(2-1)#

対象の文は “if e then s else if e then s\text{if e then s else if e then s}”:

  • 最左導出 (Leftmost Derivation): Aif e then A else Aif e then s else Aif e then s else if e then Aif e then s else if e then sA \Rightarrow \text{if e then } A \text{ else } A \Rightarrow \text{if e then s else } A \Rightarrow \text{if e then s else if e then } A \Rightarrow \text{if e then s else if e then s}
  • 最右導出 (Rightmost Derivation): Aif e then A else Aif e then A else if e then Aif e then A else if e then sif e then s else if e then sA \Rightarrow \text{if e then } A \text{ else } A \Rightarrow \text{if e then } A \text{ else if e then } A \Rightarrow \text{if e then } A \text{ else if e then s} \Rightarrow \text{if e then s else if e then s}

(2-2)#

対象 of 文は “if e then if e then s else s\text{if e then if e then s else s}”。この文法には「懸念される else(dangling-else)」の曖昧性が存在する:

導出木 1 (else が内側の if と結合する場合):

graph TD
A1[A] --> if1[if]
A1 --> e1[e]
A1 --> then1[then]
A1 --> A2[A]
A2 --> if2[if]
A2 --> e2[e]
A2 --> then2[then]
A2 --> A3[A]
A3 --> s1[s]
A2 --> else2[else]
A2 --> A4[A]
A4 --> s2[s]

導出木 2 (else が外側の if と結合する場合):

graph TD
A1[A] --> if1[if]
A1 --> e1[e]
A1 --> then1[then]
A1 --> A2[A]
A2 --> if2[if]
A2 --> e2[e]
A2 --> then2[then]
A2 --> A3[A]
A3 --> s1[s]
A1 --> else1[else]
A1 --> A4[A]
A4 --> s2[s]

(2-3)#

文法 G2G_2 は曖昧(二義的)である。なぜなら、語 w=if e then if e then s else if e then s else sw = \text{if e then if e then s else if e then s else s} に対して、異なる 2 通りの構文解析木(すなわち、2通りの異なる最左導出)を構築できるからである。

  • 導出 1(外側の if が非終端記号 CC、すなわち else を持たない構造に対応): BCif e then BB \Rightarrow C \Rightarrow \text{if e then } B ここで、内側の BBif-else 構造を推出する: BDif e then D else BB \Rightarrow D \Rightarrow \text{if e then } D \text{ else } B ここで最初の DsD \Rightarrow \text{s} であり、二番目の BDif e then D else Bif e then s else sB \Rightarrow D \Rightarrow \text{if e then } D \text{ else } B \Rightarrow \dots \Rightarrow \text{if e then s else s} となる。

  • 導出 2(外側の if が非終端記号 DD、すなわち else を持つ構造に対応): BDif e then D else BB \Rightarrow D \Rightarrow \text{if e then } D \text{ else } B ここで最初の Dif e then D else Bif e then s else Cif e then s else if e then sD \Rightarrow \text{if e then } D \text{ else } B \Rightarrow \text{if e then s else } C \Rightarrow \text{if e then s else if e then s} であり、二番目の BDsB \Rightarrow D \Rightarrow \text{s} となる。

このように、同じ文に対して 2 つの異なる解釈(構文木)が存在するため、文法 G2G_2 は曖昧である。


大阪大学 情報科学研究科 情報工学 2008年8月実施 ネットワーク#

Author#

KardeniaPoyu

Description#

配点: (1) 20点, (2) 20点, (3) 20点, (4) 20点, (5) 20点

伝送媒体上で隣接するノード (node)(ルータ (router) やホスト (host))間の誤りのない全二重伝送路 (full duplex channel) を実現するものとして,ARQ (Automatic Repeat-reQuest) がある.ARQ には,Stop-and-Wait ARQ 方式,Go-back-N ARQ 方式,Selective Repeat ARQ 方式がある.以下の説明を読み,各問に答えよ.

Stop-and-Wait ARQ 方式では,送信側ノード (sender) はデータフレーム (data frame) を一つ送信すると,タイマ (timer) を起動させ,受信側ノード (receiver) からの応答を待つ.受信側ノードは,正しくデータフレームを受信した場合には ACK (ACKnowledgement) フレームを,受信したデータフレームに修正できないビット誤り (bit error) がある場合(フレーム誤り (frame error) と呼ぶ)には NACK (Negative ACK) フレームを送信側ノードに返信する.送信側ノードは,ACK フレームを受信した場合には次の新たなデータフレームを送信し,NACK フレームを受信した場合,またはデータフレームが失われること(フレームロス (frame loss) と呼ぶ)によってタイムアウト (timeout) が発生した場合にはそのデータフレームを再送する.

Go-back-N ARQ 方式では,送信側ノードは ACK フレームを受け取ることなく同時に最大 N 個のデータフレームを送信することができる.送信側ノードは,送信済みのデータフレームに対して ACK フレームを受信すると新たなデータフレームを送信するが,NACK フレームを受信,またはタイムアウトが発生した場合には,誤りの生じた,または失われたデータフレーム以降のすべてのデータフレームを再送する.受信側ノードでは,誤りの生じた,または失われたデータフレームを正しく受信できるまで,受信したデータフレームをすべて棄却する.

また,Selective Repeat ARQ 方式では,Go-back-N ARQ 方式と同様に ACK フレームを受け取ることなく最大 N 個のデータフレームを送信するが,送信側ノードは NACK フレームを受信した,あるいはタイムアウトが発生したデータフレームのみを再送する.それぞれの動作の例を下図に示す.

图 1:ARQ 方式の動作例

Stop-and-Wait ARQ 方式#
sequenceDiagram
autonumber
Note over 送信側, 受信側: Stop-and-Wait ARQ
送信側 ->> 受信側: フレーム 1
受信側 -->> 送信側: ACK
送信側 ->> 受信側: フレーム 2 (ビット誤り)
受信側 -->> 送信侧: NACK
送信側 ->> 受信側: フレーム 2 (再送)
受信側 -->> 送信側: ACK
送信側 ->x 受信側: フレーム 3 (消失)
Note over 送信側: タイムアウト
送信側 ->> 受信側: フレーム 3 (再送)
受信側 -->> 送信側: ACK
Go-back-N ARQ 方式 (N = 5)#
sequenceDiagram
autonumber
Note over 送信側, 受信側: Go-back-N ARQ (N = 5)
送信側 ->> 受信側: フレーム 1
送信側 ->> 受信側: フレーム 2
送信側 ->> 受信側: フレーム 3
受信側 -->> 送信側: ACK 1
受信側 -->> 送信側: ACK 2
送信側 ->> 受信側: フレーム 4 (ビット誤り)
送信側 ->> 受信側: フレーム 5
受信側 -->> 送信側: ACK 3
Note over 受信側: 4の誤り検出 -> NACK 4 送信
受信側 -->> 送信側: NACK 4
Note over 受信側: フレーム 5 棄却 (順序不正)
Note over 送信側: NACK 4 受信により 4 以降を再送
送信側 ->> 受信側: フレーム 4 (再送)
送信側 ->> 受信側: フレーム 5 (再送)
送信側 ->> 受信側: フレーム 6
送信側 ->> 受信側: フレーム 7
受信側 -->> 送信側: ACK 4
受信側 -->> 送信側: ACK 5
受信側 -->> 送信側: ACK 6
受信側 -->> 送信側: ACK 7
Selective Repeat ARQ 方式 (N = 5)#
sequenceDiagram
autonumber
Note over 送信側, 受信側: Selective Repeat ARQ (N = 5)
送信側 ->> 受信侧: フレーム 1
送信側 ->> 受信側: フレーム 2
送信側 ->> 受信側: フレーム 3
受信側 -->> 送信側: ACK 1
受信側 -->> 送信側: ACK 2
送信側 ->> 受信側: フレーム 4 (ビット誤り)
送信側 ->> 受信側: フレーム 5
受信側 -->> 送信側: ACK 3
Note over 受信側: 4の誤り検出 -> NACK 4 送信
受信側 -->> 送信側: NACK 4
Note over 受信側: 正常な 5 をバッファに保持
受信側 -->> 送信側: ACK 5
Note over 送信側: NACK 4 受信により 4 のみ再送
送信側 ->> 受信側: フレーム 4 (再送)
Note over 受信側: 4受信後、5 と共に順序通り引き渡し
受信側 -->> 送信側: ACK 4 & 5
送信側 ->> 受信側: フレーム 6
送信側 ->> 受信側: フレーム 7
受信側 -->> 送信側: ACK 6
受信側 -->> 送信側: ACK 7

(1) 送受信ノードにおいて, I) Stop-and-Wait ARQ 方式には必要なく,Go-back-N ARQ 方式には必要な機能, II) Go-back-N ARQ 方式には必要なく,Selective Repeat ARQ 方式には必要な機能 を,それぞれ 2 つずつ以下から選んで記号を書き,それぞれについて簡潔に理由を述べよ.3つ以上の選択肢が該当する場合には,そのうちの2つについて解答すればよい. (a) データフレーム番号によるデータフレーム識別 (b) 受信側ノードでの受信データフレームの並べ替え (c) 受信側ノードでの受信済みデータフレーム番号の管理 (d) 送信側ノードでの送信データフレーム数の管理 (e) 送信側ノードでの最大 N 個分のデータフレームバッファの管理 (f) 受信側ノードでの最大 N 個分のデータフレームバッファの管理

(2) 片方向伝搬遅延 (one-way propagation delay) 40 ms, 通信速度 1000 bps の,フレーム誤りもフレームロスも発生しない伝送媒体において,長さ 100 bit のデータフレームを 99 個送信した際の,Stop-and-Wait ARQ 方式と Go-back-N ARQ 方式それぞれの平均スループットを求めよ.計算過程も示せ.なお,ACK フレームと NACK フレームの長さを 20 bit とし,Go-back-N ARQ 方式における N を 3 とする.平均スループットは,送信側ノードにおける一つ目のデータフレーム送信開始から最後のデータフレームに対する ACK フレーム受信完了までの単位時間あたりの送信データ量であり,単位は bps である.なお,問 (2) ~ 問 (4) においては,ACK フレーム,NACK フレームともに誤り,損失は発生しないものとする.

(3) 問 (2) において,片方向伝搬遅延を 200 ms とし,それ以外の条件を同じとした場合の,Stop-and-Wait ARQ 方式と Go-back-N ARQ 方式それぞれの平均スループットを求めよ.計算過程も示せ.

(4) 問 (2) において,伝送媒体でのフレームロスは発生しないが,確率 0.1 でフレーム誤りが発生するものとし,それ以外の条件を同じとした場合の,Stop-and-Wait ARQ 方式と Go-back-N ARQ 方式それぞれの平均スループットを求めよ.計算過程も示せ.

(5) 下図は,片方向伝搬遅延 40 ms, 通信速度 1000 bps の伝送媒体において,長さ 100 bit のデータフレームを順次送信し続けた際の,Stop-and-Wait ARQ 方式,Go-back-N ARQ 方式,Selective Repeat ARQ 方式の平均スループットを示したものである.なお,ACK フレームと NACK フレームの長さを 20 bit とし,Go-back-N ARQ 方式及び Selective Repeat ARQ 方式における N を十分大きいものとする.横軸が表す指標を答えよ.また,グラフ内の各線が上から順にそれぞれどの方式を表しているか答え,その理由を簡潔に述べよ.

图 2:各種方式の平均スループット比較(概略) (グラフには横軸がパラメータ、縦軸が平均スループットとして、上から順に以下の3つの曲線が描かれています:

  1. 最も高い位置にある直線
  2. 中間にある、右下がりに下降する下に凸の曲線
  3. 最も低い位置にある直線)

Kai#

(1)#

I) Stop-and-Wait には不要で、Go-back-N には必要な機能#

選択記号:(d), (e)

  • (d) 送信データフレーム数の管理の理由: Go-back-N ではスライディングウィンドウを用いて ACK を待たずに最大 NN 個の未確認フレームを同時に送信できるため、现在送信中のフレーム数がウィンドウサイズ NN を超えないよう動的にカウントして管理する必要がある。これに対し、Stop-and-Wait 方式は常に 1 フレームのみ送信して応答を待つため、送信中フレーム数の管理機能は不要である。
  • (e) 送信側最大 N 個のバッファ管理の理由: Go-back-N では、送信済みのフレームが将来的にエラーによる再送要求(NACK)を受ける可能性があるため、送信側は最大 NN 個のフレームのコピーをバッファに保持しておかなければならない。これに対し、Stop-and-Wait 方式は最新の 1 フレームのみ保持すればよいため、最大 NN 規模のバッファ管理機能は不要である。

II) Go-back-N には不要で、Selective Repeat には必要な機能#

選択記号:(b), (f)

  • (b) 受信データフレームの並べ替えの理由: Selective Repeat では失われたフレームのみが再送され、正しく届いた以降のフレームは受信側にキャッシュされるため、フレームが順不同で受信される。そのため、上位レイヤにデータを渡す前に受信側でこれらを順番通りに並べ替える機能が必要となる。これに対し、Go-back-N 方式では順不同で受信したフレームをすべて破棄し、常に順番通りのフレームのみを受信するため、受信側での並べ替え機能は不要である。
  • (f) 受信側最大 N 個のバッファ管理の理由: Selective Repeat の受信側は、特定のフレームが欠落した際に、その後に順不同で届く正常なフレームを最大 NN 個まで一時的にバッファに保持する必要がある。これに対し、Go-back-N の受信侧は順不同のフレームを一切保持せず破棄するため、受信側のバッファサイズは 1 でよく、このようなバッファ管理機能は不要である。

(2)#

给定参数:

  • 单向传播延迟 τ=40 ms=0.04 s\tau = 40\text{ ms} = 0.04\text{ s}
  • 信道速率 R=1000 bpsR = 1000\text{ bps}
  • 数据帧大小 Ld=100 bitL_d = 100\text{ bit}
  • ACK 帧大小 La=20 bitL_a = 20\text{ bit}
  • 数据帧总数 M=99M = 99
  • 传输延迟:数据帧 td=Ld/R=0.1 st_d = L_d / R = 0.1\text{ s};ACK 帧 ta=La/R=0.02 st_a = L_a / R = 0.02\text{ s}
  • 每个帧的完整传输周期(RTT时间):Tcycle=td+τ+ta+τ=0.1+0.04+0.02+0.04=0.2 sT_{\text{cycle}} = t_d + \tau + t_a + \tau = 0.1 + 0.04 + 0.02 + 0.04 = 0.2\text{ s}

Stop-and-Wait ARQ 方式#

该方式每次只能发送一个数据帧,等待 ACK 到达后才能发送下一帧。

  • 发送 99 个数据帧并全部接收到 ACK 的总时间: Ttotal, SW=99×Tcycle=99×0.2 s=19.8 sT_{\text{total, SW}} = 99 \times T_{\text{cycle}} = 99 \times 0.2\text{ s} = 19.8\text{ s}
  • 平均吞吐量: ηSW=99×LdTtotal, SW=99×100 bit19.8 s=500 bps\eta_{\text{SW}} = \frac{99 \times L_d}{T_{\text{total, SW}}} = \frac{99 \times 100\text{ bit}}{19.8\text{ s}} = 500\text{ bps}

Go-back-N ARQ 方式 (N=3N = 3)#

  • 检验是否可以无间隔地流水线(pipeline)连续发送:
    • 数据帧 1 开始发送时刻:t=0t = 0
    • 数据帧 1 的 ACK 到达发送端的时刻:Tcycle=0.2 sT_{\text{cycle}} = 0.2\text{ s}
    • t=0.2 st = 0.2\text{ s} 时,发送端刚刚完成了第 2 个帧的发送(时间段 [0.1,0.2][0.1, 0.2]),正在准备发送第 3 个帧(此时已允许的窗口帧为 1, 2, 3)。由于在 t=0.2 st = 0.2\text{ s} 刚好收到了数据帧 1 的 ACK,窗口向右滑动,发送端可以无间断地在 t=0.2 st=0.2\text{ s} 之后继续发送第 3 帧、第 4 帧等。
    • 因此,发送端能够实现 100%100\% 的满负荷流水线发送,中间无需任何等待空闲时间。
  • 总传输时间为发送 99 个帧的传输延迟,加上最后一个帧的单向传播、ACK传输和单向传播延迟之和: Ttotal, GBN=99×td+τ+ta+τ=99×0.1 s+0.04+0.02+0.04=9.9+0.1=10.0 sT_{\text{total, GBN}} = 99 \times t_d + \tau + t_a + \tau = 99 \times 0.1\text{ s} + 0.04 + 0.02 + 0.04 = 9.9 + 0.1 = 10.0\text{ s}
  • 平均吞吐量: ηGBN=99×LdTtotal, GBN=99×100 bit10.0 s=990 bps\eta_{\text{GBN}} = \frac{99 \times L_d}{T_{\text{total, GBN}}} = \frac{99 \times 100\text{ bit}}{10.0\text{ s}} = 990\text{ bps}

(3)#

参数变化:单向传播延迟 τ=200 ms=0.2 s\tau = 200\text{ ms} = 0.2\text{ s}

  • 每个帧的完整传输周期变为:Tcycle=td+2τ+ta=0.1+0.4+0.02=0.52 sT_{\text{cycle}} = t_d + 2\tau + t_a = 0.1 + 0.4 + 0.02 = 0.52\text{ s}

Stop-and-Wait ARQ 方式#

  • 99 个帧传输总时间: Ttotal, SW=99×0.52 s=51.48 sT_{\text{total, SW}} = 99 \times 0.52\text{ s} = 51.48\text{ s}
  • 平均吞吐量: ηSW=9900 bit51.48 s192.3 bps\eta_{\text{SW}} = \frac{9900\text{ bit}}{51.48\text{ s}} \approx 192.3\text{ bps}

Go-back-N ARQ 方式 (N=3N = 3)#

由于此时 N×td=3×0.1 s=0.3 s<Tcycle=0.52 sN \times t_d = 3 \times 0.1\text{ s} = 0.3\text{ s} < T_{\text{cycle}} = 0.52\text{ s},发送端发送完 3 个帧(窗口占满)后必须停下来等待 ACK 的到来,无法进行完全流水线传输。

  • 发送过程呈周期性:每发送 3 个帧为一个循环,每个循环耗时 Tcycle=0.52 sT_{\text{cycle}} = 0.52\text{ s}
  • 99 个帧共有 99/3=3399 / 3 = 33 个完整的循环。
  • 发送完所有 99 个帧并接收到最后一个 ACK 的总时间: Ttotal, GBN=32×0.52 s+(td+τ+ta+τ)+2×td=32×0.52+0.52+2×0.1=16.64+0.72=17.36 sT_{\text{total, GBN}} = 32 \times 0.52\text{ s} + (t_d + \tau + t_a + \tau) + 2 \times t_d = 32 \times 0.52 + 0.52 + 2 \times 0.1 = 16.64 + 0.72 = 17.36\text{ s}
  • 平均吞吐量: ηGBN=9900 bit17.36 s570.3 bps\eta_{\text{GBN}} = \frac{9900\text{ bit}}{17.36\text{ s}} \approx 570.3\text{ bps}

(4)#

参数同问 (2),但有数据帧出错概率 p=0.1p = 0.1

Stop-and-Wait ARQ 方式#

  • 每个数据帧成功送达所需的平均尝试次数为:11p=10.9=109\frac{1}{1-p} = \frac{1}{0.9} = \frac{10}{9}
  • 每次尝试(无论是收到 ACK 还是 NACK 触发重传)所花的时间均相同,为 Tcycle=0.2 sT_{\text{cycle}} = 0.2\text{ s}
  • 99 个数据帧全部成功接收的期望总时间: Ttotal, SW=99×109×0.2 s=22.0 sT_{\text{total, SW}} = 99 \times \frac{10}{9} \times 0.2\text{ s} = 22.0\text{ s}
  • 平均吞吐量: ηSW=9900 bit22.0 s=450 bps\eta_{\text{SW}} = \frac{9900\text{ bit}}{22.0\text{ s}} = 450\text{ bps}

Go-back-N ARQ 方式 (N=3N = 3)#

对于 Go-back-N 方式,如果一个帧出错(概率为 pp),发送端虽然在其出错帧送达前已经发出了后续的 N1N-1 个帧,但由于接收端会将乱序帧全部抛弃,发送端必须在收到 NACK 后回退并重传这 NN 个帧。

  • 成功传输一个帧平均所需的帧发送时隙数为: E=1+(N1)p1p=1+2×0.10.9=1.20.9=43 个时隙E = \frac{1 + (N-1)p}{1-p} = \frac{1 + 2 \times 0.1}{0.9} = \frac{1.2}{0.9} = \frac{4}{3}\text{ 个时隙}
  • 99 个帧成功发送完毕预计需要发送的帧总次数为:99×43=13299 \times \frac{4}{3} = 132 次。
  • 每发送一次需要 td=0.1 st_d = 0.1\text{ s},故发送消耗的总时间为 132×0.1=13.2 s132 \times 0.1 = 13.2\text{ s}
  • 加上最后一帧的传播和 ACK 返回时间(τ+ta+τ=0.1 s\tau + t_a + \tau = 0.1\text{ s}),期望总时间为: Ttotal, GBN=13.2 s+0.1 s=13.3 sT_{\text{total, GBN}} = 13.2\text{ s} + 0.1\text{ s} = 13.3\text{ s}
  • 平均吞吐量为: ηGBN=9900 bit13.3 s744.4 bps\eta_{\text{GBN}} = \frac{9900\text{ bit}}{13.3\text{ s}} \approx 744.4\text{ bps} (注:如果采用渐近极限吞吐量计算公式 ηlimit=R1p1+(N1)p=1000×0.75=750 bps\eta_{\text{limit}} = R \cdot \frac{1-p}{1 + (N-1)p} = 1000 \times 0.75 = 750\text{ bps})

(5)#

  • 横轴所表示的指标数据帧出错概率 PfP_f(或 フレーム誤り率,取值范围为 010 \sim 1)。
  • 三条曲线从上至下的对应关系及理由
    1. 最上方的实线:Selective Repeat ARQ 方式
      • 理由:因为 NN 足够大,当发生帧错误时,Selective Repeat 仅重传错误的那些帧。其吞吐量基本正比于 (1Pf)(1 - P_f),下降最平缓,所以在任何错误率下其吞吐量都是三者中最高的。
    2. 中间的虚线:Go-back-N ARQ 方式
      • 理由:由于 NN 较大,一旦某个帧出错,整个发送窗口中的所有帧都要被迫回退并全部重传,重传开销大。其吞吐量随 PfP_f 的增加比 Selective Repeat 下降得更快。但在错误率较低时,得益于流水线设计,它的吞吐量依然显著高于 Stop-and-Wait。
    3. 最下方の点線:Stop-and-Wait ARQ 方式
      • 理由:该方式不采用流水线,即便在完全无错(Pf=0P_f = 0)的情况下,其吞吐量也被限制在 500 bps500\text{ bps} 的低水平。随着错误率增加,由于重传的存在,其吞吐量也进一步下降,但始终在最底层。
Osaka University IST Graduate Entrance Exam (2009)
https://blog.yirong.site/posts/0073/
Author
Kuchina
Published at
2026-07-02
License
CC BY-NC-SA 4.0
ページ閲覧数: 読み込み中…
サイト閲覧数: 読み込み中…