スポンサーリンク
OS

【OS】メインメモリ

バックグラウンド

 

protection

プロセスがアクセスできるのは、アドレス空間内のあるアドレスにしかアクセスできない事を保証する必要があり、プロセスの論理アドレス空間を定義するbase(今はrelocation registerと呼ばれている)レジスタとlimitレジスタを用いることによってprotectionを提供する。

 

address Binding

命令とデータのメモリへのバインド

3つの段階で発生する可能性があります

コンパイル時間

メモリの位置が事前に分かっている場合 absolute code を生成する。メモリの開始位置が変更された場合は、コードを再コンパイルする必要があります。

読み込み時間

コンパイル時にメモリの場所がわからない場合は、rerocatable codeを生成する必要がある

実行時間

実行中にプロセスを1つのメモリセグメントから別のメモリセグメントに移動できる場合、実行時までバインディングが遅延する

 

Logical address と Physical Address

Logical address

CPUによって生成される
仮装アドレスとも呼ばれる
マルチプログラミングシステムにおいて問題を引き起こす。

 Physical Address

メモリユニットから見える

メモリ管理ユニット(MMU)

実行時に仮装アドレスを物理アドレスにマッピングするハードウェアデバイス

ユーザーは logical address を使用する

動的ローディング

実行するには、プログラム全体がメモリ内にある必要がある。
ルーチンは呼び出されるまでロードされない。
頻繁に発生しないケースを処理するために大量のコードが必要な場合に役に立ちます。OSは、動的ロードを実装するライブラリを提供することで役に立ちます。

静的リンキング

静的リンクとは、ロードによってバイナリプログラムイメージに結合されたシステムライブラリとプログラムコード

 

連続したメモリ領域の割り当て

限られたリソースを効率的に割り当てる必要がある。

動的ストレージ割り当ての仕方

holeとは未使用領域のこと

First-fit

必要なメモリ領域が確保できるholeが最初に見つかったところにメモリを割り当てる

Best-fit

メモリがサイズ順に並べてない限り、全てのholeを探索する。必要なメモリ領域が確保できるholeの中で余りのholeが一番小さいものを選ぶ

Worst-fit

メモリがサイズ順に並べてない限り、全てのholeを探索する。best fitの反対に、必要なメモリ領域が確保できるholeの中で余りのholeが一番大きいものを選ぶ。
→余りのholeが大きくなるので、そのholeが使用できるという考えからこのアルゴリズムが生まれた。実際はうまくいかない

フラグメンテーション

外部フラグメンテーション

要求を満たすための合計のメモリ空間が存在するが、連続には位置してない

内部フラグメンテーション

割り当てられたメモリは、要求されたメモリよりもわずかに大きい場合がある(holeが要求したメモリ領域より大きい)、このサイズの違いは、パーティションの内部のメモリだが、使用できない

compaction:メモリの内容をシャッフルして、holeをひとまとまりにする。

ページング

physical address 空間は、不連続になる場合がある。

physical addressをフレームと呼ばれる固定サイズのブロック分解する
→サイズは、512〜16MB

logical addressをページと呼ばれる同じサイズのブロックに分割する

サイズがNページのブログラムを実行するためにはN個の空きフレームを見つけてプログラムをロードする必要がある。

ページテーブルはphysical addressからlogical addressに変換する

アドレス変換スキーム

ページナンバー(p)ページ番号を表す

ページオフセット(d)ページの何バイト目にあるかを表す。

ページングのサンプル

内部フラグメンメンテーションの計算

ページサイズ→2048bytes
プロセスサイズ→72,766bytes
(35ページと1,086バイト)
内部フラグメンテーション(無駄になった)→2,048 – 1,086 = 962bytes

ページテーブルの実装

PTBR (Page-table base register)
ページテーブルの始めの場所

PTLR (Page-table length register)
ページテーブルのサイズを表している

TLBを使用したページングハードウェア
p: ページナンバー
d: オフセット
f: ページフレームナンバー

EAT (Effective Access Time)

Hit raito: TLBで目的のページ番号を見つける確率のこと:P_{HIT}
TLB access time: $T_B$
Memory access time: T_M

memory protection

protection bit

を各フレームに関連付けて読み取りアクセス専用または読み取り・書き込みアクセス可能

valid-invalid bit

をページテーブルの各エントリに付加するビットのこと

valid

関連するページがプロセスのlogic address空間にあることを表す

invalid

ページがプロセスのlogic address空間にないことを表す

共有ページ

共有コード

プロセス間で共有されつ読み取り専用(リエントラント)コードのコピー

プライベートコードとプライベートデータ

各プロセスは、コードとデータの別々のコピーを保持する
プライベートコードとプライベートデータのページは、logic address空間のどこにでも表示ができる

ページテーブルの構造

ページング用のメモリの構造は、単純な方法を使用すると大きくなる可能性がある。

Hierarchical page table

logic address空間を複数のページテーブルに分割する

実装方法

2レベルページング

※3レベルのページングもある

p_1は外部ページテーブルのインデックス
p_2は内部ページテーブルのページ内の変位
dはページのオフセット

Hashed page table

32ビットを超えるアドレス空間が普通

仮想ページ番号はページテーブルにハッシュされる

各要素には(1)仮想ページ番号(2)マッピングされたページフレームの値(3)次の要素へのポインタが含まれる

Inverted page table

各プロセスがページテーブルを持ち、可能な全てのlogicalページを追跡するのではなく、全てのphysicalページを追跡する

Swapping

プロセスを一時的にメモリからバッキングストアにスワップして、その後実行を継続するためにメモリに戻すことができます。

バッキングストア

全てのユーザーの全てのメモリイメージのコピーを収容するのに十分な大きさの高速ディスク。これらのメモリイメージへの直接アクセスを提供する必要がある

ロールアウト(ページアウト、スワップアウト)

バッキングストアにプロセスを追い出す

ロールイン(ページイン、スワップイン)

バッキングストアからプロセスを読み込む

スポンサーリンク