# HG changeset patch # User Shinji KONO # Date 1361167412 -32400 # Node ID e6344b6dcc8801e571e839f12f59960defbf4cc6 # Parent e32fbf8b9a8ff2ae5726b35b7ea10e684df6b5e4 fix diff -r e32fbf8b9a8f -r e6344b6dcc88 pre-thesis/Makefile --- a/pre-thesis/Makefile Mon Feb 18 06:09:27 2013 +0900 +++ b/pre-thesis/Makefile Mon Feb 18 15:03:32 2013 +0900 @@ -1,7 +1,7 @@ TARGET=thesis LATEX=platex -BIBTEX=pbibtex +BIBTEX=jbibtex DVIPDF=dvipdfmx -p a4 EBB=ebb #You need setting "-l" option if You think You get a landscape PDF diff -r e32fbf8b9a8f -r e6344b6dcc88 pre-thesis/thesis.tex --- a/pre-thesis/thesis.tex Mon Feb 18 06:09:27 2013 +0900 +++ b/pre-thesis/thesis.tex Mon Feb 18 15:03:32 2013 +0900 @@ -24,9 +24,21 @@ \maketitle \thispagestyle{fancy} -\section{はじめに} -近年、BIOS への置き換えを目的としている UEFI という新しいファームウェアが注目され始めてきている。UEFI は既存の BIOS に比べ、いくつかの利点がある。そのため、UEFI から起動できる OS は、BIOS で起動できる OS よりも利点を得られる。\\ -UEFI 上ではブートローダは EFI アプリケーションで定義され、通常は EFI アプリケーションから、ELF などの実行ファイルをロードする。ELILO もそういった仕組みである。しかし、このロードの過程を飛ばして ELILO 上にカーネルを書くことにより、煩雑なロードの操作をなくし、高速に起動するカーネルが実装可能だと考えられる。そこで、ELILO へのマイクロカーネルの実装を行った。 +\section{OSの起動方法} + +% UEFIとは何か。何のために導入されたものなのか? + +% elilo とは何か、 UEFI との関係は? + + +% 近年、BIOS への置き換えを目的としている UEFI という新しいファームウェアが注目され始めてきている。UEFI は既存の BIOS に比べ、いくつかの利点がある。そのため、UEFI から起動できる OS は、BIOS で起動できる OS よりも利点を得られる。\\ +% UEFI 上ではブートローダは EFI アプリケーションで定義され、通常は EFI アプリケーションから、ELF などの実行ファイルをロードする。ELILO もそういった仕組みである。 + +% 自分たちのやろうとしていることは何か + +% ローダーなしに kernel を書く + +しかし、このロードの過程を飛ばして ELILO 上にカーネルを書くことにより、煩雑なロードの操作をなくし、高速に起動するカーネルが実装可能だと考えられる。そこで、ELILO へのマイクロカーネルの実装を行った。 \section{UEFI} PC のハードウェア制御のための, OS とファームウェアのインターフェース仕様である。古い BIOS インターフェースに置き換わるものとして策定された。図\ref{fig:uefi}のような構成になっている。 IA-32 から起動した場合は IA-32 に対応した OS のみ、x86-64 から起動した場合は、x86-64 に対応した OS のみが使用可能である。ブート前の環境では、メモリへのアクセス制限がある BIOS に比べ、 UEFI は 64 ビットの UEFI ではロングモードも可能であり、ブート前の環境で 64 ビットアドレッシングの全てのメモリに直接アクセスが可能となっている。 @@ -38,8 +50,9 @@ \label{fig:uefi} \end{figure} -\section{GUIDパーティションテーブル(GPT)}\label{section:gpt} -記憶媒体上のパーティションテーブルの記憶に関する標準規格である。この規格でフォーマットされた記憶媒体から、UEFI 用のアプリケーションを起動することができる。BIOS と異なり、2TB 以上のハードディスクからブートすることが可能になっている。 +%\section{GUIDパーティションテーブル(GPT)}\label{section:gpt} +%記憶媒体上のパーティションテーブルの記憶に関する標準規格である。この規格でフォーマットされた記憶媒体から、UEFI 用のアプリケーションを起動することができる。BIOS と異なり、2TB 以上のハードディスクからブートすることが可能になっている。 + \section{gnu-efi}\label{section:gnuefi} UEFI アプリケーションを開発するためのライブラリである。ラッパーを使用して UEFI の命令を使いやすい形にしている。 \section{ELILO}\label{section:elilo} @@ -51,6 +64,22 @@ \section {ページング}\label{section:paging} カーネルには、メモリ管理のためのページング機構が備わっている。ページングとは、記憶装置をページと呼ばれる小さな単位に分割して割り当てを行うアルゴリズムである。物理メモリ及び、仮想メモリ空間を一定のサイズのページと呼ばれる単位を分割して管理する。x86 では、ページングを行うために必要な設定がある。\\ +% UEFI アプリケーションの作り方 +% boot loader のインストール方法 + +% code segment と data segment を実装するのに Paging/Segment tation が必要 + +% page table の説明 +% 3段階の page table + +% 実メモリを取得して +% page table を作成して +% CR3 に page table へのアドレスを格納して +% LDT/GDT を設定して +% ljmp で、実行する + + + \begin{figure}[h] \begin{center} \includegraphics[scale=0.4]{./pic/paging_structure.pdf} @@ -59,6 +88,7 @@ \label{paging_structure} \end{figure} +% ページングを開始する手順 \subsection {ページングの有効}\label{section:enable} Intel 64 には、IA-32e というページングの方式を持っている。その方式を有効にするためには、下記のレジスタのビットを有効、つまり 1 にセットする必要がある。\\ \begin{table}[h]