# Chapter9-5,9-6 「再配置可能プログラムとプログラムの4つの性質」「仮想記憶管理」 ## ③ 5/16(日) ###### tags:`基本情報技術` さつき: * 再配置可能プログラム * プログラムが主記憶上をあちこち移動するようになった。 * 復習:主記憶の容量は限られているので、どこにプログラムを配置するか重要だった。 * 前回では固定区画方式、可変区画方式などでプログラムの位置を決める他、フラグメンテーションとメモリコンパクションで、プログラムが終了して空いた容量を有効活用するため、ぎゅっと隙間を詰めたり。 * ことあるごとにメモリアドレスをレジスタに読み込んでいた。 * しかし、メモリアドレスの場所が変わると、読み込みに問題がありそう。 → ベースアドレス指定方式で、先頭アドレスからの差分を使って、命令やデータの位置を指定していた。これで、どこにロードされたとしても、問題はない。 * このようなプログラムを、再配置可能プログラムという。 * その他の用語 * 再使用可能:主記憶上にロードされて、処理を終えたプログラムを、再ロードすることなく、繰り返し実行できる性質。 * 再入可能:再使用可能プログラムにおいて、複数のタスクから呼び出されても大丈夫!な性質。 * 再帰的:これは苦手だ。実行中に自分自身を呼び出すことができる、という性質。 * ファイル検索。大きなフォルダを渡して、その中にファイルがあるフォルダをみつけて、さらにそのフォルダを渡して(再帰)、また調べて。。。 * 過去問 * 問1: * アは再配置可能。 * イは再帰。 * ウ...??忘れた。必要な部分を補助記憶装置から読み込みながら、動作する。→仮想記憶。忘れてなかった。次章だった。 * エ...再入可能。 * 問2:エ:「ロールバックのような感じがする説明です」 ##### 9-6 * 仮想記憶...バーチャル。 > 実記憶管理では、主記憶のメモリ空間をどのように活用するか学びました。 > 区画どう決めるとか、区画が細切れ困るとか、そもそも主記憶に入りきらない大きさはどうするのとか。 > これらは物理的なメモリだからこそ、起きる問題。 > そこで現れたのが仮想記憶。 * なんで仮想記憶だと自由なの? * とても知りたかった。 * 仮想記憶や仮想アドレスは実態がない...んだったら、どこに記憶するのか?? →実記憶に記憶される。 * 仮想記憶とは詰まるところ、 * 仮想記憶のアドレスを、実記憶のどのアドレスに割り当てるかは自由なので。実記憶上では、空いているところへ、ばらばらに入れてやればよい。 * 本屋の例え:お店の在庫リスト(仮想記憶)、お店の書棚(実記憶の主記憶)やバックヤード(実記憶の補助記憶)。 * ページの置き換えアルゴリズム > よく言われてるやつ! * FIFO(First In First Out)...最初にページインした内容。 * LIFO(Last In First Out)...最後にページインした内容。 * LRU(Least Recently Used)...最も長い間参照されていないページ。 * LFU(Least Frequently Used)...最も参照回数の少ないページ。 * ページングとスワッピング...ページインとページアウトって、スワッピングのインやアウトとなんか違うの? →広義のスワッピング...補助記憶装置と主記憶装置とでメモリ内容を出し入れすることを指す。 →狭義のスワッピング...プロセス単位で領域を出し入れすることを指す。 * 過去問 * 問1 * スラッシング:実記憶の容量が少ないと、ページの置き換えをする頻度が高くなり、システムの処理効率が低下する。 * オーバーレイ:実行プログラムのサイズが容量を超えていたら、セグメント単位に分割して、必要なセグメントだけ実行していくこと。 * 問2 * どうして2が主記憶にいくのかちょっとわからんけど。 にわ: - chapter 9-5 - 読み込み * プログラムは主記憶上をあっちこっちに移動するが、その都度メモリアドレスが変わるので困るのでは…? * →ベースアドレス指定方式であれば、「プログラムが主記憶上にロードされた時の先頭アドレスからの差分」を使っているので問題なし! * →こういったプログラムを「再配置可能プログラム」という。で、プログラムには他にも色々と性質がある。 * 再配置可能(リロケータブル):上記 * 再使用可能(リユーサブル):再ロードすることなく繰り返し実行可能 * 再入可能(リエントラント):再使用可能プログラムで、並行して複数のタスクから呼び出されても互いに干渉しない。(手続き部分+データ部分に分かれているから) * 再帰的(リカーシブ):実行中に自分自身を呼び出すことができる。 * あーなるほど!自分自身を呼び出せるから、階層が深くても辿り着けるってことか!フォルダ内検索とか - 過去問 * 問1:OK * 問2:OK 解説テキトーw - chapter 9-6 - 読み込み * 仮想記憶 * 実記憶の物理的制約があると区画がーとか主記憶に入らんーとかめんどいので、仮想的なメモリ空間を作ってプログラムに使わせる。 * →主記憶装置と補助記憶装置を合わせて作ったメモリ空間だが、プログラムからは対象の主記憶装置があるように見えている。 * 仮想記憶であればメモリコンパクションする必要なし!好きな場所に領域取れる。 * じゃあ実際データってどこに行くの? * →実際は実記憶上の空いている区画に、バラバラに入れている。が、仮想記憶ではまとまっているようになっている。 * で、仮想記憶と実記憶でのアドレスはバラバラになってるから、変換処理が必要となる。それを「メモリ変換ユニット(MMU)」というハードウェアが担当している。=「動的アドレス変換機構(DAT)」 * データ容量はどうなってるの? * 仮想記憶では実記憶以外に補助記憶装置もメモリの一部とみなすことで、実記憶の容量よりも大きいサイズの記憶空間を提供できる! * 仮想記憶の実装方式 * ページング方式:仮想アドレス空間を固定長の領域に区切って管理する * プログラムを「ページ」という単位に分割し、仮想記憶に割り当て→実行しようとしても実記憶上にページがないのでページフォールトという割込みが発生→対象ページを実記憶に読み込む。 * 現在は、オンデマンド方式で実行に必要なページだけ実記憶に読み込ませるのが主流。(=デマンドページング) * 仮想記憶と実記憶とのマッピングは「ページテーブル」という表によって管理される。 * 補助記憶から実記憶へのページ読み込みを「ページイン」、その逆を「ページアウト」という。 * セグメント方式:仮想アドレス空間を可変長の領域に区切って管理する ちさと: * 再配置可能プログラム * メモリコンパクションやスワッピングなどをやってると、プログラムの位置があちこちに動く * CPUは事あるごとにメモリアドレスをレジスタへと読み込む * プログラムの位置が動いてメモリアドレスが変化しちゃって大丈夫なのか? * ベースアドレス指定方式(プログラムがロードされた時の先頭アドレスを記憶)では、どこにロードされても大丈夫 * このような性質を持つプログラムを再配置可能プログラムという * 他の性質 * 再配置可能(リロケータブル) * どのアドレスで実行させても大丈夫 * 再使用可能(リユーザブル) * ロードした後、処理を終えたプログラムを再ロードしなくても繰り返し実行できる * 再入可能(リエントラント) * 再使用可能+複数のタスクから呼び出されても、それぞれに正しい結果を返す * 再帰的(リカーシブ) * 実行中に、自分自身を呼び出すことができる(Aという処理を行うプログラムだった場合、処理の中でAをまた使える) * ファイル検索とか。フォルダを渡す(A処理)→フォルダの中を調べる→さらにフォルダがある→フォルダを渡す(A処理)・・・ * 過去問 * 問1:OK * 問2:ような感じがする… * 仮想記憶管理 * 仮想記憶 * 主記憶装置と補助記憶装置を合わせて作ったメモリ空間 * プログラムからは大量の主記憶装置があるように見えてる * 仮想的なメモリ空間 * 仮想アドレス(論理アドレス)で中身を管理 * 実記憶 * 物理的なメモリ空間 * 実アドレス(物理アドレス)で中身を管理 * なぜ仮想記憶だと物理的な制約(この大きさのプログラムは入りきらないよーとか)が起きないのか * 実記憶の中は物理的に固定でメモリコンパクションなどをしないと、まとまったスペースができない * 仮想記憶の中はそういう物理的な実体がない。好きな場所にスペースを取れる * 実体がないのであれば、どこに実際のデータが…? * →実記憶上にある * 仮想記憶とは、実記憶「など」を隠して仮想空間に割り当てる技術 * 仮想記憶のアドレスは実記憶上では空いてるところへバラバラに入れてOK=まとまったスペースとか考えなくていい * この時の仮想アドレス→実アドレスの変換処理の仕組みを「動的アドレス変換機構」という * ってことは記憶されるデータのサイズ=実記憶のサイズなのでは? * 仮想記憶は、実記憶以外にも割り当てられる! * 補助記憶装置もメモリにできる!=実記憶の容量以上をもてる! * 仮想記憶が使われてる例 * 本屋さんのお店の在庫リスト(仮想記憶) * お店の書棚(実記憶) * バックヤードの倉庫(補助記憶装置) * 仮想記憶の実装方式 * ページング方式 * プログラムを「ページ」という単位で分割 * 1ページ4キロバイト * デマンドページングという方法 * プログラムの実行に必要なページのみ実記憶に読み込ませる * 仮想記憶には割り当てておいて、実記憶には読み込まない * 実行しようとしたら、実記憶にはないから実行できない!そこで対象ページのみ実記憶に読み込むという手順 * 仮想記憶と実記憶の対応づけは、「ページテーブル」で管理されている * ページイン * 補助記憶から実記憶へのページ読み込み * ページアウト * ページインした時に実記憶がいっぱいだったら、空きをつくるためにページを追い出す * 実記憶の容量が少なくて、このページ置き換えの頻度が多くなるとシステムの処理効率が低くなる(スラッシング) * 何をページアウトさせるかのアルゴリズム * FIFO(First In First Out)方式 * 最初にページインしたページを追い出す * LIFO(Last In First Out)方式 * 最後にページインしたページを追い出す * LRU(Least Recently Used)方式 * 一番長い間参照されてないページを追い出す * LFU(Least Frequently Used)方式 * 一番参照回数の少ないページを追い出す * ページングとスワッピング * 広い意味では、メモリの内容を出し入れするってことで一緒 * 狭い意味では、 * プロセス単位で出し入れするのがスワッピング * ページ単位で出し入れするのがページング * 過去問 * 問1:おけ。ただオーバレイとか忘れちゃってた。必要な機能だけ主記憶にロードする。 * 問2:
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up