第8回 記憶領域管理( 記憶領域管理(2) ページング 仮想記憶( 仮想記憶(1)オーバレイ 1) ページングとは、可変長連続領域割付けで発生する( アドレスとは別に( ( c b a p87~ p87~102 )を解消するため、固定長ブロックによる割付け+物理 )アドレスを導入して用いる方法である。 )アドレスとは、ハードウェアとしてのメモリ(主記憶)のアドレスのことであり、( d )アドレスとは、プログラムが参照す るアドレス (プログラムがプログラムカウンタとして命令のアドレスを指定したり、演算などの操作の対象となるオペランドのアドレ スを指定したりする、アドレス) のことである。 メモリアクセスのたびに、( e )アドレスから( f )アドレスへの変換(マッピング)が行われ、メモリが読み書きされる。具体 的には、命令の読み出し(命令フェッチ)の際にPC(プログラムカウンタ)の値をアドレスとして、メモリ(主記憶)を読み出すが、この メモリアクセス時には、上記のアドレス変換が行われる。 また、命令を実行するときに、メモリ(主記憶)上の変数を読み出したり、 書き込んだりする場合、この時にも上記のアドレス変換が行われる。 2) ( a )アドレスから( b )アドレスへのアドレス変換は、次の2つの効果をもたらす。 i. メモリ割付けで、(物理)メモリ上では不連続なメモリを、アドレス変換によって、論理アドレス上では( b )な領域に見せる ことができる。 ii. メモリの、再配置(リロケーション)の問題を回避することができる。 再配置とは、1つのメモリ上に複数のプロセスを置いた 時に後ろのプロセスのアドレスが( c )まで決まらないこと(静的再配置問題)、及び、混雑などの理由でプロセスを一旦メ モリから追出して再度メモリ上に復帰させた場合にアドレスが( d )しまうこと(動的再配置問題)、である。 3) ページングのシステムでは、アドレス空間を固定長のブロックに分割して管理する。このブロックを( a )と呼ぶ。 1つ の( a )の大きさはすべて同じで、最近のシステムでは 4096 バイトの場合が多いが、昔は 512 バイトなどを使っていたこともある。 物理メモリ(メインメモリのハードウェア)のアドレス空間は、( a )のブロックで分割され、先頭から番号を付ける。この番号を ( b )と呼ぶ。同様に、論理メモリ(プログラム/CPUから見えるアドレス)のアドレス空間も、( c )のブロックで分割され、 先頭から番号を付ける。この番号を( ページングのシステムでは、( e d )と呼ぶ。 )アドレスを( f )アドレスに変換するが、実際に変換するのはページ番号(=何番目の ページであるかの番号=インデックス)だけであり、ページの中の位置(ページの中の何バイト目であるか)は変換せず、同じとす る。 4) 右図は、3) そのまま で考えたアドレ ( a ) ( b )アドレス ( c ) ( e )アドレス ( f ) (d) (g) ( h ) ス変換の様子を アドレス変換 図に示したもの である。 図中の( a ) ~ ( h )に適当な言葉を埋めよ。 0 論理アドレス空間 a 物理アドレス空間 0 5) 右図は、アドレス変換によってページがマッピングさ 1 b 2 c 3 d 1 れる様子を示している。 (ページサイズを 4096 とする) 論理アドレス空間上の第0ページ(アドレス 0~4095)は、 図中でページaと表されているが、これはアドレス変換に よって、物理アドレス空間上の第 ( p )ページにマップ 4 5 ア ド レ ス 変 換 2 3 c 4 b 5 6 6 7 7 ページ 番号 8 される。 つまり、CPUのプログラムカウンタが 0 番地の 命令を読み出そうとするとき、物理メモリ(=主記憶)上で はアドレス( q )番地を読み出す。 a 9 同様に、CPUが論理アドレス空間上の第2ページ(アドレ ス 8192~12287)上の3番目のアドレス 8195 に置かれた ページ 10 番号 11 d 59 変数xに書き込もうとすると、論理アドレス空間上の第3ページはアドレス変換により物理アドレス空間上の第( 変換されるので、、物理メモリ(=主記憶)上のアドレス( 6) アドレス変換は、( a )ユニット、略称( b s ( g d )で行われる。 )によって行われる。 この変換は、命令の読み出し(フェッチ)、命令 変換には( e h ら何番目のエントリーかの値)として与えて、そのエントリーに書かれた数字を( a )必要がある。そのため、変換はプログ f )と )を表のエントリー番号(エントリー位置、上か i )として使う。 )から選択される。 最近のシステムでは 4096=212バイトを1ページとするものが多 a いが、昔のシステムでは 512 バイトや 1024 バイトを1ページとしたものもあった。 ( ページ番号の境界が( c )と呼ばれる表が用いられ、そこには( )の対応が載っている。 通常のシステム(ハードウェア)では、( 7) 1ページの大きさは、通常は( )ページに )番地に書き込む。 実行中のオペランドのアクセスのたびに起こるので、1つの命令の実行時間より( ラム(ソフトウェア)ではなく、( r a )を選ぶ理由は、ページ内のアドレスと )になるので、アドレスを2進数で表した時にビット位置を境界として分割することができるからであ る。 たとえば、ページが 4096 バイトの場合、2進で表したバイトアドレスが ページ内のアドレスは下位の( b )ビットであるから、値は( c 0101 1110 1011 1001 0010 0111 であったとすると、 )となり、ページ番号は( d )となる。 8) ページテーブル(=ページ番号の変換表)が大きくなることは、問題になる。基本的にメモリを増やせば増やすほど、ページテ ーブルが( a 間の大きさを、( )なる。 なぜなら、ページテーブルのエントリーの数は、(物理メモリ・論理メモリの両方とも同じように)メモリ空 b )で割った数だからである。 たとえば256メガバイトの論理メモリ空間を、4キロバイトずつのページに分 割すると、ページの数は( c )になる。 1つのエントリーの大きさは、1個の物理アドレスが入るビット数分が必要なので、 たとえば 48 ビット(=6バイト)であるとすると、ページテーブル全体の大きさは、( c )×6バイト = ( d )バイトになる。 (確認) メモリの分量(何バイト分あるか)と、それに付けるアドレスのビット数(アドレスとして何ビット必要か)の関係を確認し ておこう。 もし、メモリが4バイト分だったとすると、それに付けるアドレスは、( この時アドレスは2進数で書くと( であり、この( g )は個数(4)から( f h e )個のバイトを区別しなければならない。 )の( e )個が必要である。 アドレスの範囲は0から( g ) )になっている。 もし個数が2のべき乗、つまり2のp乗になるように選ぶとすると、 p 個数は2 であるから、アドレスの範囲は0から( i )までとなる。 そうすると、アドレスを2進数として表すために必要なビ ット数は、最大値である( i )を2進数として表せばいいので、( j )ビットとなる。 (pビットで表すことのできる最大数は、 p 1がp個並んでいる数だから(符号は考えない)、111…(p個)…111=2 -1である。) 上の4個の例では、個数(4)は2の( k )乗であるから、アドレスの範囲は0から( 表すために必要な2進の桁数は、( m l )となり、 この最大数( l )を )ビットである。 最近のパソコンはもっと大きく、64 ビット版 Windows では論理メモリ空間が 128GB (=237B)(Windows の考え方を 100%は理解し ていないので、ここは paged pool と呼ばれる量を書いておいた)である。また、物理メモリ空間の最大量は CPU チップによって決ま り Intel Core i7-3770K Processor (8M Cache, up to 3.90 GHz、2012 年 4 月発売) では 32GB (=235B) であるが、OSとしては 将来の CPU の拡張も見越して切りのよいビット幅、たとえば240バイトまで(つまり40ビットの幅)とか248バイト(48ビット幅)を持 つ表にすることになる。 単純計算すると、ページテーブルの大きさは、(論理ページ数)×(物理ページアドレスのビット幅)になる が、(論理ページ数)=(論理メモリ空間)÷(1ページの大きさ)であるから、ページサイズを 4KB とすると、( n )になる。 かなりバカでかいということだ。 <多段ページテーブル、逆ページテーブルは、自分で読んで理解しておくこと> 多段ページテーブルは、ページテーブルを多段変換にする。利用しないページ部分について表を作らないようにすることができる ので、ページテーブルを節約できる。現在広く使われている。 逆ページテーブルは、ページテーブルの構造を、(物理ページ番号)⇒(論理ページ番号)にしたものである。テーブルのエントリー 数は物理ページ番号の範囲があればいいので、少なくなる。しかし、変換動作は、論理ページ番号が与えられて物理ページ番号 を取り出したいのだから、表を検索することになり、その分変換が遅くなる。現在はほとんど使われていないようだ。 60 9) アドレス変換キャッシュは、高速のメモリに、最近行ったアドレス変換を記憶しておくことにより、同じ変換が出てきたときに ( a )する。 命令の読出しアクセスを考えると、命令はメモリ上に連続して置かれていることが多いので、次の命令を読み 出すときには( b )ページにある可能性が高い。 ( b )ページにあれば、ページ番号の変換も( c )なので、( d ) を高速メモリに覚えておけば、それを使える。 高速メモリの分量はそれ程大きくできない(実際にかなり小さい)ので、すべての変換を覚えて置くことはできない。 満杯の時、新 しい変換パターンが出てくれば、それを記憶するためには既に入っているエントリーを( e )ことになる。 変換を記憶する高速メモリは、連想メモリと呼ばれる構造のものである。これは表の形をしているが、1つのエントリーは( の欄と( ( i g )の欄の組から成っており、変換する時には( h f ) )する。 この連想メモリによる表のことを )と呼ぶ 10) ページテーブル(アドレス変換テーブル)には、幾つかの情報が付加されている(p95)。 まず第1に( のエントリーの変換が有効であるか否か、つまり、その論理ページに対して( b a )ビットは、そ )を示すビットである。 このビ ットが立っていないと、その論理ページからのアドレス変換は無意味であり正しくない。 次に、ページごとにアクセスの許可を指 定するビットが置かれることがある。教科書の図 5.13 に書かれているWとXのビットがそれに該当し、Wビットはそのページに対す る( c )を許可するか禁じるか、またXビットは( d アクセス履歴情報を格納しておく2種類のビット、 ( )を許可するか禁じるかを指定する。 e )ビットと( f 第3の種類として、ページの )ビットが置かれている。 アクセス履歴ビット の使い方は後から出てくる。 (セグメンテーションは省略する。自分で読んでおくこと) [第6章 仮想記憶 6.1 オーバーレイに移る] 11) 物理メモリより大きいプログラム(データが大きい、プログラムのステップ数が多いなどの理由で)を実行させたいとき、 ( a ( c )と呼ばれる技法を用いていた。 それは、プログラムを、( )を必要に応じて( d b )ない単位( c )に分割し、分割された )する技法である。 たとえば、データの量が多く、それを2つの部分AとBに分割した場合 に、あるときはAだけを処理、あるときはBだけを処理、のようにAとBとを同時に処理しないならば、最初にプログラムとデータAを メモリに置いて処理し、それが終了したら、( e )をメモリに置いて処理すればよい。 この時に重要なのは、データAと データBを同時に必要とする処理がないことである。 プログラムのステップ数が多くてメモリに入りきらない場合は、もし処理が前 半Aと後半Bに分割できれば、最初に( f )を処理し、次に( g )を処理すればよい。 オーバーレイを実現するためには、モジュールを動的にロードするための仕組である( 処理(制御)する( i h )が必要となるほか、全体の流れを )モジュールが置かれる。 12) (本項は教科書に記述なし) オーバーレイの最大の問題は、プログラムのモジュールへの分割を( ければならないことである。 プログラムのどの部分が( れは( a )にとって負担である。 b )が行わな )かを判定して、適切に分割しなければならない。 こ 更に、システムによって物理メモリの大きさは( ら小さなマシンBへプログラムを移す時、モジュールの( a d c )ので、メモリの大きなマシンAか )ならず、そのまま移すことができない。 これらの理由から、オーバーレイは使いにくい。 ページングの仕組をもつシステムでは、物理メモリの大きさに関わらず ( e )の大きさを( f )できるので、オーバーレイを( g )。 現在のPCではオーバーレイを使うことは無い。 このことについては、次回の仮想記憶・プロセススワッピングを理解すると納得できると思う。 13) 主記憶のページとは何か。 正しいものを選べ ① 主記憶を、プロセスの大きさに分割したブロックのことを、ページと呼ぶ ② 主記憶を、プログラムの単位(Java ならばオブジェクト)に分割したブロックのことをページと呼ぶ 61 ③ 主記憶を、一定の大きさ(固定長)に分割したブロックのことをページと呼ぶ ④ 主記憶を、16バイト毎に区切ったブロックのことをページと呼ぶ 14) ページングとは何か。 正しいものを選べ ① 主記憶をページに分割すること ② 主記憶上のページについて、物理的なメモリのアドレスから、プログラムの見る論理的なアドレスへ変換すること ③ 主記憶上のページについて、プログラムの見る論理的なアドレスから、物理的なメモリのアドレスへ変換すること ④ 主記憶上のページについて、メモリ上のアドレスを、相対アドレッシングを使って命令の見るアドレスに変換すること 15) ページテーブルとは何か、正しいものを選べ ① ページテーブルは、プログラムが参照してアドレスを変換するための、主記憶上に置かれたアドレス対応表である ② ページテーブルは、メモリ管理ユニットが参照してアドレスを変換するためのアドレス対応表で、通常は主記憶に置かれる ③ ページテーブルは、CPU がオペランドアドレスを生成する時に参照するアドレス対応表で、CPU に置かれる ④ ページテーブルは、メモリ管理ユニットが参照してアドレスを変換するためのドレス対応表で、メモリ管理ユニットに置かれ る 16) 論理アドレス・物理アドレスの説明で、間違っているものを選べ ① 論理アドレスはプログラム上のアドレス、物理アドレスは主記憶ハードウェアに渡されるアドレスである ② 論理アドレスは CPU から出されるアドレス、物理アドレスはメモリに渡されるアドレスである ③ アドレス変換機構は、物理アドレスから論理アドレスに変換する ④ 実際に変換されるのは、アドレスのうちの上位のページ枠番号のみで、下位のページ内アドレスは変換されない 17) ページテーブルについて、正しいものを選べ ① ページテーブルの大きさ(エントリー数)は、現在実際に使っているページの分だけあればいい ② ページテーブルの大きさ(エントリー数)は、コンピュータに搭載した物理メモリの大きさだけ必要となるので膨大となる ③ ページテーブルの大きさ(エントリー数)は、物理アドレスの許すページの数だけ必要となるので膨大になる ④ ページテーブルの大きさ(エントリー数)は、論理ページ数の数だけ必要となるので膨大になる 18) ページテーブルの機能について、正しいものを選べ ① ページテーブルは、論理ページのそれぞれを個別に物理ページに変換するので、連続した論理ページが不連続な(とびと びの)物理ページに対応しても差し支えない ② ページテーブルは、論理ページのそれぞれを個別に物理ページに変換するので、連続した論理ページは連続した物理ペ ージに対応する ③ ページテーブルは、プロセスごとのページブロック単位に、物理ページ上のブロックに変換するので、プロセス内の連続し た論理ページは連続した物理ページに対応する ④ ページテーブルは、単純に先頭から、論理ページから物理ページにマップするので、連続領域は連続領域に変換される 19) ページングシステムでは、アドレス変換は (正しいものを選べ) ① 1回のプログラムの実行の最初に1回だけ起こる ② 1つの命令を実行すると必ず1回起こる ③ 1つのメモリアクセスが起こるごとに必ず1回起こるので、1つの命令が命令読出しとオペランド読み出しの2回メモリアク セスを起こせば、変換も2回起こる。 ④ アドレス変換が起こるかどうかは、プログラムや命令の実行に依存するのではなく、OSの決めた一定時間に1回起こる。 20) TLB(Translation Lookaside Buffer)とは ① アドレス変換を高速化するため、最近に使った変換(論理・物理アドレスペア)を高速メモリへ記憶しておく仕組である ② アドレス変換を高速化するため、アドレス変換の履歴を使って、あらかじめ変換の予測をする仕組である ③ アドレス変換を高速化するため、ページテーブルを高速に検索する仕組みである ④ アドレス変換を高速化するため、変換の関数(ハッシュ関数)を高速に計算する仕組である 62 21) 仮想アドレス(論理アドレス)と実アドレス(物理アドレス)の説明で、間違っているものを選べ ① 仮想アドレスはCPUが命令フェッチやオペランドアクセスのために出すアドレスで、実アドレス(物理アドレス)は主記憶(メ インメモリ)をアクセスするときのアドレスである ② 仮想アドレスは一般に、実アドレス(物理アドレス)に比べてビット数が多い(アドレス空間が広い) ③ プログラムが見ているのは仮想アドレスであって、実アドレス(物理アドレス)はプログラムからは使わない ④ 仮想アドレスは、OSが持っている簡単な関数を使って、実アドレス(物理アドレス)に変換される。この変換は高速性が要 求されるので、簡単に計算して求まるものでなければならない 22) アドレスマッピングについて、次の説明のうち正しいものを選べ ① 仮想アドレス(=仮想メモリ空間上の場所を指し示すアドレス、論理アドレス)から実アドレス(物理アドレス、実メモリ空間 上の場所を示すアドレス)への変換は、OS内で数学的関数として計算される ② 仮想アドレスから実アドレスへの変換は、変換表(アドレス変換テーブル・ページテーブル)を引くことで行われる ③ 仮想アドレスから実アドレスへの変換は、それぞれのビット同士の間をつなぐ結線(たとえば仮想アドレスの7ビット目を実 アドレスの3ビット目に繋ぐ、など)によって行われる ④ 仮想アドレスから実アドレスへの変換は必要なく、実アドレスから仮想アドレスへの変換が必要で、それを変換表(アドレス 変換テーブル・ページテーブル)によって行う 23) アドレス変換テーブル(ページテーブル)について、間違っているものを選べ ① アドレス変換テーブル(ページテーブル)は、仮想アドレスVから実アドレスRへの変換を行う ② アドレス変換テーブル(ページテーブル)は、通常は主記憶(メインメモリ)上に置かれる。 ③ アドレス変換テーブル(ページテーブル)のエントリー(1行)は、通常は、仮想アドレスを書いた仮想アドレスフィールドと、 対応する実アドレスを書いた実アドレスフィールドからなる ④ アドレス変換テーブル(ページテーブル)を引く操作は、CPUが仮想メモリ空間上の情報(命令やデータ)をアクセスすると きに(するたびに)行う 24) アドレス変換テーブル(ページテーブル)のエントリー(行)について、正しいものを選べ ① アドレス変換テーブル(ページテーブル)のエントリーは、仮想アドレスと実アドレスを含むので、ビット数は仮想アドレスの ビット数(たとえば 48 ビット)と実アドレスの最大ビット数(たとえば 30 ビット)を合計した分が必要である ② アドレス変換テーブル(ページテーブル)のエントリーは、実アドレスを含むので、ビット数は実アドレスの最大ビット数(たと えば 30 ビット)が必要である ③ アドレス変換テーブル(ページテーブル)のエントリーは、実アドレスのうちページ番号(ブロック番号)だけを含むので、ビッ ト数は実アドレスの最大ページ番号=(最大ビット数)―(ページ内の位置を指定するためのビット数~たとえば1ページが 4096 バイトの場合 12 ビット)の分が必要である ④ アドレス変換テーブル(ページテーブル)のエントリーは、実アドレスのうちページ(ブロック)内のアドレスだけを含むので、 ビット数は①ページ(ブロック)内を指定するためのビット数、たとえばページが 4096 バイトの場合 12 ビットが必要である (補足説明) ここの「ページ」(アドレスマッピング時の単位となるブロック)の大きさは、仮想メモリ空間に置かれるページと実メモ リ空間に置かれるページでは、必ず同じ大きさ である。なぜなら、ページの単位で仮想空間 メモリアドレス ページ内アドレス (オフセット) ページ番号 (仮想空間の置かれているファイル装置)から 実空間(主記憶)へコピーされるからである。つ アドレス 変換 まり、このように考えられる。仮想メモリ空間も 実メモリ空間も、それぞれ同じ大きさのページ 仮想アドレス 実アドレス (ブロック)に分割されており、そのページの単 位でファイル装置と主記憶の間を行き来する。 ページ番号 ページ内 アドレス ページ番号 ページ内 アドレス これをアドレスのビットで考えると、ページの大 そのまま使う 63 きさを2のN乗としたとき(ページの大きさが 4096 バイトなら2の 12 乗である)、アドレスの下位のNビットを「ページ内を指定する部 分」(ページ内アドレスとかページ内変位 displacement と呼ぶ)とみなし、残りの上位ビットを「ページの番号を示す部分」(ページ 番号と呼ぶ)とみなすことができる。 仮想メモリのアドレス変換は、ページの中については関知しない(ページの単位でマッピングする)ので、実は上位のビットである 「ページ番号」の部分だけを変換すればよいことになる。 25) アドレス変換バッファ(Translation Lookaside Buffer、アドレス変換キャッシュとも呼ばれる)について、正しいものを選べ ① アドレス変換バッファは、アドレス変換テーブルの全エントリーをハードウェア上に保持するもので、それによってアドレス 変換を高速化する ② アドレス変換バッファは、アドレス変換テーブルのエントリーのうち実メモリ(主記憶、物理メモリ)上にあるブロック(ページ) に対応するエントリーだけをハードウェア上に保持するもので、それによってアドレス変換を高速化する。エントリーを実メモリ 上にあるブロックに限定することにより、ハードウェア量を小さくしている ③ アドレス変換バッファは、アドレス変換テーブルのエントリーのうち仮想メモリ上にあるブロック(ページ)に対応するエントリ ーだけをハードウェア上に保持するもので、それによってアドレス変換を高速化する。エントリーを仮想メモリ上にあるブロック に限定することにより、ハードウェア量を小さくしている ④ アドレス変換バッファは、アドレス変換テーブルエントリーのうち最近変換したエントリーだけをハードウェア上に保持するも ので、それによってアドレス変換を高速化する。エントリーの個数はハードウェア量によって決まるので、大きくすれば比較的 長期にわたって変換の履歴が保存されるが、小さいとごく最近の変換のみが保存・再利用されることになる 26) ページングのアドレス変換機構に関する次の説明の中から正しいものを選べ ① アドレス変換テーブル、変換のための制御論理の回路、アドレス変換バッファ(TLB)は、いずれもハードウェアとして実現 され、通常は(CPUチップではなく)独立したICチップとして実装されている ② アドレス変換テーブル、変換のための制御論理の回路、アドレス変換バッファ(TLB)は、いずれもハードウェアとして実現 され、通常はCPUチップの一部として実装されている ③ 変換のための制御論理の回路、アドレス変換バッファ(TLB)は、いずれもハードウェアとして実現され、通常はCPUチッ プの一部として実装されている。アドレス変換テーブルは主記憶の一部を使っている場合が多い ④ アドレス変換テーブル、アドレス変換バッファ(TLB)、TLBの制御論理の回路はハードウェアとして実現されているが、ア ドレス変換テーブルを使った変換論理はOSの一部としてソフトウェアで実現されている。アドレス変換テーブル自体は主記憶 の一部を使っている場合が多い 27) 多重仮想アドレス空間(マルチバーチャル)について、次のうちの正しいものを選べ ① 多重仮想アドレス空間とは、1つの(0番地から始まる)仮想アドレス空間を固定長の複数領域に分割するもので、それぞ れの領域を1つ1つのプロセスに割当てる ② 多重仮想アドレス空間とは、1つの(0番地から始まる)仮想アドレス空間を固定長の複数領域に分割するもので、それぞ れの領域をコード・データ・ヒープ・スタック(教科書 p88 図 2.7)に割当てる ③ 多重仮想アドレス空間とは、(0番地から始まる)アドレス空間を複数持ってそれらを空間番号で識別するもので、たとえば 1つのプロセスに1つずつ空間を与えるので、再配置(リロケーション、教科書 p83)が不要になる ④ 多重仮想アドレス空間とは、(0番地から始まる)仮想アドレス空間を複数持ってそれらをベースレジスタで識別するもので、 1つのプロセス内で複数のアドレス空間を持つことができる 28) メインメモリ(主記憶)が不足するとき起こる問題について、間違っている記述はどれか (仮想記憶は無いものと仮定する) ① 物理的なメインメモリより大きいプログラム(例えば変数に巨大な配列を持つ、または、プログラム手続が極端に長く命令 数が多い、など)は、メインメモリに載らないので、そのままでは実行することは難しい。 64 ② 物理的なメインメモリより大きいプログラムは、二次記憶(ハードディスク)上に本体があれば、そのまま何もしなくても、自 動的に、必要な部分を二次記憶からメインメモリへ転送して実行する。 ③ 物理的なメインメモリより小さいプログラムであっても、多重処理により複数のプログラムを同時に実行しようとすると、物 理メモリが不足して、そのままでは実行できなくなる。 ④ 物理的なメインメモリより小さいプログラムであっても、利用するオペランドアドレスの範囲が物理的なメモリの範囲を超え ていれば、実行する事ができない。 29) オーバーレイの動作に関する記述として、正しいものを選べ ① オーバーレイは、メインメモリに入らない大きさのプログラムを実行する手段で、OSが自動的に大きいプログラムをモジュ ールに分割し、かつ、OSが自動的にモジュールを入換えてくれる ② オーバーレイは、メインメモリに入らない大きさのプログラムを実行する手段で、大きいプログラムをモジュールに分割して 実行するが、分割の作業も入れ替え等の制御もプログラマが自分で行わなければならない ③ オーバーレイは、メインメモリに入らない大きさのプログラムを実行する手段で、大きいプログラムを小さい独立したプログ ラムに分割して実行する。小さいプログラムは1つ1つ順番に呼び出されて実行され、その処理結果をディスクを経由して次 のプログラムに受け渡す ④ オーバーレイは、メインメモリに入らない大きさのプログラムを実行する手段で、複数のコンピュータをつないであたかも大 きなメインメモリがあるように見せかけ、その上にプログラムを置いて実行する。 30) オーバーレイの使われ方に関する記述として、正しいものを選べ ① オーバーレイは大きなプログラムを実行できるが、プログラマの負担が大きいので、特殊な科学技術計算等で用いられ、そ の他の場合はメモリを拡充することで対応する。 ② オーバーレイは大きなプログラムを自動的に(プログラマの負担が無しに)実行できるので、現在広く使われている。 ③ オーバーレイは大きなプログラムを実行できるが、制御のための余分な手続が必要で実行の効率が低下するので、特殊 な科学技術計算等で用いられるが、その他の場合はメモリを拡充することで対応する。 ④ オーバーレイは大きなプログラムを実行できるが、プログラマの負担が大きいので、現在は使われておらず、その代わりに 仮想記憶の仕組が使われている。 ≪解答≫ 1) a 外部断片化(外部フラグメンテーション) e 論理 b 論理 c 物理 d 論理 f 物理 (論理アドレス⇒物理アドレスという変換の方向が問題になる。逆の変換は無い。) 2) a 論理 b 物理 3) a ページ c 実行開始時点 b 物理ページ番号 4) a CPU(プログラム) g ページ内アドレス 5) p 8 b 論理 c ページ d 論理ページ番号 c (論理)ページ番号 r 3 f 物理 d ページ内アドレス e 物理 f (物理)ページ番号 s (3×4096+3=12288+3=) 12291 b MMU (略称は覚えて欲しい) f 論理ページ番号 e 論理 h 物理メモリ(主記憶) q (8×4096=) 32768 6) a メモリ管理 d 変わって g 物理ページ番号 c 短い (早い) h 論理ページ番号 d ハードウェア i 物理ページ番号 e ページテーブル (注: ページテーブルを逆向きに 作る作り方もある ⇒ 逆ページテーブル参照) 7) a 2のべき乗 8) a 大きく b 12 c 01 0010 0111 b ページの大きさ(ページサイズ) d 01 0111 1010 1110 c (256×106)/(4×103) = 64×103 =6万4千個 d 384 キロ p e 4 f 00(=0)、 01(=1)、 10(=2)、 11(=3) g 3 h 1を引いたもの i 2 -1 j p 2 k 2乗 l 3 =2 -1 9) a 高速に変換 m 2 b 同じ c 同じ n (128GB/4KB)×(5B)=160MB d 前の変換 e 消す(消去する) f 論理ページ番号 g 物理ページ番号 65 h 論理ページ番号に一致するエントリを高速に検索する (注意: ページテーブルの場合は、論理ページ番号を「アドレス=(表の何行目のエントリーか)」として用いて表をアクセス (=物理ページ番号を読出す)するが、これはメモリ(=表の置いてあるメモリ)を一発アクセスするだけの時間で読める。 とこ ろが、ここの高速変換表は論理ページ番号順に入れているわけではないので、アドレス(=何行目か)で決められない。だから こそ、エントリーの形が(<論理ページ番号>,<物理ページ番号>)のペアになっているのだが、この表から論理ページ番号 によってエントリーを求める場合には、上から順に探すなど、検索する作業をしなければならない。上から順に探すと、最悪で は一番下まで探すのでエントリーの個数分のメモリアクセスが必要となる。平均値でも表の半分は探さなければならない。 そこで、表のすべてのエントリーを同時に読んでマッチするものを選ぶ、という特殊なハードウェア(連想メモリ)を用意する。ハ ードウェアの分量が非常に多くなるので、あまり大きいものは作れない。(p93) ) i TLB (Translation Lookaside Buffer、アドレス変換キャッシュ) ~~TLB の略称とその原語は覚えておく方がよい。 10) a 有効ビット(valid ビット、存在ビット) e 参照ビット c 書込み d 実行 f 変更ビット(ダーティビット) 11) a オーバーレイ b 同時に利用され f プログラムの前半Aとデータ全体 12) a プログラマ(ユーザ) e 論理メモリ(空間) 13) ③ b 物理ページが割り当てられているか否か c モジュール g プログラムの後半Bとデータ全体 b 同時に使われないか f 大きく d メモリにロードする(読込む) c 異なる h オーバーレイ・ローダ e プログラムとデータB i ルート d 分割の仕方(切り方)を変えなければ g 使わない (使わずに済む) ページは主記憶を固定長(決まった同じ大きさ)のブロックに分割したもので、アドレス変換(やデマンドページング= 次回=でのハードディスクとの転送)の対象となる。最近の Pentium(x86)系のプロセッサでは4キロバイト(4096 バイト)を1ペー ジとしている。他でも今は4KBが多いが、遥か昔は 256 バイトや 512 バイトが選ばれたこともあった。 14) ③ 15) ② ページテーブルは、ページ番号の変換表であり、参照しているのは MMU(メモリ管理ユニット)と呼ばれるハードウェア である。(テーブルの内容の設定作業はOSが行う) 最近の CPU では MMU ハードウェアは CPU チップの内部に取り込まれてい る(アクセスの高速化のため)が、本来は CPU とは別の機能である。 16) ③ 物理アドレス、仮想アドレス、物理空間、仮想空間などの言葉に慣れて欲しい。 17) ④ 教科書 p90~91 にあるように、最近のページテーブル(たとえば Pentiumu 系)は、様々な事情から、単純な1つの表で はなく、多段のテーブルとして置かれている。また、p91 にあるような「逆ページテーブル」の形で置かれたシステム(たとえば IBM の System 38 や AS 400)もあったが、最近は見かけない。ハードウェアが複雑なのと、最近の巨大な主記憶(物理メモリ)に対して は節約にならない(結局、物理メモリのページ数分だけエントリーが必要で、通常のページテーブルに比較して大して節約になら ない)からだろうと思う。 18) ① ②③④ 連続したページが連続したページにマップされるとは限らない。それが表による変換の最大の利点。 19) ③ アドレスの変換はメモリのアクセスのたびに起こる。 20) ① ②予測はしない、 ③ページテーブルを対象にしない(最近の変換内容を別の高速メモリにコピー保存)、 ④アドレスのハッシュ計算をするのではない 21) ④ 28) ② 22) ② 23) ③ 24) ③ 25) ④ 26) ③ 27) ③ なお、①・③・④は正しい。④は命令中のオペランド指定フィールドの長さが物理メモリより短く設計されている場合に 起こる。Pentium 等でも最近のモデル(x64 アーキテクチャ)は物理メモリが4ギガバイトを超える量を搭載するが、旧来の 32 ビット 互換モードで動作させる場合(たとえば 32 ビット版 Windows や Linux を使う)では物理アドレスが 32 ビットになるので、4ギガバイ トまでしかアクセスできない。 29) ② なお、③は「1つ1つ順番に呼び出されて実行され」が間違いで、必ずしも順番に実行される必要は無く、ランダムに呼 び出してよい。ディスク経由でデータを受け渡すという記述は、間違いではなく、ディスク経由の場合もあるし、受け渡すデータが 小さければメモリ経由(ルートモジュールの一部を使うことになる)の場合もある。 30) ④ もちろん、仮想記憶の空間にも入らないぐらい大きなデータを扱う場合には、オーバーレイ的な手法が必要なこともあ 66 るかもしれない。たとえば、非常に疎(スパース)なデータをそのままメモリに置く等の場合が考えられるが、大抵は「もっと置き方 を工夫せよ」と言われるだろう。 ≪基本情報処理技術者試験問題より≫ 1) キャッシュメモリに関する記述のうち,適切なものはどれか。 (基本 21 春 12)(基本 18 春 22)(基本 16 秋 21) ア 書込み命令を実行したときに,キャッシュメモリと主記憶の両方を書き換える方式と,キャッシュメモリだけを書き換えて おき,主記憶の書換えはキャッシュメモリから当該データが追い出されるときに行う方式とがある。 イ キャッシュメモリにヒットしない場合に割込みが生じ,プログラムによって主記憶からキャッシュメモリにデータが転送され る。 ウ キャッシュメモリは,実記憶と仮想記憶のメモリ容量の差を埋めるために採用される。 エ 半導体メモリのアクセス速度の向上が著しいので,キャッシュメモリの必要性は減っている。 2) 処理装置で用いられるキャッシュメモリの使用目的として,適切なものはどれか。 (基本 17 春 20) ア 仮想記憶のアドレス変換を高速に行う。 イ 仮想記憶のページング処理を高速に行う。 ウ 主記憶へのアクセス速度とプロセッサの処理速度の差を埋める。 エ 使用頻度の高いプログラムを常駐させる。 3)記憶装置をアクセス速度の速い順に並べたものはどれか。 (基本 14 春 25) ア 主記憶 > レジスタ > ディスクキャッシュ > ハードディスク イ 主記憶 > レジスタ > ハードディスク > ディスクキャッシュ ウ レジスタ > 主記憶 > ディスクキャッシュ > ハードディスク エ レジスタ > 主記憶 > ハードディスク > ディスクキャッシュ 類問として 4) アクセス速度(アクセス時間)の短い順に並べたものはどれか ① キャッシュ > レジスタ > 主記憶 > ハードディスク > 光ディスク ② レジスタ > キャッシュ > 主記憶 > ハードディスク > 光ディスク ③ キャッシュ > レジスタ > 主記憶 > 光ディスク > ハードディスク ④ レジスタ > キャッシュ > 主記憶 > 光ディスク > ハードディスク 5) 容量の小さい順に並べたものはどれか ① キャッシュ > レジスタ > 主記憶 > ハードディスク > (大量枚の)光ディスク ② レジスタ > キャッシュ > 主記憶 > ハードディスク > (大量枚の)光ディスク ③ キャッシュ > レジスタ > 主記憶 > (大量枚の)光ディスク > ハードディスク ④ レジスタ > キャッシュ > 主記憶 > (大量枚の)光ディスク > ハードディスク ≪解答≫ 1) ア イやウはキャッシュではなく、仮想記憶(主記憶と仮想記憶の間)の記述であり、仮想記憶の記述として正しい。 2) ウ アやイは仮想記憶に関する記述である。アのアドレス変換の高速化は TLB。イは特には無い。 3) ウ ディスクキャッシュは、ディスクを見かけ上高速にアクセスするために、主記憶とディスクの間に置かれるメモリ。 4) ② 5) ② 67
© Copyright 2024 Paperzz