Mercurial > hg > Papers > 2019 > tobaru-sigos
changeset 21:df06f7c00062
Description segment
author | tobaru |
---|---|
date | Wed, 29 May 2019 16:24:02 +0900 |
parents | 4955324fa739 |
children | a1e8e4702416 |
files | slide/sig-os2019.md |
diffstat | 1 files changed, 44 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/slide/sig-os2019.md Wed May 29 14:55:22 2019 +0900 +++ b/slide/sig-os2019.md Wed May 29 16:24:02 2019 +0900 @@ -70,6 +70,13 @@ - メモリ管理 +## スライドの流れ +- <font color="red">GearsOS</font> +- Paging +- CrossCompile +- 今後の課題 + + ## Paging - 仮想メモリでは Paging と呼ばれるシステムを使っている。 - 様々なコンピュータではプログラム側がメモリアドレスを参照する。 @@ -97,9 +104,45 @@ - Page と Page Frames は同じサイズを生成する。 -## Segmentation with Paging: The intel x86 + +## スライドの流れ +- <font color="red">GearsOS</font> +- Paging +- CrossCompile +- 今後の課題 + + +## Descriptor +- プログラムがアクセスするファイルなどをOSが識別するための識別子 + - GDT(Global Descriptor Table) + - セグメントを管理するためのテーブル + - アドレスの最初の番地とサイズなどが格納されている + - LDT(Local Descriptor Table + - タスクごとにGDTに相当する Descriptor を持たせてセキュリティを高める +- Selector ビットのうちの1つはそのセグメントがローカルかグローバルかを知らせる。 +- その他の13ビットはLDTかGDTエントリ番号を指定するため、これらのテーブルはそれぞれ8Kのセグメント記述子を保持するように制限されている。 +## Segment Register +- selector が利用可能でないことを示すために Segment レジスタにロードする。 + - この時トラップが発生 +- ロードされた時点で、対応する Descriptor がLDTまたはGDTからfetchされ、レジスタに格納されるため、素早くアクセスできる。 + +## Descriptor の構成 +- Descriptor は Segment の Baseアドレス、Size、その他の情報を含む8バイトで構成されている。 + +## Segmentが存在しない場合(selector0) +- トラップが発生する +- 次にハードウェアはオフセットがSegmentの終わりを超えているかどうかをチェックするためにlimitフィールドを使用する。 + +## リニアアドレス +- セグメント内のメモリとオフセットが範囲内にあると仮定すると、x86はDescriptor 内の32ビットのBaseフィールドをオフセットに追加してリニアアドレスと呼ばれるものを形成する。 + +<div align="center"><img src="./images/x86code.svg" style="center"></div> + +## Pagingが無効にされてる場合 +- リニアアドレスは物理アドレスとして解釈され、読み取りまたは書き込みのためにメモリに送信される。 +- 従って、Pagingを無効にすると、各セグメントのBaseアドレスをDescriptorで指定した純粋なSegmentation Scheme ができる。 ## GearsOS での Paging の実装