• ベストアンサー

計算機システム

長文で失礼いたします。 ページ化セグメント方式を採用している仮想記憶方式の計算機について 命令をCPUに読み込んだ直後から、オペランドの読み出しが終わるまでの一連の動作をCPU内の処理と主記憶装置へのアクセスを区別して示したい。但し次の仮定を用いる。   (1)命令のアドレス部では、ベースレジスタ、インデックスレジスタおよびディスプレースメント(ベースアドレスからの変位)を指定する。   (2)セグメント表の先頭アドレスは、セグメントベースレジスタに格納されている。   (3)オペランドは主記憶装置から1回のアクセスでとりだせる。   (4)オペランドなど必要な情報の存在するページ表は主記憶装置に取り出されているものとする。 次のようになると思うのですが、途中からわからないのです。   まず、セグメントベースアドレスとベースレジスタの内容をCPU内で加算処理を行う。これにより、セグメント表のアドレスを得ることが出来る。得たセグメト表のアドレスにより主記憶にあるセグメント表にアクセスする。そのセグメント表にあるページ表の先頭アドレスの値とインデックスレジスタの値をCPUで加算処理を行うとページ表のアドレスが得られる。主記憶にあるこのページ表のアドレスにアクセスする。・・・・   その後が判らないのです。オペランドの読み出しはどこまでなんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.4

No.2の ymmasayan です。補足にお答えします。 > 仮想アドレス(1)と仮想アドレス(2)との関係はどうなっているのですか? 仮想アドレス(2)がそのまま仮想アドレス(1)なのでしょうか?それともなんらかの処理が必要なのですか?それが(2)の過程なのでしょうか? 仮想アドレス(2)が本来の仮想空間につけられたアドレスそのものです。ところが、仮想アドレスと実アドレスの結び付けのためにセグメント、ページと言う管理単位を導入したために、仮想アドレス(2)をセグメント、ページであらわす必要性が生じてしまったのです。これが仮想アドレス(1)であくまでも便宜上の表し方です。 仮想アドレス(2)は仮想アドレス(1)の形に変換しないと、実アドレスのページに紐付け(変換)できないのです。おっしゃる通り、手順の(2)から(6)がその変換の過程です。 次に、若干のコメントを。 (1)間接アドレッシングと言うのが機種によって意味が2つ有りそうです。1つはtocoche さんの言われるインデックスレジスターを使ったアクセスです。 もう一つは私の言っているオペランドのアドレスでアクセスするデータの中身はアドレス(ポインタ)で、そのアドレスの中身が本当のデータと言うものです。IBMのホスト系では後者をインダイレクト(間接)アドレッシングと言っていると思います。インデックスは「指標、又は、修飾」であくまでも、表操作をするものだと思うのですが。 (2)ベースレジスタ選択/インデックスレジスタ選択/ディスプレースメント(ベースアドレス用)は、同時に使用して相対アドレス(2)を計算するものです。質問者:hatukaneko さんの言われるように「すべてを使って加算処理を行って仮想アドレスを得るのかと思っていました」と言うのはまさにその通りです。

hatukaneko
質問者

お礼

御礼が大変遅くなって申し訳ありません。 間接アドレッシングとは2つの意味があるのですね。 どうやら私が借りたプリントでは回答者:ymmasayanさんがおっしゃるほうを前提としているようです。 本当に度々の質問に丁寧に答えて下さってありがとうございました。

その他の回答 (3)

  • tocoche
  • ベストアンサー率36% (65/180)
回答No.3

まず確実に対応付けられるところから。 私が見たのは富士通系だったと思うのですが、論理,物理アドレスという呼び方をしていました。 ・変換前のアドレス=仮想アドレス=論理アドレス ・変換後のアドレス=実アドレス=物理アドレス 次にアドレス変換に使うものですが、 [仮想アドレス内] ・セグメント番号 ・ページ番号 ・ページ内アドレス [レジスタ関係] ・セグメントベースレジスタ 関係図がないので推測するしかありませんが、アドレス変換テーブルを使うときは、「このレジスタを参照する」と明示していないかぎり、シンプルな手順で変換すると思います。 例えば、セグメントベースレジスタの内容とセグメント番号を足した値で、セグメントテーブルをアクセスする。セグメントテーブルから得られた値とページ番号を足した値で、ページテーブルをアクセスする。ページテーブルから得た値とページ内アドレスを足して物理アドレスとする。 という具合です。 さて残りのものですが、 [命令内] ・ベースレジスタ選択 ・インデックスレジスタ選択 ・ディスプレースメント(ベースアドレス用) [レジスタ関係] ・ベースレジスタ ・インデックスレジスタ ベースレジスタ選択/インデックスレジスタ選択/ディスプレースメント(ベースアドレス用)は、同時に使用するものですか? アドレス変換でなくアドレッシングに関するのではないですか? アドレッシングに関するものなら、 ・インデックスレジスタの値を使用した「間接アドレッシング」 ・ベースレジスタの内容とディスプレースメントを足した値を使用した「ベースモードアドレッシング」 各々の場合について示せという問題だと思います。 このアドレッシングの呼び方も参考書によっていろいろあります。 ・間接=インダイレクトレジスタ=レジスタ参照=ポインタ=(そのまま)インデックス など ・ベースモード=レジスタ相対 など 私が「普通」と思っていることも、他の参考書を読んだ人からは「違うぞ」と言われるかもしれません。(20年も前に勉強したので、参考書もなくなってしまった。「インデックス」ってDEC系かな?) あとは図書館でコンピュータアーキテクチャ関係の本を見て、図を探すくらいしかないでしょう。

hatukaneko
質問者

補足

何度も丁寧な回答ありがとうございます。 >ベースレジスタ選択/インデックスレジスタ選択/ディスプレースメント(ベースアドレス用)は、同時に使用するものですか? アドレス変換でなくアドレッシングに関するのではないですか? アドレッシングに関するものなら、 同時に使用するものかどうかはわかりませんが、すべてを使って加算処理を行って仮想アドレスを得るのかと思っていました。順番等についてはわかりませんが。 またアドレッシングに関するものだと思います。 図については見つけたのですが仮想アドレスを得るまでの図は表現が異なっていて対応がわからず今だ理解できていません。

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.2

途中からの回答になりますが。用語がいろいろ有るので、推測を交えながら。 用語について以下のように整理しておきます。 ・仮想アドレス(論理アドレス)・・変換前のアドレス。本来は実メモリーよりはるかに大きい仮想空間(補助記憶装置に生成)につけた0相対のアドレスの事。 ・実アドレス(物理アドレス)・・変換後のアドレス。実装されている主記憶装置(主メモリー)につけられている0相対のアドレス。 ・ベースレジスタ・・プログラムの再配置(リロケート)に対応するためのレジスタ。基本的にはOSやローダが値をセットする。 ・インデックスレジスタ・・ユーザが表操作をするとき、表の行指定をするレジスタ。 次にアドレスの表現形を整理します。 ・命令のアドレス部・・(ベースレジスタ)+(インデックスレジスタ)+(ディスプレースメント) ・仮想アドレス(1)・・(セグメント番号)+(ページ番号)+(ページ内アドレス) ・仮想アドレス(2)・・0相対の仮想アドレス。 ・実アドレス(物理アドレス、主記憶アドレス)・・0相対の主メモリーアドレス。 次にオペランドの取り出しの過程(推測)です。図を書いてトレースしてください。 (1)命令のアドレス部で示される(ベースレジスタ)+(インデックスレジスタ)+(ディスプレースメント)を計算します。これが0相対の仮想アドレスになります。 (2)仮想アドレスをページ長で割り算して商と余りを計算します。ここでは仮に商にページ長を掛けてページ先頭アドレスを求めるものとします。 (3)プログラムごとのセグメント数は可変ですからちょっと厄介です。 (4)セグメントベースレジスタからセグメント表の先頭アドレスを取り出しテーブルサーチをします。先ほど計算したページ先頭アドレスよりも小さい直近のアドレスが目的のオペランドの所属するページの先頭アドレスです。 (5)セグメント表からそのセグメントのページ表の先頭アドレスをつかみます。 (6)セグメント先頭アドレスからページ先頭アドレスを引き、これをページ長で割ってセグメント内ページ番号を求めます。 (7)ページ表からページ番号でテーブルアクセスし、実アドレスのページ先頭アドレスを得ます。 (8)これに前に保存してあった余りを足すと実メモリーのアドレスが得られます。→これがオペランドのアドレスです。 なお、蛇足ですが、(4)でセグメントフォルト、(7)でページフォルトのチェックが入るべきだと思います。 主記憶のアクセス回数が1回と言う件ですが、間接アドレス命令(アドレステーブル経由)でなく、直接アドレス命令だという意味でしょう。そうでないと上記手順では(セグメント表N回)+(ページ表1回)+1回っデ2回どころでは有りません。 あと、実際の機械では、セグメント表やページ表はTLBやDATを使って高速化しています。(原理的には変わらないと思います)

hatukaneko
質問者

補足

回答ありがとうございました。流れがわかりました。 さらに質問させて頂いてよろしいでしょうか? 次のところが判りません。 仮想アドレス(1)と仮想アドレス(2)との関係はどうなっているのですか? 仮想アドレス(2)がそのまま仮想アドレス(1)なのでしょうか?それともなんらかの処理が必要なのですか?それが(2)の過程なのでしょうか? 度々すみません。

  • tocoche
  • ベストアンサー率36% (65/180)
回答No.1

普通、アドレス変換テーブルを使うときは、 1.変換テーブルの先頭アドレスを示す「テーブルベースアドレス」と、そこからの変位を示す「オフセット」を足した値(アドレス)で、変換テーブルをアクセスして「物理アドレス」のベースアドレス得る。 2.「物理アドレス」のベースアドレスに主記憶アクセス用の「ディスプレースメント」を足した値(アドレス)で主記憶をアクセスしてオペランドを得る。 と思うのですが、どの部分を何と呼ぶかは、参考書あるいはメーカ毎によって違いますので、まず対応を明確にすることが重要だと思います。 質問ではアドレス変換テーブルが、セグメントテーブルとページテーブルの2つあるようなので少し複雑ですが、2段階で変換テーブルをアクセスするときは、上記1の操作が繰り返されるものと思います。 >ディスプレースメント(ベースアドレスからの変位) とありますが、この「ベースアドレス」は「物理アドレス」のベースアドレスに対応していますか? >(4)オペランドなど必要な情報の存在するページ表は主記憶装置に取り出されているものとする。 ページテーブルの中にオペランドがあるわけじゃないですよね?(でもそうだとすると、1つのオペランドを取り出すのに主記憶を2回アクセスしなくてはならない) このような問題が出るからには、教科書,参考書に図があると思うのですが。(推測では何と答えたらいいか)

hatukaneko
質問者

補足

回答ありがとうございます。補足させて頂きます。 >>ディスプレースメント(ベースアドレスからの変位) >とありますが、この「ベースアドレス」は「物理アドレス」のベースアドレスに対応していますか? おそらくしていないと思います。「物理アドレス」を得るために「ベースレジスタ」と「インデックスレジスタ」というアドレスを使うのではないかと思うのですが。判りません。 また、「物理アドレス」とはどうも呼んでいない様なのでよくは分からないのですが。「仮想アドレス」、「実アドレス」という表現をされています。 「仮想アドレス」はアドレス変換の前で、「実アドレス」はアドレス変換後のアドレスを指しています。 さらに「仮想アドレス」にはセグメント番号、ページ番号、ページ内アドレスがのっています。 >>(4)オペランドなど必要な情報の存在するページ表は主記憶装置に取り出されているものとする。 >ページテーブルの中にオペランドがあるわけじゃないですよね?(でもそうだとすると、1つのオペランドを取り出すのに主記憶を2回アクセスしなくてはならない) ページテーブルの中にオペランドは無いという事で考えています。 「物理アドレス」からオペランドを得るところはわかりました。 大変申し訳無いのですが、「物理アドレス」(おそらく「仮想アドレス」)を得るまでをご存知でしたら詳しく教えてください。「ベースレジスタ」と「インデックスレジスタ」の使い方が分からないのです。 実は他大学からの院受験でして、教科書や参考書は持っていないのです。

関連するQ&A

  • STH命令

    次の命令はどういう処理でしょうか。 STH 5,60(4,2) 5番レジスタの内容を、ベースレジスタ2にインデックスレジスタ4のデータを加算しさらに60バイト加算して求めた主記憶装置のアドレスに格納するのでしょうか。 60(4,2)は主記憶装置のアドレスですか?

  • CPUの回路について教えてほしいです!

    ・5ビットCPU:CPUが5ビットずつ読み出し専用メモリからデータを取り込む。 ・レジスタ:2ビットを記憶できるレジスタを1つ持っている。 ・アドレス空間:CPUは2ビットの異なるアドレスを参照できる。 ・メモリ:読み出し専用メモリと書き込み専用メモリを持っている。読み出し専用は5ビット、4ワード。書き込み専用は2ビット、1ワード ・機械語:5ビット中、上位3ビットがOPコード、下位2ビットがオペランドとなる。 ・命令:CPUの命令は以下の5種類。 ・加算命令:レジスタの値とオペランドの値を加算し、その値をレジスタにセット。 ・減算命令:レジスタの値からオペランドの値を減算し、その値をレジスタにセット。 ・ロード命令:オペランドの値をレジスタにセット。 ・ストア命令:書き込み専用メモリにレジスタの数値を書き込む。下位2ビットは無視される。 ・ジャンプ命令:オペランドの値が示す読み出し専用メモリのアドレスに書かれた命令を次に実行する命令とする。 このような仕様にに基づくUPUの回路図を教えてください。 また減算命令、ジャンプ命令、メモリへの書き込みをするような回路について文章でよいので説明していただけるとありがたいです。

  • アドレスレジスタは物理的に存在しますか?

    情報系の勉強している、初心者です。 アドレス修飾というところを今勉強中です。 命令が読み出しから実行終了までのステップを    段階      関係するレジスタ等 1. 命令の取り出し:命令アドレスレジスタ,命令レジスタ 2. 命令の解読:デコーダ,演算装置(演算命令の場合) 3. 有効アドレス計算:アドレスレジスタ,主記憶装置 4. データの取り出し5. 命令の実行:演算装置(演算命令の場合) 6. 演算結果格納:主記憶装置 ・・と説明しています。(一部省略している部分があります。)  そこで、この流れが意味することがいまいちつかめないし、覚えられないので パソコンの中をみて確かめようと思いました。 使っているノートパソコンのメモリーは取り出せました。が、一番知りたかったCPUはどこにあるのか分からなかったので、インターネットでアドレスレジスタや命令レジスタを視覚的にとらえられないかといろいろ調べましたが・・イメージ図は出てくるのですが写真は見つけられませんでした。 アドレスレジスタ・デコーダ等が実際に存在するのか、アドバイスお願いします。

  • 「レジスタ」の由来は?「オペランド」とどう違うの?

    CPUが計算する時に記憶しておく装置「レジスタ」というのがありますが、そもそも「レジスタ」の名前の由来は何なんでしょうか? 「レジスタ」(register)を日本語に訳すると「登録」という意味になりますが、この「登録」の意味と記憶装置(レジスタ)はどう関係あるのでしょうか? さらに「レジスタ」と「オペランド」と「データ」は意味としては似ていると思いますが、どう違うのでしょうか? わかりやすく教えてください。 よろしくお願いいたします。

  • CPUについて教えて下さい。

    CPUについてこれまで調べて分かったことは、  ・処理能力の目安となる数値として、クロック周波数を用いる  ・レジスタに記憶されているデータに対して演算を行う  ・レジスタからメモリーやその他の部品にデータを転送する  ・メモリやその他の部品から、レジスタにデータを転送する があります。 それ以外に・・・  (1)補助記憶装置からのみ命令を読み取り、命令を実行する  (2)内部に主記憶装置(メモリ)を持つ  (3)CPUは演算を行い、制御機能は持たない  (4)主記憶が多ければ多いほどCPUの動作は遅くなる  (5)クロック信号が発生する間隔が短いほど、CPUの動作は高速になる この中から最も適切なものを1つ選ばなくてはなりません。 (1)は“補助記憶装置からのみ”というのが違うと思います。 それ以外はちょっと分からないので、どなたかお知恵をかして下さい。 解説も添えてもらえると助かります。 回答よろしくお願いします!

  • OSはどのようにして、CPUにメモリ上の物理アドレスを伝えるのか?

    一般的なシステムにおいて、プログラムを実行するには、コンパイラが再配置可能なオブジェクトファイルにして、そのオブジェクトファイルをローダがメモリ上にローディングして、CPUによって実行が行われると認識しています。 では、実際にCPUにより実行される時に、どのようにしてCPUは、ローディングされている物理アドレスを知ることが出来るのですか?一番初めにOSがどのようにCPUに先頭番地を伝えているのかが見当がつきません。例えば、486では、セグメントレジスタの値とオフセットアドレスを加算したアドレスを基にメモリとやり取りしていますが、OSがこのセグメントレジスタに先頭アドレスをどのように格納しているのかを教えてください。お願いします。

  • OSの処理、MMUのアドレス変換表について

    (1)マルチスレッドで、CPUの別コアでそれぞれ処理が進められているとき、タスクの共通のリソースにアクセスする場合も、各コアのMMUのアドレス変換表を参照すると思っています。 OSはアプリケーションソフトのメモリ割り当ての際に共通のリソースに関しては全コアのMMUのアドレス変換表に情報を書き込むのでしょうか。 (2)CPUの各コアのセグメントレジスタに情報を書き込むのはOSの役割と考えて間違いないでしょうか。 勉強を始めたばかりで、そもそも質問が的外れでしたら申し訳ございません。

  • インデックスアドレス指定方式とベースアドレス指定方式の違い

    アドレス指定方式(アドレシング)についての質問です。 タイトルの通り、インデックスアドレス指定方式とベースアドレス指定方式の違いを教えていただきたいです。 参考書などでは、 ●インデックスアドレス指定方式 ・命令の番地部とインデックスレジスタの値を加算した値を有効アドレスとする ・インデックスレジスタの内容を変えるだけで別なアドレスの内容が参照できる ●ベースアドレス指定方式 ・命令の番地部が指定するアドレスに、ベースレジスタの内容を加算した値を有効アドレスとする ・ベースレジスタの値を変えるだけでプログラムが主記憶装置のどこからでも実行できる(再配置可能) となっています。 有効アドレス=番地部のアドレス+レジスタの値 となるのが同じで、基準となる値がインデックスアドレス指定方式のほうでは命令の番地部であり、ベースアドレス指定方式のほうはベースレジスタの値、ということまではわかったのですが、この「基準」が違うことでどういう違いがあるのか、具体的にどういう場合にどちらの方式が使われるのかがわかりません。 ベースアドレス指定方式の「再配置可能」という部分もどういう仕組みなのか、よくわからないです。 ご回答、よろしくお願いいたします。

  • コンピュータを構成する基本的な装置について

    ・(A)装置が(B)装置からデータやプログラムを読み込むためには、(C)装置内にある特別なレジスタである(D)の値((E))が必要となる。 ・(F)装置から取り出されたデータやプログラムは、(G)を通って(H)装置へ運ばれる。このとき、処理の対象となるデータは(I)に一時記憶される。一方、処理の手順を示したプログラムの一部は(J)に送られる。 (A)~(J)に適切な語句を入れよ、という問題なのですが、答えがわかりません。 どなたか回答お願いいたします。 あと、 (A)制御 (B)主記憶 (F)主記憶 だと思うのですが、間違ってたら教えていただけると助かります。

  • データ・プログラムの流れ

    『CPU・キャッシュメモリ・主記憶装置』間での遣り取りと、 『主記憶装置・仮装記憶装置』間での遣り取りとが、 私の参考書では別の項目に分類されていまして、 それ等全体の連携の仕組みが綴られていません。 従いまして、アドレス空間の割り当てられ方が、 現時点の私には全く分かりませんから、 『CPU・キャッシュメモリ・主記憶装置・仮装記憶装置』全体の連携方法を 教えて下さいませ。