応用情報技術者試験 令和6年春 午前問8 解説付き過去問
問題
同一メモリ空間で、転送元の開始アドレス、転送先の開始アドレス、方向フラグ及び転送語数をパラメータとして指定することで、データをブロック転送できる機能をもつCPUがある。
図のようにアドレス 1001 から 1004 の内容をアドレス 1003 から 1006 に転送するとき、指定パラメータとして適切なものはどれか。
ここで、転送は開始アドレスから1語ずつ行われ、方向フラグに0を指定するとアドレスの昇順に、1を指定するとアドレスの降順に転送を行うものとする。


正解
解説
本問題は、同一のメモリ空間内で一部が重なった領域へのデータ転送方法に関するものである。
アドレス領域が重複する場合、転送順序(昇順または降順)を正しく選択しなければ、転送元データが途中で上書きされ、転送が失敗する。
具体的には、アドレス1001~1004のデータをアドレス1003~1006に転送する。ここで注目すべきは、転送元(1001~1004)と転送先(1003~1006)の範囲が一部(1003,1004)重なっている点である。
【転送前】
【降順転送後】
このことから、転送が正しく行われるための適切なパラメータは以下となる。
アドレス領域が重複する場合、転送順序(昇順または降順)を正しく選択しなければ、転送元データが途中で上書きされ、転送が失敗する。
具体的には、アドレス1001~1004のデータをアドレス1003~1006に転送する。ここで注目すべきは、転送元(1001~1004)と転送先(1003~1006)の範囲が一部(1003,1004)重なっている点である。
- 昇順転送(方向フラグ=0)での問題点
アドレスの小さい方(1001)から順に転送すると、以下のような問題が起きる。
- 1001 → 1003への転送で、1003の元データが消える。
- 次に1002 → 1004への転送で、1004の元データが消える。この時点で、元々1003と1004にあったデータが失われるため、正しく転送が完了しない。
- 1001 → 1003への転送で、1003の元データが消える。
- 降順転送(方向フラグ=1)での正しい動作
アドレスの大きい方(1004)から順に転送すると、次のようにデータは安全に転送される。
- 1004 → 1006への転送。1006にデータが移動し、元のデータは失われない。
- 1003 → 1005への転送。同様に安全にデータが移動する。
- 続いて1002 → 1004、1001 → 1003と順番に転送が進み、元データを失うことなく、全ての転送が正しく行われる。
- 1004 → 1006への転送。1006にデータが移動し、元のデータは失われない。
【転送前】
アドレス | 1001 | 1002 | 1003 | 1004 | 1005 | 1006 |
---|---|---|---|---|---|---|
データ | AAA | BBB | CCC | DDD | --- | --- |
【降順転送後】
アドレス | 1001 | 1002 | 1003 | 1004 | 1005 | 1006 |
---|---|---|---|---|---|---|
データ | --- | --- | AAA | BBB | CCC | DDD |
このことから、転送が正しく行われるための適切なパラメータは以下となる。
- 転送元開始アドレス:1004
- 転送先開始アドレス:1006
- 方向フラグ:1(降順)
- 転送語数:4